<?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>113647</bug_id>
          
          <creation_ts>2013-03-30 17:25:25 -0700</creation_ts>
          <short_desc>FTL should implement InvalidationPoint in terms of llvm.stackmap</short_desc>
          <delta_ts>2013-10-31 15:48:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>123423</dependson>
    
    <dependson>123472</dependson>
          <blocked>122318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866725</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:25:25 -0700</bug_when>
    <thetext>Fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866863</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 18:54:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/13543716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944305</commentid>
    <comment_count>2</comment_count>
      <attachid>215360</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-28 20:51:59 -0700</bug_when>
    <thetext>Created attachment 215360
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944316</commentid>
    <comment_count>3</comment_count>
      <attachid>215362</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-28 21:37:45 -0700</bug_when>
    <thetext>Created attachment 215362
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944318</commentid>
    <comment_count>4</comment_count>
      <attachid>215363</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-28 21:48:00 -0700</bug_when>
    <thetext>Created attachment 215363
it&apos;s done?

Dunno.  I think I wrote all of the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944369</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 03:14:13 -0700</bug_when>
    <thetext>Attachment 215363 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractHeap.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJumpReplacement.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompilationInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.h:26:  #ifndef header guard has wrong style, please use: ProfiledCodeBlockJettisoningWatchpoint_h  [build/header_guard] [5]
Total errors found: 1 in 25 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>944376</commentid>
    <comment_count>6</comment_count>
      <attachid>215363</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-29 03:35:29 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/17138035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944377</commentid>
    <comment_count>7</comment_count>
      <attachid>215363</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-29 03:38:04 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/17088040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944379</commentid>
    <comment_count>8</comment_count>
      <attachid>215363</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-29 03:54:36 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/17138039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944380</commentid>
    <comment_count>9</comment_count>
      <attachid>215363</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-29 03:54:43 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/17038041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944381</commentid>
    <comment_count>10</comment_count>
      <attachid>215363</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-29 03:56:55 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/17158037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944414</commentid>
    <comment_count>11</comment_count>
      <attachid>215363</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-29 06:57:41 -0700</bug_when>
    <thetext>Comment on attachment 215363
it&apos;s done?

Attachment 215363 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/16058086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944481</commentid>
    <comment_count>12</comment_count>
      <attachid>215398</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-29 11:00:21 -0700</bug_when>
    <thetext>Created attachment 215398
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944510</commentid>
    <comment_count>13</comment_count>
      <attachid>215407</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-29 11:40:17 -0700</bug_when>
    <thetext>Created attachment 215407
64-bit DFG is done

Still need to actually implement the FTL backend code and port this to the DFG 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944528</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 12:05:31 -0700</bug_when>
    <thetext>Attachment 215407 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecode/ExitKind.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/ExitKind.h&apos;, u&apos;Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractHeap.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJumpReplacement.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJumpReplacement.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompilationInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.h&apos;, u&apos;Source/JavaScriptCore/jit/JumpReplacementWatchpoint.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JumpReplacementWatchpoint.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ProfiledCodeBlockJettisoningWatchpoint.h:26:  #ifndef header guard has wrong style, please use: ProfiledCodeBlockJettisoningWatchpoint_h  [build/header_guard] [5]
Total errors found: 1 in 36 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>944562</commentid>
    <comment_count>15</comment_count>
      <attachid>215414</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-29 13:21:20 -0700</bug_when>
    <thetext>Created attachment 215414
fixed jettisoning logic

Now, jettisons count reoptimization correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944615</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-29 14:39:49 -0700</bug_when>
    <thetext>I think that I&apos;ll split this into a separate patch.  The patches I&apos;ve posted so far will be for https://bugs.webkit.org/show_bug.cgi?id=123472, which just adds the concept of InvalidationPoint.  This bug will be for implementing InvalidationPoint in the FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945349</commentid>
    <comment_count>17</comment_count>
      <attachid>215608</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-30 20:53:57 -0700</bug_when>
    <thetext>Created attachment 215608
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945659</commentid>
    <comment_count>18</comment_count>
      <attachid>215671</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-31 13:30:20 -0700</bug_when>
    <thetext>Created attachment 215671
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945674</commentid>
    <comment_count>19</comment_count>
      <attachid>215671</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-31 13:53:05 -0700</bug_when>
    <thetext>Comment on attachment 215671
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945728</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-31 15:48:13 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/158402</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215360</attachid>
            <date>2013-10-28 20:51:59 -0700</date>
            <delta_ts>2013-10-28 21:37:45 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30525</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyMSw3ICsyODIxLDkgQEAgdm9pZCBDb2RlQmxv
Y2s6OmpldHRpc29uKCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoKm1faGVhcCk7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBkZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpOworICAg
IGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBhbHRlcm5h
dGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRl
cygpOwogICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQoreworICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gK
KyNkZWZpbmUgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoKQorICAgICAgICA6IG1fY29kZUJsb2NrKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbCgp
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RI
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKICAgICBt
YWNybyhJbnRlcm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKKyAgICAvKiBVc2Ug
dGhpcyBmb3Igd3JpdGVzIG9ubHksIHRvIGluZGljYXRlIHRoYXQgdGhpcyBtYXkgZmlyZSB3YXRj
aHBvaW50cy4gVXN1YWxseSB0aGlzIGlzIG5ldmVyIGRpcmVjdGx5IHdyaXR0ZW4gYnV0IGluc3Rl
YWQgd2UgdGVzdCB0byBzZWUgaWYgYSBub2RlIGNsb2JiZXJzIHRoaXM7IGl0IGp1c3Qgc28gaGFw
cGVucyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIHdvcmxkIHRvIGNsb2JiZXIgaXQuICovXAorICAg
IG1hY3JvKFdhdGNocG9pbnRfZmlyZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciByZWFkcyBvbmx5
LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVyZWQsIHRoZW4g
dGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCiAgICAgbWFjcm8oTWlzY0ZpZWxkcykg
XAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0byBpbmRpY2F0ZSB0aGF0
IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBkb24n
dCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0IGFsbC4gKi9cCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJldmlz
aW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIGJvb2wgZG9lc1dyaXRlcyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAK
K2Jvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVh
cCBoZWFwKQoreworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQWJzdHJhY3RIZWFw
T3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRk
UmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU4
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2OSw2ICs2NjksMzAgQEAgcHJpdmF0ZToKIAogYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiwgTm9kZSopOwogCitjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7CitwdWJsaWM6
CisgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgICAgIDog
bV9oZWFwKGhlYXApCisgICAgICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIG90aGVySGVhcCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3Jlc3VsdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9yZXN1
bHQgPSBoZWFwLm92ZXJsYXBzKG90aGVySGVhcCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFj
dEhlYXAgbV9oZWFwOworICAgIGJvb2wgbV9yZXN1bHQ7Cit9OworCitib29sIHdyaXRlc092ZXJs
YXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYgKzYyLDE1IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQogICAgIHRyYW5z
aXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3ZvaWQgQ29tbW9uRGF0YTo6aW52YWxpZGF0ZSgp
Cit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBqdW1wUmVwbGFjZW1lbnRzLnNpemUoKTsgaS0tOykKKyAgICAgICAganVtcFJl
cGxhY2VtZW50c1tpXS5maXJlKCk7CisgICAgaXNTdGlsbFZhbGlkID0gZmFsc2U7Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE1
ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0YSgp
Ci0gICAgICAgIDogbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKQorICAgICAgICA6IGlzU3RpbGxWYWxpZCh0cnVlKQorICAgICAgICAsIG1hY2hpbmVD
YXB0dXJlU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICB7IH0KICAg
ICAKICAgICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENv
ZGVCbG9jayosIE5vZGUqKTsKICAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4g
Y29kZU9yaWdpbik7CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIHZv
aWQgaW52YWxpZGF0ZSgpOwogCiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gaW5saW5l
Q2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IGNvZGVPcmlnaW5zOwpAQCAtODMsMTAgKzg2LDE0IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPFdlYWtSZWZlcmVuY2VUcmFu
c2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdl
YWtSZWZlcmVuY2VzOworICAgIFNlZ21lbnRlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOworICAgIFNlZ21lbnRlZFZlY3RvcjxQcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gcHJvZmlsZWRXYXRjaHBvaW50
czsKKyAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAog
ICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwogICAgIGJvb2wg
bGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBH
Qy4KICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVk
IGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkOwogICAgIAogICAg
IGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1l
bnRbXT4gc2xvd0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVk
V2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIAotdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRjaHBvaW50U2V0
KiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KFdhdGNocG9pbnRTZXQq
IHNldCkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JXYXRjaHBvaW50U2V0
KHdhdGNocG9pbnQsIHNldCkpOworICAgIG1fc2V0cy5hZGRMYXppbHkoc2V0KTsKIH0KIAotdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBJ
bmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6
aWx5KElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKIHsKLSAgICBtX2lubGluZVNldHMuYWRkTGF6
aWx5KFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0KHdhdGNocG9pbnQsICZzZXQpKTsK
KyAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KCZzZXQpOwogfQogCi12b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKCkKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHko
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2ludFNldCog
c2V0KQogewotICAgIG1fc2V0cy5yZWFsbHlBZGQoKTsKLSAgICBtX2lubGluZVNldHMucmVhbGx5
QWRkKCk7CisgICAgbV9zZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KTsK
K30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit7Cisg
ICAgbV9pbmxpbmVTZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwgJnNldCk7Cit9
CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit7CisgICAgbV9zZXRzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwy
NCArNDAsMjQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdGVtcGxhdGU8dHlw
ZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+CiBzdHJ1Y3QgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRj
aHBvaW50U2V0IHsKICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQoKQotICAg
ICAgICA6IG1fd2F0Y2hwb2ludCgwKQorICAgICAgICA6IG1fZXhpdEtpbmQoRXhpdEtpbmRVbnNl
dCkKICAgICAgICAgLCBtX3NldCgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgV2F0Y2hwb2lu
dEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KFdhdGNocG9pbnQqIHdhdGNocG9pbnQsIFdhdGNocG9p
bnRTZXRUeXBlKiBzZXQpCi0gICAgICAgIDogbV93YXRjaHBvaW50KHdhdGNocG9pbnQpCisgICAg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAorICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAg
ICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fZXhpdEtpbmQoZXhp
dEtpbmQpCiAgICAgICAgICwgbV9zZXQoc2V0KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgV2F0
Y2hwb2ludCogbV93YXRjaHBvaW50OworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAg
IEV4aXRLaW5kIG1fZXhpdEtpbmQ7CiAgICAgV2F0Y2hwb2ludFNldFR5cGUqIG1fc2V0OwogfTsK
IAotdHlwZWRlZiBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNl
dD4gV2F0Y2hwb2ludEZvcldhdGNocG9pbnRTZXQ7Ci10eXBlZGVmIFdhdGNocG9pbnRGb3JHZW5l
cmljV2F0Y2hwb2ludFNldDxJbmxpbmVXYXRjaHBvaW50U2V0PiBXYXRjaHBvaW50Rm9ySW5saW5l
V2F0Y2hwb2ludFNldDsKLQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+CiBj
bGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKQEAgLTcwLDI1ICs3MCw1MyBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZExhemlseShjb25zdCBXYXRjaHBvaW50
Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+JiB3YXRjaHBvaW50KQor
ICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisgICAgeworICAgICAg
ICBtX3NldHMuYWRkKHNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkTGF6aWx5KENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIFdhdGNocG9pbnRTZXRUeXBlKiBz
ZXQpCiAgICAgewotICAgICAgICBtX3dhdGNocG9pbnRzLmFwcGVuZCh3YXRjaHBvaW50KTsKKyAg
ICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzLmFkZCgKKyAgICAgICAgICAgIFdhdGNocG9pbnRG
b3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9yaWdpbiwgZXhp
dEtpbmQsIHNldCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlYWxseUFkZCgpCisgICAgdm9p
ZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbikKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBt
X3dhdGNocG9pbnRzW2ldLm1fc2V0LT5hZGQobV93YXRjaHBvaW50c1tpXS5tX3dhdGNocG9pbnQp
OworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRv
ciBpdGVyID0gbV9zZXRzLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5
cGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgY29tbW9uLndhdGNocG9pbnRzLmFwcGVuZChD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICAo
Kml0ZXIpLT5hZGQoJmNvbW1vbi53YXRjaHBvaW50cy5sYXN0KCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRT
ZXQ8V2F0Y2hwb2ludFNldFR5cGU+IHdhdGNocG9pbnQgPQorICAgICAgICAgICAgICAgIG1fcHJv
ZmlsZWRXYXRjaHBvaW50c1tpXTsKKyAgICAgICAgICAgIGNvbW1vbi5wcm9maWxlZFdhdGNocG9p
bnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludCh3YXRjaHBvaW50Lm1fY29kZU9yaWdpbiwgd2F0Y2hwb2ludC5tX2V4aXRLaW5k
KSk7CisgICAgICAgICAgICB3YXRjaHBvaW50Lm1fc2V0LT5hZGQoJmNvbW1vbi5wcm9maWxlZFdh
dGNocG9pbnRzLmxhc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5
QWRkZWQgPSB0cnVlOwogICAgIH0KICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5oYXNCZWVu
SW52YWxpZGF0ZWQoKSkKKyAgICAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVy
YXRvciBpdGVyID0gbV9zZXRzLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNl
dFR5cGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKCgqaXRlciktPmhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fcHJvZmlsZWRXYXRjaHBvaW50c1tpXS5t
X3NldC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CkBAIC0xMjYsNyArMTU0LDggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0
b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4g
bV93YXRjaHBvaW50czsKKyAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9pbnRzOworICAgIEhhc2hT
ZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRlOwogI2VuZGlmCkBAIC0xMzgsMTAgKzE2NywxMiBA
QCBwdWJsaWM6CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzKCk7CiAgICAgfkRlc2lyZWRXYXRjaHBv
aW50cygpOwogICAgIAotICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnQqLCBXYXRjaHBvaW50
U2V0Kik7Ci0gICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCosIElubGluZVdhdGNocG9pbnRT
ZXQmKTsKKyAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7CisgICAgdm9pZCBhZGRM
YXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmln
aW4sIEV4aXRLaW5kLCBXYXRjaHBvaW50U2V0Kik7CisgICAgdm9pZCBhZGRMYXppbHkoQ29kZU9y
aWdpbiwgRXhpdEtpbmQsIElubGluZVdhdGNocG9pbnRTZXQmKTsKICAgICAKLSAgICB2b2lkIHJl
YWxseUFkZCgpOworICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsK
ICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworICAgIAorcHVibGljOgorICAgIEludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UoR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiaW52YWxpZGF0aW9uIHBvaW50IGlu
amVjdGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gIT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIEJpdFZlY3RvciBibG9ja3NUaGF0TmVlZElu
dmFsaWRhdGlvblBvaW50czsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPSBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKKyAgICAgICAgICAgICAgICBoYW5kbGUobm9kZUlu
ZGV4LCBibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMgYXQgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KKyAgICAgICAgICAgIGlmIChtX29yaWdpblRoYXRIYWRG
aXJlLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVl
ZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+aW5kZXgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmdldChibG9ja0lu
ZGV4KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKKyAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGUo
dW5zaWduZWQgbm9kZUluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1fb3Jp
Z2luVGhhdEhhZEZpcmUuaXNTZXQoKSAmJiBtX29yaWdpblRoYXRIYXNGaXJlICE9IG5vZGUtPmNv
ZGVPcmlnaW4pIHsKKyAgICAgICAgICAgIGluc2VydEludmFsaWRhdGlvbkNoZWNrKG5vZGVJbmRl
eCwgbm9kZSk7CisgICAgICAgICAgICBtX29yaWdpblRoYXRIYWRGaXJlID0gQ29kZU9yaWdpbigp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVzT3ZlcmxhcChtX2dyYXBo
LCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQorICAgICAgICAgICAgbV9vcmlnaW5UaGF0SGFkRmly
ZSA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0SW52YWxp
ZGF0aW9uQ2hlY2sodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBJbnZhbGlk
YXRpb25Qb2ludCwgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIENvZGVPcmln
aW4gbV9vcmlnaW5UaGF0SGFkRmlyZTsKK307CisKK2Jvb2wgcGVyZm9ybUludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIEludmFsaWRhdGlvbiBQb2ludCBJbmplY3Rpb24gUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8g
SW5zZXJ0cyBhbiBpbnZhbGlkYXRpb24gY2hlY2sgYXQgdGhlIGJlZ2lubmluZyBvZiBhbnkgQ29k
ZU9yaWdpbiB0aGF0IGZvbGxvd3MgYSBDb2RlT3JpZ2luCisvLyB0aGF0IGhhZCBhIGNhbGwgKGNs
b2JiZXJlZCBXb3JsZCkuCisKK2Jvb2wgcGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
KEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDExIEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE9TUkV4aXRD
b21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAg
ICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKLSAgICAgICAgICAgIGlmIChpbmZvLm1fd2F0Y2hw
b2ludEluZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgeworICAg
ICAgICAgICAgaWYgKCFpbmZvLm1fZmFpbHVyZUp1bXBzLmVtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5mby5tX2ZhaWx1cmVKdW1wcy5qdW1wcygp
LnNpemUoKTsgKytqKQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGluZm8ubV9m
YWlsdXJlSnVtcHMuanVtcHMoKVtqXS5sYWJlbCgpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobV9qaXRDb2RlLT53YXRjaHBvaW50c1tpbmZvLm1f
d2F0Y2hwb2ludEluZGV4XS5zb3VyY2VMYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBsYWJlbHMu
YXBwZW5kKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZSk7CiAgICAgICAgICAgICBtX2V4aXRTaXRl
TGFiZWxzLmFwcGVuZChsYWJlbHMpOwogICAgICAgICB9CiAgICAgfQpAQCAtODAsMTAgKzgwLDEw
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1
bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwogICAgICAgICBBU1NF
UlQoZmFpbHVyZUp1bXBzLmVtcHR5KCkgPT0gKGluZm8ubV93YXRjaHBvaW50SW5kZXggIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7Ci0gICAgICAgIGlmIChpbmZvLm1f
d2F0Y2hwb2ludEluZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
KyAgICAgICAgaWYgKCFmYWlsdXJlSnVtcHMuZW1wdHkoKSkKICAgICAgICAgICAgIGZhaWx1cmVK
dW1wcy5saW5rKHRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdENvZGUtPndh
dGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLnNldERlc3RpbmF0aW9uKGxhYmVsKCkp
OworICAgICAgICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBsYWJlbCgpOwog
ICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7CiAgICAgICAgIGV4aXQuc2V0UGF0
Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwpAQCAtMjU3LDggKzI1NywxMSBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIE9TUkV4aXRD
b21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAg
IGxpbmtCdWZmZXIubGluayhleGl0LmdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSwgdGFy
Z2V0KTsKICAgICAgICAgZXhpdC5jb3JyZWN0SnVtcChsaW5rQnVmZmVyKTsKLSAgICAgICAgaWYg
KGluZm8ubV93YXRjaHBvaW50SW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQotICAgICAgICAgICAgbV9qaXRDb2RlLT53YXRjaHBvaW50c1tpbmZvLm1fd2F0Y2hw
b2ludEluZGV4XS5jb3JyZWN0TGFiZWxzKGxpbmtCdWZmZXIpOworICAgICAgICBpZiAoaW5mby5t
X2ZhaWx1cmVKdW1wcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5q
dW1wUmVwbGFjZW1lbnRzLmFwcGVuZChKdW1wUmVwbGFjZW1lbnQoCisgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZSksCisgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0
aW9uKSkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0
aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBS
ZXBsYWNlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0p1bXBSZXBsYWNlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgSnVtcFJlcGxh
Y2VtZW50OjpmaXJlKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCisg
ICAgICAgIGRhdGFMb2dGKCJGaXJpbmcganVtcCByZXBsYWNlbWVudCB3YXRjaHBvaW50IGZyb20g
JXAsIHRvICVwLlxuIiwgc291cmNlLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9j
YXRpb24oKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIGRl
c3RpbmF0aW9uKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVt
cFJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKdW1wUmVwbGFjZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0p1bXBSZXBsYWNlbWVudF9oCisjZGVmaW5lIERGR0p1bXBSZXBsYWNlbWVudF9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEp1bXBSZXBsYWNlbWVudCB7CitwdWJs
aWM6CisgICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSwgQ29kZUxv
Y2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQorICAg
ICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpcmUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3NvdXJj
ZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rlc3RpbmF0aW9uOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdKdW1wUmVwbGFjZW1lbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDExIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRMb2NhbFVubGlua2VkLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyogTWFya2VyIGZvciBhbiBhcmd1bWVudCBiZWlu
ZyBzZXQgYXQgdGhlIHByb2xvZ3VlIG9mIGEgZnVuY3Rpb24uICovXAotICAgIG1hY3JvKFNldEFy
Z3VtZW50LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oU2V0QXJndW1lbnQsIE5v
ZGVEb2VzTm90RXhpdCkgXAorICAgIFwKKyAgICAvKiBNYXJrZXIgb2YgbG9jYXRpb24gaW4gdGhl
IElSIHdoZXJlIHdlIG1heSBwb3NzaWJseSBwZXJmb3JtIGp1bXAgcmVwbGFjZW1lbnQgdG8gKi9c
CisgICAgLyogaW52YWxpZGF0ZSB0aGlzIGNvZGUgYmxvY2suICovXAorICAgIG1hY3JvKEludmFs
aWRhdGlvblBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZv
ciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJpdEFuZCwgTm9kZVJlc3VsdElu
dDMyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE1ODE2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV93YXRjaHBvaW50SW5kZXgoc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgIHsKLSAgICB9Ci0gICAgCiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZUp1bXBzOwotICAgIHVuc2lnbmVkIG1f
d2F0Y2hwb2ludEluZGV4OworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3JlcGxhY2VtZW50
U291cmNlOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3JlcGxhY2VtZW50RGVzdGluYXRp
b247CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsNyBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgcGVyZm9ybUJh
Y2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlv
bihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgIHBlcmZvcm1JbnZhbGlkYXRpb25D
aGVja0luamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOwog
ICAgIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215362</attachid>
            <date>2013-10-28 21:37:45 -0700</date>
            <delta_ts>2013-10-28 21:48:00 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyMSw3ICsyODIxLDkgQEAgdm9pZCBDb2RlQmxv
Y2s6OmpldHRpc29uKCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoKm1faGVhcCk7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBkZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpOworICAg
IGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBhbHRlcm5h
dGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRl
cygpOwogICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQoreworICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gK
KyNkZWZpbmUgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoKQorICAgICAgICA6IG1fY29kZUJsb2NrKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbCgp
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvZmlsZWRDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJv
ZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgpCit7Cisg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKKyAgICAg
ICAgbV9jb2RlT3JpZ2luLCBtX2NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpLT5hZGRGcmVx
dWVudEV4aXRTaXRlKAorICAgICAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgbV9leGl0S2luZCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0
aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsaW5nQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50X2gKKyNkZWZpbmUgUHJvZmlsaW5nQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50IDogcHVi
bGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAgIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50KCkKKyAgICAgICAgOiBtX2V4aXRLaW5kKEV4aXRLaW5kVW5zZXQpCisgICAg
ICAgICwgbV9jb2RlQmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBQcm9maWxpbmdDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBtX2V4aXRLaW5kKGV4
aXRLaW5kKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7CisgICAgfQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoKSBPVkVSUklE
RTsKKworcHJpdmF0ZToKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBFeGl0S2lu
ZCBtX2V4aXRLaW5kOworICAgIFByb2ZpbGluZ0NvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb2ZpbGluZ0NvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUmVnRXhwU3RhdGUp
IFwKICAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKKyAg
ICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIHRvIGluZGljYXRlIHRoYXQgdGhpcyBtYXkg
ZmlyZSB3YXRjaHBvaW50cy4gVXN1YWxseSB0aGlzIGlzIG5ldmVyIGRpcmVjdGx5IHdyaXR0ZW4g
YnV0IGluc3RlYWQgd2UgdGVzdCB0byBzZWUgaWYgYSBub2RlIGNsb2JiZXJzIHRoaXM7IGl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIHdvcmxkIHRvIGNsb2JiZXIgaXQu
ICovXAorICAgIG1hY3JvKFdhdGNocG9pbnRfZmlyZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciBy
ZWFkcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVy
ZWQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCiAgICAgbWFjcm8oTWlz
Y0ZpZWxkcykgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0byBpbmRp
Y2F0ZSB0aGF0IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3MgYmVjYXVz
ZSB3ZSBkb24ndCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0IGFs
bC4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5j
cHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIGJvb2wgZG9lc1dy
aXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0
KCk7CiB9CiAKK2Jvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFi
c3RyYWN0SGVhcCBoZWFwKQoreworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQWJz
dHJhY3RIZWFwT3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwg
bm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2
aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2OSw2ICs2NjksMzAgQEAgcHJpdmF0ZToKIAogYm9vbCBk
b2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwogCitjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7
CitwdWJsaWM6CisgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMoQWJzdHJhY3RIZWFwIGhlYXApCisg
ICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIG90aGVySGVhcCkK
KyAgICB7CisgICAgICAgIGlmIChtX3Jlc3VsdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9yZXN1bHQgPSBoZWFwLm92ZXJsYXBzKG90aGVySGVhcCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKworcHJpdmF0ZToKKyAg
ICBBYnN0cmFjdEhlYXAgbV9oZWFwOworICAgIGJvb2wgbV9yZXN1bHQ7Cit9OworCitib29sIHdy
aXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE1ODE2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQog
ICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3ZvaWQgQ29tbW9uRGF0YTo6aW52
YWxpZGF0ZSgpCit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBqdW1wUmVwbGFjZW1lbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAganVtcFJlcGxhY2VtZW50c1tpXS5maXJlKCk7CisgICAgaXNTdGlsbFZhbGlkID0gZmFsc2U7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJl
dmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29t
bW9uRGF0YSgpCi0gICAgICAgIDogbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKQorICAgICAgICA6IGlzU3RpbGxWYWxpZCh0cnVlKQorICAgICAgICAs
IG1hY2hpbmVDYXB0dXJlU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAg
ICB7IH0KICAgICAKICAgICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24o
UGxhbiYsIENvZGVCbG9jayosIE5vZGUqKTsKICAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENv
ZGVPcmlnaW4gY29kZU9yaWdpbik7CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAg
IAorICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNl
dD4gaW5saW5lQ2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOwpAQCAtODMsMTAgKzg2LDE0IEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPFdlYWtSZWZl
cmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpT
Q2VsbD4+IHdlYWtSZWZlcmVuY2VzOworICAgIFNlZ21lbnRlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOworICAgIFNlZ21lbnRlZFZlY3Rv
cjxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gcHJvZmlsZWRX
YXRjaHBvaW50czsKKyAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwog
ICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBv
biBldmVyeSBHQy4KICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIElu
aXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkOwog
ICAgIAogICAgIGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
bG93QXJndW1lbnRbXT4gc2xvd0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE1ODE2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9
CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIAotdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRj
aHBvaW50U2V0KiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KFdhdGNo
cG9pbnRTZXQqIHNldCkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JXYXRj
aHBvaW50U2V0KHdhdGNocG9pbnQsIHNldCkpOworICAgIG1fc2V0cy5hZGRMYXppbHkoc2V0KTsK
IH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRj
aHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50
czo6YWRkTGF6aWx5KElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKIHsKLSAgICBtX2lubGluZVNl
dHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0KHdhdGNocG9pbnQs
ICZzZXQpKTsKKyAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KCZzZXQpOwogfQogCi12b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKCkKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjph
ZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hw
b2ludFNldCogc2V0KQogewotICAgIG1fc2V0cy5yZWFsbHlBZGQoKTsKLSAgICBtX2lubGluZVNl
dHMucmVhbGx5QWRkKCk7CisgICAgbV9zZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2lu
ZCwgc2V0KTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBJbmxpbmVXYXRjaHBvaW50U2V0JiBz
ZXQpCit7CisgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwg
JnNldCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit7CisgICAgbV9zZXRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwyNCArNDAsMjQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdGVt
cGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+CiBzdHJ1Y3QgV2F0Y2hwb2ludEZvckdl
bmVyaWNXYXRjaHBvaW50U2V0IHsKICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRT
ZXQoKQotICAgICAgICA6IG1fd2F0Y2hwb2ludCgwKQorICAgICAgICA6IG1fZXhpdEtpbmQoRXhp
dEtpbmRVbnNldCkKICAgICAgICAgLCBtX3NldCgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KFdhdGNocG9pbnQqIHdhdGNocG9pbnQs
IFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgICAgIDogbV93YXRjaHBvaW50KHdhdGNocG9p
bnQpCisgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAorICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSog
c2V0KQorICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fZXhp
dEtpbmQoZXhpdEtpbmQpCiAgICAgICAgICwgbV9zZXQoc2V0KQogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgV2F0Y2hwb2ludCogbV93YXRjaHBvaW50OworICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luOworICAgIEV4aXRLaW5kIG1fZXhpdEtpbmQ7CiAgICAgV2F0Y2hwb2ludFNldFR5cGUqIG1f
c2V0OwogfTsKIAotdHlwZWRlZiBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0
Y2hwb2ludFNldD4gV2F0Y2hwb2ludEZvcldhdGNocG9pbnRTZXQ7Ci10eXBlZGVmIFdhdGNocG9p
bnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxJbmxpbmVXYXRjaHBvaW50U2V0PiBXYXRjaHBvaW50
Rm9ySW5saW5lV2F0Y2hwb2ludFNldDsKLQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNl
dFR5cGU+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKQEAgLTcwLDI1ICs3MCw1MyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZExhemlseShjb25zdCBX
YXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+JiB3YXRj
aHBvaW50KQorICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisgICAg
eworICAgICAgICBtX3NldHMuYWRkKHNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkTGF6
aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIFdhdGNocG9pbnRT
ZXRUeXBlKiBzZXQpCiAgICAgewotICAgICAgICBtX3dhdGNocG9pbnRzLmFwcGVuZCh3YXRjaHBv
aW50KTsKKyAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzLmFkZCgKKyAgICAgICAgICAgIFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9y
aWdpbiwgZXhpdEtpbmQsIHNldCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlYWxseUFkZCgp
CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNv
bW1vbikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7IGktLTspCi0gICAg
ICAgICAgICBtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5hZGQobV93YXRjaHBvaW50c1tpXS5tX3dh
dGNocG9pbnQpOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+
OjppdGVyYXRvciBpdGVyID0gbV9zZXRzLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8V2F0Y2hw
b2ludFNldFR5cGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgY29tbW9uLndhdGNocG9pbnRz
LmFwcGVuZChDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAg
ICAgICAgICAoKml0ZXIpLT5hZGQoJmNvbW1vbi53YXRjaHBvaW50cy5sYXN0KCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hw
b2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dh
dGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+IHdhdGNocG9pbnQgPQorICAgICAgICAgICAg
ICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50c1tpXTsKKyAgICAgICAgICAgIGNvbW1vbi5wcm9maWxl
ZFdhdGNocG9pbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBQcm9maWxlZENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludCh3YXRjaHBvaW50Lm1fY29kZU9yaWdpbiwgd2F0Y2hwb2ludC5t
X2V4aXRLaW5kLCBjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQubV9zZXQtPmFk
ZCgmY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMubGFzdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGJvb2wg
YXJlU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X3dhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fd2F0Y2hwb2lu
dHNbaV0ubV9zZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICBIYXNoU2V0PFdhdGNo
cG9pbnRTZXRUeXBlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldHMuYmVnaW4oKTsKKyAgICAgICAg
SGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRvciBlbmQgPSBtX3NldHMuZW5kKCk7
CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAo
KCppdGVyKS0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3By
b2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9wcm9m
aWxlZFdhdGNocG9pbnRzW2ldLm1fc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKQEAgLTEyNiw3ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIFZlY3RvcjxXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8
V2F0Y2hwb2ludFNldFR5cGU+PiBtX3dhdGNocG9pbnRzOworICAgIFZlY3RvcjxXYXRjaHBvaW50
Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+PiBtX3Byb2ZpbGVkV2F0
Y2hwb2ludHM7CisgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+IG1fc2V0czsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYK
QEAgLTEzOCwxMCArMTY3LDEyIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMoKTsK
ICAgICB+RGVzaXJlZFdhdGNocG9pbnRzKCk7CiAgICAgCi0gICAgdm9pZCBhZGRMYXppbHkoV2F0
Y2hwb2ludCosIFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50
KiwgSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRT
ZXQqKTsKKyAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgdm9p
ZCBhZGRMYXppbHkoQ29kZU9yaWdpbiwgRXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqKTsKKyAgICB2
b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYp
OwogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKCk7CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJp
bnZhbGlkYXRpb24gcG9pbnQgaW5qZWN0aW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChn
cmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOworICAgICAgICAKKyAgICAgICAgQml0VmVj
dG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQorICAgICAgICAg
ICAgICAgIGhhbmRsZShub2RlSW5kZXgsIGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBhc3N1bWVzIHRoYXQgY29udHJvbCBmbG93
IG9jY3VycyBhdCBieXRlY29kZSBpbnN0cnVjdGlvbiBib3VuZGFyaWVzLgorICAgICAgICAgICAg
aWYgKG1fb3JpZ2luVGhhdEhhZEZpcmUuaXNTZXQoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAg
ICAgICAgIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLnNldChibG9jay0+c3VjY2Vz
c29yKGkpLT5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRp
b25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpbnNlcnRJbnZhbGlkYXRpb25DaGVjaygwLCBibG9j
ay0+YXQoMCkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGhhbmRsZSh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFkRmlyZS5pc1NldCgpICYmIG1fb3JpZ2luVGhh
dEhhc0ZpcmUgIT0gbm9kZS0+Y29kZU9yaWdpbikgeworICAgICAgICAgICAgaW5zZXJ0SW52YWxp
ZGF0aW9uQ2hlY2sobm9kZUluZGV4LCBub2RlKTsKKyAgICAgICAgICAgIG1fb3JpZ2luVGhhdEhh
ZEZpcmUgPSBDb2RlT3JpZ2luKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh3
cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIFdhdGNocG9pbnRfZmlyZSkpCisgICAgICAgICAg
ICBtX29yaWdpblRoYXRIYWRGaXJlID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBpbnNlcnRJbnZhbGlkYXRpb25DaGVjayh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIEludmFsaWRhdGlvblBvaW50LCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICB9
CisgICAgCisgICAgQ29kZU9yaWdpbiBtX29yaWdpblRoYXRIYWRGaXJlOworfTsKKworYm9vbCBw
ZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgSW52YWxpZGF0aW9uIFBvaW50IEluamVj
dGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxJbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGFuIGludmFsaWRhdGlvbiBjaGVjayBhdCB0aGUg
YmVnaW5uaW5nIG9mIGFueSBDb2RlT3JpZ2luIHRoYXQgZm9sbG93cyBhIENvZGVPcmlnaW4KKy8v
IHRoYXQgaGFkIGEgY2FsbCAoY2xvYmJlcmVkIFdvcmxkKS4KKworYm9vbCBwZXJmb3JtSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niwx
MSArNjYsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOwotICAgICAgICAg
ICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKSB7CisgICAgICAgICAgICBpZiAoIWluZm8ubV9mYWlsdXJlSnVtcHMuZW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbmZvLm1f
ZmFpbHVyZUp1bXBzLmp1bXBzKCkuc2l6ZSgpOyArK2opCiAgICAgICAgICAgICAgICAgICAgIGxh
YmVscy5hcHBlbmQoaW5mby5tX2ZhaWx1cmVKdW1wcy5qdW1wcygpW2pdLmxhYmVsKCkpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChtX2ppdENvZGUt
PndhdGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLnNvdXJjZUxhYmVsKCkpOworICAg
ICAgICAgICAgICAgIGxhYmVscy5hcHBlbmQoaW5mby5tX3JlcGxhY2VtZW50U291cmNlKTsKICAg
ICAgICAgICAgIG1fZXhpdFNpdGVMYWJlbHMuYXBwZW5kKGxhYmVscyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkK
ICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9u
SW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJl
SnVtcHM7CiAgICAgICAgIEFTU0VSVChmYWlsdXJlSnVtcHMuZW1wdHkoKSA9PSAoaW5mby5tX3dh
dGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsK
LSAgICAgICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgpKQog
ICAgICAgICAgICAgZmFpbHVyZUp1bXBzLmxpbmsodGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1faml0Q29kZS0+d2F0Y2hwb2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRleF0uc2V0
RGVzdGluYXRpb24obGFiZWwoKSk7CisgICAgICAgICAgICBpbmZvLm1fcmVwbGFjZW1lbnREZXN0
aW5hdGlvbiA9IGxhYmVsKCk7CiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7
CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsK
ICAgICAgICAgZXhpdC5zZXRQYXRjaGFibGVDb2RlT2Zmc2V0KHBhdGNoYWJsZUp1bXAoKSk7CkBA
IC0yNTcsOCArMjU3LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4aXQuZ2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldEFzSnVtcCgpLCB0YXJnZXQpOwogICAgICAgICBleGl0LmNvcnJlY3RKdW1wKGxpbmtC
dWZmZXIpOwotICAgICAgICBpZiAoaW5mby5tX3dhdGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgICAgICBtX2ppdENvZGUtPndhdGNo
cG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLmNvcnJlY3RMYWJlbHMobGlua0J1ZmZlcik7
CisgICAgICAgIGlmIChpbmZvLm1fZmFpbHVyZUp1bXBzLmVtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1faml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVu
dCgKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2Vt
ZW50U291cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5t
X3JlcGxhY2VtZW50RGVzdGluYXRpb24pKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1l
bnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBKdW1wUmVwbGFjZW1lbnQ6OmZpcmUoKQoreworICAgIGlmIChPcHRpb25zOjpz
aG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZ0YoIkZpcmluZyBqdW1wIHJlcGxhY2Vt
ZW50IHdhdGNocG9pbnQgZnJvbSAlcCwgdG8gJXAuXG4iLCBzb3VyY2UuZGF0YUxvY2F0aW9uKCks
IGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFj
ZVdpdGhKdW1wKHNvdXJjZSwgZGVzdGluYXRpb24pOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHSnVtcFJlcGxhY2VtZW50X2gKKyNkZWZpbmUgREZHSnVt
cFJlcGxhY2VtZW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUxv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgSnVt
cFJlcGxhY2VtZW50IHsKK3B1YmxpYzoKKyAgICBKdW1wUmVwbGFjZW1lbnQoQ29kZUxvY2F0aW9u
TGFiZWwgc291cmNlLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICAgICAgOiBt
X3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlyZSgpOworCitwcml2YXRlOgorICAgIENvZGVM
b2NhdGlvbkxhYmVsIG1fc291cmNlOworICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZGVzdGluYXRp
b247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0p1bXBSZXBsYWNlbWVudF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1ODE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldExvY2FsVW5saW5rZWQsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICAvKiBNYXJrZXIg
Zm9yIGFuIGFyZ3VtZW50IGJlaW5nIHNldCBhdCB0aGUgcHJvbG9ndWUgb2YgYSBmdW5jdGlvbi4g
Ki9cCi0gICAgbWFjcm8oU2V0QXJndW1lbnQsIDAgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBt
YWNybyhTZXRBcmd1bWVudCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgXAorICAgIC8qIE1hcmtl
ciBvZiBsb2NhdGlvbiBpbiB0aGUgSVIgd2hlcmUgd2UgbWF5IHBvc3NpYmx5IHBlcmZvcm0ganVt
cCByZXBsYWNlbWVudCB0byAqL1wKKyAgICAvKiBpbnZhbGlkYXRlIHRoaXMgY29kZSBibG9jay4g
Ki9cCisgICAgbWFjcm8oSW52YWxpZGF0aW9uUG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8o
Qml0QW5kLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNyw5IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHN0cnVjdCBPU1JFeGl0Q29tcGls
YXRpb25JbmZvIHsKLSAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKLSAgICAgICAgOiBtX3dh
dGNocG9pbnRJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAg
ewotICAgIH0KLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlSnVt
cHM7Ci0gICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fcmVwbGFjZW1lbnRTb3VyY2U7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
cmVwbGFjZW1lbnREZXN0aW5hdGlvbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU4MTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3Jt
UHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAg
cGVyZm9ybUludmFsaWRhdGlvbkNoZWNrSW5qZWN0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVR5cGVD
aGVja0hvaXN0aW5nKGRmZyk7CiAgICAgCiAgICAgdW5zaWduZWQgY291bnQgPSAxOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsOCArMjY0LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKIAotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKCk7Ci0KICAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIo
MSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTMzMSw4ICszMjks
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGlm
ICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKLSAgICAgICAgCiAgICAgICAgIGp1bXAoaW52ZXJ0ID8g
dGFrZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJU
ZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CkBAIC0xNTE5LDcgKzE1MTUsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xNTkzLDcgKzE1ODgsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50
Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAg
ICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCkBAIC0xNjIwLDcgKzE2MTQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0VG9PYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlz
IGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBv
aW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygK
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwp
IHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCkBAIC0xNjk4LDcgKzE2OTEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCkBAIC0xNzI1LDcgKzE3MTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJy
YW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50
Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCkBAIC0xODcyLDcgKzE4NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0T3JPdGhlCiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0g
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CkBAIC0yMDE2LDggKzIwMDYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JP
dGhlckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCgpOwotCiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIApAQCAtMjczOCwxNyArMjcyNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKIAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5
cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKICAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUt
PmNoaWxkMygpKTsKICAgICAgICAgICAgIApAQCAtMzUyNCwxMCArMzUwMSw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5OiB7CiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkgewotICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50KCkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbm9kZS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICAgICAgQVNTRVJUKApAQCAtMzY5OSwxMCArMzY3Miw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5
V2l0aFNpemU6IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBpZiAo
IWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKQEAgLTM3NzQsMTAgKzM3NDMsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUt
PmluZGV4aW5nVHlwZSgpOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFk
VGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAg
bV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgp
LAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KCkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5v
ZGUtPm51bUNvbnN0YW50cygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwpAQCAtMzkyMCw5ICszODg1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnQ6IHsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAg
ICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICBqc0Nhc3Q8SlNGdW5j
dGlvbio+KG5vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQo
KSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00
MTk1LDEwICs0MTU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KICAgICAgICAgCiAgICAgICAgIG1f
aml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29u
c3RhbnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNocG9pbnQpLAotICAgICAgICAgICAg
bm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNDM2OCwxMCArNDMyNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9p
bnQ6IHsKLSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQoCi0gICAgICAgICAgICBpZGVu
dGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpKSkud2F0Y2hwb2ludFNl
dCgpOwotICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNl
dCk7Ci0gICAgICAgIAogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKQEAgLTQzODgsOSArNDM0Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
IHsKLSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCk7Ci0gICAgICAgIG1faml0
LmFkZExhemlseShzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwgc2V0KTsKLSAgICAgICAgCiAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDI2LDcgKzQz
NzcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGlzQ2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQ7CiAgICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9p
bnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwyOCArMjAwLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAotSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hw
b2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5v
ZGUpCi17Ci0gICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICByZXR1cm4gMDsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxl
cjo6SnVtcExpc3QoKSk7Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoCi0gICAgICAgIGtpbmQsIGpzVmFsdWVTb3VyY2UsCi0gICAgICAgIG1faml0LmdyYXBoKCku
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwKLSAgICAgICAgdGhpcywgbV9z
dHJlYW0tPnNpemUoKSkpOwotICAgIGluZm8ubV93YXRjaHBvaW50SW5kZXggPSBtX2ppdC5qaXRD
b2RlKCktPmFwcGVuZFdhdGNocG9pbnQoCi0gICAgICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQobV9qaXQud2F0Y2hwb2ludExhYmVsKCkpKTsKLSAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVj
dGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRv
Rm9yd2FyZCgpOwotICAgIHJldHVybiAmbV9qaXQuaml0Q29kZSgpLT53YXRjaHBvaW50c1tpbmZv
Lm1fd2F0Y2hwb2ludEluZGV4XTsKLX0KLQotSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kKQotewotICAg
IHJldHVybiBzcGVjdWxhdGlvbldhdGNocG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgpLCAwKTsK
LX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7CiAgICAgbV9qaXQuaml0Q29kZSgp
LT5sYXN0T1NSRXhpdCgpLmNvbnZlcnRUb0ZvcndhcmQoCkBAIC0xMzUzLDggKzEzMzEsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQ
UiA9IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7Ci0KICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIApAQCAtMjAwNCwxOCArMTk4MCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICB9CiAjZW5kaWYK
IAotICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBl
Q2hhaW5Jc1NhbmUoKSkgewotICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9i
amVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldCgpKTsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcp
LmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZp
bHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Q2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgor
ICAgIFdhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCAid2F0Y2hwb2ludCBjb2xsZWN0aW9uIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBoYW5kbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
aGFuZGxlKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAg
ICAgICAgICBoYW5kbGVNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgfHwg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBtX25vZGUtPmNoaWxk
MigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAgICAgICAgIHx8ICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG1fbm9kZS0+
Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkpCisgICAgICAgICAgICAgICAgaGFuZGxl
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNl
KQorICAgICAgICAgICAgICAgIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAg
ICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQor
ICAgICAgICAgICAgICAgICYmIG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgewor
ICAgICAgICAgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUo
KS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAg
ICAgIGFkZExhemlseShnbGJvYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5
OjpTdHJpbmcpCisgICAgICAgICAgICAgICAgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogor
ICAgICAgICAgICAgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdl
KF9ub2RlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2Jh
bE9iamVjdCgpLT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2lu
dDoKKyAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+ZnVu
Y3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KAorICAg
ICAgICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBtX25vZGUt
PmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVX
YXRjaHBvaW50IDogQmFkQ2FjaGVXYXRjaHBvaW50LAorICAgICAgICAgICAgICAgIG1fbm9kZS0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAg
ICAgICAgICAgYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCgpLT5zeW1i
b2xUYWJsZS0+Z2V0KAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCldKS53YXRjaHBvaW50U2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25X
YXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgaGFuZGxlTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpCisgICAgeworICAgICAg
ICBpZiAobV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxp
ZChtX25vZGUtPmNvZGVPcmlnaW4pKQorICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVj
dCgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBoYW5kbGVTdHJpbmdHZXRCeVZhbCgpCisgICAgeworICAgICAgICBpZiAoIW1fbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPnN0
cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCktPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZExhemlseShXYXRjaHBvaW50U2V0KiBzZXQpCisgICAgeworICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CisgICAgfQorICAgIHZvaWQgYWRkTGF6aWx5KElu
bGluZVdhdGNocG9pbnRTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkoc2V0KTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5jb2RlT3JpZ2luKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1XYXRjaHBv
aW50Q29sbGVjdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBXYXRjaHBvaW50IENvbGxlY3Rpb24gUGhhc2UiKTsKKyAgICByZXR1cm4g
cnVuUGhhc2U8V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR1dhdGNocG9p
bnRDb2xsZWN0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gQ29sbGVjdHMgYWxsIGRlc2lyZWQgd2F0Y2hwb2ludHMgaW50byB0aGUg
R3JhcGg6OndhdGNocG9pbnRzKCkgZGF0YSBzdHJ1Y3R1cmUuCisKK2Jvb2wgcGVyZm9ybVdhdGNo
cG9pbnRDb2xsZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV2F0Y2hwb2ludENvbGxl
Y3Rpb25QaGFzZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215363</attachid>
            <date>2013-10-28 21:48:00 -0700</date>
            <delta_ts>2013-10-29 11:00:21 -0700</delta_ts>
            <desc>it&apos;s done?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59844</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyMSw3ICsyODIxLDkgQEAgdm9pZCBDb2RlQmxv
Y2s6OmpldHRpc29uKCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoKm1faGVhcCk7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBkZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpOworICAg
IGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBhbHRlcm5h
dGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRl
cygpOwogICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQoreworICAgIG1fY29k
ZUJsb2NrLT5qZXR0aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gK
KyNkZWZpbmUgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoKQorICAgICAgICA6IG1fY29kZUJsb2NrKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbCgp
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvZmlsZWRDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHJv
ZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCgpCit7Cisg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKKyAgICAg
ICAgbV9jb2RlT3JpZ2luLCBtX2NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpLT5hZGRGcmVx
dWVudEV4aXRTaXRlKAorICAgICAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgbV9leGl0S2luZCkpOworICAgIAorICAgIG1fY29kZUJsb2NrLT5qZXR0
aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsaW5nQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50X2gKKyNkZWZpbmUgUHJvZmlsaW5nQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50IDogcHVi
bGljIFdhdGNocG9pbnQgeworcHVibGljOgorICAgIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50KCkKKyAgICAgICAgOiBtX2V4aXRLaW5kKEV4aXRLaW5kVW5zZXQpCisgICAg
ICAgICwgbV9jb2RlQmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBQcm9maWxpbmdDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBtX2V4aXRLaW5kKGV4
aXRLaW5kKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7CisgICAgfQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoKSBPVkVSUklE
RTsKKworcHJpdmF0ZToKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBFeGl0S2lu
ZCBtX2V4aXRLaW5kOworICAgIFByb2ZpbGluZ0NvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb2ZpbGluZ0NvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUmVnRXhwU3RhdGUp
IFwKICAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKKyAg
ICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIHRvIGluZGljYXRlIHRoYXQgdGhpcyBtYXkg
ZmlyZSB3YXRjaHBvaW50cy4gVXN1YWxseSB0aGlzIGlzIG5ldmVyIGRpcmVjdGx5IHdyaXR0ZW4g
YnV0IGluc3RlYWQgd2UgdGVzdCB0byBzZWUgaWYgYSBub2RlIGNsb2JiZXJzIHRoaXM7IGl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIHdvcmxkIHRvIGNsb2JiZXIgaXQu
ICovXAorICAgIG1hY3JvKFdhdGNocG9pbnRfZmlyZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciBy
ZWFkcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVy
ZWQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCiAgICAgbWFjcm8oTWlz
Y0ZpZWxkcykgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0byBpbmRp
Y2F0ZSB0aGF0IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3MgYmVjYXVz
ZSB3ZSBkb24ndCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0IGFs
bC4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5j
cHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIGJvb2wgZG9lc1dy
aXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0
KCk7CiB9CiAKK2Jvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFi
c3RyYWN0SGVhcCBoZWFwKQoreworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQWJz
dHJhY3RIZWFwT3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwg
bm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2
aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2OSw2ICs2NjksMzAgQEAgcHJpdmF0ZToKIAogYm9vbCBk
b2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwogCitjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7
CitwdWJsaWM6CisgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMoQWJzdHJhY3RIZWFwIGhlYXApCisg
ICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIG90aGVySGVhcCkK
KyAgICB7CisgICAgICAgIGlmIChtX3Jlc3VsdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9yZXN1bHQgPSBoZWFwLm92ZXJsYXBzKG90aGVySGVhcCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKworcHJpdmF0ZToKKyAg
ICBBYnN0cmFjdEhlYXAgbV9oZWFwOworICAgIGJvb2wgbV9yZXN1bHQ7Cit9OworCitib29sIHdy
aXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE1ODE2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQog
ICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAKK3ZvaWQgQ29tbW9uRGF0YTo6aW52
YWxpZGF0ZSgpCit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBqdW1wUmVwbGFjZW1lbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAganVtcFJlcGxhY2VtZW50c1tpXS5maXJlKCk7CisgICAgaXNTdGlsbFZhbGlkID0gZmFsc2U7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJl
dmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29t
bW9uRGF0YSgpCi0gICAgICAgIDogbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKQorICAgICAgICA6IGlzU3RpbGxWYWxpZCh0cnVlKQorICAgICAgICAs
IG1hY2hpbmVDYXB0dXJlU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAg
ICB7IH0KICAgICAKICAgICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24o
UGxhbiYsIENvZGVCbG9jayosIE5vZGUqKTsKICAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENv
ZGVPcmlnaW4gY29kZU9yaWdpbik7CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAg
IAorICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNl
dD4gaW5saW5lQ2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOwpAQCAtODMsMTAgKzg2LDE0IEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPFdlYWtSZWZl
cmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpT
Q2VsbD4+IHdlYWtSZWZlcmVuY2VzOworICAgIFNlZ21lbnRlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOworICAgIFNlZ21lbnRlZFZlY3Rv
cjxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gcHJvZmlsZWRX
YXRjaHBvaW50czsKKyAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1lbnRz
OwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwog
ICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBv
biBldmVyeSBHQy4KICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIElu
aXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkOwog
ICAgIAogICAgIGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
bG93QXJndW1lbnRbXT4gc2xvd0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE1ODE2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9
CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIAotdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRj
aHBvaW50U2V0KiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KFdhdGNo
cG9pbnRTZXQqIHNldCkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JXYXRj
aHBvaW50U2V0KHdhdGNocG9pbnQsIHNldCkpOworICAgIG1fc2V0cy5hZGRMYXppbHkoc2V0KTsK
IH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRj
aHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50
czo6YWRkTGF6aWx5KElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKIHsKLSAgICBtX2lubGluZVNl
dHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0KHdhdGNocG9pbnQs
ICZzZXQpKTsKKyAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KCZzZXQpOwogfQogCi12b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKCkKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjph
ZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hw
b2ludFNldCogc2V0KQogewotICAgIG1fc2V0cy5yZWFsbHlBZGQoKTsKLSAgICBtX2lubGluZVNl
dHMucmVhbGx5QWRkKCk7CisgICAgbV9zZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2lu
ZCwgc2V0KTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBJbmxpbmVXYXRjaHBvaW50U2V0JiBz
ZXQpCit7CisgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwg
JnNldCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit7CisgICAgbV9zZXRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwyNCArNDAsMjQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdGVt
cGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+CiBzdHJ1Y3QgV2F0Y2hwb2ludEZvckdl
bmVyaWNXYXRjaHBvaW50U2V0IHsKICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRT
ZXQoKQotICAgICAgICA6IG1fd2F0Y2hwb2ludCgwKQorICAgICAgICA6IG1fZXhpdEtpbmQoRXhp
dEtpbmRVbnNldCkKICAgICAgICAgLCBtX3NldCgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KFdhdGNocG9pbnQqIHdhdGNocG9pbnQs
IFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgICAgIDogbV93YXRjaHBvaW50KHdhdGNocG9p
bnQpCisgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAorICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSog
c2V0KQorICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fZXhp
dEtpbmQoZXhpdEtpbmQpCiAgICAgICAgICwgbV9zZXQoc2V0KQogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgV2F0Y2hwb2ludCogbV93YXRjaHBvaW50OworICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luOworICAgIEV4aXRLaW5kIG1fZXhpdEtpbmQ7CiAgICAgV2F0Y2hwb2ludFNldFR5cGUqIG1f
c2V0OwogfTsKIAotdHlwZWRlZiBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0
Y2hwb2ludFNldD4gV2F0Y2hwb2ludEZvcldhdGNocG9pbnRTZXQ7Ci10eXBlZGVmIFdhdGNocG9p
bnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxJbmxpbmVXYXRjaHBvaW50U2V0PiBXYXRjaHBvaW50
Rm9ySW5saW5lV2F0Y2hwb2ludFNldDsKLQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNl
dFR5cGU+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKQEAgLTcwLDI1ICs3MCw1MyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZExhemlseShjb25zdCBX
YXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+JiB3YXRj
aHBvaW50KQorICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisgICAg
eworICAgICAgICBtX3NldHMuYWRkKHNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkTGF6
aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIFdhdGNocG9pbnRT
ZXRUeXBlKiBzZXQpCiAgICAgewotICAgICAgICBtX3dhdGNocG9pbnRzLmFwcGVuZCh3YXRjaHBv
aW50KTsKKyAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzLmFkZCgKKyAgICAgICAgICAgIFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9y
aWdpbiwgZXhpdEtpbmQsIHNldCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlYWxseUFkZCgp
CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNv
bW1vbikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7IGktLTspCi0gICAg
ICAgICAgICBtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5hZGQobV93YXRjaHBvaW50c1tpXS5tX3dh
dGNocG9pbnQpOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+
OjppdGVyYXRvciBpdGVyID0gbV9zZXRzLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8V2F0Y2hw
b2ludFNldFR5cGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgY29tbW9uLndhdGNocG9pbnRz
LmFwcGVuZChDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAg
ICAgICAgICAoKml0ZXIpLT5hZGQoJmNvbW1vbi53YXRjaHBvaW50cy5sYXN0KCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hw
b2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dh
dGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+IHdhdGNocG9pbnQgPQorICAgICAgICAgICAg
ICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50c1tpXTsKKyAgICAgICAgICAgIGNvbW1vbi5wcm9maWxl
ZFdhdGNocG9pbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBQcm9maWxlZENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludCh3YXRjaHBvaW50Lm1fY29kZU9yaWdpbiwgd2F0Y2hwb2ludC5t
X2V4aXRLaW5kLCBjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQubV9zZXQtPmFk
ZCgmY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMubGFzdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGJvb2wg
YXJlU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X3dhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fd2F0Y2hwb2lu
dHNbaV0ubV9zZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICBIYXNoU2V0PFdhdGNo
cG9pbnRTZXRUeXBlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldHMuYmVnaW4oKTsKKyAgICAgICAg
SGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRvciBlbmQgPSBtX3NldHMuZW5kKCk7
CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAo
KCppdGVyKS0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3By
b2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9wcm9m
aWxlZFdhdGNocG9pbnRzW2ldLm1fc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKQEAgLTEyNiw3ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIFZlY3RvcjxXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8
V2F0Y2hwb2ludFNldFR5cGU+PiBtX3dhdGNocG9pbnRzOworICAgIFZlY3RvcjxXYXRjaHBvaW50
Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+PiBtX3Byb2ZpbGVkV2F0
Y2hwb2ludHM7CisgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+IG1fc2V0czsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYK
QEAgLTEzOCwxMCArMTY3LDEyIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMoKTsK
ICAgICB+RGVzaXJlZFdhdGNocG9pbnRzKCk7CiAgICAgCi0gICAgdm9pZCBhZGRMYXppbHkoV2F0
Y2hwb2ludCosIFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50
KiwgSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRT
ZXQqKTsKKyAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgdm9p
ZCBhZGRMYXppbHkoQ29kZU9yaWdpbiwgRXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqKTsKKyAgICB2
b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYp
OwogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKCk7CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJp
bnZhbGlkYXRpb24gcG9pbnQgaW5qZWN0aW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChn
cmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOworICAgICAgICAKKyAgICAgICAgQml0VmVj
dG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQorICAgICAgICAg
ICAgICAgIGhhbmRsZShub2RlSW5kZXgsIGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBhc3N1bWVzIHRoYXQgY29udHJvbCBmbG93
IG9jY3VycyBhdCBieXRlY29kZSBpbnN0cnVjdGlvbiBib3VuZGFyaWVzLgorICAgICAgICAgICAg
aWYgKG1fb3JpZ2luVGhhdEhhZEZpcmUuaXNTZXQoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAg
ICAgICAgIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLnNldChibG9jay0+c3VjY2Vz
c29yKGkpLT5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRp
b25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpbnNlcnRJbnZhbGlkYXRpb25DaGVjaygwLCBibG9j
ay0+YXQoMCkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGhhbmRsZSh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFkRmlyZS5pc1NldCgpICYmIG1fb3JpZ2luVGhh
dEhhc0ZpcmUgIT0gbm9kZS0+Y29kZU9yaWdpbikgeworICAgICAgICAgICAgaW5zZXJ0SW52YWxp
ZGF0aW9uQ2hlY2sobm9kZUluZGV4LCBub2RlKTsKKyAgICAgICAgICAgIG1fb3JpZ2luVGhhdEhh
ZEZpcmUgPSBDb2RlT3JpZ2luKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh3
cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIFdhdGNocG9pbnRfZmlyZSkpCisgICAgICAgICAg
ICBtX29yaWdpblRoYXRIYWRGaXJlID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBpbnNlcnRJbnZhbGlkYXRpb25DaGVjayh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIEludmFsaWRhdGlvblBvaW50LCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICB9
CisgICAgCisgICAgQ29kZU9yaWdpbiBtX29yaWdpblRoYXRIYWRGaXJlOworfTsKKworYm9vbCBw
ZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgSW52YWxpZGF0aW9uIFBvaW50IEluamVj
dGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxJbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGFuIGludmFsaWRhdGlvbiBjaGVjayBhdCB0aGUg
YmVnaW5uaW5nIG9mIGFueSBDb2RlT3JpZ2luIHRoYXQgZm9sbG93cyBhIENvZGVPcmlnaW4KKy8v
IHRoYXQgaGFkIGEgY2FsbCAoY2xvYmJlcmVkIFdvcmxkKS4KKworYm9vbCBwZXJmb3JtSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niwx
MSArNjYsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOwotICAgICAgICAg
ICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKSB7CisgICAgICAgICAgICBpZiAoIWluZm8ubV9mYWlsdXJlSnVtcHMuZW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbmZvLm1f
ZmFpbHVyZUp1bXBzLmp1bXBzKCkuc2l6ZSgpOyArK2opCiAgICAgICAgICAgICAgICAgICAgIGxh
YmVscy5hcHBlbmQoaW5mby5tX2ZhaWx1cmVKdW1wcy5qdW1wcygpW2pdLmxhYmVsKCkpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChtX2ppdENvZGUt
PndhdGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLnNvdXJjZUxhYmVsKCkpOworICAg
ICAgICAgICAgICAgIGxhYmVscy5hcHBlbmQoaW5mby5tX3JlcGxhY2VtZW50U291cmNlKTsKICAg
ICAgICAgICAgIG1fZXhpdFNpdGVMYWJlbHMuYXBwZW5kKGxhYmVscyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkK
ICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9u
SW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJl
SnVtcHM7CiAgICAgICAgIEFTU0VSVChmYWlsdXJlSnVtcHMuZW1wdHkoKSA9PSAoaW5mby5tX3dh
dGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsK
LSAgICAgICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgpKQog
ICAgICAgICAgICAgZmFpbHVyZUp1bXBzLmxpbmsodGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1faml0Q29kZS0+d2F0Y2hwb2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRleF0uc2V0
RGVzdGluYXRpb24obGFiZWwoKSk7CisgICAgICAgICAgICBpbmZvLm1fcmVwbGFjZW1lbnREZXN0
aW5hdGlvbiA9IGxhYmVsKCk7CiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7
CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsK
ICAgICAgICAgZXhpdC5zZXRQYXRjaGFibGVDb2RlT2Zmc2V0KHBhdGNoYWJsZUp1bXAoKSk7CkBA
IC0yNTcsOCArMjU3LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4aXQuZ2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldEFzSnVtcCgpLCB0YXJnZXQpOwogICAgICAgICBleGl0LmNvcnJlY3RKdW1wKGxpbmtC
dWZmZXIpOwotICAgICAgICBpZiAoaW5mby5tX3dhdGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgICAgICBtX2ppdENvZGUtPndhdGNo
cG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLmNvcnJlY3RMYWJlbHMobGlua0J1ZmZlcik7
CisgICAgICAgIGlmIChpbmZvLm1fZmFpbHVyZUp1bXBzLmVtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1faml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVu
dCgKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2Vt
ZW50U291cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5t
X3JlcGxhY2VtZW50RGVzdGluYXRpb24pKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1l
bnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBKdW1wUmVwbGFjZW1lbnQ6OmZpcmUoKQoreworICAgIGlmIChPcHRpb25zOjpz
aG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZ0YoIkZpcmluZyBqdW1wIHJlcGxhY2Vt
ZW50IHdhdGNocG9pbnQgZnJvbSAlcCwgdG8gJXAuXG4iLCBzb3VyY2UuZGF0YUxvY2F0aW9uKCks
IGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFj
ZVdpdGhKdW1wKHNvdXJjZSwgZGVzdGluYXRpb24pOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHSnVtcFJlcGxhY2VtZW50X2gKKyNkZWZpbmUgREZHSnVt
cFJlcGxhY2VtZW50X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUxv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgSnVt
cFJlcGxhY2VtZW50IHsKK3B1YmxpYzoKKyAgICBKdW1wUmVwbGFjZW1lbnQoQ29kZUxvY2F0aW9u
TGFiZWwgc291cmNlLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICAgICAgOiBt
X3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlyZSgpOworCitwcml2YXRlOgorICAgIENvZGVM
b2NhdGlvbkxhYmVsIG1fc291cmNlOworICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZGVzdGluYXRp
b247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0p1bXBSZXBsYWNlbWVudF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1ODE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldExvY2FsVW5saW5rZWQsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICAvKiBNYXJrZXIg
Zm9yIGFuIGFyZ3VtZW50IGJlaW5nIHNldCBhdCB0aGUgcHJvbG9ndWUgb2YgYSBmdW5jdGlvbi4g
Ki9cCi0gICAgbWFjcm8oU2V0QXJndW1lbnQsIDAgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBt
YWNybyhTZXRBcmd1bWVudCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgXAorICAgIC8qIE1hcmtl
ciBvZiBsb2NhdGlvbiBpbiB0aGUgSVIgd2hlcmUgd2UgbWF5IHBvc3NpYmx5IHBlcmZvcm0ganVt
cCByZXBsYWNlbWVudCB0byAqL1wKKyAgICAvKiBpbnZhbGlkYXRlIHRoaXMgY29kZSBibG9jay4g
Ki9cCisgICAgbWFjcm8oSW52YWxpZGF0aW9uUG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8o
Qml0QW5kLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNyw5IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHN0cnVjdCBPU1JFeGl0Q29tcGls
YXRpb25JbmZvIHsKLSAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKLSAgICAgICAgOiBtX3dh
dGNocG9pbnRJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAg
ewotICAgIH0KLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlSnVt
cHM7Ci0gICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fcmVwbGFjZW1lbnRTb3VyY2U7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
cmVwbGFjZW1lbnREZXN0aW5hdGlvbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU4MTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3Jt
UHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAg
cGVyZm9ybUludmFsaWRhdGlvbkNoZWNrSW5qZWN0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVR5cGVD
aGVja0hvaXN0aW5nKGRmZyk7CiAgICAgCiAgICAgdW5zaWduZWQgY291bnQgPSAxOwpAQCAtMjI4
LDcgKzIyOSwyNCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAg
ICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBERkdNb2RlOiB7CiAgICAgICAgIHBlcmZvcm1U
aWVyVXBDaGVja0luamVjdGlvbihkZmcpOwotICAgICAgICBicmVhazsKKworICAgICAgICBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybURDRShkZmcpOworICAgICAg
ICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKKyAgICAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKGRm
Zyk7CisgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6
YXRpb246Iik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcp
OworICAgICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewor
ICAgICAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBk
YXRhRmxvd0pJVC5saW5rRnVuY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRhdGFGbG93SklULmNvbXBpbGUoKTsKKyAgICAgICAgICAgIGRhdGFGbG93SklULmxpbmsoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIERGR1BhdGg7CiAgICAgfQogICAg
IAogICAgIGNhc2UgRlRMTW9kZToKQEAgLTI1Myw2ICsyNzEsNyBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAg
ICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1X
YXRjaHBvaW50Q29sbGVjdGlvbihkZmcpOwogICAgICAgICAKICAgICAgICAgZHVtcEFuZFZlcmlm
eUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAg
CkBAIC0yODAsMzEgKzI5OSwxNCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIHJldHVybiBGVExQYXRoOwogI2Vsc2UKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGYWls
UGF0aDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICB9CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKLSAgICBw
ZXJmb3JtRENFKGRmZyk7Ci0gICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7Ci0gICAgcGVyZm9y
bVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKLSAgICBkdW1wQW5kVmVyaWZ5R3JhcGgo
ZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwotCi0gICAgSklUQ29tcGlsZXIgZGF0
YUZsb3dKSVQoZGZnKTsKLSAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkgewotICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKTsKLSAgICAgICAg
ZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9uKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGF0YUZs
b3dKSVQuY29tcGlsZSgpOwotICAgICAgICBkYXRhRmxvd0pJVC5saW5rKCk7CisgICAgICAgIHJl
dHVybiBGYWlsUGF0aDsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIERGR1BhdGg7CiB9CiAKIGJv
b2wgUGxhbjo6aXNTdGlsbFZhbGlkKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU4MTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY0LDggKzI2NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGUKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAg
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICAgICAgc3BlY3Vs
YXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwotCiAgICAgICAgIG1f
aml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOwogICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgp
OwogICAgIH0gZWxzZSB7CkBAIC0zMzEsOCArMzI5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9k
ZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKIAotICAg
ICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIAogICAgICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVt
cCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0
KHRoaXMpOwpAQCAtMTUxOSw3ICsxNTE1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAK
ICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkg
ewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJy
YW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTU5
Myw3ICsxNTg4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQog
ICAgIH0KIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7
Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
KTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTYyMCw3ICsx
NjE0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAog
ICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBi
ZSBhIGNlbGwuIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlk
KSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhv
cDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTY5OCw3
ICsxNjkxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAg
IH0KIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0g
ICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsK
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTcyNSw3ICsxNzE3
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAg
IC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBh
IGNlbGwuIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7
Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
KTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJH
UFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTg3Miw3ICsx
ODYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAg
ICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAg
ICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLApAQCAtMjAxNiw4ICsyMDA2LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAg
IHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKLQogICAg
ICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
bm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTI3MzgsMTcgKzI3MjYsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2Fu
ZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2Fu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1
Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAK
QEAgLTM1MjQsMTAgKzM1MDEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhh
c0FycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIG1faml0
LmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAg
ICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsK
LSAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpID09IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgIEFT
U0VSVCgKQEAgLTM2OTksMTAgKzM2NzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJh
ZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVX
YXRjaHBvaW50KCkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CkBAIC0zNzc0LDEwICszNzQzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKICAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdl
KGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9iYWxP
YmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgICAgIAogICAgICAg
ICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBub2RlLT5udW1Db25zdGFudHMoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTM5MjAs
OSArMzg4NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OiB7Ci0g
ICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dCgpLAotICAgICAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+
YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDE5NSwxMCArNDE1Nyw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcXVpdGUgYSBoaW50
IGFscmVhZHkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUt
PnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50KAotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFk
Q2FjaGVXYXRjaHBvaW50KSwKLSAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTQzNjgsMTAg
KzQzMjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OiB7Ci0gICAgICAgIFdhdGNocG9pbnRT
ZXQqIHNldCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3ltYm9s
VGFibGUoKS0+Z2V0KAotICAgICAgICAgICAgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVy
TnVtYmVyRm9yQ2hlY2soKSkpLndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgbV9qaXQuYWRkTGF6
aWx5KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLCBzZXQpOwotICAgICAgICAKICNpZiBERkdfRU5B
QkxFKEpJVF9BU1NFUlQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CkBAIC00Mzg4LDkgKzQzNDIs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIFdhdGNocG9pbnRTZXQq
IHNldCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpOwotICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRj
aHBvaW50KCksIHNldCk7Ci0gICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNDQyNiw3ICs0Mzc3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBpc0NlbGwubGluaygmbV9qaXQpOwogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgICAg
ICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCgpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgp
OwogICAgICAgICB9IGVsc2UgewpAQCAtNDk1OCw2ICs0OTA4LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAg
ICAgICBlbWl0SW52YWxpZGF0aW9uUG9pbnQobm9kZSk7CisgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwyNiArMjAwLDE5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9
CiAKLUp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bldhdGNocG9pbnQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gMDsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOworICAg
IEFTU0VSVChtX2NhbkV4aXQpOworICAgIEFTU0VSVChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09
IEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9q
aXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIGtpbmQsIGpzVmFs
dWVTb3VyY2UsCiAgICAgICAgIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihub2RlKSwKICAgICAgICAgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwotICAgIGlu
Zm8ubV93YXRjaHBvaW50SW5kZXggPSBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZFdhdGNocG9pbnQo
Ci0gICAgICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQobV9qaXQud2F0Y2hwb2ludExhYmVs
KCkpKTsKLSAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRp
b24pCi0gICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotICAgIHJldHVybiAm
bV9qaXQuaml0Q29kZSgpLT53YXRjaHBvaW50c1tpbmZvLm1fd2F0Y2hwb2ludEluZGV4XTsKLX0K
LQotSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
V2F0Y2hwb2ludChFeGl0S2luZCBraW5kKQotewotICAgIHJldHVybiBzcGVjdWxhdGlvbldhdGNo
cG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgpLCAwKTsKKyAgICBpbmZvLm1fcmVwbGFjZW1lbnRT
b3VyY2UgPSBtX2ppdC53YXRjaHBvaW50TGFiZWwoKTsKKyAgICBub1Jlc3VsdChub2RlKTsKIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCkBAIC0xMzUzLDggKzEzNDYsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCk7Ci0KICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIApAQCAtMjAwNCwxOCArMTk5NSw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKTsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlQ2hh
aW5Jc1NhbmUoKSkgewotICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dCgpKTsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFs
cmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRl
ciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDIwICsyODQsMTAgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7CiAgICAgfQotICAgIHZvaWQgc3BlY3Vs
YXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZChjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQotICAgIHsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAg
ICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKSk7Ci0gICAgfQogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
c1N0aWxsVmFsaWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAg
IH0KLSAgICB2b2lkIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKLSAgICB9CiAKICAgICB2b2lk
IHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1
ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQ
UlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0
ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VL
aW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTIxMzEsMTYgKzIxMjEsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAg
IHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBO
b2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25S
ZWNvdmVyeSYpOwogICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBK
U1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgLy8gVXNlIHRoaXMgbGlrZSB5b3Ugd291bGQg
dXNlIHNwZWN1bGF0aW9uQ2hlY2soKSwgZXhjZXB0IHRoYXQgeW91IGRvbid0IHBhc3MgaXQgYSBq
dW1wCi0gICAgLy8gKGJlY2F1c2UgeW91IGRvbid0IGhhdmUgdG8gZXhlY3V0ZSBhIGJyYW5jaDsg
dGhhdCdzIGtpbmQgb2YgdGhlIHdob2xlIHBvaW50KSwgYW5kIHlvdQotICAgIC8vIG11c3QgcmVn
aXN0ZXIgdGhlIHJldHVybmVkIFdhdGNocG9pbnQgd2l0aCBzb21ldGhpbmcgcmVsZXZhbnQuIElu
IGdlbmVyYWwsIHRoaXMgc2hvdWxkCi0gICAgLy8gYmUgdXNlZCB3aXRoIGV4dHJlbWUgY2FyZS4g
VXNlIHNwZWN1bGF0aW9uQ2hlY2soKSB1bmxlc3MgeW91J3ZlIGdvdCBhbiBhbWF6aW5nIHJlYXNv
bgotICAgIC8vIG5vdCB0by4KLSAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxh
dGlvbldhdGNocG9pbnQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqKTsKLSAgICAvLyBU
aGUgZGVmYXVsdCBmb3Igc3BlY3VsYXRpb24gd2F0Y2hwb2ludHMgaXMgdGhhdCB0aGV5J3JlIHVu
Y291bnRlZCwgYmVjYXVzZSB0aGUKLSAgICAvLyBhY3Qgb2YgZmlyaW5nIGEgd2F0Y2hwb2ludCBp
bnZhbGlkYXRlcyBpdC4gU28sIGZ1dHVyZSByZWNvbXBpbGF0aW9ucyB3aWxsIG5vdAotICAgIC8v
IGF0dGVtcHQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBhZ2Fpbi4KLSAgICBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNvdW50YWJs
ZVdhdGNocG9pbnQpOworICAgIAorICAgIHZvaWQgZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUq
KTsKICAgICAKICAgICAvLyBJdCBpcyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8gbm90IHVzZSB0
aGlzIGRpcmVjdGx5LgogICAgIHZvaWQgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0
IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAgIFdhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAid2F0Y2hwb2lu
dCBjb2xsZWN0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAg
ICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBoYW5k
bGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlKCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3Rh
bnQ6CisgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgICAgICAgICBoYW5kbGVNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgfHwgKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE9iamVjdFVzZSAmJiBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RPck90aGVyVXNlKQorICAgICAgICAgICAgICAgIHx8IChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IE9iamVjdFVzZSkpCisgICAgICAgICAgICAgICAgaGFuZGxlTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dp
Y2FsTm90OgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAgICAgICAgIGhh
bmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQorICAgICAgICAgICAgICAgICYmIG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIGFkZExh
emlseShnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgICAgIGFkZExhemlseShnbGJvYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgICAg
ICAgICAgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICAgICAgaGFuZGxlU3Ry
aW5nR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAg
Y2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0KCktPmlz
SGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKF9ub2RlLT5pbmRleGluZ1R5cGUo
KSkpCisgICAgICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT5oYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGFkZExh
emlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICBt
X2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIG1fbm9kZS0+
Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdl
YWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFkQ2FjaGVX
YXRjaHBvaW50LAorICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5KAor
ICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCgpLT5zeW1ib2xUYWJsZS0+Z2V0KAorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJl
ckZvckNoZWNrKCldKS53YXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgorICAgICAgICAg
ICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPmNvZGVPcmlnaW4p
KQorICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBoYW5kbGVTdHJpbmdH
ZXRCeVZhbCgpCisgICAgeworICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kcygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWdsb2JhbE9iamVj
dCgpLT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1
Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAgIGFkZExhemlseShn
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50
U2V0KiBzZXQpCisgICAgeworICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHNldCk7CisgICAgfQorICAgIHZvaWQgYWRkTGF6aWx5KElubGluZVdhdGNocG9pbnRTZXQmIHNl
dCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsK
KyAgICB9CisgICAgCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBXYXRjaHBv
aW50IENvbGxlY3Rpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8V2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2VfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29sbGVj
dHMgYWxsIGRlc2lyZWQgd2F0Y2hwb2ludHMgaW50byB0aGUgR3JhcGg6OndhdGNocG9pbnRzKCkg
ZGF0YSBzdHJ1Y3R1cmUuCisKK2Jvb2wgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9oCisK
</data>
<flag name="commit-queue"
          id="238082"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215398</attachid>
            <date>2013-10-29 11:00:21 -0700</date>
            <delta_ts>2013-10-29 11:40:17 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96053</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTgxNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc3LDggKzI3Nyw2IEBACiAJCTBGNzY2RDJGMTVBOERD
RTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8q
IEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgKi87IH07CiAJCTBGNzY2RDMwMTVBOERDRTIwMDhG
MzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJFMTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDFDMTVB
NTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBK
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmNwcCAqLzsgfTsKLQkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8q
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQuY3BwICovOyB9OwogCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwpA
QCAtMzg3LDYgKzM4NSwxNiBAQAogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVC
YXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5j
cHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQx
NDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki87IH07CisJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CisJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkM5N0YzNTE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGMzExODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKKwkJMEZDOTdGMzYxODIwMjBE
NzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzMjE4MjAy
MEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkM5N0Yz
RDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0Yz
NzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5j
cHAgKi87IH07CisJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQzk3RjNGMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
OTdGMzkxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5jcHAgKi87IH07CisJ
CTBGQzk3RjQwMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjNBMTgyMDIxMTkw
MDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkM5N0Y0MTE4MjAyMTE5MDAyQzlCMjYgLyogREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHAgKi87IH07CisJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIy
NiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJzZXJF
cnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
Q0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0
IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5j
cHAgKi87IH07CiAJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQUEx
ODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1MzcsOCArMTU0NSw2IEBACiAJCTBGNzY2
RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQXdhcmVK
SVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDJF
MTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDM2MTVBRTRBMUEw
MDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxp
bmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU4LDYgKzE2NjQs
MTYgQEAKIAkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMg
LyogVlRhYmxlU3BlY3RydW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVlRhYmxlU3BlY3RydW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4
MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM5N0Yz
MTE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZmlsZWRDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkM5N0YzMjE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZmls
ZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50
SW5qZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQzk3RjM4MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludElu
amVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzk3
RjM5MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSnVtcFJlcGxhY2VtZW50LmNwcDsgcGF0aCA9
IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkM5N0YzQTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0p1bXBSZXBsYWNlbWVudC5oOyBwYXRoID0g
ZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDOTdGM0MxODIwMjExOTAwMkM5
QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oOyBwYXRoID0gZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBh
cnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVycm9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBhdGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkzNCw4ICsyOTUwLDYgQEAKIAkJCQkwRkM3
MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVy
LmggKi8sCiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmgg
Ki8sCi0JCQkJMEY3NjZEMzIxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQuY3BwICovLAotCQkJCTBGNzY2RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJl
Z2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0
ZXJTZXQuaCAqLywKIAkJCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAg
Ki8sCkBAIC0zNzYwLDEyICszNzc0LDE2IEBACiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0
IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4
MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1
MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZDOTdGMzcxODIw
MjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICov
LAorCQkJCTBGQzk3RjM4MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludElu
amVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJ
VENvZGUuY3BwICovLAogCQkJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNw
cCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAq
LywKIAkJCQlBNzhBOTc3MDE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmNwcCAq
LywKIAkJCQlBNzhBOTc3MTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggKi8s
CisJCQkJMEZDOTdGMzkxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5jcHAg
Ki8sCisJCQkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5o
ICovLAogCQkJCUE3M0E1MzU4MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAg
Ki8sCiAJCQkJQTczQTUzNTkxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggKi8s
CiAJCQkJQTdEOUEyOTIxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5jcHAgKi8sCkBA
IC0zODY0LDYgKzM4ODIsOCBAQAogCQkJCTBGODVBMzFFMTZBQjc2QUUwMDc3NTcxRSAvKiBERkdW
YXJpYWRpY0Z1bmN0aW9uLmggKi8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAor
CQkJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcCAqLywKKwkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBE
RkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dv
cmtsaXN0LmggKi8sCiAJCQkpOwpAQCAtMzk3Niw2ICszOTk2LDggQEAKIAkJCQk5NjlBMDc5MTBF
RDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY4Rjk0M0QxNjY3NjMyRDAw
RDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwICovLAogCQkJCTBGOEY5NDNFMTY2NzYzMkQwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggKi8sCisJCQkJMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2
IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJMEZDOTdGMzAx
ODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oICovLAog
CQkJCTBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICov
LAogCQkJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCAqLywKIAkJ
CQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovLApAQCAtNDAxNiw2
ICs0MDM4LDggQEAKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNl
SnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVj
aXNlSnVtcFRhcmdldHMuaCAqLywKKwkJCQkwRkM5N0YzMTE4MjAyMEQ3MDAyQzlCMjYgLyogUHJv
ZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovLAorCQkJCTBGQzk3RjMy
MTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
LAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCkBAIC00MjE5
LDYgKzQyNDMsNyBAQAogCQkJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZH
Rmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzgxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNjE3QTBCQUE4
MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
NDMzNiw2ICs0MzYxLDcgQEAKIAkJCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JFMkNBRTE0RTk4NUFBMDAwNTkz
QUQgLyogR0NBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMDE1QThEQ0Uy
MDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFFMTdC
NkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8s
CkBAIC00NDg4LDYgKzQ1MTQsNyBAQAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGQjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkM5N0YzNjE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFB
QzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQ1MDksNyArNDUzNiw2IEBACiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8q
IEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQz
NTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00NTg3LDYgKzQ2MTMsNyBAQAogCQkJCTk2OUEwNzlCMEVEMUQz
QUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRF
OTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0Ew
QkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
OTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QjBFMTZGNUNEMDBCMzQ0NjAgLyogUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTQ2NDcsNiArNDY3NCw3IEBACiAJCQkJQkMxOEM0NUQw
RTE2RjVDRDAwQjM0NDYwIC8qIFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
QjBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
OTdGNDIxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RDNCM0M0MTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVz
dWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8q
IFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTgwLDYgKzUyMDgsNyBAQAog
CQkJCTE0MjgwODJEMTA3RUMwNTcwMDEzRTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkNFRkFCMTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDhERDBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1l
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgz
QjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MjI0LDYgKzUyNTMsNyBAQAogCQkJCUE3MEIw
ODMyMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEODlDRjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0YzNTE4MjAyMEQ3MDAyQzlC
MjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZB
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MjU4LDYg
KzUyODgsNyBAQAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzMxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDOTdGM0QxODIw
MjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0IxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBp
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5Nzc4MTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczQTUzNUExNzk5Q0Q1RDAw
MTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTQwMSw2ICs1
NDMyLDcgQEAKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMTMxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1Nl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlND
b250ZXh0UmVmLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIy
NiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NDQ5LDcgKzU0ODEsNiBAQAogCQkJ
CTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBF
RUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0
Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5UHJvZmlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NDk0LDYgKzU1MjUsNyBAQAogCQkJCUE3Q0EzQUUzMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTUxMDdFQzdFNzAwNjUwNDQ2IC8qIE9iamVjdENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzk3RjNGMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTYxMDdF
QzdFNzAwNjUwNDQ2IC8qIE9iamVjdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTY5QTA3OUEwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBpbmxpbmUgYm9vbCBpc1g4NigpCiAjZW5kaWYKIH0K
IAotY2xhc3MgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludDsKIGNsYXNzIExpbmtCdWZmZXI7CiBj
bGFzcyBSZXBhdGNoQnVmZmVyOwogY2xhc3MgV2F0Y2hwb2ludDsKQEAgLTM0Miw3ICszNDEsNiBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOwog
ICAgICAgICBmcmllbmQgc3RydWN0IERGRzo6T1NSRXhpdDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEp1bXA7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50Owog
ICAgICAgICBmcmllbmQgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogICAgICAgICBmcmll
bmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhdGNocG9pbnQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MjEsNyArMjgyMSwyMSBAQCB2b2lkIENvZGVCbG9j
azo6amV0dGlzb24oKQogewogICAgIERlZmVyR0MgZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwotICAgIEFTU0VSVCh0aGlz
ID09IHJlcGxhY2VtZW50KCkpOworICAgIAorICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0
d28gdGhpbmdzIGhlcmU6CisgICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxv
Y2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAg
ICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29k
ZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgorICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0
IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwg
dGhpcyBDb2RlQmxvY2suCisgICAgCisgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgdGhlIE9TUi1l
eGl0LW9uLXJldHVybiBwYXJ0LCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dAor
ICAgIC8vIHdoZXRoZXIgdGhlIGludmFsaWRhdGlvbiBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAg
ICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCk7CisgICAgCisgICAgLy8gTm93
IHRha2UgY2FyZSBvZiB0aGUgZW50cnlwb2ludC4KKyAgICBpZiAodGhpcyAhPSByZXBsYWNlbWVu
dCgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGFodCBJJ3ZlIGFscmVhZHkgYmVlbiBqZXR0
aXNvbmVkLgorICAgICAgICByZXR1cm47CisgICAgfQogICAgIGFsdGVybmF0aXZlKCktPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAgICAgaWYg
KERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDYgQEAKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVy
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5jbHVkZSAiTExJbnRD
YWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbCgpCit7CisgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnRfaAorI2RlZmluZSBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnRfaAorCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworCitjbGFzcyBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJsaWM6CisgICAgQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50KCkKKyAgICAgICAgOiBtX2NvZGVCbG9jaygwKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KENvZGVCbG9j
ayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7Cisg
ICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2lu
ZC5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGl0S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDggQEAgY29uc3QgY2hh
ciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQogICAgICAgICByZXR1cm4gIlVuY291bnRh
YmxlIjsKICAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hwb2ludDoKICAgICAgICAgcmV0dXJuICJV
bmNvdW50YWJsZVdhdGNocG9pbnQiOworICAgIGNhc2UgVW5jb3VudGFibGVJbnZhbGlkYXRpb246
CisgICAgICAgIHJldHVybiAiVW5jb3VudGFibGVJbnZhbGlkYXRpb24iOwogICAgIGNhc2UgV2F0
Y2hkb2dUaW1lckZpcmVkOgogICAgICAgICByZXR1cm4gIldhdGNoZG9nVGltZXJGaXJlZCI7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJl
dmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2lu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIGVudW0gRXhpdEtpbmQgewogICAg
IEFyZ3VtZW50c0VzY2FwZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFyZ3VtZW50cyBlc2NhcGVk
IGJ1dCB3ZSBkaWRuJ3QgZXhwZWN0IHRoZW0gdG8uCiAgICAgTm90U3RyaW5nT2JqZWN0LCAvLyBX
ZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBhdHRlbXB0ZWQgdG8gb3B0aW1pemUg
c3RyaW5nIG9iamVjdCBhY2Nlc3MuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KKyAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgVW5jb3VudGFi
bGVXYXRjaHBvaW50LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBvZiBhIHdhdGNocG9pbnQsIHdoaWNo
IGlzbid0IGNvdW50ZWQgYmVjYXVzZSB3YXRjaHBvaW50cyBkbyB0cmFja2luZyB0aGVtc2VsdmVz
LgogICAgIFdhdGNoZG9nVGltZXJGaXJlZCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRv
IHNlcnZpY2UgdGhlIHdhdGNoZG9nIHRpbWVyLgogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKKworI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit2b2lkIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Ojpm
aXJlSW50ZXJuYWwoKQoreworICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soCisgICAgICAgIG1fY29kZU9yaWdpbiwgbV9jb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpKS0+YWRkRnJlcXVlbnRFeGl0U2l0ZSgKKyAgICAgICAgICAgIERGRzo6RnJlcXVl
bnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9leGl0S2luZCkpOworICAg
IAorICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUHJvZmlsaW5nQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKyNkZWZpbmUgUHJv
ZmlsaW5nQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKworI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKKyNpbmNsdWRlICJFeGl0S2luZC5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgUHJvZmlsZWRD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CitwdWJs
aWM6CisgICAgUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoKQorICAgICAg
ICA6IG1fZXhpdEtpbmQoRXhpdEtpbmRVbnNldCkKKyAgICAgICAgLCBtX2NvZGVCbG9jaygwKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQs
IENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQorICAgICAgICAsIG1fZXhpdEtpbmQoZXhpdEtpbmQpCisgICAgICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGZpcmVJbnRlcm5hbCgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOworICAgIEV4aXRLaW5kIG1fZXhpdEtpbmQ7CisgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvZmls
aW5nQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw2ICs3MSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhSZWdFeHBTdGF0ZSkgXAogICAgIG1hY3JvKEludGVybmFsU3RhdGUpIFwKICAgICBtYWNy
byhBYnNvbHV0ZSkgXAorICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8gaW5kaWNh
dGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMgbmV2ZXIg
ZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5vZGUgY2xv
YmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3JpdGUgd29y
bGQgdG8gY2xvYmJlciBpdC4gKi9cCisgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBcCiAgICAg
LyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUg
d29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLiAq
L1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRoaXMgZm9yIHdyaXRlcyBv
bmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5vZGUgaXMgaW52YWxpZC4g
VGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5nIHRoYXQgaGFzIGFueSBz
aWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzNSw2ICsxNTM1LDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJl
dmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIGJvb2wgZG9lc1dyaXRlcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9
CiAKK2Jvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0
SGVhcCBoZWFwKQoreworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQWJzdHJhY3RI
ZWFwT3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwg
YWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24g
MTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgorICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjY5LDYgKzY3MCwzMCBAQCBwcml2YXRlOgogCiBib29sIGRvZXNXcml0ZXMoR3Jh
cGgmLCBOb2RlKik7CiAKK2NsYXNzIEFic3RyYWN0SGVhcE92ZXJsYXBzIHsKK3B1YmxpYzoKKyAg
ICBBYnN0cmFjdEhlYXBPdmVybGFwcyhBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICAgICAgLCBtX3Jlc3VsdChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJIZWFwKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Jlc3VsdCA9
IG1faGVhcC5vdmVybGFwcyhvdGhlckhlYXApOworICAgIH0KKyAgICAKKyAgICBib29sIHJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CisKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RI
ZWFwIG1faGVhcDsKKyAgICBib29sIG1fcmVzdWx0OworfTsKKworYm9vbCB3cml0ZXNPdmVybGFw
KEdyYXBoJiwgTm9kZSosIEFic3RyYWN0SGVhcCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw2ICs2MiwxNSBAQCB2b2lkIENvbW1vbkRhdGE6OnNocmlua1RvRml0KCkKICAgICB0cmFuc2l0
aW9ucy5zaHJpbmtUb0ZpdCgpOwogfQogCit2b2lkIENvbW1vbkRhdGE6OmludmFsaWRhdGUoKQor
eworICAgIGlmICghaXNTdGlsbFZhbGlkKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNp
Z25lZCBpID0ganVtcFJlcGxhY2VtZW50cy5zaXplKCk7IGktLTspCisgICAgICAgIGp1bXBSZXBs
YWNlbWVudHNbaV0uZmlyZSgpOworICAgIGlzU3RpbGxWYWxpZCA9IGZhbHNlOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxNTgx
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsOCArMzAsMTEgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5j
bHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiREZHSnVt
cFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiU3lt
Ym9sVGFibGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTY5LDEzICs3Miwx
NiBAQCBjbGFzcyBDb21tb25EYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25E
YXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKLSAgICAgICAgOiBtYWNoaW5lQ2FwdHVy
ZVN0YXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIDogaXNTdGls
bFZhbGlkKHRydWUpCisgICAgICAgICwgbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQogICAgIHsgfQogICAgIAogICAgIHZvaWQgbm90aWZ5Q29tcGls
aW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiwgQ29kZUJsb2NrKiwgTm9kZSopOwogICAgIHVu
c2lnbmVkIGFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKTsKICAgICAKICAgICB2
b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKICAgICBP
d25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBpbmxpbmVDYWxsRnJhbWVzOwogICAgIFZlY3RvcjxD
b2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gY29kZU9yaWdpbnM7CkBAIC04Mywx
MCArODksMTQgQEAgcHVibGljOgogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBkZmdJZGVudGlmaWVy
czsKICAgICBWZWN0b3I8V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CisgICAgU2VnbWVu
dGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hwb2lu
dHM7CisgICAgU2VnbWVudGVkVmVjdG9yPFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LCAxLCAwPiBwcm9maWxlZFdhdGNocG9pbnRzOworICAgIFZlY3RvcjxKdW1wUmVwbGFj
ZW1lbnQ+IGp1bXBSZXBsYWNlbWVudHM7CiAgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21w
aWxhdGlvbj4gY29tcGlsYXRpb247CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8v
IEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJhbnNpdGlv
bnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCisg
ICAgYm9vbCBpc1N0aWxsVmFsaWQ7CiAgICAgCiAgICAgaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQ7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMCArMzMsMzAg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogRGVzaXJlZFdhdGNocG9pbnRzOjpE
ZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRj
aHBvaW50cygpIHsgfQogCi12b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgRGVzaXJlZFdhdGNo
cG9pbnRzOjphZGRMYXppbHkoV2F0Y2hwb2ludFNldCogc2V0KQogewotICAgIG1fc2V0cy5hZGRM
YXppbHkoV2F0Y2hwb2ludEZvcldhdGNocG9pbnRTZXQod2F0Y2hwb2ludCwgc2V0KSk7CisgICAg
bV9zZXRzLmFkZExhemlseShzZXQpOwogfQogCi12b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KFdhdGNocG9pbnQqIHdhdGNocG9pbnQsIElubGluZVdhdGNocG9pbnRTZXQmIHNldCkK
K3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYg
c2V0KQogewotICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoV2F0Y2hwb2ludEZvcklubGluZVdh
dGNocG9pbnRTZXQod2F0Y2hwb2ludCwgJnNldCkpOworICAgIG1faW5saW5lU2V0cy5hZGRMYXpp
bHkoJnNldCk7CiB9CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoKQordm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4
aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7Ci0gICAgbV9zZXRzLnJlYWxs
eUFkZCgpOwotICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoKTsKKyAgICBtX3NldHMuYWRkTGF6
aWx5KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCBzZXQpOworfQorCit2b2lkIERlc2lyZWRXYXRjaHBv
aW50czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQs
IElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKK3sKKyAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5
KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCAmc2V0KTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0YSYgY29tbW9uRGF0
YSkKK3sKKyAgICBtX3NldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAg
bV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29s
IERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlz
aW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDExIEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdDb21tb25E
YXRhLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQwLDI0ICs0MywyNCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlw
ZT4KIHN0cnVjdCBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQgewogICAgIFdhdGNo
cG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCgpCi0gICAgICAgIDogbV93YXRjaHBvaW50KDAp
CisgICAgICAgIDogbV9leGl0S2luZChFeGl0S2luZFVuc2V0KQogICAgICAgICAsIG1fc2V0KDAp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRT
ZXQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICAg
ICAgOiBtX3dhdGNocG9pbnQod2F0Y2hwb2ludCkKKyAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dh
dGNocG9pbnRTZXQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhp
dEtpbmQsIFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisgICAgICAgIDogbV9jb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCisgICAgICAgICwgbV9leGl0S2luZChleGl0S2luZCkKICAgICAgICAgLCBtX3Nl
dChzZXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBXYXRjaHBvaW50KiBtX3dhdGNocG9pbnQ7
CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgRXhpdEtpbmQgbV9leGl0S2luZDsK
ICAgICBXYXRjaHBvaW50U2V0VHlwZSogbV9zZXQ7CiB9OwogCi10eXBlZGVmIFdhdGNocG9pbnRG
b3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0PiBXYXRjaHBvaW50Rm9yV2F0Y2hw
b2ludFNldDsKLXR5cGVkZWYgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PElubGlu
ZVdhdGNocG9pbnRTZXQ+IFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0OwotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZT4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHMpOwpAQCAtNzAsMjUgKzczLDUzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNl
dDxXYXRjaHBvaW50U2V0VHlwZT4mIHdhdGNocG9pbnQpCisgICAgdm9pZCBhZGRMYXppbHkoV2F0
Y2hwb2ludFNldFR5cGUqIHNldCkKKyAgICB7CisgICAgICAgIG1fc2V0cy5hZGQoc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0
S2luZCBleGl0S2luZCwgV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKICAgICB7Ci0gICAgICAgIG1f
d2F0Y2hwb2ludHMuYXBwZW5kKHdhdGNocG9pbnQpOworICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hw
b2ludHMuYXBwZW5kKAorICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKCkKKyAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3dh
dGNocG9pbnRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1fd2F0Y2hwb2ludHNbaV0ubV9z
ZXQtPmFkZChtX3dhdGNocG9pbnRzW2ldLm1fd2F0Y2hwb2ludCk7CisgICAgICAgIAorICAgICAg
ICB0eXBlbmFtZSBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3NldHMuYmVnaW4oKTsKKyAgICAgICAgdHlwZW5hbWUgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlw
ZSo+OjppdGVyYXRvciBlbmQgPSBtX3NldHMuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBjb21tb24ud2F0Y2hwb2ludHMuYXBwZW5kKENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgICgq
aXRlciktPmFkZCgmY29tbW9uLndhdGNocG9pbnRzLmxhc3QoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHJvZmlsZWRXYXRjaHBvaW50cy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNl
dDxXYXRjaHBvaW50U2V0VHlwZT4gd2F0Y2hwb2ludCA9CisgICAgICAgICAgICAgICAgbV9wcm9m
aWxlZFdhdGNocG9pbnRzW2ldOworICAgICAgICAgICAgY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2lu
dHMuYXBwZW5kKAorICAgICAgICAgICAgICAgIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50KHdhdGNocG9pbnQubV9jb2RlT3JpZ2luLCB3YXRjaHBvaW50Lm1fZXhpdEtpbmQs
IGNvZGVCbG9jaykpOworICAgICAgICAgICAgd2F0Y2hwb2ludC5tX3NldC0+YWRkKCZjb21tb24u
cHJvZmlsZWRXYXRjaHBvaW50cy5sYXN0KCkpOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZh
bGlkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fd2F0Y2hwb2lu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV93YXRjaHBvaW50c1tpXS5tX3Nl
dC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHR5cGVuYW1lIEhhc2hTZXQ8V2F0Y2hw
b2ludFNldFR5cGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0cy5iZWdpbigpOworICAgICAgICB0
eXBlbmFtZSBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0
cy5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICgoKml0ZXIpLT5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fcHJvZmlsZWRXYXRjaHBvaW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlm
IChtX3Byb2ZpbGVkV2F0Y2hwb2ludHNbaV0ubV9zZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTI2LDcgKzE1Nyw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hw
b2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fd2F0Y2hwb2ludHM7CisgICAgVmVjdG9yPFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJv
ZmlsZWRXYXRjaHBvaW50czsKKyAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRz
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBTdGF0ZU1hcCBtX2ZpcnN0S25vd25TdGF0ZTsK
ICNlbmRpZgpAQCAtMTM4LDEwICsxNzAsMTIgQEAgcHVibGljOgogICAgIERlc2lyZWRXYXRjaHBv
aW50cygpOwogICAgIH5EZXNpcmVkV2F0Y2hwb2ludHMoKTsKICAgICAKLSAgICB2b2lkIGFkZExh
emlseShXYXRjaHBvaW50KiwgV2F0Y2hwb2ludFNldCopOwotICAgIHZvaWQgYWRkTGF6aWx5KFdh
dGNocG9pbnQqLCBJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgdm9pZCBhZGRMYXppbHkoV2F0
Y2hwb2ludFNldCopOworICAgIHZvaWQgYWRkTGF6aWx5KElubGluZVdhdGNocG9pbnRTZXQmKTsK
KyAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwgV2F0Y2hwb2ludFNldCop
OworICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4sIEV4aXRLaW5kLCBJbmxpbmVXYXRjaHBv
aW50U2V0Jik7CiAgICAgCi0gICAgdm9pZCByZWFsbHlBZGQoKTsKKyAgICB2b2lkIHJlYWxseUFk
ZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlk
KCkgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw2ICs4ODUsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIGNh
c2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CisgICAgICAgIGNh
c2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
dmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAgIEludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiaW52YWxp
ZGF0aW9uIHBvaW50IGluamVjdGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIEJpdFZlY3RvciBi
bG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKKyAgICAgICAgCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKKyAgICAgICAgICAgICAg
ICBoYW5kbGUobm9kZUluZGV4LCBibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1
cnMgYXQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KKyAgICAgICAgICAgIGlmICht
X29yaWdpblRoYXRIYWRGaXJlLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgICAg
ICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3Nvcihp
KS0+aW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9p
bnRzLmdldChibG9ja0luZGV4KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0
KDApKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBoYW5kbGUodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fb3JpZ2luVGhhdEhhZEZpcmUuaXNTZXQoKSAmJiBtX29yaWdpblRoYXRIYWRG
aXJlICE9IG5vZGUtPmNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgIGluc2VydEludmFsaWRhdGlv
bkNoZWNrKG5vZGVJbmRleCwgbm9kZSk7CisgICAgICAgICAgICBtX29yaWdpblRoYXRIYWRGaXJl
ID0gQ29kZU9yaWdpbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVz
T3ZlcmxhcChtX2dyYXBoLCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQorICAgICAgICAgICAgbV9v
cmlnaW5UaGF0SGFkRmlyZSA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgfQorICAgIAorICAgIHZv
aWQgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2sodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBJbnZhbGlkYXRpb25Qb2ludCwgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAg
IAorICAgIENvZGVPcmlnaW4gbV9vcmlnaW5UaGF0SGFkRmlyZTsKKyAgICBJbnNlcnRpb25TZXQg
bV9pbnNlcnRpb25TZXQ7Cit9OworCitib29sIHBlcmZvcm1JbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBJbnZhbGlkYXRpb24gUG9pbnQgSW5qZWN0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPEludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rp
b25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2VfaAorI2RlZmluZSBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMg
YW4gaW52YWxpZGF0aW9uIGNoZWNrIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IENvZGVPcmlnaW4g
dGhhdCBmb2xsb3dzIGEgQ29kZU9yaWdpbgorLy8gdGhhdCBoYWQgYSBjYWxsIChjbG9iYmVyZWQg
V29ybGQpLgorCitib29sIHBlcmZvcm1JbnZhbGlkYXRpb25Qb2ludEluamVjdGlvbihHcmFwaCYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTU4MTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgi
CiAjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNp
bmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1NlZ21l
bnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC04OCwx
MyArODcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAot
ICAgIHVuc2lnbmVkIGFwcGVuZFdhdGNocG9pbnQoY29uc3QgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCYgd2F0Y2hwb2ludCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IHdhdGNo
cG9pbnRzLnNpemUoKTsKLSAgICAgICAgd2F0Y2hwb2ludHMuYXBwZW5kKHdhdGNocG9pbnQpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKICAgICB2b2lkIHJlY29uc3RydWN0
KAogICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCk7CiAgICAgCkBAIC0xMjcsNyArMTE5LDYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gb3NyRW50cnk7CiAgICAg
U2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICBWZWN0b3I8REZH
OjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxhdGlvblJlY292ZXJ5OwotICAgIFNlZ21lbnRl
ZFZlY3RvcjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKICAg
ICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6
Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
T1NSRXhpdHMoKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5v
c3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZv
JiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICAgICAgVmVjdG9yPExh
YmVsPiBsYWJlbHM7Ci0gICAgICAgICAgICBpZiAoaW5mby5tX3dhdGNocG9pbnRJbmRleCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgICAgIGlmICgh
aW5mby5tX2ZhaWx1cmVKdW1wcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGluZm8ubV9mYWlsdXJlSnVtcHMuanVtcHMoKS5zaXplKCk7ICsraikK
ICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChpbmZvLm1fZmFpbHVyZUp1bXBzLmp1
bXBzKClbal0ubGFiZWwoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBs
YWJlbHMuYXBwZW5kKG1faml0Q29kZS0+d2F0Y2hwb2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRl
eF0uc291cmNlTGFiZWwoKSk7CisgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChpbmZvLm1f
cmVwbGFjZW1lbnRTb3VyY2UpOwogICAgICAgICAgICAgbV9leGl0U2l0ZUxhYmVscy5hcHBlbmQo
bGFiZWxzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc5LDExICs3OSwxMCBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXRDb2Rl
LT5vc3JFeGl0W2ldOwogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9l
eGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0g
aW5mby5tX2ZhaWx1cmVKdW1wczsKLSAgICAgICAgQVNTRVJUKGZhaWx1cmVKdW1wcy5lbXB0eSgp
ID09IChpbmZvLm1fd2F0Y2hwb2ludEluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkpOwotICAgICAgICBpZiAoaW5mby5tX3dhdGNocG9pbnRJbmRleCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIGlmICghZmFpbHVyZUp1
bXBzLmVtcHR5KCkpCiAgICAgICAgICAgICBmYWlsdXJlSnVtcHMubGluayh0aGlzKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9qaXRDb2RlLT53YXRjaHBvaW50c1tpbmZvLm1fd2F0Y2hw
b2ludEluZGV4XS5zZXREZXN0aW5hdGlvbihsYWJlbCgpKTsKKyAgICAgICAgICAgIGluZm8ubV9y
ZXBsYWNlbWVudERlc3RpbmF0aW9uID0gbGFiZWwoKTsKICAgICAgICAgaml0QXNzZXJ0SGFzVmFs
aWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLT5v
c3JFeGl0SW5kZXgpOwogICAgICAgICBleGl0LnNldFBhdGNoYWJsZUNvZGVPZmZzZXQocGF0Y2hh
YmxlSnVtcCgpKTsKQEAgLTI1Nyw4ICsyNTYsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhM
aW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0g
bV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhpdC5n
ZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCksIHRhcmdldCk7CiAgICAgICAgIGV4aXQuY29y
cmVjdEp1bXAobGlua0J1ZmZlcik7Ci0gICAgICAgIGlmIChpbmZvLm1fd2F0Y2hwb2ludEluZGV4
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgICAgIG1f
aml0Q29kZS0+d2F0Y2hwb2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRleF0uY29ycmVjdExhYmVs
cyhsaW5rQnVmZmVyKTsKKyAgICAgICAgaWYgKGluZm8ubV9mYWlsdXJlSnVtcHMuZW1wdHkoKSkg
eworICAgICAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQo
SnVtcFJlcGxhY2VtZW50KAorICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UpLAorICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZihpbmZvLm1fcmVwbGFjZW1lbnREZXN0aW5hdGlvbikpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTgxNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiwxNSArMTE2LDYgQEAgcHVibGljOgogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJv
cGVydGllcy4KICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCi0g
ICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0Y2hwb2ludFNldCog
c2V0KQotICAgIHsKLSAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRj
aHBvaW50LCBzZXQpOwotICAgIH0KLSAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50KiB3YXRj
aHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi0gICAgewotICAgICAgICBtX2dyYXBo
LndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7Ci0gICAgfQotICAgIAog
ICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxlci4KICAgICB2
b2lkIHNldFN0YXJ0T2ZDb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVu
dC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIEp1bXBSZXBsYWNlbWVudDo6ZmlyZSgpCit7CisgICAgaWYgKE9wdGlvbnM6OnNo
b3dEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nRigiRmlyaW5nIGp1bXAgcmVwbGFjZW1l
bnQgd2F0Y2hwb2ludCBmcm9tICVwLCB0byAlcC5cbiIsIG1fc291cmNlLmRhdGFMb2NhdGlvbigp
LCBtX2Rlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKG1fc291cmNlLCBtX2Rlc3RpbmF0aW9uKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0p1bXBSZXBsYWNlbWVudF9oCisjZGVmaW5l
IERGR0p1bXBSZXBsYWNlbWVudF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkNvZGVMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEp1bXBSZXBsYWNlbWVudCB7CitwdWJsaWM6CisgICAgSnVtcFJlcGxhY2VtZW50KENvZGVM
b2NhdGlvbkxhYmVsIHNvdXJjZSwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
ICAgIDogbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRp
b24pCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpcmUoKTsKKworcHJpdmF0ZToKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBtX3NvdXJjZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rl
c3RpbmF0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdKdW1wUmVwbGFjZW1lbnRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTgxNjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDcgKzg5LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhHZXRMb2NhbFVubGlua2VkLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyog
TWFya2VyIGZvciBhbiBhcmd1bWVudCBiZWluZyBzZXQgYXQgdGhlIHByb2xvZ3VlIG9mIGEgZnVu
Y3Rpb24uICovXAotICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBc
CisgICAgbWFjcm8oU2V0QXJndW1lbnQsIE5vZGVEb2VzTm90RXhpdCkgXAorICAgIFwKKyAgICAv
KiBNYXJrZXIgb2YgbG9jYXRpb24gaW4gdGhlIElSIHdoZXJlIHdlIG1heSBwb3NzaWJseSBwZXJm
b3JtIGp1bXAgcmVwbGFjZW1lbnQgdG8gKi9cCisgICAgLyogaW52YWxpZGF0ZSB0aGlzIGNvZGUg
YmxvY2suICovXAorICAgIG1hY3JvKEludmFsaWRhdGlvblBvaW50LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAg
IG1hY3JvKEJpdEFuZCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyAr
MzcsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBzdHJ1Y3QgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAg
IDogbV93YXRjaHBvaW50SW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KQotICAgIHsKLSAgICB9Ci0gICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFp
bHVyZUp1bXBzOwotICAgIHVuc2lnbmVkIG1fd2F0Y2hwb2ludEluZGV4OworICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3JlcGxhY2VtZW50U291cmNlOworICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3JlcGxhY2VtZW50RGVzdGluYXRpb247CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9u
IDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIu
aCIKICNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0ZpeHVwUGhhc2UuaCIKKyNpbmNsdWRlICJERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdMSUNN
UGhhc2UuaCIKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKQEAgLTU2LDYg
KzU3LDcgQEAKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
VmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
T3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgpAQCAtMTg3LDYgKzE4OSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZn
KTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZp
eHVwKGRmZyk7CisgICAgcGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKGRmZyk7CiAg
ICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgCiAgICAgdW5zaWduZWQgY291
bnQgPSAxOwpAQCAtMjI4LDcgKzIzMSwyNCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBERkdNb2RlOiB7CiAg
ICAgICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihkZmcpOwotICAgICAgICBicmVhazsK
KworICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybURD
RShkZmcpOworICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKKyAgICAgICAgcGVyZm9y
bVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybVdhdGNocG9p
bnRDb2xsZWN0aW9uKGRmZyk7CisgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFw
aCBhZnRlciBvcHRpbWl6YXRpb246Iik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlciBk
YXRhRmxvd0pJVChkZmcpOworICAgICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkgeworICAgICAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKCk7
CisgICAgICAgICAgICBkYXRhRmxvd0pJVC5saW5rRnVuY3Rpb24oKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGUoKTsKKyAgICAgICAgICAgIGRhdGFG
bG93SklULmxpbmsoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIERGR1Bh
dGg7CiAgICAgfQogICAgIAogICAgIGNhc2UgRlRMTW9kZToKQEAgLTI1Myw2ICsyNzMsNyBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlz
aXMoZGZnKTsKICAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7Cisg
ICAgICAgIHBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbihkZmcpOwogICAgICAgICAKICAgICAg
ICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmlu
ZzoiKTsKICAgICAgICAgCkBAIC0yODAsMzEgKzMwMSwxNCBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHJldHVybiBGVExQYXRoOwogI2Vsc2UKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBGYWlsUGF0aDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICB9CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKLSAgICBwZXJmb3JtRENFKGRmZyk7Ci0gICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRm
Zyk7Ci0gICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKLSAgICBkdW1w
QW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwotCi0gICAg
SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKLSAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rp
b24oKTsKLSAgICAgICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9uKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZSgpOwotICAgICAgICBkYXRhRmxvd0pJVC5saW5r
KCk7CisgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIERG
R1BhdGg7CiB9CiAKIGJvb2wgUGxhbjo6aXNTdGlsbFZhbGlkKCkKQEAgLTMxNSw3ICszMTksNyBA
QCBib29sIFBsYW46OmlzU3RpbGxWYWxpZCgpCiAKIHZvaWQgUGxhbjo6cmVhbGx5QWRkKENvbW1v
bkRhdGEqIGNvbW1vbkRhdGEpCiB7Ci0gICAgd2F0Y2hwb2ludHMucmVhbGx5QWRkKCk7CisgICAg
d2F0Y2hwb2ludHMucmVhbGx5QWRkKGNvZGVCbG9jay5nZXQoKSwgKmNvbW1vbkRhdGEpOwogICAg
IGlkZW50aWZpZXJzLnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7CiAgICAgd2Vha1JlZmVyZW5j
ZXMucmVhbGx5QWRkKHZtLCBjb21tb25EYXRhKTsKICAgICB0cmFuc2l0aW9ucy5yZWFsbHlBZGQo
dm0sIGNvbW1vbkRhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1
ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIsNyArNTEyLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OgogICAgICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46Ci0gICAgICAgIGNhc2UgQ2hlY2tU
aWVyVXBBbmRPU1JFbnRlcjogeworICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6
CisgICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMg
bm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9u
LiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93
cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw3IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
SW50NTJUb0RvdWJsZToKICAgICBjYXNlIEludDUyVG9WYWx1ZToKKyAgICBjYXNlIEludmFsaWRh
dGlvblBvaW50OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRC
eVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDggKzI2
NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBub3RDZWxsID0g
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwotCiAgICAgICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8g
VHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwogICAgICAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgIH0gZWxzZSB7CkBA
IC0zMzEsOCArMzI5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVw
aAogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgICAg
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFy
Z0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKIAotICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAogICAgICAgICBq
dW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwpAQCAtMTUxOSw3
ICsxNTE1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAKICAgICBpZiAobWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzcGVjdWxh
dGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19U
WVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTU5Myw3ICsxNTg4LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIH0KIAogICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIHNwZWN1bGF0
aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIp
LCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTYyMCw3ICsxNjE0LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhh
dCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlm
IChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTY5OCw3ICsxNjkxLDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIH0KIAogICAgIGlmIChtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBs
ZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTcyNSw3ICsxNzE3LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3
aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIHNwZWN1bGF0
aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAo
flNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTg3Miw3ICsxODYzLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBv
aW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygK
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkg
fCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLApAQCAtMjAxNiw4ICsyMDA2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hw
b2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKLQogICAgICAgICBERkdfVFlQRV9DSEVD
SygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKQEAgLTI3MzgsMTcgKzI3MjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
PmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKQEAgLTM1MjQsMTAgKzM1MDEs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBO
ZXdBcnJheTogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGlmICgh
Z2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FycmF5U3RvcmFnZShub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9i
YWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09
IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgKQEAgLTM2OTksMTAg
KzM2NzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsK
ICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJy
YXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgbV9qaXQuYWRk
TGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCkpOwotICAg
ICAgICAgICAgCiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgc2l6ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC0zNzc0LDEw
ICszNzQzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpIHsK
LSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgbnVt
RWxlbWVudHMgPSBub2RlLT5udW1Db25zdGFudHMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTM5MjAsOSArMzg4NSw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OiB7Ci0gICAgICAgIG1faml0LmFkZExh
emlseSgKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAg
anNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+YWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50U2V0KCkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNDE5NSwxMCArNDE1Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVhZHkuCiAgICAgICAg
IAogICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50
KAotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50
ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFkQ2FjaGVXYXRjaHBvaW50KSwK
LSAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTQzNjgsMTAgKzQzMjYsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHbG9i
YWxWYXJXYXRjaHBvaW50OiB7Ci0gICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1faml0Lmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAotICAg
ICAgICAgICAgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSkp
LndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpLCBzZXQpOwotICAgICAgICAKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CkBAIC00Mzg4LDkgKzQzNDIsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBWYXJJbmplY3Rp
b25XYXRjaHBvaW50OiB7Ci0gICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpOwot
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNldCk7Ci0g
ICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNDQyNiw3ICs0Mzc3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBpc0NlbGwubGluaygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgICAgICBpZiAobWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtNDk1OCw2ICs0OTA4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0
ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICBlbWl0SW52YWxpZGF0
aW9uUG9pbnQobm9kZSk7CisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1dhdGNoZG9n
VGltZXI6CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU4MTY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMCwyNiArMjAwLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXgKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKLUp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqIG5vZGUpCiB7CiAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOworICAgICAgICByZXR1cm47CisgICAg
QVNTRVJUKG1fY2FuRXhpdCk7CisgICAgQVNTRVJUKG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0g
QmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9
IG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAgICBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdCgKLSAgICAgICAga2luZCwganNWYWx1
ZVNvdXJjZSwKKyAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEpTVmFsdWVTb3VyY2Uo
KSwKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KG5vZGUpLAogICAgICAgICB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7Ci0gICAgaW5mby5tX3dh
dGNocG9pbnRJbmRleCA9IG1faml0LmppdENvZGUoKS0+YXBwZW5kV2F0Y2hwb2ludCgKLSAgICAg
ICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludChtX2ppdC53YXRjaHBvaW50TGFiZWwoKSkpOwot
ICAgIGlmIChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAg
ICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci0gICAgcmV0dXJuICZtX2ppdC5q
aXRDb2RlKCktPndhdGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdOwotfQotCi1KdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBv
aW50KEV4aXRLaW5kIGtpbmQpCi17Ci0gICAgcmV0dXJuIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChr
aW5kLCBKU1ZhbHVlU291cmNlKCksIDApOworICAgIGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZSA9
IG1faml0LndhdGNocG9pbnRMYWJlbCgpOworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVS
ZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKQEAgLTEzNTMsOCArMTM0Niw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdw
cigpOwogICAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3Rp
bGxWYWxpZCgpKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQoKTsKLQogICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCkBAIC0yMDA0LDE4ICsxOTk1LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIH0KICNlbmRpZgogCi0gICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pOwotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2Fu
ZSgpKSB7Ci0gICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJp
bmdQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwot
ICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAg
fQotICAgIH0KLQogICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYWxyZWFkeUNo
ZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KSkpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBu
ZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODQsMjAgKzI4NCwxMCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dElzU3RpbGxWYWxpZChjb2RlT3JpZ2luKTsKICAgICB9Ci0gICAgdm9pZCBzcGVjdWxhdGlvbldh
dGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4pCi0gICAgewotICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsK
LSAgICB9CiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxW
YWxpZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgfQotICAg
IHZvaWQgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpCi0g
ICAgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIH0KIAogICAgIHZvaWQgd3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmll
cihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQ
UlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IElu
dmFsaWRHUFJSZWcpOwpAQCAtMjEzMSwxNiArMjEyMSw4IEBAIHB1YmxpYzoKICAgICAvLyBBZGQg
YSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBi
YWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
Jik7CiAgICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVT
b3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1
bGF0aW9uUmVjb3ZlcnkmKTsKLSAgICAvLyBVc2UgdGhpcyBsaWtlIHlvdSB3b3VsZCB1c2Ugc3Bl
Y3VsYXRpb25DaGVjaygpLCBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgcGFzcyBpdCBhIGp1bXAKLSAg
ICAvLyAoYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIGEgYnJhbmNoOyB0aGF0J3Mg
a2luZCBvZiB0aGUgd2hvbGUgcG9pbnQpLCBhbmQgeW91Ci0gICAgLy8gbXVzdCByZWdpc3RlciB0
aGUgcmV0dXJuZWQgV2F0Y2hwb2ludCB3aXRoIHNvbWV0aGluZyByZWxldmFudC4gSW4gZ2VuZXJh
bCwgdGhpcyBzaG91bGQKLSAgICAvLyBiZSB1c2VkIHdpdGggZXh0cmVtZSBjYXJlLiBVc2Ugc3Bl
Y3VsYXRpb25DaGVjaygpIHVubGVzcyB5b3UndmUgZ290IGFuIGFtYXppbmcgcmVhc29uCi0gICAg
Ly8gbm90IHRvLgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0
Y2hwb2ludChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwotICAgIC8vIFRoZSBkZWZh
dWx0IGZvciBzcGVjdWxhdGlvbiB3YXRjaHBvaW50cyBpcyB0aGF0IHRoZXkncmUgdW5jb3VudGVk
LCBiZWNhdXNlIHRoZQotICAgIC8vIGFjdCBvZiBmaXJpbmcgYSB3YXRjaHBvaW50IGludmFsaWRh
dGVzIGl0LiBTbywgZnV0dXJlIHJlY29tcGlsYXRpb25zIHdpbGwgbm90Ci0gICAgLy8gYXR0ZW1w
dCB0byBzZXQgdGhpcyB3YXRjaHBvaW50IGFnYWluLgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hw
b2ludCk7CisgICAgCisgICAgdm9pZCBlbWl0SW52YWxpZGF0aW9uUG9pbnQoTm9kZSopOwogICAg
IAogICAgIC8vIEl0IGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBub3QgdXNlIHRoaXMgZGly
ZWN0bHkuCiAgICAgdm9pZCBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVS
ZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwpAQCAtMzAyMiwxOCArMzAwNCwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiB7CiAgICAgU3RydWN0dXJlKiBz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwotICAgIFN0
cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgQVNTRVJUKG1f
aml0LmdyYXBoKCkud2F0Y2hwb2ludHMoKS5pc1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVT
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKICAgICAKLSAgICBpZiAoIW1f
c3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0
cnVjdHVyZVNldChtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSkpIHsKKyAgICBpZiAoIW1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAg
ICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
c3RydWN0dXJlTG9jYXRpb24sIFRydXN0ZWRJbW1QdHIoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkp
OwogICAgIH0KLSAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hw
b2ludChOb3RTdHJpbmdPYmplY3QpLAotICAgICAgICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwogfQogCiAjZGVmaW5lIERGR19UWVBFX0NIRUNL
KHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKSBkbyB7IFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xs
ZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQXJyYXlQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaHBvaW50Q29sbGVj
dGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ3YXRjaHBvaW50IGNvbGxlY3Rp
b24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIG1fbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGhhbmRsZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGUoKQorICAgIHsKKyAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCBoYW5kbGVFZGdlKTsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQ29tcGFyZUVx
Q29uc3RhbnQ6CisgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgICAgICAgICBoYW5kbGVN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgfHwgKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAgICAgICAgIHx8IChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG1fbm9kZS0+Y2hpbGQyKCkudXNlS2lu
ZCgpID09IE9iamVjdFVzZSkpCisgICAgICAgICAgICAgICAgaGFuZGxlTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAgICAg
ICAgIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBpZiAobV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQorICAgICAgICAgICAgICAg
ICYmIG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAg
IGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgICAgIGFkZExhemlseShn
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAg
ICAgICAgICAgICAgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICAgICAgaGFu
ZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAg
ICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0
KCktPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpKQorICAgICAgICAgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+aGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgICAg
ICBhZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKKyAgICAgICAgICAgICAg
ICBtX25vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKS0+
b3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCA6
IEJhZENhY2hlV2F0Y2hwb2ludCwKKyAgICAgICAgICAgICAgICBtX25vZGUtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGFk
ZExhemlseSgKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QoKS0+c3ltYm9sVGFibGUoKS0+
Z2V0KAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKV0pLndhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9p
bnQ6CisgICAgICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldh
dGNocG9pbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBoYW5kbGVFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAg
ICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOiB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdCgpLT5zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJl
ID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC53YXRjaHBvaW50cygpLmlzVmFs
aWRPck1peGVkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdpbiwgTm90U3RyaW5n
T2JqZWN0LAorICAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnRJc1N0aWxsVmFsaWQobV9ub2RlLT5jb2RlT3JpZ2luKSkKKyAgICAgICAgICAgIGFkZExhemls
eShnbG9iYWxPYmplY3QoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlQ2hh
aW5Jc1NhbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYWRkTGF6aWx5KGdsb2Jh
bE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0KCkpOworICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPm9iamVjdFBy
b3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAg
fQorCisgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludFNldCogc2V0KQorICAgIHsKKyAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOworICAgIH0KKyAgICB2b2lk
IGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2dy
YXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CisgICAgfQorICAgIAorICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIG1fbm9kZTsKK307CisKK2Jvb2wgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFdhdGNo
cG9pbnQgQ29sbGVjdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaHBvaW50
Q29sbGVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxl
Y3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXYXRjaHBvaW50
Q29sbGVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb2xs
ZWN0cyBhbGwgZGVzaXJlZCB3YXRjaHBvaW50cyBpbnRvIHRoZSBHcmFwaDo6d2F0Y2hwb2ludHMo
KSBkYXRhIHN0cnVjdHVyZS4KKworYm9vbCBwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkp1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5j
bHVkZSAiT3B0aW9ucy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50Ojpjb3JyZWN0TGFiZWxzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi17Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsOwotICAgIGxhYmVsLm1fbGFiZWwubV9vZmZz
ZXQgPSBtX3NvdXJjZTsKLSAgICBtX3NvdXJjZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxp
bmtCdWZmZXIubG9jYXRpb25PZihsYWJlbCkuZGF0YUxvY2F0aW9uKCkpOwotICAgIGxhYmVsLm1f
bGFiZWwubV9vZmZzZXQgPSBtX2Rlc3RpbmF0aW9uOwotICAgIG1fZGVzdGluYXRpb24gPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWwpLmRhdGFMb2Nh
dGlvbigpKTsKLX0KLQotdm9pZCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoKQotewotICAgIHZvaWQqIHNvdXJjZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4obV9zb3VyY2Up
OwotICAgIHZvaWQqIGRlc3RpbmF0aW9uID0gYml0d2lzZV9jYXN0PHZvaWQqPihtX2Rlc3RpbmF0
aW9uKTsKLSAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCi0gICAgICAgIGRhdGFM
b2dGKCJGaXJpbmcganVtcCByZXBsYWNlbWVudCB3YXRjaHBvaW50IGZyb20gJXAsIHRvICVwLlxu
Iiwgc291cmNlLCBkZXN0aW5hdGlvbik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcChDb2RlTG9jYXRpb25MYWJlbChzb3VyY2UpLCBDb2RlTG9jYXRpb25MYWJlbChkZXN0aW5h
dGlvbikpOwotICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICByZW1vdmUoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQu
aAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEp1bXBS
ZXBsYWNlbWVudFdhdGNocG9pbnRfaAotI2RlZmluZSBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
X2gKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
LQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKLSNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKLXB1YmxpYzoKLSAgICBKdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50KCkKLSAgICAgICAgOiBtX3NvdXJjZShzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKQotICAgICAgICAsIG1fZGVzdGluYXRpb24oc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNvdXJjZSkK
LSAgICAgICAgOiBtX3NvdXJjZShzb3VyY2UubV9sYWJlbC5tX29mZnNldCkKLSAgICAgICAgLCBt
X2Rlc3RpbmF0aW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc291cmNlTGFiZWwoKSBj
b25zdAotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsOwotICAgICAg
ICBsYWJlbC5tX2xhYmVsLm1fb2Zmc2V0ID0gbV9zb3VyY2U7Ci0gICAgICAgIHJldHVybiBsYWJl
bDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGlu
YXRpb24ubV9sYWJlbC5tX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb3JyZWN0TGFi
ZWxzKExpbmtCdWZmZXImKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50
ZXJuYWwoKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB1aW50cHRyX3QgbV9zb3VyY2U7Ci0g
ICAgdWludHB0cl90IG1fZGVzdGluYXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBKdW1wUmVwbGFjZW1lbnRXYXRjaHBv
aW50X2gKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215407</attachid>
            <date>2013-10-29 11:40:17 -0700</date>
            <delta_ts>2013-10-29 13:21:20 -0700</delta_ts>
            <desc>64-bit DFG is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110159</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxMy0xMC0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBKSVQgc2hvdWxkIHN1cHBvcnQgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY0NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29u
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4aXRLaW5kLmNwcDoKKyAgICAg
ICAgKEpTQzo6ZXhpdEtpbmRUb1N0cmluZyk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm9maWxlZENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
UHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OlByb2ZpbGVkQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OndyaXRlc092ZXJsYXApOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6OkFic3RyYWN0SGVhcE92ZXJsYXBz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXBPdmVybGFwczo6b3BlcmF0b3IoKSk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6OnJlc3VsdCk6CisgICAg
ICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRh
dGE6OmludmFsaWRhdGUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9uRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9p
bnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6
cmVhbGx5QWRkKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBv
aW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2U6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZTo6aGFuZGxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlOjppbnNlcnRJbnZhbGlkYXRp
b25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFz
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1l
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKdW1wUmVwbGFjZW1lbnQ6OmZpcmUp
OgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6SnVtcFJlcGxhY2VtZW50OjpKdW1wUmVwbGFjZW1lbnQpOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
Lmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlYWxseUFk
ZCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToK
KyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNh
ZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3Ro
ZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGVFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGVN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlOjpoYW5kbGVTdHJpbmdHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZH
OjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpnbG9iYWxPYmplY3QpOgorICAgICAgICAoSlND
OjpERkc6OnBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbik6CisgICAgICAgICogZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogaml0L0p1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50Lmg6IFJlbW92ZWQuCisKIDIwMTMtMTAtMjggIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBPU1JFeGl0OjptX3dhdGNocG9pbnRJbmRleCBz
aG91bGQgYmUgaW4gT1NSRXhpdENvbXBpbGF0aW9uSW5mbwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCiAg
ICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAogICAgIGJ5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CisgICAgYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5
dGVjb2RlL0NvZGVPcmlnaW4uY3BwCiAgICAgYnl0ZWNvZGUvQ29kZVR5cGUuY3BwCiAgICAgYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCkBAIC02NCw2ICs2NSw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuY3BwCiAgICAgYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cAorICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNlV2hp
dGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCkBAIC0xMjQsOSArMTI2
LDExIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5j
cHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcAorICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAogICAg
IGRmZy9ERkdKSVRDb2RlLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKICAgICBkZmcv
REZHSklURmluYWxpemVyLmNwcAorICAgIGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCiAgICAg
ZGZnL0RGR0xJQ01QaGFzZS5jcHAKICAgICBkZmcvREZHTGF6eUpTVmFsdWUuY3BwCiAgICAgZGZn
L0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKQEAgLTE2OCw2ICsxNzIsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAogICAgIGRm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAogICAgIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1dvcmtsaXN0LmNwcAogCiAgICAgZGlzYXNzZW1ibGVyL0FSTXY3RGlz
YXNzZW1ibGVyLmNwcApAQCAtMjM2LDcgKzI0MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCiAgICAgaml0
L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAotICAgIGppdC9KdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LmNwcAogICAgIGppdC9SZWdpc3RlclNldC5jcHAKICAgICBqaXQv
UmVwYXRjaC5jcHAKICAgICBqaXQvVGVtcFJlZ2lzdGVyU2V0LmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1ODE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNiArMTEyLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tIYXNoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tXaXRoSklUVHlwZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggXApAQCAtMTUwLDYgKzE1Miw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIFwK
QEAgLTI4NCw2ICsyODgsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0
aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmggXApAQCAtMjkxLDYgKzI5Nyw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAgXApAQCAtMzg5LDYgKzM5Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFkaWNGdW5jdGlvbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERP
cGNvZGUuY3BwIFwKQEAgLTY2NSw4ICs2NzUsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDAsNiArMzAwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxM
aW5rU3RhdHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxD
b2RlQmxvY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENv
ZGVCbG9ja0hhc2guY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+DQpA
QCAtMzEyLDYgKzMxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkU3RhdHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxS
ZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTYW1wbGluZ1Rvb2wuY3BwIiAvPg0KQEAgLTM4OCw3ICszOTAsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRDTG9vcC5jcHAiIC8+DQpAQCAt
NjQ1LDYgKzY0Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxs
UmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0hhc2guaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxvY2tXaXRoSklUVHlwZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5oIiAvPg0KQEAg
LTY2Nyw2ICs2NjksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bj
b2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJv
ZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0S2luZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVjZVdoaXRlc3BhY2UuaCIgLz4NCkBAIC03ODksNyArNzky
LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxK
SVRXcml0ZUJhcnJpZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSlNJ
bnRlcmZhY2VKSVQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludC5oIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxSZWdpc3RlclNldC5jcHAiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyU2V0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2gu
aCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU4MTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQAogCQkwRjc2NkQy
RjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERDREQwMDhG
MzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc2NkQzMDE1QThE
Q0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2
M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMjE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi87IH07Ci0JCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LzsgfTsKQEAgLTM4Nyw2ICszODUsMTYgQEAKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1
cHBvcnQuY3BwICovOyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3Ry
dW0uY3BwICovOyB9OworCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyog
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDOTdGMzUxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVk
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMxMTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9m
aWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGQzk3RjM2
MTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdG
MzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuY3BwICovOyB9OworCQkwRkM5N0YzRTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkM5N0YzRjE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJl
cGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzk3RjM5MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwICov
OyB9OworCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4
MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRkM5N0Y0MjE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyog
UGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJl
c3RvcmUuY3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJl
c3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTM3LDggKzE1NDUsNiBAQAog
CQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQzMjE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY3NjZEMzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQzNjE1
QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzcxNUFF
NEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1OCw2
ICsxNjY0LDE2IEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZDOTdGMzExODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2Zp
bGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkM5N0YzOTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0p1bXBSZXBsYWNlbWVudC5jcHA7
IHBhdGggPSBkZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1wUmVwbGFjZW1lbnQuaDsg
cGF0aCA9IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzk3RjNDMTgyMDIx
MTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1
QiAvKiBQYXJzZXJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFBOTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMU2F2ZVJlc3RvcmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3Jl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzQsOCArMjk1MCw2IEBACiAJ
CQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRl
QmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFj
ZUpJVC5oICovLAotCQkJCTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmNwcCAqLywKLQkJCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8q
IFJlZ2lzdGVyU2V0LmggKi8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0
Y2guY3BwICovLApAQCAtMzc2MCwxMiArMzc3NCwxNiBAQAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTcwNEQ5MDEx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYy
QkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzk3
RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcCAqLywKKwkJCQkwRkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5oICovLAogCQkJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21w
aWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBp
bGVyLmggKi8sCiAJCQkJQTc4QTk3NzAxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXpl
ci5jcHAgKi8sCiAJCQkJQTc4QTk3NzExNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXpl
ci5oICovLAorCQkJCTBGQzk3RjM5MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1l
bnQuY3BwICovLAorCQkJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFj
ZW1lbnQuaCAqLywKIAkJCQlBNzNBNTM1ODE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFs
dWUuY3BwICovLAogCQkJCUE3M0E1MzU5MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1
ZS5oICovLAogCQkJCUE3RDlBMjkyMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuY3Bw
ICovLApAQCAtMzg2NCw2ICszODgyLDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUg
LyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZD
OTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
aCAqLywKKwkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxl
Y3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjND
MUIgLyogREZHV29ya2xpc3QuY3BwICovLAogCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5oICovLAogCQkJKTsKQEAgLTM5NzYsNiArMzk5Niw4IEBACiAJCQkJOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGOEY5NDNEMTY2
NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLywKIAkJCQkwRjhGOTQzRTE2Njc2
MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5oICovLAorCQkJCTBGQzk3RjJGMTgyMDIwRDcw
MDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovLAorCQkJCTBG
Qzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
aCAqLywKIAkJCQkwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCAqLywKIAkJCQkwRjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAg
Ki8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLywKQEAg
LTQwMTYsNiArNDAzOCw4IEBACiAJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyog
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKIAkJCQkwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8sCisJCQkJMEZDOTdGMzExODIwMjBENzAwMkM5QjI2
IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkw
RkM5N0YzMjE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLApA
QCAtNDIxOSw2ICs0MjQzLDcgQEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4
IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBCOEND
MDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludElu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJB
RDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDYx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzMzYsNiArNDM2MSw3IEBACiAJCQkJRERGN0FCRDQxMUY2MEVEMjAwMTA4RTM2IC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzAx
NUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
NjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNDQ4OCw2ICs0NTE0LDcgQEAKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkEw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZDOTdGMzYxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGRDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCkBAIC00NTA5LDcgKzQ1MzYsNiBAQAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2
QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3Jk
TG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyog
TGFiZWwuaCBpbiBIZWFkZXJzICovLApAQCAtNDU4Nyw2ICs0NjEzLDcgQEAKIAkJCQk5NjlBMDc5
QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMy
QzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0
N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDgg
LyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYw
IC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NjQ3LDYgKzQ2NzQsNyBAQAogCQkJCUJD
MThDNDVEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3MkIwRUQxQ0U2OTAwRjFGNjgxIC8qIFJlZ2lzdGVySUQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVw
YXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkND
IC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERC
NDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTE4MCw2ICs1MjA4
LDcgQEAKIAkJCQkxNDI4MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDRUZBQjExODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZN
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENh
bGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYg
LyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTIyNCw2ICs1MjUzLDcgQEAKIAkJ
CQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlv
blNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyog
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDOTdGMzUxODIwMjBE
NzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8q
IERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNF
RDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTI1OCw2ICs1Mjg4LDcgQEAKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzk3
RjNEMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENCMTMyOERGODIwMDJCMkFENyAvKiBERkdK
SVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3ODE3OTczOEI4MDA5REY3
NDQgLyogREZHSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0E1MzVBMTc5
OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU0
MDEsNiArNTQzMiw3IEBACiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2Rl
QmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlD
IC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0Y0MTE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVEMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTQ0OSw3ICs1NDgxLDYg
QEAKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBw
ZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NjZEMzQxNUFFMjUzODAwOEYzNjNF
IC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNDIwREE0MzIyNTAwQkM4M0YzIC8qIExlZ2FjeVBy
b2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTQ5NCw2ICs1NTI1LDcgQEAKIAkJCQlBN0NB
M0FFMzE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0YzRjE4MjAyMTE5MDAy
QzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTU4MTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAgaW5saW5lIGJvb2wgaXNYODYoKQogI2Vu
ZGlmCiB9CiAKLWNsYXNzIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQ7CiBjbGFzcyBMaW5rQnVm
ZmVyOwogY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKIGNsYXNzIFdhdGNocG9pbnQ7CkBAIC0zNDIsNyAr
MzQxLDYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjsKICAgICAgICAgZnJpZW5kIHN0cnVjdCBERkc6Ok9TUkV4aXQ7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKdW1wOwotICAgICAgICBmcmllbmQgY2xhc3MgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludDsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYXRjaHBv
aW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIxLDcgKzI4MjEsMjEgQEAgdm9pZCBD
b2RlQmxvY2s6OmpldHRpc29uKCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoKm1faGVhcCk7CiAg
ICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NF
UlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIGFjY29t
cGxpc2ggdHdvIHRoaW5ncyBoZXJlOgorICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMg
Q29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRv
IGl0CisgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KKyAgICAvLyAyKSBNYWtlIHN1
cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4n
dCBjYWxsIHRoaXMgQ29kZUJsb2NrLgorICAgIAorICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzIHRo
ZSBPU1ItZXhpdC1vbi1yZXR1cm4gcGFydCwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcg
YWJvdXQKKyAgICAvLyB3aGV0aGVyIHRoZSBpbnZhbGlkYXRpb24gaGFzIGFscmVhZHkgaGFwcGVu
ZWQuCisgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpOworICAgIAorICAg
IC8vIE5vdyB0YWtlIGNhcmUgb2YgdGhlIGVudHJ5cG9pbnQuCisgICAgaWYgKHRoaXMgIT0gcmVw
bGFjZW1lbnQoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRhaHQgSSd2ZSBhbHJlYWR5IGJl
ZW4gamV0dGlzb25lZC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBhbHRlcm5hdGl2ZSgp
LT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwog
ICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw2IEBACiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpJVFdyaXRl
QmFycmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUg
IkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCisKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3ZvaWQgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQorewor
ICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJG
aXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9j
aywgIlxuIik7CisKKyAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oKTsKKworICAgIGlmIChpc09u
TGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludF9oCisjZGVmaW5lIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludF9oCisKKyNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CisKK2NsYXNzIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBv
aW50IHsKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQoKQorICAg
ICAgICA6IG1fY29kZUJsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV9j
b2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIGZpcmVJbnRlcm5hbCgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTU4MTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5k
IGtpCiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5jb3VudGFibGVX
YXRjaHBvaW50OgogICAgICAgICByZXR1cm4gIlVuY291bnRhYmxlV2F0Y2hwb2ludCI7CisgICAg
Y2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKKyAgICAgICAgcmV0dXJuICJVbmNvdW50YWJs
ZUludmFsaWRhdGlvbiI7CiAgICAgY2FzZSBXYXRjaGRvZ1RpbWVyRmlyZWQ6CiAgICAgICAgIHJl
dHVybiAiV2F0Y2hkb2dUaW1lckZpcmVkIjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDcgQEAgZW51bSBFeGl0S2luZCB7CiAgICAgQXJndW1lbnRzRXNjYXBlZCwgLy8gV2UgZXhp
dGVkIGJlY2F1c2UgYXJndW1lbnRzIGVzY2FwZWQgYnV0IHdlIGRpZG4ndCBleHBlY3QgdGhlbSB0
by4KICAgICBOb3RTdHJpbmdPYmplY3QsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNob3VsZG4n
dCBoYXZlIGF0dGVtcHRlZCB0byBvcHRpbWl6ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4KICAgICBV
bmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBh
bmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZp
ZXdlZCBhcyBhIEZJWE1FLgorICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0
ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhh
dCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdh
cyBpbnZhbGlkYXRlZC4KICAgICBVbmNvdW50YWJsZVdhdGNocG9pbnQsIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIG9mIGEgd2F0Y2hwb2ludCwgd2hpY2ggaXNuJ3QgY291bnRlZCBiZWNhdXNlIHdhdGNo
cG9pbnRzIGRvIHRyYWNraW5nIHRoZW1zZWx2ZXMuCiAgICAgV2F0Y2hkb2dUaW1lckZpcmVkIC8v
IFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIu
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2Zp
bGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9maWxlZENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3ZvaWQgUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbCgpCit7CisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXJpbmcgcHJvZmlsZWQgd2F0Y2hwb2ludCAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIiBkdWUgdG8gIiwKKyAg
ICAgICAgICAgIG1fZXhpdEtpbmQsICIgYXQgIiwgbV9jb2RlT3JpZ2luLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
aygKKyAgICAgICAgbV9jb2RlT3JpZ2luLCBtX2NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkp
LT5hZGRGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICAgICAgREZHOjpGcmVxdWVudEV4aXRTaXRl
KG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2V4aXRLaW5kKSk7CisgICAgCisgICAgbV9j
b2RlQmxvY2stPmpldHRpc29uKCk7CisKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVt
b3ZlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9maWxpbmdDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnRfaAorI2RlZmluZSBQcm9maWxpbmdDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnRfaAorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkV4aXRL
aW5kLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworCitjbGFzcyBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBQcm9maWxlZENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludCgpCisgICAgICAgIDogbV9leGl0S2luZChFeGl0S2luZFVu
c2V0KQorICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQ
cm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCgKKyAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgICAgIDogbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgICwgbV9leGl0S2luZChl
eGl0S2luZCkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgeworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVybmFsKCkgT1ZFUlJJ
REU7CisKK3ByaXZhdGU6CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgRXhpdEtp
bmQgbV9leGl0S2luZDsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9maWxpbmdDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFJlZ0V4cFN0YXRlKSBcCiAgICAg
bWFjcm8oSW50ZXJuYWxTdGF0ZSkgXAogICAgIG1hY3JvKEFic29sdXRlKSBcCisgICAgLyogVXNl
IHRoaXMgZm9yIHdyaXRlcyBvbmx5LCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgbWF5IGZpcmUgd2F0
Y2hwb2ludHMuIFVzdWFsbHkgdGhpcyBpcyBuZXZlciBkaXJlY3RseSB3cml0dGVuIGJ1dCBpbnN0
ZWFkIHdlIHRlc3QgdG8gc2VlIGlmIGEgbm9kZSBjbG9iYmVycyB0aGlzOyBpdCBqdXN0IHNvIGhh
cHBlbnMgdGhhdCB5b3UgaGF2ZSB0byB3cml0ZSB3b3JsZCB0byBjbG9iYmVyIGl0LiAqL1wKKyAg
ICBtYWNybyhXYXRjaHBvaW50X2ZpcmUpIFwKICAgICAvKiBVc2UgdGhpcyBmb3IgcmVhZHMgb25s
eSwganVzdCB0byBpbmRpY2F0ZSB0aGF0IGlmIHRoZSB3b3JsZCBnb3QgY2xvYmJlcmVkLCB0aGVu
IHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90IHdvcmsuICovXAogICAgIG1hY3JvKE1pc2NGaWVsZHMp
IFwKICAgICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhh
dCBob2lzdGluZyB0aGUgbm9kZSBpcyBpbnZhbGlkLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9u
J3QgaG9pc3QgYW55dGhpbmcgdGhhdCBoYXMgYW55IHNpZGUgZWZmZWN0cyBhdCBhbGwuICovXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTM1LDYgKzE1MzUsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsMTQgQEAgYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIAorYm9vbCB3cml0ZXNPdmVybGFwKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCit7CisgICAgTm9PcENs
b2JiZXJpemUgYWRkUmVhZDsKKyAgICBBYnN0cmFjdEhlYXBPdmVybGFwcyBhZGRXcml0ZShoZWFw
KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAg
cmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEz
Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgog
ICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAg
d3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjksNiArNjcwLDMwIEBA
IHByaXZhdGU6CiAKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAorY2xhc3MgQWJz
dHJhY3RIZWFwT3ZlcmxhcHMgeworcHVibGljOgorICAgIEFic3RyYWN0SGVhcE92ZXJsYXBzKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQorICAgICAgICAsIG1fcmVz
dWx0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3Ry
YWN0SGVhcCBvdGhlckhlYXApCisgICAgeworICAgICAgICBpZiAobV9yZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fcmVzdWx0ID0gbV9oZWFwLm92ZXJsYXBzKG90aGVySGVh
cCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1
bHQ7IH0KKworcHJpdmF0ZToKKyAgICBBYnN0cmFjdEhlYXAgbV9oZWFwOworICAgIGJvb2wgbV9y
ZXN1bHQ7Cit9OworCitib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RI
ZWFwKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5j
cHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIHZvaWQgQ29tbW9u
RGF0YTo6c2hyaW5rVG9GaXQoKQogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CiB9CiAK
K3ZvaWQgQ29tbW9uRGF0YTo6aW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFpc1N0aWxsVmFsaWQp
CisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBqdW1wUmVwbGFjZW1lbnRz
LnNpemUoKTsgaS0tOykKKyAgICAgICAganVtcFJlcGxhY2VtZW50c1tpXS5maXJlKCk7CisgICAg
aXNTdGlsbFZhbGlkID0gZmFsc2U7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBA
QAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRl
ICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQ
cm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlByb2Zp
bGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNjksMTMgKzcyLDE2IEBAIGNsYXNzIENvbW1vbkRhdGEgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1v
bkRhdGEoKQotICAgICAgICA6IG1hY2hpbmVDYXB0dXJlU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkKKyAgICAgICAgOiBpc1N0aWxsVmFsaWQodHJ1ZSkKKyAgICAgICAgLCBt
YWNoaW5lQ2FwdHVyZVN0YXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAg
eyB9CiAgICAgCiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBs
YW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7CiAgICAgdW5zaWduZWQgYWRkQ29kZU9yaWdpbihDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pOwogICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICAK
KyAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+
IGlubGluZUNhbGxGcmFtZXM7CiAgICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBjb2RlT3JpZ2luczsKQEAgLTgzLDEwICs4OSwxNCBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPElkZW50aWZpZXI+IGRmZ0lkZW50aWZpZXJzOwogICAgIFZlY3RvcjxXZWFrUmVmZXJl
bmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+PiB3ZWFrUmVmZXJlbmNlczsKKyAgICBTZWdtZW50ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKKyAgICBTZWdtZW50ZWRWZWN0b3I8
UHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQsIDEsIDA+IHByb2ZpbGVkV2F0
Y2hwb2ludHM7CisgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsK
ICAgICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKICAg
ICBib29sIGxpdmVuZXNzSGFzQmVlblByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24g
ZXZlcnkgR0MuCiAgICAgYm9vbCBhbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0
aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICBib29sIGlzU3RpbGxWYWxpZDsKICAg
ICAKICAgICBpbnQgbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
d0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxNTgxNjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDIwICszMywzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQog
RGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKLXZvaWQgRGVz
aXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0Y2hw
b2ludFNldCogc2V0KQordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBv
aW50U2V0KiBzZXQpCiB7Ci0gICAgbV9zZXRzLmFkZExhemlseShXYXRjaHBvaW50Rm9yV2F0Y2hw
b2ludFNldCh3YXRjaHBvaW50LCBzZXQpKTsKKyAgICBtX3NldHMuYWRkTGF6aWx5KHNldCk7CiB9
CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCwgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCiB7Ci0gICAgbV9pbmxpbmVTZXRz
LmFkZExhemlseShXYXRjaHBvaW50Rm9ySW5saW5lV2F0Y2hwb2ludFNldCh3YXRjaHBvaW50LCAm
c2V0KSk7CisgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseSgmc2V0KTsKIH0KIAotdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCgpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIFdhdGNocG9p
bnRTZXQqIHNldCkKIHsKLSAgICBtX3NldHMucmVhbGx5QWRkKCk7Ci0gICAgbV9pbmxpbmVTZXRz
LnJlYWxseUFkZCgpOworICAgIG1fc2V0cy5hZGRMYXppbHkoY29kZU9yaWdpbiwgZXhpdEtpbmQs
IHNldCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0
KQoreworICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoY29kZU9yaWdpbiwgZXhpdEtpbmQsICZz
ZXQpOworfQorCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb21tb25EYXRhJiBjb21tb25EYXRhKQoreworICAgIG1fc2V0cy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsMTEgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtNDAsMjQgKzQzLDI0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHRl
bXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlPgogc3RydWN0IFdhdGNocG9pbnRGb3JH
ZW5lcmljV2F0Y2hwb2ludFNldCB7CiAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0KCkKLSAgICAgICAgOiBtX3dhdGNocG9pbnQoMCkKKyAgICAgICAgOiBtX2V4aXRLaW5kKEV4
aXRLaW5kVW5zZXQpCiAgICAgICAgICwgbV9zZXQoMCkKICAgICB7CiAgICAgfQogICAgIAotICAg
IFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldChXYXRjaHBvaW50KiB3YXRjaHBvaW50
LCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgICAgICA6IG1fd2F0Y2hwb2ludCh3YXRjaHBv
aW50KQorICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCgKKyAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2ludFNldFR5cGUq
IHNldCkKKyAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBtX2V4
aXRLaW5kKGV4aXRLaW5kKQogICAgICAgICAsIG1fc2V0KHNldCkKICAgICB7CiAgICAgfQogICAg
IAotICAgIFdhdGNocG9pbnQqIG1fd2F0Y2hwb2ludDsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9y
aWdpbjsKKyAgICBFeGl0S2luZCBtX2V4aXRLaW5kOwogICAgIFdhdGNocG9pbnRTZXRUeXBlKiBt
X3NldDsKIH07CiAKLXR5cGVkZWYgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdh
dGNocG9pbnRTZXQ+IFdhdGNocG9pbnRGb3JXYXRjaHBvaW50U2V0OwotdHlwZWRlZiBXYXRjaHBv
aW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8SW5saW5lV2F0Y2hwb2ludFNldD4gV2F0Y2hwb2lu
dEZvcklubGluZVdhdGNocG9pbnRTZXQ7Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRT
ZXRUeXBlPgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyk7CkBAIC03MCwyNSArNzMsNTMg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRMYXppbHkoY29uc3Qg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPiYgd2F0
Y2hwb2ludCkKKyAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAg
IHsKKyAgICAgICAgbV9zZXRzLmFkZChzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZExh
emlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50
U2V0VHlwZSogc2V0KQogICAgIHsKLSAgICAgICAgbV93YXRjaHBvaW50cy5hcHBlbmQod2F0Y2hw
b2ludCk7CisgICAgICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCisgICAgICAgICAg
ICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+KGNv
ZGVPcmlnaW4sIGV4aXRLaW5kLCBzZXQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZWFsbHlB
ZGQoKQorICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25EYXRh
JiBjb21tb24pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fd2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KQot
ICAgICAgICAgICAgbV93YXRjaHBvaW50c1tpXS5tX3NldC0+YWRkKG1fd2F0Y2hwb2ludHNbaV0u
bV93YXRjaHBvaW50KTsKKyAgICAgICAgCisgICAgICAgIHR5cGVuYW1lIEhhc2hTZXQ8V2F0Y2hw
b2ludFNldFR5cGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0cy5iZWdpbigpOworICAgICAgICB0
eXBlbmFtZSBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0
cy5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAg
ICAgIGNvbW1vbi53YXRjaHBvaW50cy5hcHBlbmQoQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50KGNvZGVCbG9jaykpOworICAgICAgICAgICAgKCppdGVyKS0+YWRkKCZjb21tb24ud2F0Y2hw
b2ludHMubGFzdCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPiB3YXRj
aHBvaW50ID0KKyAgICAgICAgICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHNbaV07CisgICAg
ICAgICAgICBjb21tb24ucHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQod2F0Y2hwb2ludC5tX2Nv
ZGVPcmlnaW4sIHdhdGNocG9pbnQubV9leGl0S2luZCwgY29kZUJsb2NrKSk7CisgICAgICAgICAg
ICB3YXRjaHBvaW50Lm1fc2V0LT5hZGQoJmNvbW1vbi5wcm9maWxlZFdhdGNocG9pbnRzLmxhc3Qo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOwog
ICAgIH0KICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmIChtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKSkK
KyAgICAgICAgdHlwZW5hbWUgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRvciBp
dGVyID0gbV9zZXRzLmJlZ2luKCk7CisgICAgICAgIHR5cGVuYW1lIEhhc2hTZXQ8V2F0Y2hwb2lu
dFNldFR5cGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3IgKDsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKCgqaXRlciktPmhhc0JlZW5J
bnZhbGlkYXRlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRz
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fcHJvZmlsZWRXYXRjaHBvaW50c1tp
XS5tX3NldC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkBAIC0xMjYsNyArMTU3LDggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBW
ZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBl
Pj4gbV93YXRjaHBvaW50czsKKyAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBv
aW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9pbnRzOworICAgIEhh
c2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRlOwogI2VuZGlmCkBAIC0xMzgsMTAgKzE3MCwx
MiBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzKCk7CiAgICAgfkRlc2lyZWRXYXRj
aHBvaW50cygpOwogICAgIAotICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnQqLCBXYXRjaHBv
aW50U2V0Kik7Ci0gICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCosIElubGluZVdhdGNocG9p
bnRTZXQmKTsKKyAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7CisgICAgdm9pZCBh
ZGRMYXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KENvZGVP
cmlnaW4sIEV4aXRLaW5kLCBXYXRjaHBvaW50U2V0Kik7CisgICAgdm9pZCBhZGRMYXppbHkoQ29k
ZU9yaWdpbiwgRXhpdEtpbmQsIElubGluZVdhdGNocG9pbnRTZXQmKTsKICAgICAKLSAgICB2b2lk
IHJlYWxseUFkZCgpOworICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEm
KTsKICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTU4
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODg1LDYgKzg4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAgICAg
ICBjYXNlIEludDUyVG9WYWx1ZToKKyAgICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitw
dWJsaWM6CisgICAgSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJpbnZhbGlkYXRpb24gcG9pbnQgaW5qZWN0aW9uIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0Ep
OworICAgICAgICAKKyAgICAgICAgQml0VmVjdG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9u
UG9pbnRzOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIGhhbmRsZShub2RlSW5kZXgsIGJsb2Nr
LT5hdChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTm90ZTogdGhp
cyBhc3N1bWVzIHRoYXQgY29udHJvbCBmbG93IG9jY3VycyBhdCBieXRlY29kZSBpbnN0cnVjdGlv
biBib3VuZGFyaWVzLgorICAgICAgICAgICAgaWYgKG1fb3JpZ2luVGhhdEhhZEZpcmUuaXNTZXQo
KSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0
aW9uUG9pbnRzLnNldChibG9jay0+c3VjY2Vzc29yKGkpLT5pbmRleCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIGlm
ICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpbnNl
cnRJbnZhbGlkYXRpb25DaGVjaygwLCBibG9jay0+YXQoMCkpOworICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGhhbmRsZSh1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFk
RmlyZS5pc1NldCgpICYmIG1fb3JpZ2luVGhhdEhhZEZpcmUgIT0gbm9kZS0+Y29kZU9yaWdpbikg
eworICAgICAgICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2sobm9kZUluZGV4LCBub2RlKTsK
KyAgICAgICAgICAgIG1fb3JpZ2luVGhhdEhhZEZpcmUgPSBDb2RlT3JpZ2luKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICh3cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIFdh
dGNocG9pbnRfZmlyZSkpCisgICAgICAgICAgICBtX29yaWdpblRoYXRIYWRGaXJlID0gbm9kZS0+
Y29kZU9yaWdpbjsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRJbnZhbGlkYXRpb25DaGVj
ayh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEludmFsaWRhdGlvblBvaW50
LCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICB9CisgICAgCisgICAgQ29kZU9yaWdpbiBtX29yaWdp
blRoYXRIYWRGaXJlOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisKK2Jv
b2wgcGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEludmFsaWRhdGlvbiBQb2ludCBJ
bmplY3Rpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8SW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBhbiBpbnZhbGlkYXRpb24gY2hlY2sgYXQg
dGhlIGJlZ2lubmluZyBvZiBhbnkgQ29kZU9yaWdpbiB0aGF0IGZvbGxvd3MgYSBDb2RlT3JpZ2lu
CisvLyB0aGF0IGhhZCBhIGNhbGwgKGNsb2JiZXJlZCBXb3JsZCkuCisKK2Jvb2wgcGVyZm9ybUlu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKICNpbmNsdWRlICJFeGVjdXRpb25Db3Vu
dGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUgIkp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTg4LDEzICs4Nyw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgYXBwZW5kV2F0Y2hw
b2ludChjb25zdCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50JiB3YXRjaHBvaW50KQotICAgIHsK
LSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gd2F0Y2hwb2ludHMuc2l6ZSgpOwotICAgICAgICB3
YXRjaHBvaW50cy5hcHBlbmQod2F0Y2hwb2ludCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIAogICAgIHZvaWQgcmVjb25zdHJ1Y3QoCiAgICAgICAgIENvZGVCbG9jayosIENv
ZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
cmVzdWx0KTsKICAgICAKQEAgLTEyNyw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPERG
Rzo6T1NSRW50cnlEYXRhPiBvc3JFbnRyeTsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JF
eGl0LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNw
ZWN1bGF0aW9uUmVjb3Zlcnk7Ci0gICAgU2VnbWVudGVkVmVjdG9yPEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVh
bSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERG
RzsKICNpZiBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEg
KzY2LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07CiAgICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKLSAgICAgICAgICAg
IGlmIChpbmZvLm1fd2F0Y2hwb2ludEluZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkgeworICAgICAgICAgICAgaWYgKCFpbmZvLm1fZmFpbHVyZUp1bXBzLmVtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5mby5tX2Zh
aWx1cmVKdW1wcy5qdW1wcygpLnNpemUoKTsgKytqKQogICAgICAgICAgICAgICAgICAgICBsYWJl
bHMuYXBwZW5kKGluZm8ubV9mYWlsdXJlSnVtcHMuanVtcHMoKVtqXS5sYWJlbCgpKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobV9qaXRDb2RlLT53
YXRjaHBvaW50c1tpbmZvLm1fd2F0Y2hwb2ludEluZGV4XS5zb3VyY2VMYWJlbCgpKTsKKyAgICAg
ICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZSk7CiAgICAg
ICAgICAgICBtX2V4aXRTaXRlTGFiZWxzLmFwcGVuZChsYWJlbHMpOwogICAgICAgICB9CiAgICAg
fQpAQCAtNzksMTEgKzc5LDEwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAg
ICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CiAgICAgICAgIE9T
UkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAg
ICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwotICAg
ICAgICBBU1NFUlQoZmFpbHVyZUp1bXBzLmVtcHR5KCkgPT0gKGluZm8ubV93YXRjaHBvaW50SW5k
ZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7Ci0gICAgICAgIGlm
IChpbmZvLm1fd2F0Y2hwb2ludEluZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKKyAgICAgICAgaWYgKCFmYWlsdXJlSnVtcHMuZW1wdHkoKSkKICAgICAgICAgICAg
IGZhaWx1cmVKdW1wcy5saW5rKHRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2pp
dENvZGUtPndhdGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLnNldERlc3RpbmF0aW9u
KGxhYmVsKCkpOworICAgICAgICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBs
YWJlbCgpOwogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7CiAgICAgICAgIGV4
aXQuc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwpAQCAtMjU3LDggKzI1
NiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07
CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhleGl0LmdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1
bXAoKSwgdGFyZ2V0KTsKICAgICAgICAgZXhpdC5jb3JyZWN0SnVtcChsaW5rQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICAgICAgbV9qaXRDb2RlLT53YXRjaHBvaW50c1tpbmZv
Lm1fd2F0Y2hwb2ludEluZGV4XS5jb3JyZWN0TGFiZWxzKGxpbmtCdWZmZXIpOworICAgICAgICBp
ZiAoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIG1faml0
Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKKyAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291
cmNlKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxh
Y2VtZW50RGVzdGluYXRpb24pKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTUgKzExNiw2
IEBAIHB1YmxpYzoKICAgICAvLyBBY2Nlc3NvcnMgZm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgm
IGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQogICAgIAotICAgIHZvaWQgYWRkTGF6aWx5KFdh
dGNocG9pbnQqIHdhdGNocG9pbnQsIFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludCwgc2V0KTsKLSAgICB9
Ci0gICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgSW5saW5lV2F0Y2hw
b2ludFNldCYgc2V0KQotICAgIHsKLSAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseSh3YXRjaHBvaW50LCBzZXQpOwotICAgIH0KLSAgICAKICAgICAvLyBNZXRob2RzIHRvIHNl
dCBsYWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZSgp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJl
cGxhY2VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSnVtcFJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPcHRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBKdW1wUmVwbGFj
ZW1lbnQ6OmZpcmUoKQoreworICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKKyAg
ICAgICAgZGF0YUxvZ0YoIkZpcmluZyBqdW1wIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgZnJvbSAl
cCwgdG8gJXAuXG4iLCBtX3NvdXJjZS5kYXRhTG9jYXRpb24oKSwgbV9kZXN0aW5hdGlvbi5kYXRh
TG9jYXRpb24oKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChtX3NvdXJj
ZSwgbV9kZXN0aW5hdGlvbik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0p1bXBSZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdKdW1wUmVwbGFjZW1lbnRfaAorI2RlZmluZSBERkdKdW1wUmVwbGFjZW1lbnRf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBKdW1wUmVwbGFjZW1lbnQg
eworcHVibGljOgorICAgIEp1bXBSZXBsYWNlbWVudChDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2Us
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgICAgICA6IG1fc291cmNlKHNvdXJj
ZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaXJlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bV9zb3VyY2U7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9kZXN0aW5hdGlvbjsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHSnVtcFJlcGxhY2VtZW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWxVbmxp
bmtlZCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAogICAgIC8qIE1hcmtlciBmb3IgYW4gYXJndW1l
bnQgYmVpbmcgc2V0IGF0IHRoZSBwcm9sb2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wKLSAgICBtYWNy
byhTZXRBcmd1bWVudCwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKFNldEFyZ3Vt
ZW50LCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBcCisgICAgLyogTWFya2VyIG9mIGxvY2F0aW9u
IGluIHRoZSBJUiB3aGVyZSB3ZSBtYXkgcG9zc2libHkgcGVyZm9ybSBqdW1wIHJlcGxhY2VtZW50
IHRvICovXAorICAgIC8qIGludmFsaWRhdGUgdGhpcyBjb2RlIGJsb2NrLiAqL1wKKyAgICBtYWNy
byhJbnZhbGlkYXRpb25Qb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBO
b2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRBbmQsIE5vZGVS
ZXN1bHRJbnQzMiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lv
biAxNTgxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxh
dGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDkgQEAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogc3RydWN0IE9TUkV4aXRDb21waWxhdGlvbkluZm8gewot
ICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8oKQotICAgICAgICA6IG1fd2F0Y2hwb2ludEluZGV4
KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2ZhaWx1cmVKdW1wczsKLSAgICB1bnNp
Z25lZCBtX3dhdGNocG9pbnRJbmRleDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9yZXBs
YWNlbWVudFNvdXJjZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9yZXBsYWNlbWVudERl
c3RpbmF0aW9uOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw3IEBACiAjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCisj
aW5jbHVkZSAiREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCkBAIC01Niw2ICs1Nyw3IEBACiAjaW5jbHVkZSAi
REZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVk
ZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAg
LTE4Nyw2ICsxODksNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgIHBlcmZv
cm1JbnZhbGlkYXRpb25Qb2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hlY2tI
b2lzdGluZyhkZmcpOwogICAgIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMTsKQEAgLTIyOCw3ICsy
MzEsMjQgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHN3
aXRjaCAobW9kZSkgewogICAgIGNhc2UgREZHTW9kZTogewogICAgICAgICBwZXJmb3JtVGllclVw
Q2hlY2tJbmplY3Rpb24oZGZnKTsKLSAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKKyAgICAgICAgcGVy
Zm9ybVN0YWNrTGF5b3V0KGRmZyk7CisgICAgICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbihkZmcpOwor
ICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9u
OiIpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKKyAg
ICAgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICAg
ICAgICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbigpOworICAgICAgICAgICAgZGF0YUZs
b3dKSVQubGlua0Z1bmN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRh
Rmxvd0pJVC5jb21waWxlKCk7CisgICAgICAgICAgICBkYXRhRmxvd0pJVC5saW5rKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBERkdQYXRoOwogICAgIH0KICAgICAKICAg
ICBjYXNlIEZUTE1vZGU6CkBAIC0yNTMsNiArMjczLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcp
OwogICAgICAgICBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtV2F0Y2hw
b2ludENvbGxlY3Rpb24oZGZnKTsKICAgICAgICAgCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFw
aChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CiAgICAgICAgIApAQCAt
MjgwLDMxICszMDEsMTQgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRo
cgogICAgICAgICByZXR1cm4gRlRMUGF0aDsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRmFpbFBhdGg7
CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgcGVyZm9y
bURDRShkZmcpOwotICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcpOwotICAgIHBlcmZvcm1WaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7Ci0gICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywg
IkdyYXBoIGFmdGVyIG9wdGltaXphdGlvbjoiKTsKLQotICAgIEpJVENvbXBpbGVyIGRhdGFGbG93
SklUKGRmZyk7Ci0gICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKLSAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIGRhdGFG
bG93SklULmxpbmtGdW5jdGlvbigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRhdGFGbG93SklU
LmNvbXBpbGUoKTsKLSAgICAgICAgZGF0YUZsb3dKSVQubGluaygpOworICAgICAgICByZXR1cm4g
RmFpbFBhdGg7CiAgICAgfQotICAgIAotICAgIHJldHVybiBERkdQYXRoOwogfQogCiBib29sIFBs
YW46OmlzU3RpbGxWYWxpZCgpCkBAIC0zMTUsNyArMzE5LDcgQEAgYm9vbCBQbGFuOjppc1N0aWxs
VmFsaWQoKQogCiB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25EYXRhKQog
ewotICAgIHdhdGNocG9pbnRzLnJlYWxseUFkZCgpOworICAgIHdhdGNocG9pbnRzLnJlYWxseUFk
ZChjb2RlQmxvY2suZ2V0KCksICpjb21tb25EYXRhKTsKICAgICBpZGVudGlmaWVycy5yZWFsbHlB
ZGQodm0sIGNvbW1vbkRhdGEpOwogICAgIHdlYWtSZWZlcmVuY2VzLnJlYWxseUFkZCh2bSwgY29t
bW9uRGF0YSk7CiAgICAgdHJhbnNpdGlvbnMucmVhbGx5QWRkKHZtLCBjb21tb25EYXRhKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTgxNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEyLDcgKzUxMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgotICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6IHsK
KyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgorICAgICAgICBjYXNlIEludmFs
aWRhdGlvblBvaW50OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJl
IHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAg
IC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTU4MTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzOSw2ICsyMzksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAg
Y2FzZSBJbnQ1MlRvVmFsdWU6CisgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw4ICsyNjQsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3Bl
cmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogCi0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKTsKLQogICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IG1faml0Lmp1bXAoKTsKICAgICB9IGVsc2UgewpAQCAtMzMxLDggKzMyOSw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgaWYgKCFpc0tu
b3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCgpOwotICAgICAgICAKICAgICAgICAganVtcChpbnZlcnQgPyB0YWtlbiA6
IG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKQEAgLTE1MTksNyArMTUxNSw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKQEAgLTE1OTMsNyArMTU4OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RUb09iamUKICAgICB9CiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAg
ICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKQEAgLTE2MjAsNyArMTYxNCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RUb09iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNo
LCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKQEAgLTE2OTgsNyArMTY5MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZU9iamUKICAgICB9CiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKQEAgLTE3MjUsNyArMTcxNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCBy
aWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKQEAgLTE4NzIsNyArMTg2Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RPck90aGUKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dFZhbGlkKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQu
YnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKQEAgLTIw
MTYsOCArMjAwNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxs
VmFsaWQoKSkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKCk7Ci0KICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBA
IC0yNzM4LDE3ICsyNzI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmFycmF5
UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmFkZExh
emlseSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5z
dHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOwogICAgICAgICAgICAgCkBAIC0zNTI0LDEwICszNTAxLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZp
bmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7
Ci0gICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQoKSk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoCkBAIC0zNjk5LDEwICszNjcyLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6
ZTogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGlmICghZ2xvYmFs
T2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FycmF5U3RvcmFnZShub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgICAgIAogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwpAQCAtMzc3NCwxMCArMzc0Myw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pOwogICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9kZS0+aW5kZXhp
bmdUeXBlKCk7CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkg
JiYgIWhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7Ci0g
ICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVt
Q29uc3RhbnRzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CkBAIC0zOTIwLDkgKzM4ODUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludDogewotICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
bm9kZS0+ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQxOTUsMTAg
KzQxNTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRk
V2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1faml0LmFkZExhemls
eSgKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgKLSAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25zdGFudENh
Y2hlV2F0Y2hwb2ludCA6IEJhZENhY2hlV2F0Y2hwb2ludCksCi0gICAgICAgICAgICBub2RlLT5z
dHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CkBAIC00MzY4LDEwICs0MzI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDogewot
ICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKLSAgICAgICAgICAgIGlkZW50aWZpZXJV
SUQobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpKS53YXRjaHBvaW50U2V0KCk7Ci0g
ICAgICAgIG1faml0LmFkZExhemlseShzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwgc2V0KTsKLSAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwpAQCAtNDM4OCw5ICs0MzQyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDogewotICAg
ICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPnZhckluamVjdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgbV9qaXQuYWRkTGF6
aWx5KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLCBzZXQpOwotICAgICAgICAKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0MjYsNyArNDM3Nyw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaXNDZWxs
LmxpbmsoJm1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZDsKICAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ5NTgsNiArNDkwOCwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJl
Z3MoKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbnZh
bGlkYXRpb25Qb2ludDoKKyAgICAgICAgZW1pdEludmFsaWRhdGlvblBvaW50KG5vZGUpOworICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1ODE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjYg
KzIwMCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAg
c3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRv
RmFpbCwgcmVjb3ZlcnkpOwogfQogCi1KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJ
bnZhbGlkYXRpb25Qb2ludChOb2RlKiBub2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2NhbkV4aXQpOwor
ICAgIEFTU0VSVChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24p
OwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5m
byhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRP
U1JFeGl0KE9TUkV4aXQoCi0gICAgICAgIGtpbmQsIGpzVmFsdWVTb3VyY2UsCisgICAgICAgIFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCiAgICAgICAgIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwKICAgICAgICAgdGhp
cywgbV9zdHJlYW0tPnNpemUoKSkpOwotICAgIGluZm8ubV93YXRjaHBvaW50SW5kZXggPSBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZFdhdGNocG9pbnQoCi0gICAgICAgIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQobV9qaXQud2F0Y2hwb2ludExhYmVsKCkpKTsKLSAgICBpZiAobV9zcGVjdWxhdGlv
bkRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCgpOwotICAgIHJldHVybiAmbV9qaXQuaml0Q29kZSgpLT53YXRjaHBvaW50
c1tpbmZvLm1fd2F0Y2hwb2ludEluZGV4XTsKLX0KLQotSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kKQot
ewotICAgIHJldHVybiBzcGVjdWxhdGlvbldhdGNocG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgp
LCAwKTsKKyAgICBpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UgPSBtX2ppdC53YXRjaHBvaW50TGFi
ZWwoKTsKKyAgICBBU1NFUlQoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLmlzU2V0KCkpOworICAg
IG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9T
UkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKQEAgLTEz
NTMsOCArMTM0Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUK
ICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIAogICAgIGlmIChtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHNwZWN1bGF0
aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKLQogICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCkBAIC0y
MDA0LDE4ICsxOTk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
dAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0
LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgpKSB7Ci0gICAgICAgICAgICBtX2ppdC5hZGRM
YXppbHkoCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIEFTU0VSVChBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFy
aXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRo
YXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsMjAgKzI4
NCwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb2RlT3JpZ2luKTsKICAg
ICB9Ci0gICAgdm9pZCBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi0gICAgewotICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKLSAgICB9CiAgICAgYm9vbCBtYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpCiAgICAgewogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgfQotICAgIHZvaWQgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpCi0gICAgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNo
cG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OwotICAgIH0KIAogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVn
IHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BS
UmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFs
dWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwpAQCAtMjEzMSwxNiArMjEy
MSw4IEBAIHB1YmxpYzoKICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0
aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CiAgICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKLSAgICAvLyBVc2Ug
dGhpcyBsaWtlIHlvdSB3b3VsZCB1c2Ugc3BlY3VsYXRpb25DaGVjaygpLCBleGNlcHQgdGhhdCB5
b3UgZG9uJ3QgcGFzcyBpdCBhIGp1bXAKLSAgICAvLyAoYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0
byBleGVjdXRlIGEgYnJhbmNoOyB0aGF0J3Mga2luZCBvZiB0aGUgd2hvbGUgcG9pbnQpLCBhbmQg
eW91Ci0gICAgLy8gbXVzdCByZWdpc3RlciB0aGUgcmV0dXJuZWQgV2F0Y2hwb2ludCB3aXRoIHNv
bWV0aGluZyByZWxldmFudC4gSW4gZ2VuZXJhbCwgdGhpcyBzaG91bGQKLSAgICAvLyBiZSB1c2Vk
IHdpdGggZXh0cmVtZSBjYXJlLiBVc2Ugc3BlY3VsYXRpb25DaGVjaygpIHVubGVzcyB5b3UndmUg
Z290IGFuIGFtYXppbmcgcmVhc29uCi0gICAgLy8gbm90IHRvLgotICAgIEp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCwgSlNWYWx1ZVNvdXJj
ZSwgTm9kZSopOwotICAgIC8vIFRoZSBkZWZhdWx0IGZvciBzcGVjdWxhdGlvbiB3YXRjaHBvaW50
cyBpcyB0aGF0IHRoZXkncmUgdW5jb3VudGVkLCBiZWNhdXNlIHRoZQotICAgIC8vIGFjdCBvZiBm
aXJpbmcgYSB3YXRjaHBvaW50IGludmFsaWRhdGVzIGl0LiBTbywgZnV0dXJlIHJlY29tcGlsYXRp
b25zIHdpbGwgbm90Ci0gICAgLy8gYXR0ZW1wdCB0byBzZXQgdGhpcyB3YXRjaHBvaW50IGFnYWlu
LgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChF
eGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CisgICAgCisgICAgdm9pZCBlbWl0SW52
YWxpZGF0aW9uUG9pbnQoTm9kZSopOwogICAgIAogICAgIC8vIEl0IGlzIGdlbmVyYWxseSBhIGdv
b2QgaWRlYSB0byBub3QgdXNlIHRoaXMgZGlyZWN0bHkuCiAgICAgdm9pZCBjb252ZXJ0TGFzdE9T
UkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwpA
QCAtMzAyMiwxOCArMzAwNCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJp
bmdPYmplCiB7CiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAg
ICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPnN0cmlu
Z09iamVjdFN0cnVjdHVyZSgpOwotICAgIFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0
dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+
c3RydWN0dXJlKCk7Ci0gICAgQVNTRVJUKG1faml0LmdyYXBoKCkud2F0Y2hwb2ludHMoKS5pc1Zh
bGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0KCkpKTsKICAgICAKLSAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChtX2ppdC5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSkp
IHsKKyAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkgewogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1Zh
bHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlTG9jYXRpb24sIFRydXN0ZWRJbW1Q
dHIoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOwogICAgIH0KLSAgICBtX2ppdC5hZGRMYXppbHko
Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChOb3RTdHJpbmdPYmplY3QpLAotICAgICAg
ICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwog
fQogCiAjZGVmaW5lIERGR19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBqdW1wVG9GYWlsKSBkbyB7IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9i
YmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAg
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJ3YXRjaHBvaW50IGNvbGxlY3Rpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5k
bGUoKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9u
b2RlLCBoYW5kbGVFZGdlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CisgICAgICAgICAgICBoYW5kbGVNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAg
ICAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpCisgICAgICAg
ICAgICAgICAgfHwgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBt
X25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAg
ICAgICAgIHx8IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNl
ICYmIG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkpCisgICAgICAgICAg
ICAgICAgaGFuZGxlTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEJy
YW5jaDoKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RPck90aGVyVXNlKQorICAgICAgICAgICAgICAgIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
QnlWYWw6CisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkRvdWJsZQorICAgICAgICAgICAgICAgICYmIG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5l
Q2hhaW4oKSkgeworICAgICAgICAgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+YXJy
YXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwor
ICAgICAgICAgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBl
KCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgICAgICAgICAgaGFuZGxlU3RyaW5nR2V0QnlW
YWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OgorICAgICAgICAgICAgaGFuZGxlU3RyaW5nR2V0QnlWYWwoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAg
IGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAg
ICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFz
QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgIGFk
ZExhemlseShnbG9iYWxPYmplY3QoKS0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQ6CisgICAgICAgICAgICBhZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24q
PihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygp
LmFkZExhemlseSgKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sCisgICAgICAg
ICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdl
YWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCA6IEJhZENhY2hlV2F0Y2hwb2ludCwKKyAgICAgICAg
ICAgICAgICBtX25vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGFkZExhemlseSgKKyAgICAgICAgICAgICAgICBnbG9i
YWxPYmplY3QoKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKV0pLndh
dGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICBhZGRMYXppbHkoZ2xv
YmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBoYW5kbGVFZGdlKE5vZGUqLCBFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNl
OiB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdCgpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaC53YXRjaHBvaW50cygpLmlzVmFsaWRPck1peGVkKHN0cmluZ1Byb3RvdHlwZVN0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIG1f
bm9kZS0+Y29kZU9yaWdpbiwgTm90U3RyaW5nT2JqZWN0LAorICAgICAgICAgICAgICAgIHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGhhbmRs
ZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9ub2RlLT5jb2RlT3Jp
Z2luKSkKKyAgICAgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlU3Ry
aW5nR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFnbG9iYWxP
YmplY3QoKS0+c3RyaW5nUHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKS0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICBhZGRMYXpp
bHkoZ2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hw
b2ludFNldCogc2V0KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseShzZXQpOworICAgIH0KKyAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0
JiBzZXQpCisgICAgeworICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNl
dCk7CisgICAgfQorICAgIAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+Y29kZU9y
aWdpbik7CisgICAgfQorICAgIAorICAgIE5vZGUqIG1fbm9kZTsKK307CisKK2Jvb2wgcGVyZm9y
bVdhdGNocG9pbnRDb2xsZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIFdhdGNocG9pbnQgQ29sbGVjdGlvbiBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBDb2xsZWN0cyBhbGwgZGVzaXJlZCB3YXRjaHBvaW50cyBp
bnRvIHRoZSBHcmFwaDo6d2F0Y2hwb2ludHMoKSBkYXRhIHN0cnVjdHVyZS4KKworYm9vbCBwZXJm
b3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxNTgx
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotdm9pZCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50Ojpjb3JyZWN0TGFiZWxzKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCi17Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVs
OwotICAgIGxhYmVsLm1fbGFiZWwubV9vZmZzZXQgPSBtX3NvdXJjZTsKLSAgICBtX3NvdXJjZSA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25PZihsYWJlbCkuZGF0
YUxvY2F0aW9uKCkpOwotICAgIGxhYmVsLm1fbGFiZWwubV9vZmZzZXQgPSBtX2Rlc3RpbmF0aW9u
OwotICAgIG1fZGVzdGluYXRpb24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobGFiZWwpLmRhdGFMb2NhdGlvbigpKTsKLX0KLQotdm9pZCBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQotewotICAgIHZvaWQqIHNvdXJjZSA9IGJp
dHdpc2VfY2FzdDx2b2lkKj4obV9zb3VyY2UpOwotICAgIHZvaWQqIGRlc3RpbmF0aW9uID0gYml0
d2lzZV9jYXN0PHZvaWQqPihtX2Rlc3RpbmF0aW9uKTsKLSAgICBpZiAoT3B0aW9uczo6c2hvd0Rp
c2Fzc2VtYmx5KCkpCi0gICAgICAgIGRhdGFMb2dGKCJGaXJpbmcganVtcCByZXBsYWNlbWVudCB3
YXRjaHBvaW50IGZyb20gJXAsIHRvICVwLlxuIiwgc291cmNlLCBkZXN0aW5hdGlvbik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbChzb3VyY2Up
LCBDb2RlTG9jYXRpb25MYWJlbChkZXN0aW5hdGlvbikpOwotICAgIGlmIChpc09uTGlzdCgpKQot
ICAgICAgICByZW1vdmUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaAkocmV2aXNpb24gMTU4MTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnRfaAotI2RlZmlu
ZSBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50X2gKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
LSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRl
ICJDb2RlTG9jYXRpb24uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRj
aHBvaW50IHsKLXB1YmxpYzoKLSAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkKLSAgICAg
ICAgOiBtX3NvdXJjZShzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKQotICAg
ICAgICAsIG1fZGVzdGluYXRpb24oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgo
KSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQoTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIHNvdXJjZSkKLSAgICAgICAgOiBtX3NvdXJjZShzb3VyY2UubV9s
YWJlbC5tX29mZnNldCkKLSAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludHB0cl90Pjo6bWF4KCkpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc291cmNlTGFiZWwoKSBjb25zdAotICAgIHsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxhYmVsOwotICAgICAgICBsYWJlbC5tX2xhYmVsLm1fb2Zmc2V0ID0gbV9z
b3VyY2U7Ci0gICAgICAgIHJldHVybiBsYWJlbDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRE
ZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAg
ICAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb24ubV9sYWJlbC5tX29mZnNldDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb3JyZWN0TGFiZWxzKExpbmtCdWZmZXImKTsKLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBmaXJlSW50ZXJuYWwoKSBPVkVSUklERTsKLQotcHJpdmF0ZToK
LSAgICB1aW50cHRyX3QgbV9zb3VyY2U7Ci0gICAgdWludHB0cl90IG1fZGVzdGluYXRpb247Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRp
ZiAvLyBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50X2gKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215414</attachid>
            <date>2013-10-29 13:21:20 -0700</date>
            <delta_ts>2013-10-29 14:40:03 -0700</delta_ts>
            <desc>fixed jettisoning logic</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114367</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxMy0xMC0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBKSVQgc2hvdWxkIHN1cHBvcnQgd2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY0NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29u
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4aXRLaW5kLmNwcDoKKyAgICAg
ICAgKEpTQzo6ZXhpdEtpbmRUb1N0cmluZyk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm9maWxlZENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
UHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ6OlByb2ZpbGVkQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OndyaXRlc092ZXJsYXApOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6OkFic3RyYWN0SGVhcE92ZXJsYXBz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXBPdmVybGFwczo6b3BlcmF0b3IoKSk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6OnJlc3VsdCk6CisgICAg
ICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRh
dGE6OmludmFsaWRhdGUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9uRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9p
bnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6
cmVhbGx5QWRkKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBv
aW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2U6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZTo6aGFuZGxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlOjppbnNlcnRJbnZhbGlkYXRp
b25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFz
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1l
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKdW1wUmVwbGFjZW1lbnQ6OmZpcmUp
OgorICAgICAgICAqIGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6SnVtcFJlcGxhY2VtZW50OjpKdW1wUmVwbGFjZW1lbnQpOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
Lmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlYWxseUFk
ZCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToK
KyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNh
ZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3Ro
ZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGVFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGVN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlOjpoYW5kbGVTdHJpbmdHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZH
OjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpnbG9iYWxPYmplY3QpOgorICAgICAgICAoSlND
OjpERkc6OnBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbik6CisgICAgICAgICogZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogaml0L0p1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50Lmg6IFJlbW92ZWQuCisKIDIwMTMtMTAtMjggIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBPU1JFeGl0OjptX3dhdGNocG9pbnRJbmRleCBz
aG91bGQgYmUgaW4gT1NSRXhpdENvbXBpbGF0aW9uSW5mbwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCiAg
ICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAogICAgIGJ5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3Bw
CisgICAgYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5
dGVjb2RlL0NvZGVPcmlnaW4uY3BwCiAgICAgYnl0ZWNvZGUvQ29kZVR5cGUuY3BwCiAgICAgYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCkBAIC02NCw2ICs2NSw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuY3BwCiAgICAgYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cAorICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNw
cAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNlV2hp
dGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCkBAIC0xMjQsOSArMTI2
LDExIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5j
cHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcAorICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAogICAg
IGRmZy9ERkdKSVRDb2RlLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKICAgICBkZmcv
REZHSklURmluYWxpemVyLmNwcAorICAgIGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCiAgICAg
ZGZnL0RGR0xJQ01QaGFzZS5jcHAKICAgICBkZmcvREZHTGF6eUpTVmFsdWUuY3BwCiAgICAgZGZn
L0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKQEAgLTE2OCw2ICsxNzIsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAogICAgIGRm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAogICAgIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1dvcmtsaXN0LmNwcAogCiAgICAgZGlzYXNzZW1ibGVyL0FSTXY3RGlz
YXNzZW1ibGVyLmNwcApAQCAtMjM2LDcgKzI0MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCiAgICAgaml0
L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAotICAgIGppdC9KdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LmNwcAogICAgIGppdC9SZWdpc3RlclNldC5jcHAKICAgICBqaXQv
UmVwYXRjaC5jcHAKICAgICBqaXQvVGVtcFJlZ2lzdGVyU2V0LmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1ODIwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNiArMTEyLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tIYXNoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tXaXRoSklUVHlwZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggXApAQCAtMTUwLDYgKzE1Miw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIFwK
QEAgLTI4NCw2ICsyODgsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0
aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmggXApAQCAtMjkxLDYgKzI5Nyw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAgXApAQCAtMzg5LDYgKzM5Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFkaWNGdW5jdGlvbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERP
cGNvZGUuY3BwIFwKQEAgLTY2NSw4ICs2NzUsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDAsNiArMzAwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxM
aW5rU3RhdHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxD
b2RlQmxvY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENv
ZGVCbG9ja0hhc2guY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+DQpA
QCAtMzEyLDYgKzMxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkU3RhdHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxS
ZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTYW1wbGluZ1Rvb2wuY3BwIiAvPg0KQEAgLTM4OCw3ICszOTAsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRDTG9vcC5jcHAiIC8+DQpAQCAt
NjQ1LDYgKzY0Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxs
UmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0hhc2guaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxvY2tXaXRoSklUVHlwZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5oIiAvPg0KQEAg
LTY2Nyw2ICs2NjksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bj
b2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJv
ZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0S2luZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVjZVdoaXRlc3BhY2UuaCIgLz4NCkBAIC03ODksNyArNzky
LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxK
SVRXcml0ZUJhcnJpZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSlNJ
bnRlcmZhY2VKSVQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludC5oIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxSZWdpc3RlclNldC5jcHAiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyU2V0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2gu
aCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU4MjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQAogCQkwRjc2NkQy
RjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERDREQwMDhG
MzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc2NkQzMDE1QThE
Q0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2
M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMjE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi87IH07Ci0JCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LzsgfTsKQEAgLTM4Nyw2ICszODUsMTYgQEAKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1
cHBvcnQuY3BwICovOyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3Ry
dW0uY3BwICovOyB9OworCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwICovOyB9OworCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyog
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDOTdGMzUxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVk
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMxMTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9m
aWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgKi87IH07CisJCTBGQzk3RjM2
MTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdG
MzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuY3BwICovOyB9OworCQkwRkM5N0YzRTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRh
dGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkM5N0YzRjE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJl
cGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzk3RjM5MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwICov
OyB9OworCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4
MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRkM5N0Y0MjE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyog
UGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJl
c3RvcmUuY3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJl
c3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTM3LDggKzE1NDUsNiBAQAog
CQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQzMjE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY3NjZEMzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQzNjE1
QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzcxNUFF
NEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1OCw2
ICsxNjY0LDE2IEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZDOTdGMzExODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2Zp
bGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkM5N0YzOTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0p1bXBSZXBsYWNlbWVudC5jcHA7
IHBhdGggPSBkZmcvREZHSnVtcFJlcGxhY2VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1wUmVwbGFjZW1lbnQuaDsg
cGF0aCA9IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzk3RjNDMTgyMDIx
MTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1
QiAvKiBQYXJzZXJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFBOTE4MDRDMTNF
MDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMU2F2ZVJlc3RvcmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3Jl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzQsOCArMjk1MCw2IEBACiAJ
CQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRl
QmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFj
ZUpJVC5oICovLAotCQkJCTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmNwcCAqLywKLQkJCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8q
IFJlZ2lzdGVyU2V0LmggKi8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0
Y2guY3BwICovLApAQCAtMzc2MCwxMiArMzc3NCwxNiBAQAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTcwNEQ5MDEx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYy
QkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzk3
RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcCAqLywKKwkJCQkwRkM5N0YzODE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5oICovLAogCQkJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21w
aWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBp
bGVyLmggKi8sCiAJCQkJQTc4QTk3NzAxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXpl
ci5jcHAgKi8sCiAJCQkJQTc4QTk3NzExNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXpl
ci5oICovLAorCQkJCTBGQzk3RjM5MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1l
bnQuY3BwICovLAorCQkJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFj
ZW1lbnQuaCAqLywKIAkJCQlBNzNBNTM1ODE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFs
dWUuY3BwICovLAogCQkJCUE3M0E1MzU5MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1
ZS5oICovLAogCQkJCUE3RDlBMjkyMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuY3Bw
ICovLApAQCAtMzg2NCw2ICszODgyLDggQEAKIAkJCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUg
LyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZD
OTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
aCAqLywKKwkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxl
Y3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjND
MUIgLyogREZHV29ya2xpc3QuY3BwICovLAogCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5oICovLAogCQkJKTsKQEAgLTM5NzYsNiArMzk5Niw4IEBACiAJCQkJOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGOEY5NDNEMTY2
NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLywKIAkJCQkwRjhGOTQzRTE2Njc2
MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5oICovLAorCQkJCTBGQzk3RjJGMTgyMDIwRDcw
MDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovLAorCQkJCTBG
Qzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
aCAqLywKIAkJCQkwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCAqLywKIAkJCQkwRjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAg
Ki8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLywKQEAg
LTQwMTYsNiArNDAzOCw4IEBACiAJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyog
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKIAkJCQkwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8sCisJCQkJMEZDOTdGMzExODIwMjBENzAwMkM5QjI2
IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLywKKwkJCQkw
RkM5N0YzMjE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLApA
QCAtNDIxOSw2ICs0MjQzLDcgQEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4
IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBCOEND
MDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludElu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJB
RDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDYx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzMzYsNiArNDM2MSw3IEBACiAJCQkJRERGN0FCRDQxMUY2MEVEMjAwMTA4RTM2IC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzAx
NUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
NjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNDQ4OCw2ICs0NTE0LDcgQEAKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkEw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZDOTdGMzYxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGRDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCkBAIC00NTA5LDcgKzQ1MzYsNiBAQAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2
QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3Jk
TG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyog
TGFiZWwuaCBpbiBIZWFkZXJzICovLApAQCAtNDU4Nyw2ICs0NjEzLDcgQEAKIAkJCQk5NjlBMDc5
QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMy
QzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0
N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDgg
LyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYw
IC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NjQ3LDYgKzQ2NzQsNyBAQAogCQkJCUJD
MThDNDVEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3MkIwRUQxQ0U2OTAwRjFGNjgxIC8qIFJlZ2lzdGVySUQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVw
YXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkND
IC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERC
NDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTE4MCw2ICs1MjA4
LDcgQEAKIAkJCQkxNDI4MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDRUZBQjExODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZN
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENh
bGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYg
LyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTIyNCw2ICs1MjUzLDcgQEAKIAkJ
CQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlv
blNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyog
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDOTdGMzUxODIwMjBE
NzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8q
IERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNF
RDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTI1OCw2ICs1Mjg4LDcgQEAKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzk3
RjNEMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENCMTMyOERGODIwMDJCMkFENyAvKiBERkdK
SVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3ODE3OTczOEI4MDA5REY3
NDQgLyogREZHSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0E1MzVBMTc5
OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU0
MDEsNiArNTQzMiw3IEBACiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2Rl
QmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlD
IC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0Y0MTE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkVEMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTQ0OSw3ICs1NDgxLDYg
QEAKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBw
ZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NjZEMzQxNUFFMjUzODAwOEYzNjNF
IC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNDIwREE0MzIyNTAwQkM4M0YzIC8qIExlZ2FjeVBy
b2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTQ5NCw2ICs1NTI1LDcgQEAKIAkJCQlBN0NB
M0FFMzE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM5N0YzRjE4MjAyMTE5MDAy
QzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTU4MjAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAgaW5saW5lIGJvb2wgaXNYODYoKQogI2Vu
ZGlmCiB9CiAKLWNsYXNzIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQ7CiBjbGFzcyBMaW5rQnVm
ZmVyOwogY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKIGNsYXNzIFdhdGNocG9pbnQ7CkBAIC0zNDIsNyAr
MzQxLDYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjsKICAgICAgICAgZnJpZW5kIHN0cnVjdCBERkc6Ok9TUkV4aXQ7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKdW1wOwotICAgICAgICBmcmllbmQgY2xhc3MgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludDsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYXRjaHBv
aW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzc1LDE2ICsyNzc1LDYgQEAgY29uc3Qg
U2xvd0FyZ3VtZW50KiBDb2RlQmxvY2s6Om1hY2hpbmVTbAogfQogCiAjaWYgRU5BQkxFKEpJVCkK
LXZvaWQgQ29kZUJsb2NrOjpyZW9wdGltaXplKCkKLXsKLSAgICBBU1NFUlQocmVwbGFjZW1lbnQo
KSAhPSB0aGlzKTsKLSAgICBBU1NFUlQocmVwbGFjZW1lbnQoKS0+YWx0ZXJuYXRpdmUoKSA9PSB0
aGlzKTsKLSAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0
YUxvZygqcmVwbGFjZW1lbnQoKSwgIiB3aWxsIGJlIGpldHRpc29uZWQgZHVlIHRvIHJlb3B0aW1p
emF0aW9uIG9mICIsICp0aGlzLCAiLlxuIik7Ci0gICAgcmVwbGFjZW1lbnQoKS0+amV0dGlzb24o
KTsKLSAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7Ci19Ci0KIENvZGVCbG9jayogUHJvZ3JhbUNv
ZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogewogICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwpAQCAtMjgxNywxNiArMjgw
Nyw1MyBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6CiAgICAgcmV0
dXJuIERGRzo6ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwogfQogCi12b2lk
IENvZGVCbG9jazo6amV0dGlzb24oKQordm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFJlb3B0aW1p
emF0aW9uTW9kZSBtb2RlKQogeworICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgp
KSB7CisgICAgICAgIGRhdGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzKTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikKKyAgICAgICAgICAgIGRhdGFMb2coIiBhbmQg
Y291bnRpbmcgcmVvcHRpbWl6YXRpb24iKTsKKyAgICAgICAgZGF0YUxvZygiLlxuIik7CisgICAg
fQorICAgIAogICAgIERlZmVyR0MgZGVmZXJHQygqbV9oZWFwKTsKLSAgICBBU1NFUlQoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwotICAgIEFTU0VSVCh0aGlzID09IHJlcGxh
Y2VtZW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5n
cyBoZXJlOgorICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9u
IHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CisgICAgLy8gICAg
d2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KKyAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBj
YWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29k
ZUJsb2NrLgorICAgIAorICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzIHRoZSBPU1ItZXhpdC1vbi1y
ZXR1cm4gcGFydCwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQKKyAgICAvLyB3
aGV0aGVyIHRoZSBpbnZhbGlkYXRpb24gaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgaWYgKCFq
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKKyAgICAgICAgLy8gTm90aGlu
ZyB0byBkbyBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuIFRoYXQgbWVhbnMg
dGhhdCB3ZSBjYW5ub3QgYmUKKyAgICAgICAgLy8gdGhlIG9wdGltaXplZCByZXBsYWNlbWVudC4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkKKyAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsK
KyAgICAKKyAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhl
IHVzZXIgd2FudGVkLgorICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsKKyAg
ICAgICAgYmFzZWxpbmVWZXJzaW9uKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
aWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisgICAgfQor
ICAgIAorICAgIC8vIE5vdyB0YWtlIGNhcmUgb2YgdGhlIGVudHJ5cG9pbnQuCisgICAgaWYgKHRo
aXMgIT0gcmVwbGFjZW1lbnQoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2Vy
ZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50cnkgY29k
ZQorICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgYWx0ZXJu
YXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0
ZXMoKTsKLSAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0
YUxvZygiSmV0dGlzb25pbmcgIiwgKnRoaXMsICIuXG4iKTsKICAgICBhbHRlcm5hdGl2ZSgpLT5p
bnN0YWxsKCk7CisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAg
IGRhdGFMb2coIiAgICBEaWQgaW5zdGFsbCBiYXNlbGluZSB2ZXJzaW9uIG9mICIsICp0aGlzLCAi
XG4iKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDYgQEAKICNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8u
aCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgpAQCAtOTIsNiArOTEsOCBA
QCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHVubW9kaWZpZWRBcmd1bWVuCiAKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGludCBtaXNzaW5nVGhpc09iamVjdE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAorZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBE
b250Q291bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OworCiBjbGFzcyBD
b2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGlj
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgY2xhc3MgSklUOwpAQCAt
Mjc3LDcgKzI3OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7CiAgICAgfQotICAgIHZvaWQgamV0dGlzb24oKTsKKyAg
ICAKKyAgICB2b2lkIGpldHRpc29uKFJlb3B0aW1pemF0aW9uTW9kZSA9IERvbnRDb3VudFJlb3B0
aW1pemF0aW9uKTsKICAgICAKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9
IDA7CiAKQEAgLTg1NSwxMCArODU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQWxsUHJl
ZGljdGlvbnMoKSB7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIHJlb3B0
aW1pemUoKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAg
ICB2b2lkIGR1bXBWYWx1ZVByb2ZpbGVzKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoKQoreworICAgIGlmIChERkc6OnNob3VsZFNob3dE
aXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJGaXJpbmcgd2F0Y2hwb2ludCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIG9uICIsICptX2NvZGVCbG9jaywgIlxuIik7CisKKyAgICBtX2NvZGVC
bG9jay0+amV0dGlzb24oQ291bnRSZW9wdGltaXphdGlvbik7CisKKyAgICBpZiAoaXNPbkxpc3Qo
KSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnRf
aAorI2RlZmluZSBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnRfaAorCisjaW5jbHVkZSAi
V2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworCitj
bGFzcyBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7
CitwdWJsaWM6CisgICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KCkKKyAgICAgICAg
OiBtX2NvZGVCbG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBmaXJlSW50ZXJuYWwoKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDYgKzc2LDggQEAgY29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQog
ICAgICAgICByZXR1cm4gIlVuY291bnRhYmxlIjsKICAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hw
b2ludDoKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZVdhdGNocG9pbnQiOworICAgIGNhc2Ug
VW5jb3VudGFibGVJbnZhbGlkYXRpb246CisgICAgICAgIHJldHVybiAiVW5jb3VudGFibGVJbnZh
bGlkYXRpb24iOwogICAgIGNhc2UgV2F0Y2hkb2dUaW1lckZpcmVkOgogICAgICAgICByZXR1cm4g
IldhdGNoZG9nVGltZXJGaXJlZCI7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3
IEBAIGVudW0gRXhpdEtpbmQgewogICAgIEFyZ3VtZW50c0VzY2FwZWQsIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIGFyZ3VtZW50cyBlc2NhcGVkIGJ1dCB3ZSBkaWRuJ3QgZXhwZWN0IHRoZW0gdG8uCiAg
ICAgTm90U3RyaW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2
ZSBhdHRlbXB0ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3MuCiAgICAgVW5jb3Vu
dGFibGUsIC8vIFdlIGV4aXRlZCBmb3Igbm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdl
IHNob3VsZCBub3QgY291bnQgaXQuIE1vc3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQg
YXMgYSBGSVhNRS4KKyAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJl
Y2F1c2UgdGhlIGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2Un
dmUgYWxyZWFkeSBjb3VudGVkIHRoZSByZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52
YWxpZGF0ZWQuCiAgICAgVW5jb3VudGFibGVXYXRjaHBvaW50LCAvLyBXZSBleGl0ZWQgYmVjYXVz
ZSBvZiBhIHdhdGNocG9pbnQsIHdoaWNoIGlzbid0IGNvdW50ZWQgYmVjYXVzZSB3YXRjaHBvaW50
cyBkbyB0cmFja2luZyB0aGVtc2VsdmVzLgogICAgIFdhdGNoZG9nVGltZXJGaXJlZCAvLyBXZSBl
eGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdhdGNoZG9nIHRpbWVyLgogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit2b2lkIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwoKQoreworICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAiRmlyaW5nIHByb2ZpbGVkIHdhdGNocG9pbnQgIiwgUmF3
UG9pbnRlcih0aGlzKSwgIiBvbiAiLCAqbV9jb2RlQmxvY2ssICIgZHVlIHRvICIsCisgICAgICAg
ICAgICBtX2V4aXRLaW5kLCAiIGF0ICIsIG1fY29kZU9yaWdpbiwgIlxuIik7CisgICAgfQorICAg
IAorICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCisg
ICAgICAgIG1fY29kZU9yaWdpbiwgbV9jb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKS0+YWRk
RnJlcXVlbnRFeGl0U2l0ZSgKKyAgICAgICAgICAgIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShtX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9leGl0S2luZCkpOworICAgIAorICAgIG1fY29kZUJs
b2NrLT5qZXR0aXNvbihDb3VudFJlb3B0aW1pemF0aW9uKTsKKworICAgIGlmIChpc09uTGlzdCgp
KQorICAgICAgICByZW1vdmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb2ZpbGVk
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50X2gKKyNkZWZpbmUgUHJvZmlsZWRDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnRfaAorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIkV4aXRLaW5kLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworCitjbGFzcyBQcm9maWxlZENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBQcm9m
aWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCgpCisgICAgICAgIDogbV9leGl0S2lu
ZChFeGl0S2luZFVuc2V0KQorICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCgKKyAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgICAgIDogbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgICwg
bV9leGl0S2luZChleGl0S2luZCkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisg
ICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZUludGVy
bmFsKCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47
CisgICAgRXhpdEtpbmQgbV9leGl0S2luZDsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9maWxlZENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUmVnRXhwU3Rh
dGUpIFwKICAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwK
KyAgICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIHRvIGluZGljYXRlIHRoYXQgdGhpcyBt
YXkgZmlyZSB3YXRjaHBvaW50cy4gVXN1YWxseSB0aGlzIGlzIG5ldmVyIGRpcmVjdGx5IHdyaXR0
ZW4gYnV0IGluc3RlYWQgd2UgdGVzdCB0byBzZWUgaWYgYSBub2RlIGNsb2JiZXJzIHRoaXM7IGl0
IGp1c3Qgc28gaGFwcGVucyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIHdvcmxkIHRvIGNsb2JiZXIg
aXQuICovXAorICAgIG1hY3JvKFdhdGNocG9pbnRfZmlyZSkgXAogICAgIC8qIFVzZSB0aGlzIGZv
ciByZWFkcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9i
YmVyZWQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCiAgICAgbWFjcm8o
TWlzY0ZpZWxkcykgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0byBp
bmRpY2F0ZSB0aGF0IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3MgYmVj
YXVzZSB3ZSBkb24ndCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0
IGFsbC4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTgyMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MzUsNiArMTUzNSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNTgyMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCwxNCBAQCBib29sIGRvZXNXcml0ZXMoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCitib29sIHdyaXRl
c092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdEhlYXAgaGVhcCkKK3sK
KyAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIEFic3RyYWN0SGVhcE92ZXJsYXBzIGFk
ZFdyaXRlKGhlYXApOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdy
aXRlKTsKKyAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1ODIwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsNiArMTM3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNrVGllclVwQW5k
T1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50
OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAgLTY2OSw2
ICs2NzAsMzAgQEAgcHJpdmF0ZToKIAogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwog
CitjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7CitwdWJsaWM6CisgICAgQWJzdHJhY3RIZWFw
T3ZlcmxhcHMoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAg
ICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwIG90aGVySGVhcCkKKyAgICB7CisgICAgICAgIGlmIChtX3Jlc3Vs
dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9yZXN1bHQgPSBtX2hlYXAub3Zlcmxh
cHMob3RoZXJIZWFwKTsKKyAgICB9CisgICAgCisgICAgYm9vbCByZXN1bHQoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3VsdDsgfQorCitwcml2YXRlOgorICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7Cisg
ICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK2Jvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUq
LCBBYnN0cmFjdEhlYXApOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTYgQEAg
dm9pZCBDb21tb25EYXRhOjpzaHJpbmtUb0ZpdCgpCiAgICAgdHJhbnNpdGlvbnMuc2hyaW5rVG9G
aXQoKTsKIH0KIAorYm9vbCBDb21tb25EYXRhOjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIWlz
U3RpbGxWYWxpZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9
IGp1bXBSZXBsYWNlbWVudHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBqdW1wUmVwbGFjZW1lbnRz
W2ldLmZpcmUoKTsKKyAgICBpc1N0aWxsVmFsaWQgPSBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2
aXNpb24gMTU4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1
ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5o
IgogI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIlByb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2lu
Y2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC02
OSwxMyArNzIsMTYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0YSgpCi0gICAgICAgIDogbWFj
aGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAg
ICA6IGlzU3RpbGxWYWxpZCh0cnVlKQorICAgICAgICAsIG1hY2hpbmVDYXB0dXJlU3RhcnQoc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICB7IH0KICAgICAKICAgICB2b2lkIG5v
dGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENvZGVCbG9jayosIE5vZGUq
KTsKICAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbik7CiAg
ICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIGJvb2wgaW52YWxpZGF0ZSgp
OyAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkIGludmFsaWRhdGUsIG9yIGZhbHNlIGlmIHRoZSBj
b2RlIGJsb2NrIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgogCiAgICAgT3duUHRyPElubGluZUNh
bGxGcmFtZVNldD4gaW5saW5lQ2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOwpAQCAtODMsMTAgKzg5LDE0IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9y
PFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOworICAgIFNlZ21lbnRlZFZlY3RvcjxDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOworICAgIFNlZ21l
bnRlZFZlY3RvcjxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCwgMSwgMD4g
cHJvZmlsZWRXYXRjaHBvaW50czsKKyAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVw
bGFjZW1lbnRzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBp
bGF0aW9uOwogICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBh
bmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJr
ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAgIGJvb2wgaXNTdGls
bFZhbGlkOwogICAgIAogICAgIGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTbG93QXJndW1lbnRbXT4gc2xvd0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlz
aW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDMwIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
IAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBv
aW50LCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6
aWx5KFdhdGNocG9pbnRTZXQqIHNldCkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5KFdhdGNocG9p
bnRGb3JXYXRjaHBvaW50U2V0KHdhdGNocG9pbnQsIHNldCkpOworICAgIG1fc2V0cy5hZGRMYXpp
bHkoc2V0KTsKIH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBv
aW50KiB3YXRjaHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKIHsKLSAgICBt
X2lubGluZVNldHMuYWRkTGF6aWx5KFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0KHdh
dGNocG9pbnQsICZzZXQpKTsKKyAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KCZzZXQpOwogfQog
Ci12b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKCkKK3ZvaWQgRGVzaXJlZFdhdGNo
cG9pbnRzOjphZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2lu
ZCwgV2F0Y2hwb2ludFNldCogc2V0KQogewotICAgIG1fc2V0cy5yZWFsbHlBZGQoKTsKLSAgICBt
X2lubGluZVNldHMucmVhbGx5QWRkKCk7CisgICAgbV9zZXRzLmFkZExhemlseShjb2RlT3JpZ2lu
LCBleGl0S2luZCwgc2V0KTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemls
eShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBJbmxpbmVXYXRjaHBv
aW50U2V0JiBzZXQpCit7CisgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBl
eGl0S2luZCwgJnNldCk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit7CisgICAgbV9z
ZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5saW5lU2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNTgyMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC00MCwyNCArNDMsMjQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+CiBzdHJ1Y3QgV2F0
Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0IHsKICAgICBXYXRjaHBvaW50Rm9yR2VuZXJp
Y1dhdGNocG9pbnRTZXQoKQotICAgICAgICA6IG1fd2F0Y2hwb2ludCgwKQorICAgICAgICA6IG1f
ZXhpdEtpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBtX3NldCgwKQogICAgIHsKICAgICB9
CiAgICAgCi0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KFdhdGNocG9pbnQq
IHdhdGNocG9pbnQsIFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgICAgIDogbV93YXRjaHBv
aW50KHdhdGNocG9pbnQpCisgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAor
ICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBv
aW50U2V0VHlwZSogc2V0KQorICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAg
ICAgICAsIG1fZXhpdEtpbmQoZXhpdEtpbmQpCiAgICAgICAgICwgbV9zZXQoc2V0KQogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgV2F0Y2hwb2ludCogbV93YXRjaHBvaW50OworICAgIENvZGVPcmln
aW4gbV9jb2RlT3JpZ2luOworICAgIEV4aXRLaW5kIG1fZXhpdEtpbmQ7CiAgICAgV2F0Y2hwb2lu
dFNldFR5cGUqIG1fc2V0OwogfTsKIAotdHlwZWRlZiBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQ8V2F0Y2hwb2ludFNldD4gV2F0Y2hwb2ludEZvcldhdGNocG9pbnRTZXQ7Ci10eXBl
ZGVmIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxJbmxpbmVXYXRjaHBvaW50U2V0
PiBXYXRjaHBvaW50Rm9ySW5saW5lV2F0Y2hwb2ludFNldDsKLQogdGVtcGxhdGU8dHlwZW5hbWUg
V2F0Y2hwb2ludFNldFR5cGU+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKQEAgLTcw
LDI1ICs3Myw1MyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZExh
emlseShjb25zdCBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNl
dFR5cGU+JiB3YXRjaHBvaW50KQorICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXRUeXBl
KiBzZXQpCisgICAgeworICAgICAgICBtX3NldHMuYWRkKHNldCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQs
IFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCiAgICAgewotICAgICAgICBtX3dhdGNocG9pbnRzLmFw
cGVuZCh3YXRjaHBvaW50KTsKKyAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzLmFwcGVuZCgK
KyAgICAgICAgICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50
U2V0VHlwZT4oY29kZU9yaWdpbiwgZXhpdEtpbmQsIHNldCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHJlYWxseUFkZCgpCisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbW1vbkRhdGEmIGNvbW1vbikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jl
YWxseUFkZGVkKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXpl
KCk7IGktLTspCi0gICAgICAgICAgICBtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5hZGQobV93YXRj
aHBvaW50c1tpXS5tX3dhdGNocG9pbnQpOworICAgICAgICAKKyAgICAgICAgdHlwZW5hbWUgSGFz
aFNldDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRvciBpdGVyID0gbV9zZXRzLmJlZ2luKCk7
CisgICAgICAgIHR5cGVuYW1lIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9zZXRzLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICAgICAgY29tbW9uLndhdGNocG9pbnRzLmFwcGVuZChDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICAoKml0ZXIpLT5hZGQoJmNv
bW1vbi53YXRjaHBvaW50cy5sYXN0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNl
dFR5cGU+IHdhdGNocG9pbnQgPQorICAgICAgICAgICAgICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50
c1tpXTsKKyAgICAgICAgICAgIGNvbW1vbi5wcm9maWxlZFdhdGNocG9pbnRzLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCh3YXRj
aHBvaW50Lm1fY29kZU9yaWdpbiwgd2F0Y2hwb2ludC5tX2V4aXRLaW5kLCBjb2RlQmxvY2spKTsK
KyAgICAgICAgICAgIHdhdGNocG9pbnQubV9zZXQtPmFkZCgmY29tbW9uLnByb2ZpbGVkV2F0Y2hw
b2ludHMubGFzdCgpKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRl
ZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0CiAg
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3dhdGNocG9pbnRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgaWYgKG1fd2F0Y2hwb2ludHNbaV0ubV9zZXQtPmhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICB0eXBlbmFtZSBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldHMuYmVnaW4oKTsKKyAgICAgICAgdHlwZW5hbWUgSGFzaFNl
dDxXYXRjaHBvaW50U2V0VHlwZSo+OjppdGVyYXRvciBlbmQgPSBtX3NldHMuZW5kKCk7CisgICAg
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoKCppdGVy
KS0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVk
V2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9wcm9maWxlZFdh
dGNocG9pbnRzW2ldLm1fc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKQEAgLTEyNiw3ICsxNTcsOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFZlY3RvcjxXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hw
b2ludFNldFR5cGU+PiBtX3dhdGNocG9pbnRzOworICAgIFZlY3RvcjxXYXRjaHBvaW50Rm9yR2Vu
ZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+PiBtX3Byb2ZpbGVkV2F0Y2hwb2lu
dHM7CisgICAgSGFzaFNldDxXYXRjaHBvaW50U2V0VHlwZSo+IG1fc2V0czsKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYKQEAgLTEz
OCwxMCArMTcwLDEyIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMoKTsKICAgICB+
RGVzaXJlZFdhdGNocG9pbnRzKCk7CiAgICAgCi0gICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2lu
dCosIFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50KiwgSW5s
aW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXQqKTsK
KyAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgdm9pZCBhZGRM
YXppbHkoQ29kZU9yaWdpbiwgRXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqKTsKKyAgICB2b2lkIGFk
ZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYpOwogICAg
IAotICAgIHZvaWQgcmVhbGx5QWRkKCk7CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwg
Q29tbW9uRGF0YSYpOwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0OwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNiArODg1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgICAgICBjYXNlIEludDUyVG9Eb3Vi
bGU6CiAgICAgICAgIGNhc2UgSW50NTJUb1ZhbHVlOgorICAgICAgICBjYXNlIEludmFsaWRhdGlv
blBvaW50OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKKyAgICAKK3B1YmxpYzoKKyAgICBJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImludmFsaWRhdGlvbiBwb2ludCBp
bmplY3Rpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtICE9IFNTQSk7CisgICAgICAgIAorICAgICAgICBCaXRWZWN0b3IgYmxvY2tzVGhhdE5lZWRJ
bnZhbGlkYXRpb25Qb2ludHM7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgaGFuZGxlKG5vZGVJ
bmRleCwgYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBOb3RlOiB0aGlzIGFzc3VtZXMgdGhhdCBjb250cm9sIGZsb3cgb2NjdXJzIGF0IGJ5dGVjb2Rl
IGluc3RydWN0aW9uIGJvdW5kYXJpZXMuCisgICAgICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFk
RmlyZS5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzVGhhdE5l
ZWRJbnZhbGlkYXRpb25Qb2ludHMuc2V0KGJsb2NrLT5zdWNjZXNzb3IoaSktPmluZGV4KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgaWYgKCFibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5nZXQoYmxvY2tJ
bmRleCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGluc2VydEludmFsaWRhdGlvbkNoZWNrKDAsIGJsb2NrLT5hdCgwKSk7CisgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxl
KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChtX29y
aWdpblRoYXRIYWRGaXJlLmlzU2V0KCkgJiYgbV9vcmlnaW5UaGF0SGFkRmlyZSAhPSBub2RlLT5j
b2RlT3JpZ2luKSB7CisgICAgICAgICAgICBpbnNlcnRJbnZhbGlkYXRpb25DaGVjayhub2RlSW5k
ZXgsIG5vZGUpOworICAgICAgICAgICAgbV9vcmlnaW5UaGF0SGFkRmlyZSA9IENvZGVPcmlnaW4o
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHdyaXRlc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgV2F0Y2hwb2ludF9maXJlKSkKKyAgICAgICAgICAgIG1fb3JpZ2luVGhhdEhhZEZp
cmUgPSBub2RlLT5jb2RlT3JpZ2luOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEludmFs
aWRhdGlvbkNoZWNrKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgSW52YWxp
ZGF0aW9uUG9pbnQsIG5vZGUtPmNvZGVPcmlnaW4pOworICAgIH0KKyAgICAKKyAgICBDb2RlT3Jp
Z2luIG1fb3JpZ2luVGhhdEhhZEZpcmU7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OworfTsKKworYm9vbCBwZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmIGdy
YXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgSW52YWxpZGF0
aW9uIFBvaW50IEluamVjdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxJbnZhbGlk
YXRpb25Qb2ludEluamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50
SW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlX2gKKyNkZWZp
bmUgREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGFuIGludmFsaWRhdGlv
biBjaGVjayBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSBDb2RlT3JpZ2luIHRoYXQgZm9sbG93cyBh
IENvZGVPcmlnaW4KKy8vIHRoYXQgaGFkIGEgY2FsbCAoY2xvYmJlcmVkIFdvcmxkKS4KKworYm9v
bCBwZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw2IEBACiAjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgogI2luY2x1ZGUgIkV4
ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCi0jaW5jbHVkZSAiSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtODgsMTMgKzg3LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBh
cHBlbmRXYXRjaHBvaW50KGNvbnN0IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQmIHdhdGNocG9p
bnQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSB3YXRjaHBvaW50cy5zaXplKCk7
Ci0gICAgICAgIHdhdGNocG9pbnRzLmFwcGVuZCh3YXRjaHBvaW50KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCByZWNvbnN0cnVjdCgKICAgICAgICAgQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiByZXN1bHQpOwogICAgIApAQCAtMTI3LDcgKzExOSw2IEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxERkc6Ok9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25S
ZWNvdmVyeT4gc3BlY3VsYXRpb25SZWNvdmVyeTsKLSAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hwb2ludHM7CiAgICAgREZHOjpWYXJpYWJs
ZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBo
IG1pbmlmaWVkREZHOwogI2lmIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1ODIwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NiwxMSArNjYsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhp
dENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOwot
ICAgICAgICAgICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKSB7CisgICAgICAgICAgICBpZiAoIWluZm8ubV9mYWlsdXJl
SnVtcHMuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBpbmZvLm1fZmFpbHVyZUp1bXBzLmp1bXBzKCkuc2l6ZSgpOyArK2opCiAgICAgICAgICAgICAg
ICAgICAgIGxhYmVscy5hcHBlbmQoaW5mby5tX2ZhaWx1cmVKdW1wcy5qdW1wcygpW2pdLmxhYmVs
KCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZCht
X2ppdENvZGUtPndhdGNocG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLnNvdXJjZUxhYmVs
KCkpOworICAgICAgICAgICAgICAgIGxhYmVscy5hcHBlbmQoaW5mby5tX3JlcGxhY2VtZW50U291
cmNlKTsKICAgICAgICAgICAgIG1fZXhpdFNpdGVMYWJlbHMuYXBwZW5kKGxhYmVscyk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC03OSwxMSArNzksMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09T
UkV4aXRzKCkKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsK
ICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9u
SW5mb1tpXTsKICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJl
SnVtcHM7Ci0gICAgICAgIEFTU0VSVChmYWlsdXJlSnVtcHMuZW1wdHkoKSA9PSAoaW5mby5tX3dh
dGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsK
LSAgICAgICAgaWYgKGluZm8ubV93YXRjaHBvaW50SW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgpKQog
ICAgICAgICAgICAgZmFpbHVyZUp1bXBzLmxpbmsodGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1faml0Q29kZS0+d2F0Y2hwb2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRleF0uc2V0
RGVzdGluYXRpb24obGFiZWwoKSk7CisgICAgICAgICAgICBpbmZvLm1fcmVwbGFjZW1lbnREZXN0
aW5hdGlvbiA9IGxhYmVsKCk7CiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7
CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsK
ICAgICAgICAgZXhpdC5zZXRQYXRjaGFibGVDb2RlT2Zmc2V0KHBhdGNoYWJsZUp1bXAoKSk7CkBA
IC0yNTcsOCArMjU2LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4aXQuZ2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldEFzSnVtcCgpLCB0YXJnZXQpOwogICAgICAgICBleGl0LmNvcnJlY3RKdW1wKGxpbmtC
dWZmZXIpOwotICAgICAgICBpZiAoaW5mby5tX3dhdGNocG9pbnRJbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgICAgICBtX2ppdENvZGUtPndhdGNo
cG9pbnRzW2luZm8ubV93YXRjaHBvaW50SW5kZXhdLmNvcnJlY3RMYWJlbHMobGlua0J1ZmZlcik7
CisgICAgICAgIGlmIChpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgeworICAgICAg
ICAgICAgbV9qaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxh
Y2VtZW50KAorICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1fcmVw
bGFjZW1lbnRTb3VyY2UpLAorICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmZvLm1fcmVwbGFjZW1lbnREZXN0aW5hdGlvbikpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NiwxNSArMTE2LDYgQEAgcHVibGljOgogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJvcGVydGllcy4K
ICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCi0gICAgdm9pZCBh
ZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0Y2hwb2ludFNldCogc2V0KQotICAg
IHsKLSAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50LCBz
ZXQpOwotICAgIH0KLSAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBJ
bmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi0gICAgewotICAgICAgICBtX2dyYXBoLndhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7Ci0gICAgfQotICAgIAogICAgIC8vIE1l
dGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxlci4KICAgICB2b2lkIHNldFN0
YXJ0T2ZDb2RlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0p1
bXBSZXBsYWNlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IEp1bXBSZXBsYWNlbWVudDo6ZmlyZSgpCit7CisgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3Nl
bWJseSgpKQorICAgICAgICBkYXRhTG9nRigiRmlyaW5nIGp1bXAgcmVwbGFjZW1lbnQgd2F0Y2hw
b2ludCBmcm9tICVwLCB0byAlcC5cbiIsIG1fc291cmNlLmRhdGFMb2NhdGlvbigpLCBtX2Rlc3Rp
bmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhK
dW1wKG1fc291cmNlLCBtX2Rlc3RpbmF0aW9uKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSnVtcFJlcGxhY2VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0p1bXBSZXBsYWNlbWVudF9oCisjZGVmaW5lIERGR0p1bXBS
ZXBsYWNlbWVudF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVMb2Nh
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEp1bXBS
ZXBsYWNlbWVudCB7CitwdWJsaWM6CisgICAgSnVtcFJlcGxhY2VtZW50KENvZGVMb2NhdGlvbkxh
YmVsIHNvdXJjZSwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgICAgIDogbV9z
b3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAg
eworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpcmUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlTG9j
YXRpb25MYWJlbCBtX3NvdXJjZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2Rlc3RpbmF0aW9u
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdKdW1wUmVwbGFjZW1lbnRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDcgKzg5LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhH
ZXRMb2NhbFVubGlua2VkLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyogTWFya2VyIGZv
ciBhbiBhcmd1bWVudCBiZWluZyBzZXQgYXQgdGhlIHByb2xvZ3VlIG9mIGEgZnVuY3Rpb24uICov
XAotICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFj
cm8oU2V0QXJndW1lbnQsIE5vZGVEb2VzTm90RXhpdCkgXAorICAgIFwKKyAgICAvKiBNYXJrZXIg
b2YgbG9jYXRpb24gaW4gdGhlIElSIHdoZXJlIHdlIG1heSBwb3NzaWJseSBwZXJmb3JtIGp1bXAg
cmVwbGFjZW1lbnQgdG8gKi9cCisgICAgLyogaW52YWxpZGF0ZSB0aGlzIGNvZGUgYmxvY2suICov
XAorICAgIG1hY3JvKEludmFsaWRhdGlvblBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
XAogICAgIC8qIE5vZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJp
dEFuZCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmgJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsOSBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV93YXRj
aHBvaW50SW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgIHsK
LSAgICB9Ci0gICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZUp1bXBz
OwotICAgIHVuc2lnbmVkIG1fd2F0Y2hwb2ludEluZGV4OworICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3JlcGxhY2VtZW50U291cmNlOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Jl
cGxhY2VtZW50RGVzdGluYXRpb247CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTcsNyArMTA5Nyw3IEBAIGV4dGVybiAiQyIgdm9pZCBK
SVRfT1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNv
ZGVCbG9jay0+cmVvcHRpbWl6ZSgpOworICAgIG9wdGltaXplZENvZGVCbG9jay0+amV0dGlzb24o
Q291bnRSZW9wdGltaXphdGlvbik7CiB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU4MjAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkRG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5o
IgorI2luY2x1ZGUgIkRGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIKICNpbmNs
dWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR0xJQ01QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgpAQCAtNTYsNiArNTcsNyBAQAogI2luY2x1
ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2lu
Y2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMu
aCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CkBAIC0xODcsNiArMTg5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJ
blRocgogICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAgICBw
ZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3JtVHlwZUNo
ZWNrSG9pc3RpbmcoZGZnKTsKICAgICAKICAgICB1bnNpZ25lZCBjb3VudCA9IDE7CkBAIC0yMjgs
NyArMjMxLDI0IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIERGR01vZGU6IHsKICAgICAgICAgcGVyZm9ybVRp
ZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7Ci0gICAgICAgIGJyZWFrOworCisgICAgICAgIHBlcmZv
cm1DUFNSZXRocmVhZGluZyhkZmcpOworICAgICAgICBwZXJmb3JtRENFKGRmZyk7CisgICAgICAg
IHBlcmZvcm1TdGFja0xheW91dChkZmcpOworICAgICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvbihkZmcpOworICAgICAgICBwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oZGZn
KTsKKyAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGFmdGVyIG9wdGltaXph
dGlvbjoiKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGRmZyk7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGRh
dGFGbG93SklULmxpbmtGdW5jdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZGF0YUZsb3dKSVQuY29tcGlsZSgpOworICAgICAgICAgICAgZGF0YUZsb3dKSVQubGluaygpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gREZHUGF0aDsKICAgICB9CiAgICAg
CiAgICAgY2FzZSBGVExNb2RlOgpAQCAtMjUzLDYgKzI3Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
ZGZnKTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAg
ICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybVdh
dGNocG9pbnRDb2xsZWN0aW9uKGRmZyk7CiAgICAgICAgIAogICAgICAgICBkdW1wQW5kVmVyaWZ5
R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOwogICAgICAgICAK
QEAgLTI4MCwzMSArMzAxLDE0IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAjZWxzZQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZhaWxQ
YXRoOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgIH0KICAgICAgICAgCiAgICAgZGVm
YXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwotICAgIHBl
cmZvcm1EQ0UoZGZnKTsKLSAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKLSAgICBwZXJmb3Jt
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwotICAgIGR1bXBBbmRWZXJpZnlHcmFwaChk
ZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7Ci0KLSAgICBKSVRDb21waWxlciBkYXRh
Rmxvd0pJVChkZmcpOwotICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7Ci0gICAgICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbigpOwotICAgICAgICBk
YXRhRmxvd0pJVC5saW5rRnVuY3Rpb24oKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkYXRhRmxv
d0pJVC5jb21waWxlKCk7Ci0gICAgICAgIGRhdGFGbG93SklULmxpbmsoKTsKKyAgICAgICAgcmV0
dXJuIEZhaWxQYXRoOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gREZHUGF0aDsKIH0KIAogYm9v
bCBQbGFuOjppc1N0aWxsVmFsaWQoKQpAQCAtMzE1LDcgKzMxOSw3IEBAIGJvb2wgUGxhbjo6aXNT
dGlsbFZhbGlkKCkKIAogdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29tbW9uRGF0YSogY29tbW9uRGF0
YSkKIHsKLSAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKKyAgICB3YXRjaHBvaW50cy5yZWFs
bHlBZGQoY29kZUJsb2NrLmdldCgpLCAqY29tbW9uRGF0YSk7CiAgICAgaWRlbnRpZmllcnMucmVh
bGx5QWRkKHZtLCBjb21tb25EYXRhKTsKICAgICB3ZWFrUmVmZXJlbmNlcy5yZWFsbHlBZGQodm0s
IGNvbW1vbkRhdGEpOwogICAgIHRyYW5zaXRpb25zLnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxMiw3ICs1MTIsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBdFJldHVybjoKLSAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OiB7CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICAgICAgY2FzZSBJ
bnZhbGlkYXRpb25Qb2ludDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZl
ciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAg
ICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1ODIwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgog
ICAgIGNhc2UgSW50NTJUb1ZhbHVlOgorICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsOCArMjY0LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBpZiAoIWlzS25vd25DZWxs
KG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKIAotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCk7Ci0KICAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkg
OiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTMzMSw4ICszMjksNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGlmICgh
aXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQoKTsKLSAgICAgICAgCiAgICAgICAgIGp1bXAoaW52ZXJ0ID8gdGFr
ZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1w
b3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CkBAIC0xNTE5LDcgKzE1MTUsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZv
ck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAg
ICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEo
KSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCkBAIC0xNTkzLDcgKzE1ODgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCkBAIC0xNjIwLDcgKzE2MTQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJy
YW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50
Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCkBAIC0xNjk4LDcgKzE2OTEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCkBAIC0xNzI1LDcgKzE3MTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5j
aCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCkBAIC0xODcyLDcgKzE4NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0T3JPdGhlCiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRWYWxpZCkgewotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCkBA
IC0yMDE2LDggKzIwMDYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCgpOwotCiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IApAQCAtMjczOCwxNyArMjcyNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5h
cnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGUo
KS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKICAgICAgICAgICAgIApAQCAtMzUyNCwxMCArMzUwMSw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlz
SGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSkgewotICAgICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5n
QUJhZFRpbWVXYXRjaHBvaW50KCkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbm9kZS0+aW5kZXhpbmdU
eXBlKCkpOwogICAgICAgICAgICAgQVNTRVJUKApAQCAtMzY5OSwxMCArMzY3Miw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5V2l0
aFNpemU6IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBpZiAoIWds
b2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS0+
aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKQEAgLTM3NzQsMTAgKzM3NDMsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKTsKICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmlu
ZGV4aW5nVHlwZSgpOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGlt
ZSgpICYmICFoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgbV9q
aXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAot
ICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCkp
OwotICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUt
Pm51bUNvbnN0YW50cygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwpAQCAtMzkyMCw5ICszODg1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnQ6IHsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAg
ICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICBqc0Nhc3Q8SlNGdW5jdGlv
bio+KG5vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MTk1
LDEwICs0MTU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KICAgICAgICAgCiAgICAgICAgIG1faml0
LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBtX2ppdC5hZGRM
YXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29uc3Rh
bnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNocG9pbnQpLAotICAgICAgICAgICAgbm9k
ZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwogCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtNDM2OCwxMCArNDMyNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6
IHsKLSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQoCi0gICAgICAgICAgICBpZGVudGlm
aWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpKSkud2F0Y2hwb2ludFNldCgp
OwotICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNldCk7
Ci0gICAgICAgIAogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKQEAgLTQzODgsOSArNDM0Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6IHsK
LSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCk7Ci0gICAgICAgIG1faml0LmFk
ZExhemlseShzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwgc2V0KTsKLSAgICAgICAgCiAgICAgICAg
IG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDI2LDcgKzQzNzcs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlz
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQ7CiAgICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRG
b3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00OTU4LDYgKzQ5
MDgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
SW52YWxpZGF0aW9uUG9pbnQ6CisgICAgICAgIGVtaXRJbnZhbGlkYXRpb25Qb2ludChub2RlKTsK
KyAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAw
LDI2ICsyMDAsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1
bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAotSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0SW52YWxpZGF0aW9uUG9pbnQoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9jYW5FeGl0
KTsKKyAgICBBU1NFUlQobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0
aW9uKTsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhp
dEluZm8oSklUQ29tcGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBw
ZW5kT1NSRXhpdChPU1JFeGl0KAotICAgICAgICBraW5kLCBqc1ZhbHVlU291cmNlLAorICAgICAg
ICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJjZSgpLAogICAgICAgICBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksCiAgICAgICAg
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKLSAgICBpbmZvLm1fd2F0Y2hwb2ludEluZGV4ID0g
bV9qaXQuaml0Q29kZSgpLT5hcHBlbmRXYXRjaHBvaW50KAotICAgICAgICBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50KG1faml0LndhdGNocG9pbnRMYWJlbCgpKSk7Ci0gICAgaWYgKG1fc3BlY3Vs
YXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFz
dE9TUkV4aXRUb0ZvcndhcmQoKTsKLSAgICByZXR1cm4gJm1faml0LmppdENvZGUoKS0+d2F0Y2hw
b2ludHNbaW5mby5tX3dhdGNocG9pbnRJbmRleF07Ci19Ci0KLUp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQga2lu
ZCkKLXsKLSAgICByZXR1cm4gc3BlY3VsYXRpb25XYXRjaHBvaW50KGtpbmQsIEpTVmFsdWVTb3Vy
Y2UoKSwgMCk7CisgICAgaW5mby5tX3JlcGxhY2VtZW50U291cmNlID0gbV9qaXQud2F0Y2hwb2lu
dExhYmVsKCk7CisgICAgQVNTRVJUKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZS5pc1NldCgpKTsK
KyAgICBub1Jlc3VsdChub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCkBA
IC0xMzUzLDggKzEzNDcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAobWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7Ci0KICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIApA
QCAtMjAwNCwxOCArMTk5Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uU3QKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzKCkpIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKLSAgICAgICAgaWYgKGdsb2JhbE9i
amVjdC0+c3RyaW5nUHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkgewotICAgICAgICAgICAgbV9qaXQu
YWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAg
ICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgIG1faml0LmFkZExhemls
eSgKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBBU1NFUlQoQXJy
YXlNb2RlKEFycmF5OjpTdHJpbmcpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUs
IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNv
bXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNl
cyB0aGF0IGFyZSB0b28gbGFyZ2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1ODIwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDIw
ICsyODQsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCku
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7
CiAgICAgfQotICAgIHZvaWQgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQotICAgIHsKLSAgICAgICAgbV9q
aXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7Ci0gICAgfQogICAgIGJvb2wgbWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pOwogICAgIH0KLSAgICB2b2lkIHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRpb25X
YXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKTsKLSAgICB9CiAKICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxp
ZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwq
IHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlk
R1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTIxMzEsMTYg
KzIxMjEsOCBAQCBwdWJsaWM6CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBh
ZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwogICAgIHZvaWQgYmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgLy8g
VXNlIHRoaXMgbGlrZSB5b3Ugd291bGQgdXNlIHNwZWN1bGF0aW9uQ2hlY2soKSwgZXhjZXB0IHRo
YXQgeW91IGRvbid0IHBhc3MgaXQgYSBqdW1wCi0gICAgLy8gKGJlY2F1c2UgeW91IGRvbid0IGhh
dmUgdG8gZXhlY3V0ZSBhIGJyYW5jaDsgdGhhdCdzIGtpbmQgb2YgdGhlIHdob2xlIHBvaW50KSwg
YW5kIHlvdQotICAgIC8vIG11c3QgcmVnaXN0ZXIgdGhlIHJldHVybmVkIFdhdGNocG9pbnQgd2l0
aCBzb21ldGhpbmcgcmVsZXZhbnQuIEluIGdlbmVyYWwsIHRoaXMgc2hvdWxkCi0gICAgLy8gYmUg
dXNlZCB3aXRoIGV4dHJlbWUgY2FyZS4gVXNlIHNwZWN1bGF0aW9uQ2hlY2soKSB1bmxlc3MgeW91
J3ZlIGdvdCBhbiBhbWF6aW5nIHJlYXNvbgotICAgIC8vIG5vdCB0by4KLSAgICBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQsIEpTVmFsdWVT
b3VyY2UsIE5vZGUqKTsKLSAgICAvLyBUaGUgZGVmYXVsdCBmb3Igc3BlY3VsYXRpb24gd2F0Y2hw
b2ludHMgaXMgdGhhdCB0aGV5J3JlIHVuY291bnRlZCwgYmVjYXVzZSB0aGUKLSAgICAvLyBhY3Qg
b2YgZmlyaW5nIGEgd2F0Y2hwb2ludCBpbnZhbGlkYXRlcyBpdC4gU28sIGZ1dHVyZSByZWNvbXBp
bGF0aW9ucyB3aWxsIG5vdAotICAgIC8vIGF0dGVtcHQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBh
Z2Fpbi4KLSAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9p
bnQoRXhpdEtpbmQgPSBVbmNvdW50YWJsZVdhdGNocG9pbnQpOworICAgIAorICAgIHZvaWQgZW1p
dEludmFsaWRhdGlvblBvaW50KE5vZGUqKTsKICAgICAKICAgICAvLyBJdCBpcyBnZW5lcmFsbHkg
YSBnb29kIGlkZWEgdG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LgogICAgIHZvaWQgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgp
KTsKQEAgLTMwMjIsMTggKzMwMDQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT2JqZQogewogICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KICAg
ICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5z
dHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0
cnVjdHVyZSA9IHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxs
KCktPnN0cnVjdHVyZSgpOwotICAgIEFTU0VSVChtX2ppdC5ncmFwaCgpLndhdGNocG9pbnRzKCku
aXNWYWxpZE9yTWl4ZWQoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKSk7CiAgICAgCi0gICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobV9qaXQuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUo
KSkpKSB7CisgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwg
SlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUxvY2F0aW9uLCBUcnVzdGVk
SW1tUHRyKHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKTsKICAgICB9Ci0gICAgbV9qaXQuYWRkTGF6
aWx5KAotICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoTm90U3RyaW5nT2JqZWN0KSwKLSAg
ICAgICAgc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KTsKIH0KIAogI2RlZmluZSBERkdfVFlQRV9DSEVDSyhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2Vk
VGhyb3VnaCwganVtcFRvRmFpbCkgZG8geyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xs
ZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiREZH
Q2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgor
ICAgIFdhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCAid2F0Y2hwb2ludCBjb2xsZWN0aW9uIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBoYW5kbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
aGFuZGxlKCkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgs
IG1fbm9kZSwgaGFuZGxlRWRnZSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
b3AoKSkgeworICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBjYXNlIElz
VW5kZWZpbmVkOgorICAgICAgICAgICAgaGFuZGxlTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6
CisgICAgICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQorICAg
ICAgICAgICAgICAgIHx8IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Ug
JiYgbV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkKKyAgICAg
ICAgICAgICAgICB8fCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhl
clVzZSAmJiBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpKQorICAgICAg
ICAgICAgICAgIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgY2Fz
ZSBCcmFuY2g6CisgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
T2JqZWN0T3JPdGhlclVzZSkKKyAgICAgICAgICAgICAgICBoYW5kbGVNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEdldEJ5VmFsOgorICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpEb3VibGUKKyAgICAgICAgICAgICAgICAmJiBtX25vZGUtPmFycmF5TW9kZSgpLmlz
U2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCkt
PmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KTsKKyAgICAgICAgICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICAgICAgICAgIGhhbmRsZVN0cmluZ0dl
dEJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKKyAgICAgICAgICAgIGhhbmRsZVN0cmluZ0dldEJ5VmFsKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5ld0FycmF5OgorICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6
CisgICAgICAgICAgICBpZiAoIWdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAg
ICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5KGpzQ2FzdDxKU0Z1bmN0
aW9uKj4obV9ub2RlLT5mdW5jdGlvbigpKS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBC
YWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNocG9pbnQsCisgICAg
ICAgICAgICAgICAgbV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdsb2Jh
bFZhcldhdGNocG9pbnQ6CisgICAgICAgICAgICBhZGRMYXppbHkoCisgICAgICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0KCktPnN5bWJvbFRhYmxlKCktPmdldCgKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCld
KS53YXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5
KGdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlRWRnZShOb2RlKiwgRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIFN0cmluZ09iamVjdFVzZToKKyAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZTogeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmluZ09iamVjdFN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVT
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKKyAgICAgICAgICAgICAg
ICBtX25vZGUtPmNvZGVPcmlnaW4sIE5vdFN0cmluZ09iamVjdCwKKyAgICAgICAgICAgICAgICBz
dHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBo
YW5kbGVNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBo
Lm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+Y29k
ZU9yaWdpbikpCisgICAgICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGhhbmRs
ZVN0cmluZ0dldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZ2xv
YmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZUNoYWluSXNTYW5lKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBl
KCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgYWRk
TGF6aWx5KGdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYWRkTGF6aWx5KFdh
dGNocG9pbnRTZXQqIHNldCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5h
ZGRMYXppbHkoc2V0KTsKKyAgICB9CisgICAgdm9pZCBhZGRMYXppbHkoSW5saW5lV2F0Y2hwb2lu
dFNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemls
eShzZXQpOworICAgIH0KKyAgICAKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPmNv
ZGVPcmlnaW4pOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBtX25vZGU7Cit9OworCitib29sIHBl
cmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBXYXRjaHBvaW50IENvbGxlY3Rpb24gUGhhc2UiKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVj
dGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
YXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9oCisjZGVmaW5l
IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29sbGVjdHMgYWxsIGRlc2lyZWQgd2F0Y2hwb2lu
dHMgaW50byB0aGUgR3JhcGg6OndhdGNocG9pbnRzKCkgZGF0YSBzdHJ1Y3R1cmUuCisKK2Jvb2wg
cGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU4MjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwNSw3
ICsxMTA1LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeAogICAg
ICAgICAgICAgICAgICAgICAiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJs
b2NrLAogICAgICAgICAgICAgICAgICAgICAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCks
ICIpIChpbiBsb29wKS5cbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29kZUJsb2Nr
LT5yZW9wdGltaXplKCk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPmpl
dHRpc29uKENvdW50UmVvcHRpbWl6YXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeAogICAgICAgICAgICAgICAgICJUcmlnZ2VyaW5nIHJl
b3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgLT4gIiwKICAgICAgICAgICAgICAgICAq
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiIChhZnRlciBPU1IgZmFpbCkuXG4iKTsKICAgICAg
ICAgfQotICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKKyAgICAgICAgb3B0aW1pemVk
Q29kZUJsb2NrLT5qZXR0aXNvbihDb3VudFJlb3B0aW1pemF0aW9uKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE1ODIwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12
b2lkIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQ6OmNvcnJlY3RMYWJlbHMoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKLXsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWw7Ci0gICAgbGFi
ZWwubV9sYWJlbC5tX29mZnNldCA9IG1fc291cmNlOwotICAgIG1fc291cmNlID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsKS5kYXRhTG9jYXRpb24o
KSk7Ci0gICAgbGFiZWwubV9sYWJlbC5tX29mZnNldCA9IG1fZGVzdGluYXRpb247Ci0gICAgbV9k
ZXN0aW5hdGlvbiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZihsYWJlbCkuZGF0YUxvY2F0aW9uKCkpOwotfQotCi12b2lkIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbCgpCi17Ci0gICAgdm9pZCogc291cmNlID0gYml0d2lzZV9jYXN0
PHZvaWQqPihtX3NvdXJjZSk7Ci0gICAgdm9pZCogZGVzdGluYXRpb24gPSBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG1fZGVzdGluYXRpb24pOwotICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHko
KSkKLSAgICAgICAgZGF0YUxvZ0YoIkZpcmluZyBqdW1wIHJlcGxhY2VtZW50IHdhdGNocG9pbnQg
ZnJvbSAlcCwgdG8gJXAuXG4iLCBzb3VyY2UsIGRlc3RpbmF0aW9uKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsKHNvdXJjZSksIENvZGVMb2Nh
dGlvbkxhYmVsKGRlc3RpbmF0aW9uKSk7Ci0gICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgIHJl
bW92ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQp
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxNTgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludF9oCi0jZGVmaW5lIEp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnRfaAotCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVMb2Nh
dGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgewot
cHVibGljOgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQoKQotICAgICAgICA6IG1fc291
cmNlKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpCi0gICAgICAgICwgbV9k
ZXN0aW5hdGlvbihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludChNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc291cmNlKQotICAgICAgICA6IG1fc291cmNlKHNvdXJjZS5tX2xhYmVsLm1fb2Zm
c2V0KQotICAgICAgICAsIG1fZGVzdGluYXRpb24oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRy
X3Q+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBzb3VyY2VMYWJlbCgpIGNvbnN0Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbGFiZWw7Ci0gICAgICAgIGxhYmVsLm1fbGFiZWwubV9vZmZzZXQgPSBtX3NvdXJjZTsKLSAg
ICAgICAgcmV0dXJuIGxhYmVsOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9u
KE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIG1fZGVz
dGluYXRpb24gPSBkZXN0aW5hdGlvbi5tX2xhYmVsLm1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvcnJlY3RMYWJlbHMoTGlua0J1ZmZlciYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIGZpcmVJbnRlcm5hbCgpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIHVpbnRw
dHJfdCBtX3NvdXJjZTsKLSAgICB1aW50cHRyX3QgbV9kZXN0aW5hdGlvbjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIEp1bXBS
ZXBsYWNlbWVudFdhdGNocG9pbnRfaAotCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215608</attachid>
            <date>2013-10-30 20:53:57 -0700</date>
            <delta_ts>2013-10-31 13:30:20 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6426</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24g
MTU4MzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI3LDEwICsyMjcsMTUgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAKICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBs
YWNlV2l0aEp1bXAoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAg
ICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0
cnVjdGlvbk9mZnNldCksCi0gICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc291cmNlID0gQ29kZUxvY2F0aW9uTGFiZWwoCisgICAgICAg
ICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0
cnVjdGlvbk9mZnNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoaW5mby5tX2lzSW52YWxpZGF0
aW9uUG9pbnQpIHsKKyAgICAgICAgICAgIGppdENvZGUtPmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRz
LmFwcGVuZChKdW1wUmVwbGFjZW1lbnQoc291cmNlLCBpbmZvLm1fdGh1bmtBZGRyZXNzKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoc291cmNlLCBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTgzMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExMCw4ICsyMTEw
LDMxIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQo
KQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBpbnZhbGlkYXRpb24gcG9pbnRz
IGluIHRlcm1zIG9mIGxsdm0uc3RhY2ttYXAuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2NDcKKyAgICAgICAgaWYgKCFPcHRpb25zOjpmdGxV
c2VzU3RhY2ttYXBzKCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNpbGVudGx5IGRvbid0IGltcGxl
bWVudCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIHdlIGRvbid0IGhhdmUgc3RhY2ttYXBzLgorICAg
ICAgICAgICAgLy8gVGhpcyBpcyBmaW5lIHNpbmNlIHRoZSBsb25nLXRlcm0gcGxhbiBpcyB0byBy
ZXF1aXJlIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBt
X3ZhbHVlU291cmNlcywgIlxuIik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKTsKKyAgICAgICAgCisgICAgICAg
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdChPU1JFeGl0KAorICAgICAgICAgICAgVW5jb3Vu
dGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSgpLAorICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIG1fbGFzdFNldE9wZXJhbmQub2Zmc2V0KCksCisgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX3ZhbHVlU291cmNl
cy5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICAKKyAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CisgICAg
ICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5sYXN0KCk7CisgICAgICAgIAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3Vt
ZW50czsKKyAgICAgICAgCisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVu
dHMsIDApOworICAgICAgICAKKyAgICAgICAgaW5mby5tX2lzSW52YWxpZGF0aW9uUG9pbnQgPSB0
cnVlOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgYm9vbGlmeShFZGdlIGVkZ2UpCkBAIC0zMzM2
LDYgKzMzNTksNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9v
dXQuY29uc3RJbnQzMihpbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBidWls
ZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1ZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikgeworICAgICAgICAgICAg
QVNTRVJUKG1fbm9kZSk7CisgICAgICAgICAgICBleGl0LmNvbnZlcnRUb0ZvcndhcmQobV9oaWdo
QmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVudHMpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTU9TUkV4aXRJbnRyaW5z
aWMoKSkgeworICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5vc3JFeGl0SW50cmluc2ljKCks
IGFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChPcHRpb25zOjpmdGxVc2VzU3RhY2ttYXBzKCkpIHsKKyAgICAgICAgICAgIGV4
aXQubV9zdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgYXJndW1lbnRz
Lmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFj
ZW1lbnRTaXplKCkpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29u
c3RJbnQzMihleGl0Lm1fc3RhY2ttYXBJRCkpOworICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmNhbGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gU28sIHRoZSBy
ZWFsbHkgbGFtZSB0aGluZyBoZXJlIGlzIHRoYXQgd2UgaGF2ZSB0byBidWlsZCBhbiBMTFZNIGZ1
bmN0aW9uIHR5cGUuCisgICAgICAgIC8vIEJvb28uCisgICAgICAgIFZlY3RvcjxMVHlwZSwgMTY+
IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCh0eXBlT2Yo
YXJndW1lbnRzW2ldKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAg
ICAgbV9vdXQuaW50VG9QdHIoCisgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVu
a0FkZHJlc3NWYWx1ZSksCisgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBl
KG1fb3V0LnZvaWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAorICAgICAgICAgICAgYXJndW1lbnRz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCisgICAgICAgIE9T
UkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUg
bG93VmFsdWUpCisgICAgewogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2FsbEZyYW1lKTsK
ICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxv
d1ZhbHVlLnZhbHVlKCkpOwpAQCAtMzM3MCwzNyArMzQzMCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX3ZhbHVlcywgIlxuIik7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikgewot
ICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7Ci0gICAgICAgICAgICBleGl0LmNvbnZlcnRUb0Zv
cndhcmQobV9oaWdoQmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVu
dHMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTbywgdGhlIHJlYWxseSBsYW1l
IHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxkIGFuIExMVk0gZnVuY3Rpb24gdHlw
ZS4KLSAgICAgICAgLy8gQm9vby4KLSAgICAgICAgVmVjdG9yPExUeXBlLCAxNj4gYXJndW1lbnRU
eXBlczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKHR5cGVPZihhcmd1bWVudHNb
aV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjp1c2VMTFZNT1NSRXhpdEludHJp
bnNpYygpKSB7Ci0gICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9zckV4aXRJbnRyaW5zaWMo
KSwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKSkgewotICAgICAgICAgICAg
ZXhpdC5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgICAgICBhcmd1bWVu
dHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBs
YWNlbWVudFNpemUoKSkpOwotICAgICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5j
b25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgbV9v
dXQuY2FsbChtX291dC53ZWJraXRTdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5jYWxs
KAotICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAgICAgICAgICAgICAgbV9vdXQuZ2V0
KGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCi0gICAgICAgICAgICAgICAgcG9pbnRlclR5cGUo
ZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAotICAgICAgICAg
ICAgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRFeGl0QXJndW1lbnRGb3JO
b2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE1ODMyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIHN0cnVjdCBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvIHsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKICAg
ICAgICAgOiBtX3RodW5rQWRkcmVzc1ZhbHVlKDApCisgICAgICAgICwgbV9pc0ludmFsaWRhdGlv
blBvaW50KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC00NSw2ICs0Niw3IEBAIHN0cnVj
dCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3RodW5rSnVtcDsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3RodW5rQWRkcmVzczsK
ICAgICBMVmFsdWUgbV90aHVua0FkZHJlc3NWYWx1ZTsKKyAgICBib29sIG1faXNJbnZhbGlkYXRp
b25Qb2ludDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215671</attachid>
            <date>2013-10-31 13:30:20 -0700</date>
            <delta_ts>2013-10-31 13:53:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7683</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MzkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDEzLTEwLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBpbXBsZW1lbnQgSW52YWxpZGF0aW9uUG9pbnQgaW4gdGVybXMgb2YgbGx2bS5z
dGFja21hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbm93IHRoYXQgSW52YWxpZGF0
aW9uUG9pbnQgaGFzIGV4YWN0bHkgdGhlIHNlbWFudGljcworICAgICAgICB0aGF0IGFncmVlIHdp
dGggbGx2bS5zdGFja21hcC4KKworICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNhbGxTdGFja21hcCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlv
bkluZm8uaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKToKKwogMjAxMy0xMC0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYWxseSByZW1vdmUgQ2FjaGVkVHJh
bnNjZW5kZW50YWxGdW5jdGlvbi5oLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNTgzMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsMTAgKzIyNywxNSBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIAogICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7CiAgICAgICAgIAotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKAotICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KSwKLSAgICAgICAgICAgIGluZm8u
bV90aHVua0FkZHJlc3MpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2Rl
TG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCkgeworICAgICAgICAgICAgaml0Q29kZS0+
Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGlu
Zm8ubV90aHVua0FkZHJlc3MpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIGlu
Zm8ubV90aHVua0FkZHJlc3MpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1ODMyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTEwLDggKzIxMTAsMzAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGludmFsaWRhdGlvbiBwb2ludHMgaW4gdGVybXMgb2YgbGx2bS5zdGFja21hcC4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY0NworICAg
ICAgICBpZiAoIU9wdGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKSkgeworICAgICAgICAgICAgLy8g
V2Ugc2lsZW50bHkgZG9uJ3QgaW1wbGVtZW50IGludmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgZG9u
J3QgaGF2ZSBzdGFja21hcHMuCisgICAgICAgICAgICAvLyBUaGlzIGlzIGZpbmUgc2luY2UgdGhl
IGxvbmctdGVybSBwbGFuIGlzIHRvIHJlcXVpcmUgc3RhY2ttYXBzLgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3
aXRoIHZhbHVlIHNvdXJjZXM6ICIsIG1fdmFsdWVTb3VyY2VzLCAiXG4iKTsKKyAgICAgICAgCisg
ICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKKyAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBtX2xhc3RTZXRPcGVyYW5kLm9m
ZnNldCgpLAorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwg
bV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAg
ICAgCisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
bGFzdCgpOworICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9mdGxTdGF0
ZS5maW5hbGl6ZXItPm9zckV4aXQubGFzdCgpOworICAgICAgICAKKyAgICAgICAgRXhpdEFyZ3Vt
ZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgIAorICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMo
ZXhpdCwgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgY2FsbFN0YWNrbWFw
KGV4aXQsIGFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICBpbmZvLm1faXNJbnZhbGlkYXRp
b25Qb2ludCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBib29saWZ5KEVkZ2UgZWRn
ZSkKQEAgLTMzMzYsNiArMzM1OCwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChtX291dC5jb25zdEludDMyKGluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgCisg
ICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgICAgIGV4aXQuY29udmVydFRvRm9y
d2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJbmRleCwgcmVjb3ZlcnksIGFyZ3VtZW50
cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VMTFZNT1NS
RXhpdEludHJpbnNpYygpKSB7CisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9zckV4aXRJ
bnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKSkgeworICAg
ICAgICAgICAgY2FsbFN0YWNrbWFwKGV4aXQsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNvLCB0aGUgcmVhbGx5IGxhbWUg
dGhpbmcgaGVyZSBpcyB0aGF0IHdlIGhhdmUgdG8gYnVpbGQgYW4gTExWTSBmdW5jdGlvbiB0eXBl
LgorICAgICAgICAvLyBCb29vLgorICAgICAgICBWZWN0b3I8TFR5cGUsIDE2PiBhcmd1bWVudFR5
cGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQodHlwZU9mKGFyZ3VtZW50c1tp
XSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lmlu
dFRvUHRyKAorICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzVmFs
dWUpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lk
VHlwZSwgYXJndW1lbnRUeXBlcykpKSwKKyAgICAgICAgICAgIGFyZ3VtZW50cyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAorICAgICAgICBPU1JFeGl0JiBleGl0
LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlKQor
ICAgIHsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7CiAgICAgICAgIGlm
ICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1
ZSgpKTsKQEAgLTMzNzAsMzcgKzM0MjUsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fdmFsdWVzLCAiXG4iKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjYWxsU3RhY2ttYXAoT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgZXhpdC5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFw
SURzKys7CisgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihNYWNy
b0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50
cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX25vZGUpOwotICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJk
KG1faGlnaEJsb2NrLCBtX25vZGUsIG1fbm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gU28sIHRoZSByZWFsbHkgbGFtZSB0aGlu
ZyBoZXJlIGlzIHRoYXQgd2UgaGF2ZSB0byBidWlsZCBhbiBMTFZNIGZ1bmN0aW9uIHR5cGUuCi0g
ICAgICAgIC8vIEJvb28uCi0gICAgICAgIFZlY3RvcjxMVHlwZSwgMTY+IGFyZ3VtZW50VHlwZXM7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCh0eXBlT2YoYXJndW1lbnRzW2ldKSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTU9TUkV4aXRJbnRyaW5zaWMo
KSkgewotICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5vc3JFeGl0SW50cmluc2ljKCksIGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChPcHRpb25zOjpmdGxVc2VzU3RhY2ttYXBzKCkpIHsKLSAgICAgICAgICAgIGV4aXQu
bV9zdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICAgICAgYXJndW1lbnRzLmlu
c2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1l
bnRTaXplKCkpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJ
bnQzMihleGl0Lm1fc3RhY2ttYXBJRCkpOwotICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmNh
bGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuY2FsbCgKLSAg
ICAgICAgICAgIG1fb3V0LmludFRvUHRyKAotICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZv
Lm1fdGh1bmtBZGRyZXNzVmFsdWUpLAotICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0
aW9uVHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKLSAgICAgICAgICAgIGFy
Z3VtZW50cyk7CisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5z
aWMoKSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRFeGl0QXJndW1lbnRG
b3JOb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE1ODMyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIHN0cnVj
dCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvIHsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkK
ICAgICAgICAgOiBtX3RodW5rQWRkcmVzc1ZhbHVlKDApCisgICAgICAgICwgbV9pc0ludmFsaWRh
dGlvblBvaW50KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC00NSw2ICs0Niw3IEBAIHN0
cnVjdCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3RodW5rSnVtcDsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3RodW5rQWRkcmVz
czsKICAgICBMVmFsdWUgbV90aHVua0FkZHJlc3NWYWx1ZTsKKyAgICBib29sIG1faXNJbnZhbGlk
YXRpb25Qb2ludDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
</data>
<flag name="review"
          id="238458"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>