<?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>91303</bug_id>
          
          <creation_ts>2012-07-13 18:01:16 -0700</creation_ts>
          <short_desc>Rationalize and optimize storage allocation</short_desc>
          <delta_ts>2012-07-16 11:30:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>669643</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-13 18:01:16 -0700</bug_when>
    <thetext>Currently our storage allocator requires multiple branches, and multiple temporary registers, to be sound.  The code is also duplicated in two places (one for mutator and one for collector).

The code should be unified, and simplified to use backwards bumping allocation, which only requires one branch and one register.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669646</commentid>
    <comment_count>1</comment_count>
      <attachid>152391</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-13 18:03:53 -0700</bug_when>
    <thetext>Created attachment 152391
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669863</commentid>
    <comment_count>2</comment_count>
      <attachid>152433</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 14:00:06 -0700</bug_when>
    <thetext>Created attachment 152433
Backwards Garen

This appears to work, but because it removes the reallocation fast case optimization, we end up losing some performance on Kraken.

I will try Backwards Frampton-Pizlo next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669866</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-14 14:18:29 -0700</bug_when>
    <thetext>Attachment 152433 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/assembler/X86Assembler.h:341:  addq_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669867</commentid>
    <comment_count>4</comment_count>
      <attachid>152433</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 14:34:35 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13232659</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669868</commentid>
    <comment_count>5</comment_count>
      <attachid>152433</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 14:36:42 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13232660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669873</commentid>
    <comment_count>6</comment_count>
      <attachid>152434</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 14:52:36 -0700</bug_when>
    <thetext>Created attachment 152434
Backwards Frampton

This appears to undo the Kraken slow-down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669874</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-14 14:54:12 -0700</bug_when>
    <thetext>Attachment 152434 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/assembler/X86Assembler.h:341:  addq_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:452:  negq_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669876</commentid>
    <comment_count>8</comment_count>
      <attachid>152433</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-14 15:03:27 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13248106</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669877</commentid>
    <comment_count>9</comment_count>
      <attachid>152434</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 15:06:21 -0700</bug_when>
    <thetext>Comment on attachment 152434
Backwards Frampton

Attachment 152434 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13230617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669879</commentid>
    <comment_count>10</comment_count>
      <attachid>152434</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 15:10:10 -0700</bug_when>
    <thetext>Comment on attachment 152434
Backwards Frampton

Attachment 152434 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13230618</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669880</commentid>
    <comment_count>11</comment_count>
      <attachid>152434</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-14 15:14:31 -0700</bug_when>
    <thetext>Comment on attachment 152434
Backwards Frampton

Attachment 152434 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13242531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669881</commentid>
    <comment_count>12</comment_count>
      <attachid>152433</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 15:31:23 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13235544</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669882</commentid>
    <comment_count>13</comment_count>
      <attachid>152433</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-14 15:34:07 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13232665</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669883</commentid>
    <comment_count>14</comment_count>
      <attachid>152433</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-14 15:36:50 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13233522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669885</commentid>
    <comment_count>15</comment_count>
      <attachid>152433</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-14 16:00:44 -0700</bug_when>
    <thetext>Comment on attachment 152433
Backwards Garen

Attachment 152433 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13239520</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669887</commentid>
    <comment_count>16</comment_count>
      <attachid>152436</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 16:56:38 -0700</bug_when>
    <thetext>Created attachment 152436
almost there

Some more assembly hackage to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669888</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-14 16:59:28 -0700</bug_when>
    <thetext>Attachment 152436 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/assembler/X86Assembler.h:308:  addl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:346:  addq_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:457:  negq_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669889</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 16:59:55 -0700</bug_when>
    <thetext>Zoltan, this will need some new opcodes, like:

add32(Address src, RegisterID dest)
add32(AbsoluteAddress src, RegisterID dest)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669890</commentid>
    <comment_count>19</comment_count>
      <attachid>152436</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-14 17:05:57 -0700</bug_when>
    <thetext>Comment on attachment 152436
almost there

Attachment 152436 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13235562</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669891</commentid>
    <comment_count>20</comment_count>
      <attachid>152437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 17:14:39 -0700</bug_when>
    <thetext>Created attachment 152437
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669892</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-14 17:16:59 -0700</bug_when>
    <thetext>Attachment 152437 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/assembler/X86Assembler.h:309:  addl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:348:  addq_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:459:  negq_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 14 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>669916</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-14 21:03:15 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/122677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670274</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-16 05:47:40 -0700</bug_when>
    <thetext>Looks like this broke the Qt ARMv7 build:


In file included from JavaScriptCore/jit/JITWriteBarrier.h:31,
                 from JavaScriptCore/bytecode/CallLinkInfo.h:30,
                 from JavaScriptCore/bytecode/CodeBlock.h:34,
                 from JavaScriptCore/API/JSCallbackFunction.cpp:31:
.../JavaScriptCore/assembler/MacroAssembler.h: In member function &apos;void JSC::MacroAssembler::addPtr(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress, JSC::ARMRegisters::RegisterID)&apos;:
.../JavaScriptCore/assembler/MacroAssembler.h:290: error: no matching function for call to &apos;JSC::MacroAssembler::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress&amp;, JSC::ARMRegisters::RegisterID&amp;)&apos;
.../JavaScriptCore/assembler/MacroAssemblerARM.h:88: note: candidates are: void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:93: note:                 void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:98: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::Address)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:105: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:110: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::Address, JSC::ARMRegisters::RegisterID)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:116: note:                 void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID)
.../Source/JavaScriptCore/assembler/MacroAssemblerARM.h:837: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
.../JavaScriptCore/assembler/MacroAssemblerARM.h:842: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress)

( from http://build.webkit.org/builders/Qt%20Linux%20ARMv7%20Release/builds/48787 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670505</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-16 11:30:28 -0700</bug_when>
    <thetext>Yes, because this patch requires new assembler functionality.  See Comment #18.

(In reply to comment #23)
&gt; Looks like this broke the Qt ARMv7 build:
&gt; 
&gt; 
&gt; In file included from JavaScriptCore/jit/JITWriteBarrier.h:31,
&gt;                  from JavaScriptCore/bytecode/CallLinkInfo.h:30,
&gt;                  from JavaScriptCore/bytecode/CodeBlock.h:34,
&gt;                  from JavaScriptCore/API/JSCallbackFunction.cpp:31:
&gt; .../JavaScriptCore/assembler/MacroAssembler.h: In member function &apos;void JSC::MacroAssembler::addPtr(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress, JSC::ARMRegisters::RegisterID)&apos;:
&gt; .../JavaScriptCore/assembler/MacroAssembler.h:290: error: no matching function for call to &apos;JSC::MacroAssembler::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress&amp;, JSC::ARMRegisters::RegisterID&amp;)&apos;
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:88: note: candidates are: void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:93: note:                 void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:98: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::Address)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:105: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:110: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::Address, JSC::ARMRegisters::RegisterID)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:116: note:                 void JSC::MacroAssemblerARM::add32(JSC::ARMRegisters::RegisterID, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID)
&gt; .../Source/JavaScriptCore/assembler/MacroAssemblerARM.h:837: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::ARMRegisters::RegisterID, JSC::ARMRegisters::RegisterID)
&gt; .../JavaScriptCore/assembler/MacroAssemblerARM.h:842: note:                 void JSC::MacroAssemblerARM::add32(JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::TrustedImm32, JSC::AbstractMacroAssembler&lt;JSC::ARMAssembler&gt;::AbsoluteAddress)
&gt; 
&gt; ( from http://build.webkit.org/builders/Qt%20Linux%20ARMv7%20Release/builds/48787 )</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152391</attachid>
            <date>2012-07-13 18:03:53 -0700</date>
            <delta_ts>2012-07-14 14:00:06 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>fixcopied_patch_1.diff</filename>
            <type>text/plain</type>
            <size>20969</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTA3LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmF0aW9uYWxpemUgYW5kIG9wdGltaXplIHN0b3JhZ2UgYWxsb2NhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzMDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorICAg
ICAgICAKKyAgICAgICAgSSdsbCBuZWVkIHRvIG1ha2Ugc29tZSBnbmFybHkgYXNzZW1ibGVyIGNo
YW5nZXMgdG8gZG8gdGhpcy4gOi0vCisKKyAgICAgICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5o
OgorICAgICAgICAoQ29waWVkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2Nh
dG9yOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpDb3BpZWRBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkNv
cGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxs
b2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoK
KyAgICAgICAgKENvcGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5lc3MpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZEVuZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRh
dGEpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGF0YUVuZCk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpkYXRhU2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3aWxk
ZXJuZXNzKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OndpbGRlcm5lc3NFbmQpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6d2lsZGVybmVzc1NpemUpOgorICAgICAgICAoSlNDOjpD
b3BpZWRCbG9jazo6c2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25l
RmlsbGluZ0Jsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKToK
KyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAgIChDb3BpZWRTcGFjZSk6Cisg
ICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0
ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRv
bmVDb3B5aW5nKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKToKKwogMjAxMi0wNy0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgT2ZmbGluZUFTTSBQcmV0dHkgcHJpbnRpbmcgYW5kIGNvbW1lbnRp
bmcgZW5oYW5jZW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBA
CiAjZGVmaW5lIENvcGllZEFsbG9jYXRvcl9oCiAKICNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgor
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNCw2NSArMzYsNzcgQEAgY2xhc3MgQ29waWVkQWxs
b2NhdG9yIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgogICAgIENvcGllZEFsbG9j
YXRvcigpOwotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Ci0gICAgYm9vbCBmaXRzSW5DdXJy
ZW50QmxvY2soc2l6ZV90KTsKLSAgICBib29sIHdhc0xhc3RBbGxvY2F0aW9uKHZvaWQqLCBzaXpl
X3QpOwotICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKLSAgICB2b2lkIHJlc2V0Q3VycmVudEJs
b2NrKENvcGllZEJsb2NrKik7CisgICAgCisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGUo
c2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKKyAgICB2b2lkKiBmb3JjZUFsbG9jYXRlKHNp
emVfdCBieXRlcyk7CisgICAgQ29waWVkQmxvY2sqIHJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAg
dm9pZCBzZXRDdXJyZW50QmxvY2soQ29waWVkQmxvY2sqKTsKICAgICBzaXplX3QgY3VycmVudENh
cGFjaXR5KCk7CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX2N1cnJlbnRC
bG9jazsgfQogCiBwcml2YXRlOgogICAgIENvcGllZEJsb2NrKiBjdXJyZW50QmxvY2soKSB7IHJl
dHVybiBtX2N1cnJlbnRCbG9jazsgfQogCi0gICAgY2hhciogbV9jdXJyZW50T2Zmc2V0OworICAg
IHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7CisgICAgY2hhciogbV9jdXJyZW50UGF5bG9hZDsKICAg
ICBDb3BpZWRCbG9jayogbV9jdXJyZW50QmxvY2s7IAogfTsKIAogaW5saW5lIENvcGllZEFsbG9j
YXRvcjo6Q29waWVkQWxsb2NhdG9yKCkKICAgICA6IG1fY3VycmVudE9mZnNldCgwKQorICAgICwg
bV9jdXJyZW50UGF5bG9hZCgwKQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKIHsKIH0KIAotaW5s
aW5lIHZvaWQqIENvcGllZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoraW5saW5l
IENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVz
LCB2b2lkKiogb3V0UHRyKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQpOwogICAgIEFT
U0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihieXRlcykpKTsKLSAg
ICBBU1NFUlQoZml0c0luQ3VycmVudEJsb2NrKGJ5dGVzKSk7Ci0gICAgdm9pZCogcHRyID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KG1fY3VycmVudE9mZnNldCk7Ci0gICAgbV9jdXJyZW50T2Zmc2V0ICs9
IGJ5dGVzOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChwdHIpKTsKLSAgICByZXR1cm4gcHRy
OworICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0ID0gbV9jdXJyZW50T2Zmc2V0OworICAgIGlmIChi
eXRlcyA+IGN1cnJlbnRPZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjdXJyZW50
T2Zmc2V0IC09IGJ5dGVzOworICAgIG1fY3VycmVudE9mZnNldCA9IGN1cnJlbnRPZmZzZXQ7Cisg
ICAgKm91dFB0ciA9IG1fY3VycmVudFBheWxvYWQgKyBjdXJyZW50T2Zmc2V0OworICAgIEFTU0VS
VChpczhCeXRlQWxpZ25lZCgqb3V0UHRyKSk7CisgICAgZGF0YUxvZygiUmV0dXJuaW5nICVwLlxu
IiwgKm91dFB0cik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIENvcGllZEFs
bG9jYXRvcjo6Zml0c0luQ3VycmVudEJsb2NrKHNpemVfdCBieXRlcykKK2lubGluZSB2b2lkKiBD
b3BpZWRBbGxvY2F0b3I6OmZvcmNlQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVy
biBtX2N1cnJlbnRPZmZzZXQgKyBieXRlcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY3Vy
cmVudEJsb2NrKSArIEhlYXBCbG9jazo6c19ibG9ja1NpemUgJiYgbV9jdXJyZW50T2Zmc2V0ICsg
Ynl0ZXMgPiBtX2N1cnJlbnRPZmZzZXQ7CisgICAgdm9pZCogcmVzdWx0OworICAgIENoZWNrZWRC
b29sZWFuIGRpZFN1Y2NlZWQgPSB0cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNT
RVJUKGRpZFN1Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBib29sIENv
cGllZEFsbG9jYXRvcjo6d2FzTGFzdEFsbG9jYXRpb24odm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkK
K2lubGluZSBDb3BpZWRCbG9jayogQ29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jaygp
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpICsgc2l6ZSA9PSBtX2N1cnJl
bnRPZmZzZXQgJiYgcHRyID4gbV9jdXJyZW50QmxvY2sgJiYgcHRyIDwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obV9jdXJyZW50QmxvY2spICsgSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZTsKKyAgICBD
b3BpZWRCbG9jayogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2s7CisgICAgaWYgKHJlc3VsdCkgewor
ICAgICAgICByZXN1bHQtPm1fb2Zmc2V0ID0gbV9jdXJyZW50T2Zmc2V0OworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IDA7CisgICAgICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgICAgIG1f
Y3VycmVudFBheWxvYWQgPSAwOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxp
bmUgdm9pZCBDb3BpZWRBbGxvY2F0b3I6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENv
cGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKiBuZXdCbG9jaykKIHsK
LSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX29mZnNl
dCA9IHN0YXRpY19jYXN0PHZvaWQqPihtX2N1cnJlbnRPZmZzZXQpOwotICAgIG1fY3VycmVudE9m
ZnNldCA9IDA7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotfQotCi1pbmxpbmUgdm9pZCBDb3Bp
ZWRBbGxvY2F0b3I6OnJlc2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKiBuZXdCbG9jaykKLXsK
LSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX29mZnNl
dCA9IHN0YXRpY19jYXN0PHZvaWQqPihtX2N1cnJlbnRPZmZzZXQpOworICAgIEFTU0VSVCghbV9j
dXJyZW50QmxvY2spOwogICAgIG1fY3VycmVudEJsb2NrID0gbmV3QmxvY2s7Ci0gICAgbV9jdXJy
ZW50T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld0Jsb2NrLT5tX29mZnNldCk7CisgICAg
QVNTRVJUKG5ld0Jsb2NrKTsKKyAgICBtX2N1cnJlbnRPZmZzZXQgPSBuZXdCbG9jay0+bV9vZmZz
ZXQ7CisgICAgbV9jdXJyZW50UGF5bG9hZCA9IG5ld0Jsb2NrLT5wYXlsb2FkKCk7CiB9CiAKIGlu
bGluZSBzaXplX3QgQ29waWVkQWxsb2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkoKQogeworICAgIGlm
ICghbV9jdXJyZW50QmxvY2spCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+Y2FwYWNpdHkoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMzAgQEAg
cHVibGljOgogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRlTm9aZXJvRmlsbChjb25zdCBQ
YWdlQWxsb2NhdGlvbkFsaWduZWQmKTsKICAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb25BbGlnbmVk
IGRlc3Ryb3koQ29waWVkQmxvY2sqKTsKIAorICAgIC8vIFRoZSBwYXlsb2FkIGlzIHRoZSByZWdp
b24gb2YgdGhlIGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucy4KICAgICBjaGFy
KiBwYXlsb2FkKCk7CisgICAgY2hhciogcGF5bG9hZEVuZCgpOworICAgIHNpemVfdCBwYXlsb2Fk
Q2FwYWNpdHkoKTsKKyAgICAKKyAgICAvLyBUaGUgZGF0YSBpcyB0aGUgcmVnaW9uIG9mIHRoZSBi
bG9jayB0aGF0IGhhcyBiZWVuIHVzZWQgZm9yIGFsbG9jYXRpb25zLgorICAgIGNoYXIqIGRhdGEo
KTsKKyAgICBjaGFyKiBkYXRhRW5kKCk7CisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisgICAgCisg
ICAgLy8gVGhlIHdpbGRlcm5lc3MgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBpcyB1
c2FibGUgZm9yIGFsbG9jYXRpb25zCisgICAgLy8gYnV0IGhhcyBub3QgYmVlbiBzbyB1c2VkLgor
ICAgIGNoYXIqIHdpbGRlcm5lc3MoKTsKKyAgICBjaGFyKiB3aWxkZXJuZXNzRW5kKCk7CisgICAg
c2l6ZV90IHdpbGRlcm5lc3NTaXplKCk7CisgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBz
aXplX3QgY2FwYWNpdHkoKTsKIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayhjb25zdCBQYWdl
QWxsb2NhdGlvbkFsaWduZWQmKTsKLSAgICB2b2lkIHplcm9GaWxsVG9FbmQoKTsgLy8gQ2FuIGJl
IGNhbGxlZCBhdCBhbnkgdGltZSB0byB6ZXJvLWZpbGwgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2su
CisgICAgdm9pZCB6ZXJvRmlsbFdpbGRlcm5lc3MoKTsgLy8gQ2FuIGJlIGNhbGxlZCBhdCBhbnkg
dGltZSB0byB6ZXJvLWZpbGwgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2suCiAKLSAgICB2b2lkKiBt
X29mZnNldDsKKyAgICBzaXplX3QgbV9vZmZzZXQ7CiAgICAgdWludHB0cl90IG1faXNQaW5uZWQ7
CiB9OwogCkBAIC02MiwxOSArNzcsMTggQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9j
azo6Y3JlYXRlTgogaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlKGNvbnN0
IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKIHsKICAgICBDb3BpZWRCbG9jayog
YmxvY2sgPSBjcmVhdGVOb1plcm9GaWxsKGFsbG9jYXRpb24pOwotICAgIGJsb2NrLT56ZXJvRmls
bFRvRW5kKCk7CisgICAgYmxvY2stPnplcm9GaWxsV2lsZGVybmVzcygpOwogICAgIHJldHVybiBi
bG9jazsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6Onplcm9GaWxsVG9FbmQoKQoraW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6Onplcm9GaWxsV2lsZGVybmVzcygpCiB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBjaGFyKiBvZmZzZXQgPSBzdGF0aWNfY2FzdDxjaGFyKj4obV9vZmZzZXQp
OwotICAgIG1lbXNldChzdGF0aWNfY2FzdDx2b2lkKj4ob2Zmc2V0KSwgMCwgc3RhdGljX2Nhc3Q8
c2l6ZV90PigocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBtX2FsbG9jYXRpb24uc2l6
ZSgpKSAtIG9mZnNldCkpOworICAgIG1lbXNldCh3aWxkZXJuZXNzKCksIDAsIHdpbGRlcm5lc3NT
aXplKCkpOwogI2Vsc2UKICAgICBKU1ZhbHVlIGVtcHR5VmFsdWU7Ci0gICAgSlNWYWx1ZSogbGlt
aXQgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGhpcykgKyBtX2FsbG9jYXRpb24uc2l6ZSgpKTsKLSAgICBmb3IgKEpTVmFsdWUqIGN1cnJl
bnRWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1fb2Zmc2V0KTsgY3VycmVudFZh
bHVlIDwgbGltaXQ7IGN1cnJlbnRWYWx1ZSsrKQorICAgIEpTVmFsdWUqIGxpbWl0ID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHdpbGRlcm5lc3NFbmQoKSk7CisgICAgZm9yIChKU1Zh
bHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih3aWxkZXJuZXNz
KCkpOyBjdXJyZW50VmFsdWUgPCBsaW1pdDsgY3VycmVudFZhbHVlKyspCiAgICAgICAgICpjdXJy
ZW50VmFsdWUgPSBlbXB0eVZhbHVlOwogI2VuZGlmCiB9CkBAIC05MCwxMCArMTA0LDEwIEBAIGlu
bGluZSBQYWdlQWxsb2NhdGlvbkFsaWduZWQgQ29waWVkQmxvY2sKIAogaW5saW5lIENvcGllZEJs
b2NrOjpDb3BpZWRCbG9jayhjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24p
CiAgICAgOiBIZWFwQmxvY2soYWxsb2NhdGlvbikKLSAgICAsIG1fb2Zmc2V0KHBheWxvYWQoKSkK
KyAgICAsIG1fb2Zmc2V0KHBheWxvYWRDYXBhY2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChmYWxz
ZSkKIHsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoc3RhdGljX2Nhc3Q8dm9pZCo+KG1fb2Zm
c2V0KSkpOworICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQq
PihtX29mZnNldCkpKTsKIH0KIAogaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpwYXlsb2FkKCkK
QEAgLTEwMSw5ICsxMTUsNDkgQEAgaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpwYXlsb2FkKCkK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyAoKHNpemVvZihDb3Bp
ZWRCbG9jaykgKyA3KSAmIH43KTsKIH0KIAoraW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpwYXls
b2FkRW5kKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBt
X2FsbG9jYXRpb24uc2l6ZSgpOworfQorCitpbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpwYXls
b2FkQ2FwYWNpdHkoKQoreworICAgIHJldHVybiBwYXlsb2FkRW5kKCkgLSBwYXlsb2FkKCk7Cit9
CisKK2lubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6ZGF0YSgpCit7CisgICAgcmV0dXJuIHBheWxv
YWQoKSArIG1fb2Zmc2V0OworfQorCitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRhdGFFbmQo
KQoreworICAgIHJldHVybiBwYXlsb2FkRW5kKCk7Cit9CisKK2lubGluZSBzaXplX3QgQ29waWVk
QmxvY2s6OmRhdGFTaXplKCkKK3sKKyAgICByZXR1cm4gZGF0YUVuZCgpIC0gZGF0YSgpOworfQor
CitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OndpbGRlcm5lc3MoKQoreworICAgIHJldHVybiBw
YXlsb2FkKCk7Cit9CisKK2lubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6d2lsZGVybmVzc0VuZCgp
Cit7CisgICAgcmV0dXJuIGRhdGEoKTsKK30KKworaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6
d2lsZGVybmVzc1NpemUoKQoreworICAgIHJldHVybiB3aWxkZXJuZXNzRW5kKCkgLSB3aWxkZXJu
ZXNzKCk7Cit9CisKIGlubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OnNpemUoKQogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGNoYXIqPihtX29mZnNldCkgLSBw
YXlsb2FkKCkpOworICAgIHJldHVybiBkYXRhU2l6ZSgpOwogfQogCiBpbmxpbmUgc2l6ZV90IENv
cGllZEJsb2NrOjpjYXBhY2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDcgQEAg
Q2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwogCiAgICAgYWxsb2NhdGVC
bG9jaygpOwogCi0gICAgKm91dFB0ciA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlKGJ5dGVzKTsKLSAg
ICBBU1NFUlQoKm91dFB0cik7CisgICAgKm91dFB0ciA9IG1fYWxsb2NhdG9yLmZvcmNlQWxsb2Nh
dGUoYnl0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05Myw3ICs5MiwxMCBAQCBDaGVj
a2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPCiAgICAgbV9ibG9ja0ZpbHRlci5h
ZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJs
b2NrKTsKICAgICAKLSAgICAqb3V0UHRyID0gYWxsb2NhdGVGcm9tQmxvY2soYmxvY2ssIGJ5dGVz
KTsKKyAgICBDb3BpZWRBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgIGFsbG9jYXRvci5zZXRDdXJy
ZW50QmxvY2soYmxvY2spOworICAgICpvdXRQdHIgPSBhbGxvY2F0b3IuZm9yY2VBbGxvY2F0ZShi
eXRlcyk7CisgICAgYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CiAKICAgICBtX2hlYXAt
PmRpZEFsbG9jYXRlKGJsb2NrU2l6ZSk7CiAKQEAgLTExMSwxNCArMTEzLDYgQEAgQ2hlY2tlZEJv
b2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdAogICAgIGlmIChpc092ZXJzaXplKG9sZFNp
emUpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCiAgICAgICAgIHJldHVybiB0cnlSZWFsbG9jYXRl
T3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKIAotICAgIGlmIChtX2FsbG9jYXRvci53
YXNMYXN0QWxsb2NhdGlvbihvbGRQdHIsIG9sZFNpemUpKSB7Ci0gICAgICAgIHNpemVfdCBkZWx0
YSA9IG5ld1NpemUgLSBvbGRTaXplOwotICAgICAgICBpZiAobV9hbGxvY2F0b3IuZml0c0luQ3Vy
cmVudEJsb2NrKGRlbHRhKSkgewotICAgICAgICAgICAgKHZvaWQpbV9hbGxvY2F0b3IuYWxsb2Nh
dGUoZGVsdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
ICAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgIGlmICghdHJ5QWxsb2NhdGUobmV3U2l6ZSwgJnJl
c3VsdCkpIHsKICAgICAgICAgKnB0ciA9IDA7CkBAIC0xNTgsMTUgKzE1MiwxNCBAQCBDaGVja2Vk
Qm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiB2b2lkIENvcGllZFNwYWNlOjpkb25l
RmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiBibG9jaykKIHsKICAgICBBU1NFUlQoYmxvY2spOwot
ICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9j
aykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsKICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFz
ZSk7CiAKLSAgICBpZiAoYmxvY2stPm1fb2Zmc2V0ID09IGJsb2NrLT5wYXlsb2FkKCkpIHsKKyAg
ICBpZiAoIWJsb2NrLT5kYXRhU2l6ZSgpKSB7CiAgICAgICAgIHJlY3ljbGVCbG9jayhibG9jayk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBibG9jay0+emVyb0ZpbGxUb0VuZCgpOwor
ICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKIAogICAgIHsKICAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKQEAgLTIyNiw3ICsyMTksNyBAQCB2b2lk
IENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgaWYgKCFtX3RvU3BhY2UtPmhlYWQoKSkK
ICAgICAgICAgYWxsb2NhdGVCbG9jaygpOwogICAgIGVsc2UKLSAgICAgICAgbV9hbGxvY2F0b3Iu
cmVzZXRDdXJyZW50QmxvY2soc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX3RvU3BhY2UtPmhl
YWQoKSkpOworICAgICAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soc3RhdGljX2Nhc3Q8
Q29waWVkQmxvY2sqPihtX3RvU3BhY2UtPmhlYWQoKSkpOwogfQogCiBzaXplX3QgQ29waWVkU3Bh
Y2U6OnNpemUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5o
CShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRT
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ29waWVkQmxvY2sqIGJsb2NrRm9yKHZvaWQqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
dm9pZCogYWxsb2NhdGVGcm9tQmxvY2soQ29waWVkQmxvY2sqLCBzaXplX3QpOwogICAgIHN0YXRp
YyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKLSAgICBzdGF0aWMgYm9vbCBmaXRzSW5CbG9jayhD
b3BpZWRCbG9jayosIHNpemVfdCk7CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJs
b2NrRm9yKHZvaWQqIHB0cik7CiAKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCwgdm9pZCoqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjI1NDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6
c3RhcnRlZENvcHlpbmcoCiAgICAgbV90b1NwYWNlID0gdGVtcDsKIAogICAgIG1fYmxvY2tGaWx0
ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5zdGFydGVkQ29weWluZygpOworICAgIG1fYWxs
b2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CiAKICAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhh
c2UpOwogICAgIEFTU0VSVCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CkBAIC05NCw3ICs5NCw3
IEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmFsbG9jYXQKICAgICAgICAgbV9u
dW1iZXJPZkxvYW5lZEJsb2NrcysrOwogICAgIH0KIAotICAgIEFTU0VSVChibG9jay0+bV9vZmZz
ZXQgPT0gYmxvY2stPnBheWxvYWQoKSk7CisgICAgQVNTRVJUKCFibG9jay0+ZGF0YVNpemUoKSk7
CiAgICAgcmV0dXJuIGJsb2NrOwogfQogCkBAIC0xMDMsNDUgKzEwMywyNyBAQCBpbmxpbmUgdm9p
ZCBDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCiAgICAgaWYgKG1faGVhcC0+c2hvdWxkQ29s
bGVjdCgpKQogICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2VlcCk7CiAKKyAg
ICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworICAgIAogICAgIENvcGllZEJsb2Nr
KiBibG9jayA9IENvcGllZEJsb2NrOjpjcmVhdGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFs
bG9jYXRlKCkpOwogICAgICAgICAKICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOwogICAgIG1f
YmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICBtX2Js
b2NrU2V0LmFkZChibG9jayk7Ci0gICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soYmxv
Y2spOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Zml0c0luQmxvY2soQ29waWVkQmxv
Y2sqIGJsb2NrLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIq
PihibG9jay0+bV9vZmZzZXQpICsgYnl0ZXMgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9j
aykgKyBibG9jay0+Y2FwYWNpdHkoKSAmJiBzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zm
c2V0KSArIGJ5dGVzID4gYmxvY2stPm1fb2Zmc2V0OworICAgIG1fYWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhibG9jayk7CiB9CiAKIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6
dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIEFTU0VSVCgh
bV9oZWFwLT5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogCi0gICAgaWYg
KGlzT3ZlcnNpemUoYnl0ZXMpIHx8ICFtX2FsbG9jYXRvci5maXRzSW5DdXJyZW50QmxvY2soYnl0
ZXMpKQorICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsIG91dFB0cikpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5
dGVzLCBvdXRQdHIpOwogICAgIAotICAgICpvdXRQdHIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShi
eXRlcyk7CiAgICAgQVNTRVJUKCpvdXRQdHIpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgdm9pZCogQ29waWVkU3BhY2U6OmFsbG9jYXRlRnJvbUJsb2NrKENvcGllZEJsb2NrKiBibG9j
aywgc2l6ZV90IGJ5dGVzKQotewotICAgIEFTU0VSVChmaXRzSW5CbG9jayhibG9jaywgYnl0ZXMp
KTsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoYmxvY2stPm1fb2Zmc2V0KSk7Ci0gICAgCi0g
ICAgdm9pZCogcHRyID0gYmxvY2stPm1fb2Zmc2V0OwotICAgIEFTU0VSVChibG9jay0+bV9vZmZz
ZXQgPj0gYmxvY2stPnBheWxvYWQoKSAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9j
YXN0PGNoYXIqPihibG9jaykgKyBibG9jay0+Y2FwYWNpdHkoKSk7Ci0gICAgYmxvY2stPm1fb2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSArIGJ5dGVz
KSk7Ci0gICAgQVNTRVJUKGJsb2NrLT5tX29mZnNldCA+PSBibG9jay0+cGF5bG9hZCgpICYmIGJs
b2NrLT5tX29mZnNldCA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5j
YXBhY2l0eSgpKTsKLQotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChwdHIpKTsKLSAgICByZXR1
cm4gcHRyOwotfQotCiBpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShzaXplX3Qg
Ynl0ZXMpCiB7CiAgICAgcmV0dXJuIGJ5dGVzID4gc19tYXhBbGxvY2F0aW9uU2l6ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgzLDYg
KzY4Myw4IEBAIHN0YXRpYyBkb3VibGUgbWludXRlID0gNjAuMDsKIAogdm9pZCBIZWFwOjpjb2xs
ZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlKQogeworICAgIGRhdGFMb2coIkNvbGxlY3Rpbmch
XG4iKTsKKyAgICAKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBD
b2xsZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKQEAgLTc3MCw2ICs3NzIs
OCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgICAgIENS
QVNIKCk7CiAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAgSkFW
QVNDUklQVENPUkVfR0NfRU5EKCk7CisgICAgCisgICAgZGF0YUxvZygiRG9uZSBjb2xsZWN0aW5n
IVxuIik7CiB9CiAKIHZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhHQ0FjdGl2aXR5Q2Fs
bGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNSw5ICs1MTUsOCBAQCB2
b2lkIE1hcmtTdGFjazo6bWVyZ2VPcGFxdWVSb290cygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnN0
YXJ0Q29weWluZygpCiB7Ci0gICAgQVNTRVJUKCFtX2NvcHlCbG9jayk7Ci0gICAgbV9jb3B5Qmxv
Y2sgPSBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNl
KCk7Ci19ICAgIAorICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKK30K
IAogdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uodm9pZCogcHRyLCBzaXplX3Qg
Ynl0ZXMpCiB7CkBAIC01MjgsMTggKzUyNywxNyBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2Nh
dGVOZXdTcGFjZSh2b2lkCiAKICAgICBpZiAobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+aXNQaW5u
ZWQocHRyKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdm9pZCogcmVzdWx0OworICAg
IGlmIChtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9u
ZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKKyAg
ICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV9zaGFyZWQubV9jb3BpZWRTcGFj
ZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpKTsKIAotICAgIC8vIFRoZSBvbmx5IHRp
bWUgaXQncyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBjb3B5IGJsb2NrIGlzIGlmIHdlIGhhdmUg
anVzdCBzdGFydGVkIGNvcHlpbmcuCi0gICAgaWYgKCFtX2NvcHlCbG9jaykKLSAgICAgICAgc3Rh
cnRDb3B5aW5nKCk7Ci0KLSAgICBpZiAoIUNvcGllZFNwYWNlOjpmaXRzSW5CbG9jayhtX2NvcHlC
bG9jaywgYnl0ZXMpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbG9jayBhY3Jvc3Mg
dGhlc2UgdHdvIGNhbGxzIGJlY2F1c2UgdGhlIG1hc3RlciB0aHJlYWQgd29uJ3QgCi0gICAgICAg
IC8vIGNhbGwgZG9uZUNvcHlpbmcoKSBiZWNhdXNlIHRoaXMgdGhyZWFkIGlzIGNvbnNpZGVyZWQg
YWN0aXZlLgotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2Nr
KG1fY29weUJsb2NrKTsKLSAgICAgICAgbV9jb3B5QmxvY2sgPSBtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7Ci0gICAgfQotICAgIHJldHVybiBD
b3BpZWRTcGFjZTo6YWxsb2NhdGVGcm9tQmxvY2sobV9jb3B5QmxvY2ssIGJ5dGVzKTsKKyAgICBD
aGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUo
Ynl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2so
KQpAQCAtNjM5LDEyICs2MzcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2
b2lkKiogcAogICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQogewotICAgIGlm
ICghbV9jb3B5QmxvY2spCisgICAgaWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5n
QmxvY2sobV9jb3B5QmxvY2spOwotCi0gICAgbV9jb3B5QmxvY2sgPSAwOworICAgIG1fc2hhcmVk
Lm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRD
dXJyZW50QmxvY2soKSk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEyICs3MCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAKLSAgICBDb3BpZWRCbG9jayogbV9jb3B5QmxvY2s7
CisgICAgQ29waWVkQWxsb2NhdG9yIG1fY29waWVkQWxsb2NhdG9yOwogfTsKIAogaW5saW5lIFNs
b3RWaXNpdG9yOjpTbG90VmlzaXRvcihNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQp
CiAgICAgOiBNYXJrU3RhY2soc2hhcmVkKQotICAgICwgbV9jb3B5QmxvY2soMCkKIHsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmll
ck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lk
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1
bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0
cik7CisgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0
ZXJJRCByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxv
Y2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWdu
ZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsMTAgKzQzNywxNiBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNK
U09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0
Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXpl
X3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdpc3Rl
cklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2Jh
bERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCisgICAgbG9hZFB0cigmYWxsb2NhdG9y
LT5tX2N1cnJlbnRPZmZzZXQsIHJlc3VsdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEJl
bG93LCByZXN1bHQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpKTsKKyAgICBzdWJQdHIoVHJ1c3RlZElt
bVB0cihzaXplKSwgcmVzdWx0KTsKKyAgICBzdG9yZVB0cihyZXN1bHQsICZhbGxvY2F0b3ItPm1f
Y3VycmVudE9mZnNldCk7CisgICAgYWRkUHRyKC8vIEZJWE1FCisgICAgCiAgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gY2hlY2sgZm9yIHdyYXAtYXJvdW5kLgogICAgIC8vIENoZWNrIHRvIG1ha2Ug
c3VyZSB0aGF0IHRoZSBhbGxvY2F0aW9uIHdpbGwgZml0IGluIHRoZSBjdXJyZW50IGJsb2NrLgog
ICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJyZW50T2Zmc2V0LCByZXN1bHQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152433</attachid>
            <date>2012-07-14 14:00:06 -0700</date>
            <delta_ts>2012-07-14 16:56:38 -0700</delta_ts>
            <desc>Backwards Garen</desc>
            <filename>backwards_garen_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22707</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTA3LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmF0aW9uYWxpemUgYW5kIG9wdGltaXplIHN0b3JhZ2UgYWxsb2NhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzMDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorICAg
ICAgICAKKyAgICAgICAgSSdsbCBuZWVkIHRvIG1ha2Ugc29tZSBnbmFybHkgYXNzZW1ibGVyIGNo
YW5nZXMgdG8gZG8gdGhpcy4gOi0vCisKKyAgICAgICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5o
OgorICAgICAgICAoQ29waWVkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2Nh
dG9yOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpDb3BpZWRBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkNv
cGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxs
b2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoK
KyAgICAgICAgKENvcGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5lc3MpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZEVuZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRh
dGEpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGF0YUVuZCk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpkYXRhU2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3aWxk
ZXJuZXNzKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OndpbGRlcm5lc3NFbmQpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6d2lsZGVybmVzc1NpemUpOgorICAgICAgICAoSlNDOjpD
b3BpZWRCbG9jazo6c2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25l
RmlsbGluZ0Jsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKToK
KyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAgIChDb3BpZWRTcGFjZSk6Cisg
ICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0
ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRv
bmVDb3B5aW5nKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKToKKwogMjAxMi0wNy0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgT2ZmbGluZUFTTSBQcmV0dHkgcHJpbnRpbmcgYW5kIGNvbW1lbnRp
bmcgZW5oYW5jZW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTIyNTQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBh
ZGRQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgYWRkUHRyKEFic29sdXRlQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzcmMubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIp
OworICAgICAgICBhZGRQdHIoQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCBkZXN0KTsKKyAgICB9
CiAKICAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDExIEBA
IHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9p
ZCBhZGRxX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKENB
Tl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsOCBAQAogI2RlZmluZSBDb3BpZWRBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSAiQ29waWVk
QmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQsNjUgKzM2LDc2IEBAIGNsYXNz
IENvcGllZEFsbG9jYXRvciB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIHB1YmxpYzoKICAgICBD
b3BpZWRBbGxvY2F0b3IoKTsKLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIGJvb2wg
Zml0c0luQ3VycmVudEJsb2NrKHNpemVfdCk7Ci0gICAgYm9vbCB3YXNMYXN0QWxsb2NhdGlvbih2
b2lkKiwgc2l6ZV90KTsKLSAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7Ci0gICAgdm9pZCByZXNl
dEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayopOworICAgIAorICAgIENoZWNrZWRCb29sZWFuIHRy
eUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cik7CisgICAgdm9pZCogZm9yY2VB
bGxvY2F0ZShzaXplX3QgYnl0ZXMpOworICAgIENvcGllZEJsb2NrKiByZXNldEN1cnJlbnRCbG9j
aygpOworICAgIHZvaWQgc2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKik7CiAgICAgc2l6ZV90
IGN1cnJlbnRDYXBhY2l0eSgpOworICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuICEh
bV9jdXJyZW50QmxvY2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayogY3VycmVudEJs
b2NrKCkgeyByZXR1cm4gbV9jdXJyZW50QmxvY2s7IH0KIAotICAgIGNoYXIqIG1fY3VycmVudE9m
ZnNldDsKKyAgICBzaXplX3QgbV9jdXJyZW50T2Zmc2V0OworICAgIGNoYXIqIG1fY3VycmVudFBh
eWxvYWQ7CiAgICAgQ29waWVkQmxvY2sqIG1fY3VycmVudEJsb2NrOyAKIH07CiAKIGlubGluZSBD
b3BpZWRBbGxvY2F0b3I6OkNvcGllZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJlbnRPZmZzZXQo
MCkKKyAgICAsIG1fY3VycmVudFBheWxvYWQoMCkKICAgICAsIG1fY3VycmVudEJsb2NrKDApCiB7
CiB9CiAKLWlubGluZSB2b2lkKiBDb3BpZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRl
cykKK2lubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNp
emVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50T2Zmc2V0
KTsKICAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYnl0
ZXMpKSk7Ci0gICAgQVNTRVJUKGZpdHNJbkN1cnJlbnRCbG9jayhieXRlcykpOwotICAgIHZvaWQq
IHB0ciA9IHN0YXRpY19jYXN0PHZvaWQqPihtX2N1cnJlbnRPZmZzZXQpOwotICAgIG1fY3VycmVu
dE9mZnNldCArPSBieXRlczsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocHRyKSk7Ci0gICAg
cmV0dXJuIHB0cjsKKyAgICBzaXplX3QgY3VycmVudE9mZnNldCA9IG1fY3VycmVudE9mZnNldDsK
KyAgICBpZiAoYnl0ZXMgPiBjdXJyZW50T2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY3VycmVudE9mZnNldCAtPSBieXRlczsKKyAgICBtX2N1cnJlbnRPZmZzZXQgPSBjdXJyZW50
T2Zmc2V0OworICAgICpvdXRQdHIgPSBtX2N1cnJlbnRQYXlsb2FkICsgY3VycmVudE9mZnNldDsK
KyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoKm91dFB0cikpOworICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgYm9vbCBDb3BpZWRBbGxvY2F0b3I6OmZpdHNJbkN1cnJlbnRCbG9jayhzaXpl
X3QgYnl0ZXMpCitpbmxpbmUgdm9pZCogQ29waWVkQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKHNp
emVfdCBieXRlcykKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50T2Zmc2V0ICsgYnl0ZXMgPCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX2N1cnJlbnRCbG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tT
aXplICYmIG1fY3VycmVudE9mZnNldCArIGJ5dGVzID4gbV9jdXJyZW50T2Zmc2V0OworICAgIHZv
aWQqIHJlc3VsdDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gdHJ5QWxsb2NhdGUo
Ynl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1pbmxpbmUgYm9vbCBDb3BpZWRBbGxvY2F0b3I6Ondhc0xhc3RBbGxvY2F0aW9u
KHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEFsbG9j
YXRvcjo6cmVzZXRDdXJyZW50QmxvY2soKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
Kj4ocHRyKSArIHNpemUgPT0gbV9jdXJyZW50T2Zmc2V0ICYmIHB0ciA+IG1fY3VycmVudEJsb2Nr
ICYmIHB0ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY3VycmVudEJsb2NrKSArIEhlYXBC
bG9jazo6c19ibG9ja1NpemU7CisgICAgQ29waWVkQmxvY2sqIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LT5tX29mZnNldCA9IG1fY3Vy
cmVudE9mZnNldDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgICAgICBtX2N1cnJl
bnRPZmZzZXQgPSAwOworICAgICAgICBtX2N1cnJlbnRQYXlsb2FkID0gMDsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpzdGFydGVk
Q29weWluZygpCitpbmxpbmUgdm9pZCBDb3BpZWRBbGxvY2F0b3I6OnNldEN1cnJlbnRCbG9jayhD
b3BpZWRCbG9jayogbmV3QmxvY2spCiB7Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50
T2Zmc2V0KTsKLSAgICBtX2N1cnJlbnRPZmZzZXQgPSAwOwotICAgIG1fY3VycmVudEJsb2NrID0g
MDsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayhD
b3BpZWRCbG9jayogbmV3QmxvY2spCi17Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50
T2Zmc2V0KTsKKyAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKICAgICBtX2N1cnJlbnRCbG9j
ayA9IG5ld0Jsb2NrOwotICAgIG1fY3VycmVudE9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihu
ZXdCbG9jay0+bV9vZmZzZXQpOworICAgIEFTU0VSVChuZXdCbG9jayk7CisgICAgbV9jdXJyZW50
T2Zmc2V0ID0gbmV3QmxvY2stPm1fb2Zmc2V0OworICAgIG1fY3VycmVudFBheWxvYWQgPSBuZXdC
bG9jay0+cGF5bG9hZCgpOwogfQogCiBpbmxpbmUgc2l6ZV90IENvcGllZEFsbG9jYXRvcjo6Y3Vy
cmVudENhcGFjaXR5KCkKIHsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKQorICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmNhcGFjaXR5KCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTIyNTQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMTUgKzQyLDMwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sq
IGNyZWF0ZU5vWmVyb0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3Rh
dGljIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBkZXN0cm95KENvcGllZEJsb2NrKik7CiAKKyAgICAv
LyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBm
b3IgYWxsb2NhdGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOworICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKKyAgICBzaXplX3QgcGF5bG9hZENhcGFjaXR5KCk7CisgICAgCisgICAgLy8gVGhlIGRh
dGEgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBoYXMgYmVlbiB1c2VkIGZvciBhbGxv
Y2F0aW9ucy4KKyAgICBjaGFyKiBkYXRhKCk7CisgICAgY2hhciogZGF0YUVuZCgpOworICAgIHNp
emVfdCBkYXRhU2l6ZSgpOworICAgIAorICAgIC8vIFRoZSB3aWxkZXJuZXNzIGlzIHRoZSByZWdp
b24gb2YgdGhlIGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucworICAgIC8vIGJ1
dCBoYXMgbm90IGJlZW4gc28gdXNlZC4KKyAgICBjaGFyKiB3aWxkZXJuZXNzKCk7CisgICAgY2hh
ciogd2lsZGVybmVzc0VuZCgpOworICAgIHNpemVfdCB3aWxkZXJuZXNzU2l6ZSgpOworICAgIAog
ICAgIHNpemVfdCBzaXplKCk7CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKIHByaXZhdGU6CiAg
ICAgQ29waWVkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7Ci0gICAgdm9pZCB6
ZXJvRmlsbFRvRW5kKCk7IC8vIENhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxs
IHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAgIHZvaWQgemVyb0ZpbGxXaWxkZXJuZXNzKCk7
IC8vIENhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxsIHRvIHRoZSBlbmQgb2Yg
dGhlIGJsb2NrLgogCi0gICAgdm9pZCogbV9vZmZzZXQ7CisgICAgc2l6ZV90IG1fb2Zmc2V0Owog
ICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOwogfTsKIApAQCAtNjIsMTkgKzc3LDE4IEBAIGlubGlu
ZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU4KIGlubGluZSBDb3BpZWRCbG9jayog
Q29waWVkQmxvY2s6OmNyZWF0ZShjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRp
b24pCiB7CiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gY3JlYXRlTm9aZXJvRmlsbChhbGxvY2F0
aW9uKTsKLSAgICBibG9jay0+emVyb0ZpbGxUb0VuZCgpOworICAgIGJsb2NrLT56ZXJvRmlsbFdp
bGRlcm5lc3MoKTsKICAgICByZXR1cm4gYmxvY2s7CiB9CiAKLWlubGluZSB2b2lkIENvcGllZEJs
b2NrOjp6ZXJvRmlsbFRvRW5kKCkKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjp6ZXJvRmlsbFdp
bGRlcm5lc3MoKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY2hhciogb2Zmc2V0ID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1fb2Zmc2V0KTsKLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+
KG9mZnNldCksIDAsIHN0YXRpY19jYXN0PHNpemVfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKSkgLSBvZmZzZXQpKTsKKyAgICBtZW1zZXQod2ls
ZGVybmVzcygpLCAwLCB3aWxkZXJuZXNzU2l6ZSgpKTsKICNlbHNlCiAgICAgSlNWYWx1ZSBlbXB0
eVZhbHVlOwotICAgIEpTVmFsdWUqIGxpbWl0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1
ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKSk7
Ci0gICAgZm9yIChKU1ZhbHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihtX29mZnNldCk7IGN1cnJlbnRWYWx1ZSA8IGxpbWl0OyBjdXJyZW50VmFsdWUrKykKKyAg
ICBKU1ZhbHVlKiBsaW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTVmFsdWUqPih3aWxkZXJu
ZXNzRW5kKCkpOworICAgIGZvciAoSlNWYWx1ZSogY3VycmVudFZhbHVlID0gcmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4od2lsZGVybmVzcygpKTsgY3VycmVudFZhbHVlIDwgbGltaXQ7IGN1cnJl
bnRWYWx1ZSsrKQogICAgICAgICAqY3VycmVudFZhbHVlID0gZW1wdHlWYWx1ZTsKICNlbmRpZgog
fQpAQCAtOTAsMTAgKzEwNCwxMCBAQCBpbmxpbmUgUGFnZUFsbG9jYXRpb25BbGlnbmVkIENvcGll
ZEJsb2NrCiAKIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soY29uc3QgUGFnZUFsbG9j
YXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uKQogICAgIDogSGVhcEJsb2NrKGFsbG9jYXRpb24pCi0g
ICAgLCBtX29mZnNldChwYXlsb2FkKCkpCisgICAgLCBtX29mZnNldChwYXlsb2FkQ2FwYWNpdHko
KSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVk
KHN0YXRpY19jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWdu
ZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CiB9CiAKIGlubGluZSBjaGFy
KiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCkBAIC0xMDEsOSArMTE1LDQ5IEBAIGlubGluZSBjaGFy
KiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgKChzaXplb2YoQ29waWVkQmxvY2spICsgNykgJiB+Nyk7CiB9CiAKK2lubGlu
ZSBjaGFyKiBDb3BpZWRCbG9jazo6cGF5bG9hZEVuZCgpCit7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKTsKK30KKworaW5saW5l
IHNpemVfdCBDb3BpZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KCkKK3sKKyAgICByZXR1cm4gcGF5
bG9hZEVuZCgpIC0gcGF5bG9hZCgpOworfQorCitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRh
dGEoKQoreworICAgIHJldHVybiBwYXlsb2FkKCkgKyBtX29mZnNldDsKK30KKworaW5saW5lIGNo
YXIqIENvcGllZEJsb2NrOjpkYXRhRW5kKCkKK3sKKyAgICByZXR1cm4gcGF5bG9hZEVuZCgpOwor
fQorCitpbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpkYXRhU2l6ZSgpCit7CisgICAgcmV0dXJu
IGRhdGFFbmQoKSAtIGRhdGEoKTsKK30KKworaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjp3aWxk
ZXJuZXNzKCkKK3sKKyAgICByZXR1cm4gcGF5bG9hZCgpOworfQorCitpbmxpbmUgY2hhciogQ29w
aWVkQmxvY2s6OndpbGRlcm5lc3NFbmQoKQoreworICAgIHJldHVybiBkYXRhKCk7Cit9CisKK2lu
bGluZSBzaXplX3QgQ29waWVkQmxvY2s6OndpbGRlcm5lc3NTaXplKCkKK3sKKyAgICByZXR1cm4g
d2lsZGVybmVzc0VuZCgpIC0gd2lsZGVybmVzcygpOworfQorCiBpbmxpbmUgc2l6ZV90IENvcGll
ZEJsb2NrOjpzaXplKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNf
Y2FzdDxjaGFyKj4obV9vZmZzZXQpIC0gcGF5bG9hZCgpKTsKKyAgICByZXR1cm4gZGF0YVNpemUo
KTsKIH0KIAogaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6Y2FwYWNpdHkoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTIyNTQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw4ICs3MSw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlB
bGxvY2F0ZVMKIAogICAgIGFsbG9jYXRlQmxvY2soKTsKIAotICAgICpvdXRQdHIgPSBtX2FsbG9j
YXRvci5hbGxvY2F0ZShieXRlcyk7Ci0gICAgQVNTRVJUKCpvdXRQdHIpOworICAgICpvdXRQdHIg
PSBtX2FsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtOTMsNyArOTIsMTAgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9j
YXRlTwogICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2sp
KTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAgICAgCi0gICAgKm91dFB0ciA9IGFsbG9j
YXRlRnJvbUJsb2NrKGJsb2NrLCBieXRlcyk7CisgICAgQ29waWVkQWxsb2NhdG9yIGFsbG9jYXRv
cjsKKyAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKKyAgICAqb3V0UHRyID0g
YWxsb2NhdG9yLmZvcmNlQWxsb2NhdGUoYnl0ZXMpOworICAgIGFsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpOwogCiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShibG9ja1NpemUpOwogCkBAIC0x
MTEsMTQgKzExMyw2IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXQK
ICAgICBpZiAoaXNPdmVyc2l6ZShvbGRTaXplKSB8fCBpc092ZXJzaXplKG5ld1NpemUpKQogICAg
ICAgICByZXR1cm4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7
CiAKLSAgICBpZiAobV9hbGxvY2F0b3Iud2FzTGFzdEFsbG9jYXRpb24ob2xkUHRyLCBvbGRTaXpl
KSkgewotICAgICAgICBzaXplX3QgZGVsdGEgPSBuZXdTaXplIC0gb2xkU2l6ZTsKLSAgICAgICAg
aWYgKG1fYWxsb2NhdG9yLmZpdHNJbkN1cnJlbnRCbG9jayhkZWx0YSkpIHsKLSAgICAgICAgICAg
ICh2b2lkKW1fYWxsb2NhdG9yLmFsbG9jYXRlKGRlbHRhKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCogcmVzdWx0ID0gMDsKICAgICBpZiAo
IXRyeUFsbG9jYXRlKG5ld1NpemUsICZyZXN1bHQpKSB7CiAgICAgICAgICpwdHIgPSAwOwpAQCAt
MTU3LDE2ICsxNTEsMTcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2Nh
dAogCiB2b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiBibG9j
aykKIHsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsK
ICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7CisgICAgCisgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGJsb2NrLT5tX29mZnNldCA9PSBibG9jay0+cGF5bG9h
ZCgpKSB7CisgICAgaWYgKCFibG9jay0+ZGF0YVNpemUoKSkgewogICAgICAgICByZWN5Y2xlQmxv
Y2soYmxvY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYmxvY2stPnplcm9GaWxs
VG9FbmQoKTsKKyAgICBibG9jay0+emVyb0ZpbGxXaWxkZXJuZXNzKCk7CiAKICAgICB7CiAgICAg
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CkBAIC0yMjYsNyArMjIx
LDcgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgIGlmICghbV90b1NwYWNl
LT5oZWFkKCkpCiAgICAgICAgIGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCi0gICAgICAgIG1f
YWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKHN0YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV90
b1NwYWNlLT5oZWFkKCkpKTsKKyAgICAgICAgbV9hbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKHN0
YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV90b1NwYWNlLT5oZWFkKCkpKTsKIH0KIAogc2l6ZV90
IENvcGllZFNwYWNlOjpzaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlRnJvbUJsb2NrKENvcGllZEJsb2NrKiwgc2l6ZV90KTsK
ICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7Ci0gICAgc3RhdGljIGJvb2wgZml0
c0luQmxvY2soQ29waWVkQmxvY2sqLCBzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayog
b3ZlcnNpemVCbG9ja0Zvcih2b2lkKiBwdHIpOwogCiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxs
b2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKAogICAgIG1fdG9TcGFjZSA9IHRlbXA7CiAKICAgICBt
X2Jsb2NrRmlsdGVyLnJlc2V0KCk7Ci0gICAgbV9hbGxvY2F0b3Iuc3RhcnRlZENvcHlpbmcoKTsK
KyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwogCiAgICAgQVNTRVJUKCFtX2lu
Q29weWluZ1BoYXNlKTsKICAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwpAQCAt
OTQsNyArOTQsNyBAQCBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjphbGxvY2F0CiAg
ICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKICAgICB9CiAKLSAgICBBU1NFUlQoYmxv
Y2stPm1fb2Zmc2V0ID09IGJsb2NrLT5wYXlsb2FkKCkpOworICAgIEFTU0VSVCghYmxvY2stPmRh
dGFTaXplKCkpOwogICAgIHJldHVybiBibG9jazsKIH0KIApAQCAtMTAzLDQ1ICsxMDMsMjcgQEAg
aW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQogICAgIGlmIChtX2hlYXAt
PnNob3VsZENvbGxlY3QoKSkKICAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dl
ZXApOwogCisgICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKKyAgICAKICAgICBD
b3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5hbGxvY2F0ZSgpKTsKICAgICAgICAgCiAgICAgbV90b1NwYWNlLT5wdXNoKGJsb2Nr
KTsKICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7
CiAgICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwotICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKGJsb2NrKTsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmZpdHNJbkJsb2Nr
KENvcGllZEJsb2NrKiBibG9jaywgc2l6ZV90IGJ5dGVzKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zmc2V0KSArIGJ5dGVzIDwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYmxvY2spICsgYmxvY2stPmNhcGFjaXR5KCkgJiYgc3RhdGljX2Nhc3Q8Y2hhcio+KGJs
b2NrLT5tX29mZnNldCkgKyBieXRlcyA+IGJsb2NrLT5tX29mZnNldDsKKyAgICBtX2FsbG9jYXRv
ci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwogfQogCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29w
aWVkU3BhY2U6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKICAg
ICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsK
IAotICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IuZml0c0luQ3VycmVu
dEJsb2NrKGJ5dGVzKSkKKyAgICBpZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9y
LnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQogICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVT
bG93Q2FzZShieXRlcywgb3V0UHRyKTsKICAgICAKLSAgICAqb3V0UHRyID0gbV9hbGxvY2F0b3Iu
YWxsb2NhdGUoYnl0ZXMpOwogICAgIEFTU0VSVCgqb3V0UHRyKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotaW5saW5lIHZvaWQqIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayhDb3BpZWRC
bG9jayogYmxvY2ssIHNpemVfdCBieXRlcykKLXsKLSAgICBBU1NFUlQoZml0c0luQmxvY2soYmxv
Y2ssIGJ5dGVzKSk7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKGJsb2NrLT5tX29mZnNldCkp
OwotICAgIAotICAgIHZvaWQqIHB0ciA9IGJsb2NrLT5tX29mZnNldDsKLSAgICBBU1NFUlQoYmxv
Y2stPm1fb2Zmc2V0ID49IGJsb2NrLT5wYXlsb2FkKCkgJiYgYmxvY2stPm1fb2Zmc2V0IDwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgYmxvY2stPmNhcGFjaXR5KCkpOwotICAgIGJs
b2NrLT5tX29mZnNldCA9IHN0YXRpY19jYXN0PHZvaWQqPigoc3RhdGljX2Nhc3Q8Y2hhcio+KHB0
cikgKyBieXRlcykpOwotICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPj0gYmxvY2stPnBheWxv
YWQoKSAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykg
KyBibG9jay0+Y2FwYWNpdHkoKSk7Ci0KLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocHRyKSk7
Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQogaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmlzT3ZlcnNp
emUoc2l6ZV90IGJ5dGVzKQogewogICAgIHJldHVybiBieXRlcyA+IHNfbWF4QWxsb2NhdGlvblNp
emU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlz
aW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxNSw5ICs1MTUsOCBAQCB2b2lkIE1hcmtTdGFjazo6bWVyZ2VP
cGFxdWVSb290cygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZygpCiB7Ci0gICAg
QVNTRVJUKCFtX2NvcHlCbG9jayk7Ci0gICAgbV9jb3B5QmxvY2sgPSBtX3NoYXJlZC5tX2NvcGll
ZFNwYWNlLT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7Ci19ICAgIAorICAgIEFTU0VS
VCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKK30KIAogdm9pZCogU2xvdFZpc2l0b3I6
OmFsbG9jYXRlTmV3U3BhY2Uodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCiB7CkBAIC01MjgsMTgg
KzUyNywxNyBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZSh2b2lkCiAKICAg
ICBpZiAobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+aXNQaW5uZWQocHRyKSkKICAgICAgICAgcmV0
dXJuIDA7CisgICAgCisgICAgdm9pZCogcmVzdWx0OworICAgIGlmIChtX2NvcGllZEFsbG9jYXRv
ci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgCisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGll
ZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKKyAgICBtX2NvcGllZEFsbG9jYXRvci5z
ZXRDdXJyZW50QmxvY2sobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNv
cHlpbmdQaGFzZSgpKTsKIAotICAgIC8vIFRoZSBvbmx5IHRpbWUgaXQncyBwb3NzaWJsZSB0byBo
YXZlIGEgbnVsbCBjb3B5IGJsb2NrIGlzIGlmIHdlIGhhdmUganVzdCBzdGFydGVkIGNvcHlpbmcu
Ci0gICAgaWYgKCFtX2NvcHlCbG9jaykKLSAgICAgICAgc3RhcnRDb3B5aW5nKCk7Ci0KLSAgICBp
ZiAoIUNvcGllZFNwYWNlOjpmaXRzSW5CbG9jayhtX2NvcHlCbG9jaywgYnl0ZXMpKSB7Ci0gICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbG9jayBhY3Jvc3MgdGhlc2UgdHdvIGNhbGxzIGJlY2F1
c2UgdGhlIG1hc3RlciB0aHJlYWQgd29uJ3QgCi0gICAgICAgIC8vIGNhbGwgZG9uZUNvcHlpbmco
KSBiZWNhdXNlIHRoaXMgdGhyZWFkIGlzIGNvbnNpZGVyZWQgYWN0aXZlLgotICAgICAgICBtX3No
YXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29weUJsb2NrKTsKLSAgICAg
ICAgbV9jb3B5QmxvY2sgPSBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxvY2F0ZUJsb2NrRm9y
Q29weWluZ1BoYXNlKCk7Ci0gICAgfQotICAgIHJldHVybiBDb3BpZWRTcGFjZTo6YWxsb2NhdGVG
cm9tQmxvY2sobV9jb3B5QmxvY2ssIGJ5dGVzKTsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNj
ZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAg
IEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQpAQCAtNjM5LDEyICs2MzcsMTAg
QEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcAogICAgIAogdm9pZCBT
bG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQogewotICAgIGlmICghbV9jb3B5QmxvY2spCisgICAg
aWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3B5QmxvY2spOwot
Ci0gICAgbV9jb3B5QmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVG
aWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7CiB9CiAK
IHZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDEyICs3MCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVs
KCk7CiAKLSAgICBDb3BpZWRCbG9jayogbV9jb3B5QmxvY2s7CisgICAgQ29waWVkQWxsb2NhdG9y
IG1fY29waWVkQWxsb2NhdG9yOwogfTsKIAogaW5saW5lIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRv
cihNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCiAgICAgOiBNYXJrU3RhY2soc2hh
cmVkKQotICAgICwgbV9jb3B5QmxvY2soMCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZh
bHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVz
ZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0
cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljSlNP
YmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFn
ZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgUmVn
aXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CisgICAgICAgIHZvaWQgZW1p
dEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBz
dHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAg
ICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVu
c2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VS
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyMjU0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MzcsMjUgKzQzNywxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0
LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdpc3RlcklEIHJlc3VsdCkKIHsKICAgICBD
b3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFs
bG9jYXRvcigpOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2hlY2sgZm9yIHdyYXAtYXJv
dW5kLgotICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbGxvY2F0aW9uIHdpbGwg
Zml0IGluIHRoZSBjdXJyZW50IGJsb2NrLgogICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJy
ZW50T2Zmc2V0LCByZXN1bHQpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZSksIHJlc3Vs
dCk7Ci0gICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2N1cnJlbnRCbG9jaywgc3RvcmFnZVB0cik7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihIZWFwQmxvY2s6OnNfYmxvY2tTaXplKSwgc3RvcmFn
ZVB0cik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgcmVzdWx0LCBz
dG9yYWdlUHRyKSk7Ci0KLSAgICAvLyBMb2FkIHRoZSBvcmlnaW5hbCBvZmZzZXQuCi0gICAgbG9h
ZFB0cigmYWxsb2NhdG9yLT5tX2N1cnJlbnRPZmZzZXQsIHJlc3VsdCk7Ci0KLSAgICAvLyBCdW1w
IHRoZSBwb2ludGVyIGZvcndhcmQuCi0gICAgbW92ZShyZXN1bHQsIHN0b3JhZ2VQdHIpOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZSksIHN0b3JhZ2VQdHIpOwotICAgIHN0b3JlUHRyKHN0
b3JhZ2VQdHIsICZhbGxvY2F0b3ItPm1fY3VycmVudE9mZnNldCk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKEJlbG93LCByZXN1bHQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpKTsKKyAgICBzdWJQ
dHIoVHJ1c3RlZEltbVB0cihzaXplKSwgcmVzdWx0KTsKKyAgICBzdG9yZVB0cihyZXN1bHQsICZh
bGxvY2F0b3ItPm1fY3VycmVudE9mZnNldCk7CisgICAgYWRkUHRyKEFic29sdXRlQWRkcmVzcygm
YWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkKSwgcmVzdWx0KTsKIH0KIAogaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25l
ZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCkBAIC00NjUsNyArNDU1LDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJh
Y2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAg
IC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9uLgotICAgIGVt
aXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc3RvcmFnZVJlc3VsdCwgc3Rv
cmFnZVB0cik7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBz
dG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXku
CiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxs
UmVzdWx0LCBzdG9yYWdlUHRyKTsK
</data>
<flag name="commit-queue"
          id="161124"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152434</attachid>
            <date>2012-07-14 14:52:36 -0700</date>
            <delta_ts>2012-07-14 16:56:38 -0700</delta_ts>
            <desc>Backwards Frampton</desc>
            <filename>backwards_frampton_patch_1.diff</filename>
            <type>text/plain</type>
            <size>25872</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTA3LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmF0aW9uYWxpemUgYW5kIG9wdGltaXplIHN0b3JhZ2UgYWxsb2NhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzMDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorICAg
ICAgICAKKyAgICAgICAgSSdsbCBuZWVkIHRvIG1ha2Ugc29tZSBnbmFybHkgYXNzZW1ibGVyIGNo
YW5nZXMgdG8gZG8gdGhpcy4gOi0vCisKKyAgICAgICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5o
OgorICAgICAgICAoQ29waWVkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2Nh
dG9yOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpDb3BpZWRBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkNv
cGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxs
b2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoK
KyAgICAgICAgKENvcGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5lc3MpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZEVuZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRh
dGEpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGF0YUVuZCk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpkYXRhU2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3aWxk
ZXJuZXNzKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OndpbGRlcm5lc3NFbmQpOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6d2lsZGVybmVzc1NpemUpOgorICAgICAgICAoSlNDOjpD
b3BpZWRCbG9jazo6c2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25l
RmlsbGluZ0Jsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKToK
KyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAgIChDb3BpZWRTcGFjZSk6Cisg
ICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0
ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRv
bmVDb3B5aW5nKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKToKKwogMjAxMi0wNy0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgT2ZmbGluZUFTTSBQcmV0dHkgcHJpbnRpbmcgYW5kIGNvbW1lbnRp
bmcgZW5oYW5jZW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTQsNiArMzE0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFuZDMyKGltbSwgc3JjRGVz
dCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG5lZzMyKGRlc3QpOworICAgIH0KIAogICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAxMjI1
NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIub3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm1fcHRyKTsKICAgICB9
Ci0KKyAgICAKICAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbShpbW0ubV92YWx1
ZSwgYWRkcmVzcy5tX3B0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxMjI1NDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkcV9ycihzcmMsIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZFB0cihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNyYy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rl
cik7CisgICAgICAgIGFkZFB0cihBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlciksIGRlc3QpOworICAg
IH0KIAogICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CkBAIC0xODIsNiArMTkzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmFuZHFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5uZWdxX3IoZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBvclB0cihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzM4LDYgKzMzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX0FERF9Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCBhZGRxX21yKGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BRERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7
CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC00NDMsNiArNDQ4
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19F
diwgR1JPVVAzX09QX05FRywgZHN0KTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KQorICAgIHZv
aWQgbmVncV9yKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBkc3QpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgdm9pZCBuZWdsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsK
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAzX09QX05F
RywgYmFzZSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBA
QAogI2RlZmluZSBDb3BpZWRBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIK
KyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQsNjUgKzM2LDEwOSBAQCBjbGFzcyBDb3BpZWRB
bGxvY2F0b3IgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiBwdWJsaWM6CiAgICAgQ29waWVkQWxs
b2NhdG9yKCk7Ci0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAgICBib29sIGZpdHNJbkN1
cnJlbnRCbG9jayhzaXplX3QpOwotICAgIGJvb2wgd2FzTGFzdEFsbG9jYXRpb24odm9pZCosIHNp
emVfdCk7Ci0gICAgdm9pZCBzdGFydGVkQ29weWluZygpOwotICAgIHZvaWQgcmVzZXRDdXJyZW50
QmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICAKKyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0
ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOworICAgIENoZWNrZWRCb29sZWFuIHRyeVJl
YWxsb2NhdGUodm9pZCAqb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcyk7
CisgICAgdm9pZCogZm9yY2VBbGxvY2F0ZShzaXplX3QgYnl0ZXMpOworICAgIENvcGllZEJsb2Nr
KiByZXNldEN1cnJlbnRCbG9jaygpOworICAgIHZvaWQgc2V0Q3VycmVudEJsb2NrKENvcGllZEJs
b2NrKik7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSgpOworICAgIAorICAgIGJvb2wgaXNW
YWxpZCgpIHsgcmV0dXJuICEhbV9jdXJyZW50QmxvY2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3Bp
ZWRCbG9jayogY3VycmVudEJsb2NrKCkgeyByZXR1cm4gbV9jdXJyZW50QmxvY2s7IH0KIAotICAg
IGNoYXIqIG1fY3VycmVudE9mZnNldDsKKyAgICBzaXplX3QgbV9jdXJyZW50UmVtYWluaW5nOwor
ICAgIGNoYXIqIG1fY3VycmVudFBheWxvYWRFbmQ7CiAgICAgQ29waWVkQmxvY2sqIG1fY3VycmVu
dEJsb2NrOyAKIH07CiAKIGlubGluZSBDb3BpZWRBbGxvY2F0b3I6OkNvcGllZEFsbG9jYXRvcigp
Ci0gICAgOiBtX2N1cnJlbnRPZmZzZXQoMCkKKyAgICA6IG1fY3VycmVudFJlbWFpbmluZygwKQor
ICAgICwgbV9jdXJyZW50UGF5bG9hZEVuZCgwKQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKIHsK
IH0KIAotaW5saW5lIHZvaWQqIENvcGllZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVz
KQoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6
ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQp
OwogICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihieXRl
cykpKTsKLSAgICBBU1NFUlQoZml0c0luQ3VycmVudEJsb2NrKGJ5dGVzKSk7Ci0gICAgdm9pZCog
cHRyID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY3VycmVudE9mZnNldCk7Ci0gICAgbV9jdXJyZW50
T2Zmc2V0ICs9IGJ5dGVzOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChwdHIpKTsKLSAgICBy
ZXR1cm4gcHRyOworICAgIAorICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIGluIGEgZ3JhdHVp
dG91c2x5IGxvdy1sZXZlbCBtYW5uZXIsIGluIG9yZGVyIHRvCisgICAgLy8gc2VydmUgYXMgYSBr
aW5kIG9mIHRlbXBsYXRlIGZvciB3aGF0IHRoZSBKSVQgd291bGQgZG8uIE5vdGUgdGhhdCB0aGUK
KyAgICAvLyB3YXkgaXQncyB3cml0dGVuIGl0IG91Z2h0IHRvIG9ubHkgcmVxdWlyZSBvbmUgcmVn
aXN0ZXIsIHdoaWNoIGRvdWJsZXMKKyAgICAvLyBhcyB0aGUgcmVzdWx0LCBwcm92aWRlZCB0aGF0
IHRoZSBjb21waWxlciBkb2VzIGEgbWluaW1hbCBhbW91bnQgb2YKKyAgICAvLyBjb250cm9sIGZs
b3cgc2ltcGxpZmljYXRpb24gYW5kIHRoZSBieXRlcyBhcmd1bWVudCBpcyBhIGNvbnN0YW50Lgor
ICAgIAorICAgIHNpemVfdCBjdXJyZW50UmVtYWluaW5nID0gbV9jdXJyZW50UmVtYWluaW5nOwor
ICAgIGlmIChieXRlcyA+IGN1cnJlbnRSZW1haW5pbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjdXJyZW50UmVtYWluaW5nIC09IGJ5dGVzOworICAgIG1fY3VycmVudFJlbWFpbmluZyA9
IGN1cnJlbnRSZW1haW5pbmc7CisgICAgKm91dFB0ciA9IG1fY3VycmVudFBheWxvYWRFbmQgLSBj
dXJyZW50UmVtYWluaW5nIC0gYnl0ZXM7CisKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoKm91
dFB0cikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBDaGVja2VkQm9vbGVhbiBD
b3BpZWRBbGxvY2F0b3I6OnRyeVJlYWxsb2NhdGUoCisgICAgdm9pZCogb2xkUHRyLCBzaXplX3Qg
b2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcykKK3sKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQo
b2xkUHRyKSk7CisgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9sZEJ5dGVzKSkpOworICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9j
YXN0PHZvaWQqPihuZXdCeXRlcykpKTsKKyAgICAKKyAgICBBU1NFUlQobmV3Qnl0ZXMgPiBvbGRC
eXRlcyk7CisgICAgCisgICAgc2l6ZV90IGFkZGl0aW9uYWxCeXRlcyA9IG5ld0J5dGVzIC0gb2xk
Qnl0ZXM7CisgICAgCisgICAgc2l6ZV90IGN1cnJlbnRSZW1haW5pbmcgPSBtX2N1cnJlbnRSZW1h
aW5pbmc7CisgICAgaWYgKG1fY3VycmVudFBheWxvYWRFbmQgLSBjdXJyZW50UmVtYWluaW5nIC0g
b2xkQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9sZFB0cikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoYWRkaXRpb25hbEJ5dGVzID4gY3VycmVudFJlbWFpbmluZykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fY3VycmVudFJlbWFpbmluZyA9IGN1
cnJlbnRSZW1haW5pbmcgLSBhZGRpdGlvbmFsQnl0ZXM7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2lubGluZSB2b2lkKiBDb3BpZWRBbGxvY2F0b3I6OmZvcmNlQWxsb2NhdGUoc2l6ZV90
IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNj
ZWVkID0gdHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVk
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEFs
bG9jYXRvcjo6cmVzZXRDdXJyZW50QmxvY2soKQoreworICAgIENvcGllZEJsb2NrKiByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jazsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC0+bV9y
ZW1haW5pbmcgPSBtX2N1cnJlbnRSZW1haW5pbmc7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0g
MDsKKyAgICAgICAgbV9jdXJyZW50UmVtYWluaW5nID0gMDsKKyAgICAgICAgbV9jdXJyZW50UGF5
bG9hZEVuZCA9IDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBib29s
IENvcGllZEFsbG9jYXRvcjo6Zml0c0luQ3VycmVudEJsb2NrKHNpemVfdCBieXRlcykKK2lubGlu
ZSB2b2lkIENvcGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKiBuZXdC
bG9jaykKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50T2Zmc2V0ICsgYnl0ZXMgPCByZWludGVycHJl
dF9jYXN0PGNoYXIqPihtX2N1cnJlbnRCbG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplICYm
IG1fY3VycmVudE9mZnNldCArIGJ5dGVzID4gbV9jdXJyZW50T2Zmc2V0OwotfQotCi1pbmxpbmUg
Ym9vbCBDb3BpZWRBbGxvY2F0b3I6Ondhc0xhc3RBbGxvY2F0aW9uKHZvaWQqIHB0ciwgc2l6ZV90
IHNpemUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpICsgc2l6ZSA9PSBt
X2N1cnJlbnRPZmZzZXQgJiYgcHRyID4gbV9jdXJyZW50QmxvY2sgJiYgcHRyIDwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9jdXJyZW50QmxvY2spICsgSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZTsK
LX0KLQotaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpzdGFydGVkQ29weWluZygpCi17Ci0g
ICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQg
PSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKLSAgICBtX2N1cnJlbnRPZmZz
ZXQgPSAwOwotICAgIG1fY3VycmVudEJsb2NrID0gMDsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVk
QWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2spCi17Ci0g
ICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQg
PSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKKyAgICBBU1NFUlQoIW1fY3Vy
cmVudEJsb2NrKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG5ld0Jsb2NrOwotICAgIG1fY3VycmVu
dE9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihuZXdCbG9jay0+bV9vZmZzZXQpOworICAgIEFT
U0VSVChuZXdCbG9jayk7CisgICAgbV9jdXJyZW50UmVtYWluaW5nID0gbmV3QmxvY2stPm1fcmVt
YWluaW5nOworICAgIG1fY3VycmVudFBheWxvYWRFbmQgPSBuZXdCbG9jay0+cGF5bG9hZEVuZCgp
OwogfQogCiBpbmxpbmUgc2l6ZV90IENvcGllZEFsbG9jYXRvcjo6Y3VycmVudENhcGFjaXR5KCkK
IHsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKQorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmNhcGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUg
KzQyLDMwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZU5vWmVyb0Zp
bGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3RhdGljIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBkZXN0cm95KENvcGllZEJsb2NrKik7CiAKKyAgICAvLyBUaGUgcGF5bG9hZCBp
cyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2NhdGlvbnMu
CiAgICAgY2hhciogcGF5bG9hZCgpOworICAgIGNoYXIqIHBheWxvYWRFbmQoKTsKKyAgICBzaXpl
X3QgcGF5bG9hZENhcGFjaXR5KCk7CisgICAgCisgICAgLy8gVGhlIGRhdGEgaXMgdGhlIHJlZ2lv
biBvZiB0aGUgYmxvY2sgdGhhdCBoYXMgYmVlbiB1c2VkIGZvciBhbGxvY2F0aW9ucy4KKyAgICBj
aGFyKiBkYXRhKCk7CisgICAgY2hhciogZGF0YUVuZCgpOworICAgIHNpemVfdCBkYXRhU2l6ZSgp
OworICAgIAorICAgIC8vIFRoZSB3aWxkZXJuZXNzIGlzIHRoZSByZWdpb24gb2YgdGhlIGJsb2Nr
IHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucworICAgIC8vIGJ1dCBoYXMgbm90IGJlZW4g
c28gdXNlZC4KKyAgICBjaGFyKiB3aWxkZXJuZXNzKCk7CisgICAgY2hhciogd2lsZGVybmVzc0Vu
ZCgpOworICAgIHNpemVfdCB3aWxkZXJuZXNzU2l6ZSgpOworICAgIAogICAgIHNpemVfdCBzaXpl
KCk7CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKIHByaXZhdGU6CiAgICAgQ29waWVkQmxvY2so
Y29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7Ci0gICAgdm9pZCB6ZXJvRmlsbFRvRW5kKCk7
IC8vIENhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxsIHRvIHRoZSBlbmQgb2Yg
dGhlIGJsb2NrLgorICAgIHZvaWQgemVyb0ZpbGxXaWxkZXJuZXNzKCk7IC8vIENhbiBiZSBjYWxs
ZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxsIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgogCi0g
ICAgdm9pZCogbV9vZmZzZXQ7CisgICAgc2l6ZV90IG1fcmVtYWluaW5nOwogICAgIHVpbnRwdHJf
dCBtX2lzUGlubmVkOwogfTsKIApAQCAtNjIsMTkgKzc3LDE4IEBAIGlubGluZSBDb3BpZWRCbG9j
ayogQ29waWVkQmxvY2s6OmNyZWF0ZU4KIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6
OmNyZWF0ZShjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24pCiB7CiAgICAg
Q29waWVkQmxvY2sqIGJsb2NrID0gY3JlYXRlTm9aZXJvRmlsbChhbGxvY2F0aW9uKTsKLSAgICBi
bG9jay0+emVyb0ZpbGxUb0VuZCgpOworICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsK
ICAgICByZXR1cm4gYmxvY2s7CiB9CiAKLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjp6ZXJvRmls
bFRvRW5kKCkKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5lc3MoKQog
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY2hhciogb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fb2Zmc2V0KTsKLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+KG9mZnNldCksIDAs
IHN0YXRpY19jYXN0PHNpemVfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9h
bGxvY2F0aW9uLnNpemUoKSkgLSBvZmZzZXQpKTsKKyAgICBtZW1zZXQod2lsZGVybmVzcygpLCAw
LCB3aWxkZXJuZXNzU2l6ZSgpKTsKICNlbHNlCiAgICAgSlNWYWx1ZSBlbXB0eVZhbHVlOwotICAg
IEpTVmFsdWUqIGxpbWl0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKSk7Ci0gICAgZm9yIChK
U1ZhbHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX29mZnNl
dCk7IGN1cnJlbnRWYWx1ZSA8IGxpbWl0OyBjdXJyZW50VmFsdWUrKykKKyAgICBKU1ZhbHVlKiBs
aW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTVmFsdWUqPih3aWxkZXJuZXNzRW5kKCkpOwor
ICAgIGZvciAoSlNWYWx1ZSogY3VycmVudFZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
Kj4od2lsZGVybmVzcygpKTsgY3VycmVudFZhbHVlIDwgbGltaXQ7IGN1cnJlbnRWYWx1ZSsrKQog
ICAgICAgICAqY3VycmVudFZhbHVlID0gZW1wdHlWYWx1ZTsKICNlbmRpZgogfQpAQCAtOTAsMTAg
KzEwNCwxMCBAQCBpbmxpbmUgUGFnZUFsbG9jYXRpb25BbGlnbmVkIENvcGllZEJsb2NrCiAKIGlu
bGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVk
JiBhbGxvY2F0aW9uKQogICAgIDogSGVhcEJsb2NrKGFsbG9jYXRpb24pCi0gICAgLCBtX29mZnNl
dChwYXlsb2FkKCkpCisgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKICAgICAs
IG1faXNQaW5uZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHN0YXRpY19j
YXN0PHZvaWQqPihtX29mZnNldCkpKTsKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4obV9yZW1haW5pbmcpKSk7CiB9CiAKIGlubGluZSBjaGFyKiBDb3Bp
ZWRCbG9jazo6cGF5bG9hZCgpCkBAIC0xMDEsOSArMTE1LDQ5IEBAIGlubGluZSBjaGFyKiBDb3Bp
ZWRCbG9jazo6cGF5bG9hZCgpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo
aXMpICsgKChzaXplb2YoQ29waWVkQmxvY2spICsgNykgJiB+Nyk7CiB9CiAKK2lubGluZSBjaGFy
KiBDb3BpZWRCbG9jazo6cGF5bG9hZEVuZCgpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKTsKK30KKworaW5saW5lIHNpemVf
dCBDb3BpZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KCkKK3sKKyAgICByZXR1cm4gcGF5bG9hZEVu
ZCgpIC0gcGF5bG9hZCgpOworfQorCitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRhdGEoKQor
eworICAgIHJldHVybiBwYXlsb2FkKCk7Cit9CisKK2lubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6
ZGF0YUVuZCgpCit7CisgICAgcmV0dXJuIHBheWxvYWRFbmQoKSAtIG1fcmVtYWluaW5nOworfQor
CitpbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpkYXRhU2l6ZSgpCit7CisgICAgcmV0dXJuIGRh
dGFFbmQoKSAtIGRhdGEoKTsKK30KKworaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjp3aWxkZXJu
ZXNzKCkKK3sKKyAgICByZXR1cm4gZGF0YUVuZCgpOworfQorCitpbmxpbmUgY2hhciogQ29waWVk
QmxvY2s6OndpbGRlcm5lc3NFbmQoKQoreworICAgIHJldHVybiBwYXlsb2FkRW5kKCk7Cit9CisK
K2lubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OndpbGRlcm5lc3NTaXplKCkKK3sKKyAgICByZXR1
cm4gd2lsZGVybmVzc0VuZCgpIC0gd2lsZGVybmVzcygpOworfQorCiBpbmxpbmUgc2l6ZV90IENv
cGllZEJsb2NrOjpzaXplKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0
aWNfY2FzdDxjaGFyKj4obV9vZmZzZXQpIC0gcGF5bG9hZCgpKTsKKyAgICByZXR1cm4gZGF0YVNp
emUoKTsKIH0KIAogaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6Y2FwYWNpdHkoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTIy
NTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw4ICs3MSw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0
cnlBbGxvY2F0ZVMKIAogICAgIGFsbG9jYXRlQmxvY2soKTsKIAotICAgICpvdXRQdHIgPSBtX2Fs
bG9jYXRvci5hbGxvY2F0ZShieXRlcyk7Ci0gICAgQVNTRVJUKCpvdXRQdHIpOworICAgICpvdXRQ
dHIgPSBtX2FsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtOTMsNyArOTIsMTAgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFs
bG9jYXRlTwogICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAgICAgCi0gICAgKm91dFB0ciA9IGFs
bG9jYXRlRnJvbUJsb2NrKGJsb2NrLCBieXRlcyk7CisgICAgQ29waWVkQWxsb2NhdG9yIGFsbG9j
YXRvcjsKKyAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKKyAgICAqb3V0UHRy
ID0gYWxsb2NhdG9yLmZvcmNlQWxsb2NhdGUoYnl0ZXMpOworICAgIGFsbG9jYXRvci5yZXNldEN1
cnJlbnRCbG9jaygpOwogCiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShibG9ja1NpemUpOwogCkBA
IC0xMDcsMTcgKzEwOSwxMiBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxv
Y2F0CiAgICAgCiAgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKICAgICBBU1NFUlQoIW1faGVhcC0+
Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLQorICAgIAogICAgIGlmIChp
c092ZXJzaXplKG9sZFNpemUpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCiAgICAgICAgIHJldHVy
biB0cnlSZWFsbG9jYXRlT3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKLQotICAgIGlm
IChtX2FsbG9jYXRvci53YXNMYXN0QWxsb2NhdGlvbihvbGRQdHIsIG9sZFNpemUpKSB7Ci0gICAg
ICAgIHNpemVfdCBkZWx0YSA9IG5ld1NpemUgLSBvbGRTaXplOwotICAgICAgICBpZiAobV9hbGxv
Y2F0b3IuZml0c0luQ3VycmVudEJsb2NrKGRlbHRhKSkgewotICAgICAgICAgICAgKHZvaWQpbV9h
bGxvY2F0b3IuYWxsb2NhdGUoZGVsdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgCisgICAgaWYgKG1fYWxsb2NhdG9yLnRyeVJlYWxsb2NhdGUob2xk
UHRyLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB2b2lk
KiByZXN1bHQgPSAwOwogICAgIGlmICghdHJ5QWxsb2NhdGUobmV3U2l6ZSwgJnJlc3VsdCkpIHsK
QEAgLTE1NywxNiArMTU0LDE3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlSZWFs
bG9jYXQKIAogdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayog
YmxvY2spCiB7Ci0gICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoYmxvY2stPm1fb2Zmc2V0
IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgSGVhcEJsb2NrOjpzX2Jsb2NrU2l6
ZSk7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOworICAgIAorICAgIGlmICghYmxvY2sp
CisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChibG9jay0+bV9vZmZzZXQgPT0gYmxvY2stPnBh
eWxvYWQoKSkgeworICAgIGlmICghYmxvY2stPmRhdGFTaXplKCkpIHsKICAgICAgICAgcmVjeWNs
ZUJsb2NrKGJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJsb2NrLT56ZXJv
RmlsbFRvRW5kKCk7CisgICAgYmxvY2stPnplcm9GaWxsV2lsZGVybmVzcygpOwogCiAgICAgewog
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwpAQCAtMjI2LDcg
KzIyNCw3IEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKICAgICBpZiAoIW1fdG9T
cGFjZS0+aGVhZCgpKQogICAgICAgICBhbGxvY2F0ZUJsb2NrKCk7CiAgICAgZWxzZQotICAgICAg
ICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jayhzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+
KG1fdG9TcGFjZS0+aGVhZCgpKSk7CisgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9j
ayhzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fdG9TcGFjZS0+aGVhZCgpKSk7CiB9CiAKIHNp
emVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Iodm9pZCopOwogCiBwcml2YXRl
OgotICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZUZyb21CbG9jayhDb3BpZWRCbG9jayosIHNpemVf
dCk7CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6ZShzaXplX3QpOwotICAgIHN0YXRpYyBib29s
IGZpdHNJbkJsb2NrKENvcGllZEJsb2NrKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgQ29waWVkQmxv
Y2sqIG92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAogICAgIENoZWNrZWRCb29sZWFuIHRy
eUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5s
aW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygKICAgICBtX3RvU3BhY2UgPSB0ZW1wOwogCiAg
ICAgbV9ibG9ja0ZpbHRlci5yZXNldCgpOwotICAgIG1fYWxsb2NhdG9yLnN0YXJ0ZWRDb3B5aW5n
KCk7CisgICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKIAogICAgIEFTU0VSVCgh
bV9pbkNvcHlpbmdQaGFzZSk7CiAgICAgQVNTRVJUKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKTsK
QEAgLTk0LDcgKzk0LDcgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YWxsb2Nh
dAogICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tzKys7CiAgICAgfQogCi0gICAgQVNTRVJU
KGJsb2NrLT5tX29mZnNldCA9PSBibG9jay0+cGF5bG9hZCgpKTsKKyAgICBBU1NFUlQoIWJsb2Nr
LT5kYXRhU2l6ZSgpKTsKICAgICByZXR1cm4gYmxvY2s7CiB9CiAKQEAgLTEwMyw0NSArMTAzLDI3
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKICAgICBpZiAobV9o
ZWFwLT5zaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05v
dFN3ZWVwKTsKIAorICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAgCiAg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2Nr
QWxsb2NhdG9yKCkuYWxsb2NhdGUoKSk7CiAgICAgICAgIAogICAgIG1fdG9TcGFjZS0+cHVzaChi
bG9jayk7CiAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9j
aykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1
cnJlbnRCbG9jayhibG9jayk7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpmaXRzSW5C
bG9jayhDb3BpZWRCbG9jayogYmxvY2ssIHNpemVfdCBieXRlcykKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGJsb2NrLT5tX29mZnNldCkgKyBieXRlcyA8IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5jYXBhY2l0eSgpICYmIHN0YXRpY19jYXN0PGNoYXIq
PihibG9jay0+bV9vZmZzZXQpICsgYnl0ZXMgPiBibG9jay0+bV9vZmZzZXQ7CisgICAgbV9hbGxv
Y2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKIH0KIAogaW5saW5lIENoZWNrZWRCb29sZWFu
IENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7
CiAgICAgQVNTRVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3Qo
KSk7CiAKLSAgICBpZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9yLmZpdHNJbkN1
cnJlbnRCbG9jayhieXRlcykpCisgICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpIHx8ICFtX2FsbG9j
YXRvci50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9j
YXRlU2xvd0Nhc2UoYnl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAgKm91dFB0ciA9IG1fYWxsb2Nh
dG9yLmFsbG9jYXRlKGJ5dGVzKTsKICAgICBBU1NFUlQoKm91dFB0cik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWlubGluZSB2b2lkKiBDb3BpZWRTcGFjZTo6YWxsb2NhdGVGcm9tQmxvY2soQ29w
aWVkQmxvY2sqIGJsb2NrLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgQVNTRVJUKGZpdHNJbkJsb2Nr
KGJsb2NrLCBieXRlcykpOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChibG9jay0+bV9vZmZz
ZXQpKTsKLSAgICAKLSAgICB2b2lkKiBwdHIgPSBibG9jay0+bV9vZmZzZXQ7Ci0gICAgQVNTRVJU
KGJsb2NrLT5tX29mZnNldCA+PSBibG9jay0+cGF5bG9hZCgpICYmIGJsb2NrLT5tX29mZnNldCA8
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5jYXBhY2l0eSgpKTsKLSAg
ICBibG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4oKHN0YXRpY19jYXN0PGNoYXIq
PihwdHIpICsgYnl0ZXMpKTsKLSAgICBBU1NFUlQoYmxvY2stPm1fb2Zmc2V0ID49IGJsb2NrLT5w
YXlsb2FkKCkgJiYgYmxvY2stPm1fb2Zmc2V0IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxv
Y2spICsgYmxvY2stPmNhcGFjaXR5KCkpOwotCi0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHB0
cikpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KIGlubGluZSBib29sIENvcGllZFNwYWNlOjppc092
ZXJzaXplKHNpemVfdCBieXRlcykKIHsKICAgICByZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9jYXRp
b25TaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsOSArNTE1LDggQEAgdm9pZCBNYXJrU3RhY2s6Om1l
cmdlT3BhcXVlUm9vdHMoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzdGFydENvcHlpbmcoKQogewot
ICAgIEFTU0VSVCghbV9jb3B5QmxvY2spOwotICAgIG1fY29weUJsb2NrID0gbV9zaGFyZWQubV9j
b3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwotfSAgICAKKyAgICBB
U1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Cit9CiAKIHZvaWQqIFNsb3RWaXNp
dG9yOjphbGxvY2F0ZU5ld1NwYWNlKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewpAQCAtNTI4
LDE4ICs1MjcsMTcgQEAgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uodm9pZAog
CiAgICAgaWYgKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmlzUGlubmVkKHB0cikpCiAgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIHZvaWQqIHJlc3VsdDsKKyAgICBpZiAobV9jb3BpZWRBbGxv
Y2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIAorICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9j
b3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7CisgICAgbV9jb3BpZWRBbGxvY2F0
b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tG
b3JDb3B5aW5nUGhhc2UoKSk7CiAKLSAgICAvLyBUaGUgb25seSB0aW1lIGl0J3MgcG9zc2libGUg
dG8gaGF2ZSBhIG51bGwgY29weSBibG9jayBpcyBpZiB3ZSBoYXZlIGp1c3Qgc3RhcnRlZCBjb3B5
aW5nLgotICAgIGlmICghbV9jb3B5QmxvY2spCi0gICAgICAgIHN0YXJ0Q29weWluZygpOwotCi0g
ICAgaWYgKCFDb3BpZWRTcGFjZTo6Zml0c0luQmxvY2sobV9jb3B5QmxvY2ssIGJ5dGVzKSkgewot
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGxvY2sgYWNyb3NzIHRoZXNlIHR3byBjYWxscyBi
ZWNhdXNlIHRoZSBtYXN0ZXIgdGhyZWFkIHdvbid0IAotICAgICAgICAvLyBjYWxsIGRvbmVDb3B5
aW5nKCkgYmVjYXVzZSB0aGlzIHRocmVhZCBpcyBjb25zaWRlcmVkIGFjdGl2ZS4KLSAgICAgICAg
bV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcHlCbG9jayk7Ci0g
ICAgICAgIG1fY29weUJsb2NrID0gbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9j
a0ZvckNvcHlpbmdQaGFzZSgpOwotICAgIH0KLSAgICByZXR1cm4gQ29waWVkU3BhY2U6OmFsbG9j
YXRlRnJvbUJsb2NrKG1fY29weUJsb2NrLCBieXRlcyk7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlk
U3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsK
KyAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQUxXQVlT
X0lOTElORSBib29sIEpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKCkKQEAgLTYzOSwxMiArNjM3
LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHAKICAgICAKIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKIHsKLSAgICBpZiAoIW1fY29weUJsb2NrKQor
ICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29weUJsb2Nr
KTsKLQotICAgIG1fY29weUJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5k
b25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwog
fQogCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxMjI1NDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MCwxMiArNzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJh
bGxlbCgpOwogCi0gICAgQ29waWVkQmxvY2sqIG1fY29weUJsb2NrOworICAgIENvcGllZEFsbG9j
YXRvciBtX2NvcGllZEFsbG9jYXRvcjsKIH07CiAKIGlubGluZSBTbG90VmlzaXRvcjo6U2xvdFZp
c2l0b3IoTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQogICAgIDogTWFya1N0YWNr
KHNoYXJlZCkKLSAgICAsIG1fY29weUJsb2NrKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJ
RCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJp
ZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wg
ZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNp
Y0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qs
IFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOworICAgICAgICB2b2lk
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0
KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsK
ICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVy
LCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9y
YWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjI1
NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDM3LDI1ICs0MzcsMTYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIEpJVDo6ZQogICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9i
amVjdCwgZmFsc2UsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVy
SUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAg
ICAgQ29waWVkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3Jh
Z2VBbGxvY2F0b3IoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNoZWNrIGZvciB3cmFw
LWFyb3VuZC4KLSAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYWxsb2NhdGlvbiB3
aWxsIGZpdCBpbiB0aGUgY3VycmVudCBibG9jay4KLSAgICBsb2FkUHRyKCZhbGxvY2F0b3ItPm1f
Y3VycmVudE9mZnNldCwgcmVzdWx0KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCBy
ZXN1bHQpOwotICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJyZW50QmxvY2ssIHN0b3JhZ2VQ
dHIpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSksIHN0
b3JhZ2VQdHIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlc3Vs
dCwgc3RvcmFnZVB0cikpOwotCi0gICAgLy8gTG9hZCB0aGUgb3JpZ2luYWwgb2Zmc2V0LgotICAg
IGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJyZW50T2Zmc2V0LCByZXN1bHQpOwotCi0gICAgLy8g
QnVtcCB0aGUgcG9pbnRlciBmb3J3YXJkLgotICAgIG1vdmUocmVzdWx0LCBzdG9yYWdlUHRyKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCBzdG9yYWdlUHRyKTsKLSAgICBzdG9yZVB0
cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRPZmZzZXQpOworICAgIGxvYWRQdHIo
JmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCByZXN1bHQpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFN1YlB0cihTaWduZWQsIFRydXN0ZWRJbW0zMihzaXplKSwgcmVzdWx0KSk7CisgICAg
c3RvcmVQdHIocmVzdWx0LCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgIG5l
Z1B0cihyZXN1bHQpOworICAgIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHJlc3VsdCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXpl
KSwgcmVzdWx0KTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVu
c2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJl
c3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCkBA
IC00NjUsNyArNDU2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVu
cwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJl
IHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBK
U0FycmF5IGluaXRpYWxpemF0aW9uLgotICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0
aWFsU3RvcmFnZSwgc3RvcmFnZVJlc3VsdCwgc3RvcmFnZVB0cik7CisgICAgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFs
bG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09i
amVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsK
</data>
<flag name="commit-queue"
          id="161125"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152436</attachid>
            <date>2012-07-14 16:56:38 -0700</date>
            <delta_ts>2012-07-14 17:14:39 -0700</delta_ts>
            <desc>almost there</desc>
            <filename>fixcopied_patch_2.diff</filename>
            <type>text/plain</type>
            <size>28958</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxMi0wNy0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJhdGlvbmFsaXplIGFuZCBvcHRpbWl6ZSBzdG9yYWdlIGFsbG9jYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMzAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGEgYmFj
a3dhcmRzIGJ1bXAgYWxsb2NhdG9yIGZvciBjb3BpZWQgc3BhY2Ugc3RvcmFnZQorICAgICAgICBh
bGxvY2F0aW9uLCBzaG93biBpbiBwc2V1ZG8tY29kZSBiZWxvdzoKKyAgICAgICAgCisgICAgICAg
ICAgICBwb2ludGVyIGJ1bXAoc2l6ZSkgeworICAgICAgICAgICAgICAgcG9pbnRlciB0bXAgPSBh
bGxvY2F0b3ItPnJlbWFpbmluZzsKKyAgICAgICAgICAgICAgIHRtcCAtPSBzaXplOworICAgICAg
ICAgICAgICAgaWYgKHRtcCA8IDApCisgICAgICAgICAgICAgICAgICAgZmFpbDsKKyAgICAgICAg
ICAgICAgIGFsbG9jYXRvci0+cmVtYWluaW5nID0gdG1wOworICAgICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRvci0+cGF5bG9hZEVuZCAtIHRtcCAtIHNpemU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFsbG9jYXRvciBpcyB0aGF0IGl0OgorICAgICAg
ICAKKyAgICAgICAgLSBPbmx5IHJlcXVpcmVzIG9uZSBjb21wYXJpc29uIGluIHRoZSBjb21tb24g
Y2FzZSB3aGVyZSBzaXplIGlzIGtub3duIHRvCisgICAgICAgICAgbm90IGJlIGh1Z2UsIGFuZCB0
aGlzIGNvbXBhcmlzb24gY2FuIGJlIGRvbmUgYnkgY2hlY2tpbmcgdGhlIHNpZ24gYml0CisgICAg
ICAgICAgb2YgdGhlIHN1YnRyYWN0aW9uLgorICAgICAgICAKKyAgICAgICAgLSBDYW4gYmUgaW1w
bGVtZW50ZWQgZXZlbiB3aGVuIG9ubHkgb25lIHJlZ2lzdGVyIGlzIGF2YWlsYWJsZS4gVGhpcwor
ICAgICAgICAgIHJlZ2lzdGVyIGlzIHJldXNlZCBmb3IgYm90aCB0ZW1wb3Jhcnkgc3RvcmFnZSBk
dXJpbmcgYWxsb2NhdGlvbiBhbmQKKyAgICAgICAgICBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAg
CisgICAgICAgIC0gUHJlc2VydmVzIHRoZSBiZWhhdmlvciB0aGF0IG1lbW9yeSBpbiBhIGJsb2Nr
IGlzIGZpbGxlZCBpbiBmcm9tIGxvd2VzdAorICAgICAgICAgIGFkZHJlc3MgdG8gaGlnaGVzdCBh
ZGRyZXNzLCB3aGljaCBhbGxvd3MgZm9yIGEgY2hlYXAgcmVhbGxvY2F0aW9uIGZhc3QKKyAgICAg
ICAgICBwYXRoLgorICAgICAgICAKKyAgICAgICAgLSBJcyByZXNpbGllbnQgYWdhaW5zdCB0aGUg
YmxvY2sgdXNlZCBmb3IgYWxsb2NhdGlvbiBiZWluZyB0aGUgbGFzdCBvbmUKKyAgICAgICAgICBp
biB2aXJ0dWFsIG1lbW9yeSwgdGhlcmVieSBvdGhlcndpc2UgbGVhZGluZyB0byB0aGUgcmlzayBv
ZiBvdmVyZmxvdworICAgICAgICAgIGluIHRoZSBidW1wIHBvaW50ZXIsIGRlc3BpdGUgb25seSBk
b2luZyBvbmUgYnJhbmNoLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gaW1wbGVtZW50
IHRoaXMgYWxsb2NhdG9yIHVzaW5nIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBjaHVuaworICAgICAg
ICBvZiBjb2RlLCBJIHJlZmFjdG9yZWQgdGhlIGNvcGllZCBzcGFjZSBjb2RlIHNvIHRoYXQgYWxs
IG9mIHRoZSBhbGxvY2F0aW9uCisgICAgICAgIGxvZ2ljIGlzIGluIENvcGllZEFsbG9jYXRvciwg
YW5kIGFsbCBvZiB0aGUgc3RhdGUgaXMgaW4gZWl0aGVyCisgICAgICAgIENvcGllZEJsb2NrIG9y
IENvcGllZEFsbG9jYXRvci4gVGhpcyBzaG91bGQgbWFrZSBjaGFuZ2luZyB0aGUgYWxsb2NhdGlv
bgorICAgICAgICBmYXN0IHBhdGggZWFzaWVyIGluIHRoZSBmdXR1cmUuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwuIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvIGZhY2lsaXRhdGUKKyAgICAgICAgZnVydGhlciBpbmxpbmluZyBvZiBzdG9yYWdl
IGFsbG9jYXRpb24gd2l0aG91dCBoYXZpbmcgdG8gcmVzZXJ2ZQorICAgICAgICBhZGRpdGlvbmFs
IHJlZ2lzdGVycyBvciBlbWl0IHRvbyBtdWNoIGNvZGUuCisgICAgICAgIAorICAgICAgICAqIGhl
YXAvQ29waWVkQWxsb2NhdG9yLmg6CisgICAgICAgIChDb3BpZWRBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpDb3BpZWRB
bGxvY2F0b3I6OkNvcGllZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OmZvcmNlQWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnJlc2V0Q3VycmVudEJsb2Nr
KToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjpzZXRDdXJyZW50QmxvY2spOgorICAg
ICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OmN1cnJlbnRDYXBhY2l0eSk6CisgICAgICAgICog
aGVhcC9Db3BpZWRCbG9jay5oOgorICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlND
OjpDb3BpZWRCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6Onplcm9G
aWxsV2lsZGVybmVzcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpDb3BpZWRCbG9jayk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwYXlsb2FkRW5kKToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwYXlsb2FkQ2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6ZGF0YSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkYXRh
RW5kKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRhdGFTaXplKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OndpbGRlcm5lc3MpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6
d2lsZGVybmVzc0VuZCk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3aWxkZXJuZXNzU2l6
ZSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpzaXplKToKKyAgICAgICAgKiBoZWFwL0Nv
cGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVyc2l6ZSk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAg
ICAgKENvcGllZFNwYWNlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSk6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9N
YXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0
b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAgICAg
KiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorCiAyMDEyLTA3LTEzICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPZmZsaW5lQVNNIFByZXR0eSBw
cmludGluZyBhbmQgY29tbWVudGluZyBlbmhhbmNlbWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMjI1
NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MCw2ICsyODAsMTYgQEAgcHVibGljOgogICAgIC8vIE9uIDMy
LWJpdCBwbGF0Zm9ybXMgKGkuZS4geDg2KSwgdGhlc2UgbWV0aG9kcyBkaXJlY3RseSBtYXAgb250
byB0aGVpciAzMi1iaXQgZXF1aXZhbGVudHMuCiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIHVz
ZSBhIHRlc3QgZm9yIDMyLWJpdG5lc3MgaW5zdGVhZCBvZiB0aGlzIHNwZWNpZmljIGV4Y2VwdGlv
bj8KICNpZiAhQ1BVKFg4Nl82NCkKKyAgICB2b2lkIGFkZFB0cihBZGRyZXNzIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgYWRkUHRyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBhZGQzMihzcmMs
IGRlc3QpOwpAQCAtMzE0LDYgKzMyNCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBhbmQz
MihpbW0sIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBuZWczMihkZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG9y
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAko
cmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3MubV9wdHIp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZDMyKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX21yKGFkZHJl
c3MubV9wdHIsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0z
MiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5tX3B0cik7CkBAIC03OCw3ICs4Myw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbShpbW0ubV92YWx1ZSwg
YWRkcmVzcy5tX3B0cik7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1t
MzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN1YmxfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3MubV9wdHIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDE3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfcnIoc3JjLCBkZXN0KTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBhZGRQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKEFic29sdXRlQWRkcmVzcyBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzcmMu
bV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGRQdHIoQWRkcmVzcyhzY3JhdGNo
UmVnaXN0ZXIpLCBkZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewpAQCAtMTgyLDYgKzE5MywxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNE
ZXN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBuZWdQdHIoUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVncV9yKGRlc3QpOworICAgIH0KIAogICAgIHZvaWQg
b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTEgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNl
dCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgYWRkbF9tcihjb25zdCB2b2lkKiBhZGRyLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9BRERf
R3ZFdiwgZHN0LCBhZGRyKTsKKyAgICB9CiAKICAgICB2b2lkIGFkZGxfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CkBAIC0zMzgsNiArMzQzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQUREX0V2R3Ys
IHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZHFfbXIoaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX0FERF9HdkV2LCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAgICAg
dm9pZCBhZGRxX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYg
KENBTl9TSUdOX0VYVEVORF84XzMyKGltbSkpIHsKQEAgLTQ0Myw2ICs0NTMsMTMgQEAgcHVibGlj
OgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1Bf
TkVHLCBkc3QpOwogICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAgdm9pZCBuZWdxX3IoUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9H
Uk9VUDNfRXYsIEdST1VQM19PUF9ORUcsIGRzdCk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lk
IG5lZ2xfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBiYXNlLCBvZmZz
ZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9y
LmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5lIENv
cGllZEFsbG9jYXRvcl9oCiAKICNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQm9vbGVhbi5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0zNCw2NSArMzYsMTA5IEBAIGNsYXNzIENvcGllZEFsbG9jYXRvciB7CiAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKIHB1YmxpYzoKICAgICBDb3BpZWRBbGxvY2F0b3IoKTsKLSAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIGJvb2wgZml0c0luQ3VycmVudEJsb2NrKHNp
emVfdCk7Ci0gICAgYm9vbCB3YXNMYXN0QWxsb2NhdGlvbih2b2lkKiwgc2l6ZV90KTsKLSAgICB2
b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7Ci0gICAgdm9pZCByZXNldEN1cnJlbnRCbG9jayhDb3BpZWRC
bG9jayopOworICAgIAorICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRl
cywgdm9pZCoqIG91dFB0cik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZSh2b2lk
ICpvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKTsKKyAgICB2b2lkKiBm
b3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7CisgICAgQ29waWVkQmxvY2sqIHJlc2V0Q3VycmVu
dEJsb2NrKCk7CisgICAgdm9pZCBzZXRDdXJyZW50QmxvY2soQ29waWVkQmxvY2sqKTsKICAgICBz
aXplX3QgY3VycmVudENhcGFjaXR5KCk7CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1
cm4gISFtX2N1cnJlbnRCbG9jazsgfQogCiBwcml2YXRlOgogICAgIENvcGllZEJsb2NrKiBjdXJy
ZW50QmxvY2soKSB7IHJldHVybiBtX2N1cnJlbnRCbG9jazsgfQogCi0gICAgY2hhciogbV9jdXJy
ZW50T2Zmc2V0OworICAgIHNpemVfdCBtX2N1cnJlbnRSZW1haW5pbmc7CisgICAgY2hhciogbV9j
dXJyZW50UGF5bG9hZEVuZDsKICAgICBDb3BpZWRCbG9jayogbV9jdXJyZW50QmxvY2s7IAogfTsK
IAogaW5saW5lIENvcGllZEFsbG9jYXRvcjo6Q29waWVkQWxsb2NhdG9yKCkKLSAgICA6IG1fY3Vy
cmVudE9mZnNldCgwKQorICAgIDogbV9jdXJyZW50UmVtYWluaW5nKDApCisgICAgLCBtX2N1cnJl
bnRQYXlsb2FkRW5kKDApCiAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogewogfQogCi1pbmxpbmUg
dm9pZCogQ29waWVkQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgQ2hl
Y2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZv
aWQqKiBvdXRQdHIpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudE9mZnNldCk7CiAgICAgQVNTRVJU
KGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5dGVzKSkpOwotICAgIEFT
U0VSVChmaXRzSW5DdXJyZW50QmxvY2soYnl0ZXMpKTsKLSAgICB2b2lkKiBwdHIgPSBzdGF0aWNf
Y2FzdDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKLSAgICBtX2N1cnJlbnRPZmZzZXQgKz0gYnl0
ZXM7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHB0cikpOwotICAgIHJldHVybiBwdHI7Cisg
ICAgCisgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gaW4gYSBncmF0dWl0b3VzbHkgbG93LWxl
dmVsIG1hbm5lciwgaW4gb3JkZXIgdG8KKyAgICAvLyBzZXJ2ZSBhcyBhIGtpbmQgb2YgdGVtcGxh
dGUgZm9yIHdoYXQgdGhlIEpJVCB3b3VsZCBkby4gTm90ZSB0aGF0IHRoZQorICAgIC8vIHdheSBp
dCdzIHdyaXR0ZW4gaXQgb3VnaHQgdG8gb25seSByZXF1aXJlIG9uZSByZWdpc3Rlciwgd2hpY2gg
ZG91YmxlcworICAgIC8vIGFzIHRoZSByZXN1bHQsIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBpbGVy
IGRvZXMgYSBtaW5pbWFsIGFtb3VudCBvZgorICAgIC8vIGNvbnRyb2wgZmxvdyBzaW1wbGlmaWNh
dGlvbiBhbmQgdGhlIGJ5dGVzIGFyZ3VtZW50IGlzIGEgY29uc3RhbnQuCisgICAgCisgICAgc2l6
ZV90IGN1cnJlbnRSZW1haW5pbmcgPSBtX2N1cnJlbnRSZW1haW5pbmc7CisgICAgaWYgKGJ5dGVz
ID4gY3VycmVudFJlbWFpbmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGN1cnJlbnRS
ZW1haW5pbmcgLT0gYnl0ZXM7CisgICAgbV9jdXJyZW50UmVtYWluaW5nID0gY3VycmVudFJlbWFp
bmluZzsKKyAgICAqb3V0UHRyID0gbV9jdXJyZW50UGF5bG9hZEVuZCAtIGN1cnJlbnRSZW1haW5p
bmcgLSBieXRlczsKKworICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZCgqb3V0UHRyKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRv
cjo6dHJ5UmVhbGxvY2F0ZSgKKyAgICB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6
ZV90IG5ld0J5dGVzKQoreworICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChvbGRQdHIpKTsKKyAg
ICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2xkQnl0ZXMp
KSk7CisgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5l
d0J5dGVzKSkpOworICAgIAorICAgIEFTU0VSVChuZXdCeXRlcyA+IG9sZEJ5dGVzKTsKKyAgICAK
KyAgICBzaXplX3QgYWRkaXRpb25hbEJ5dGVzID0gbmV3Qnl0ZXMgLSBvbGRCeXRlczsKKyAgICAK
KyAgICBzaXplX3QgY3VycmVudFJlbWFpbmluZyA9IG1fY3VycmVudFJlbWFpbmluZzsKKyAgICBp
ZiAobV9jdXJyZW50UGF5bG9hZEVuZCAtIGN1cnJlbnRSZW1haW5pbmcgLSBvbGRCeXRlcyAhPSBz
dGF0aWNfY2FzdDxjaGFyKj4ob2xkUHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmIChhZGRpdGlvbmFsQnl0ZXMgPiBjdXJyZW50UmVtYWluaW5nKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgbV9jdXJyZW50UmVtYWluaW5nID0gY3VycmVudFJlbWFpbmlu
ZyAtIGFkZGl0aW9uYWxCeXRlczsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5l
IHZvaWQqIENvcGllZEFsbG9jYXRvcjo6Zm9yY2VBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCit7Cisg
ICAgdm9pZCogcmVzdWx0ID0gMDsgLy8gTmVlZGVkIGJlY2F1c2UgY29tcGlsZXJzIGRvbid0IHJl
YWxpemUgdGhpcyB3aWxsIGFsd2F5cyBiZSBhc3NpZ25lZC4KKyAgICBDaGVja2VkQm9vbGVhbiBk
aWRTdWNjZWVkID0gdHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRT
dWNjZWVkKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENv
cGllZEFsbG9jYXRvcjo6cmVzZXRDdXJyZW50QmxvY2soKQoreworICAgIENvcGllZEJsb2NrKiBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jazsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIHJlc3Vs
dC0+bV9yZW1haW5pbmcgPSBtX2N1cnJlbnRSZW1haW5pbmc7CisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gMDsKKyAgICAgICAgbV9jdXJyZW50UmVtYWluaW5nID0gMDsKKyAgICAgICAgbV9jdXJy
ZW50UGF5bG9hZEVuZCA9IDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGlu
ZSBib29sIENvcGllZEFsbG9jYXRvcjo6Zml0c0luQ3VycmVudEJsb2NrKHNpemVfdCBieXRlcykK
K2lubGluZSB2b2lkIENvcGllZEFsbG9jYXRvcjo6c2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2Nr
KiBuZXdCbG9jaykKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50T2Zmc2V0ICsgYnl0ZXMgPCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX2N1cnJlbnRCbG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tT
aXplICYmIG1fY3VycmVudE9mZnNldCArIGJ5dGVzID4gbV9jdXJyZW50T2Zmc2V0OwotfQotCi1p
bmxpbmUgYm9vbCBDb3BpZWRBbGxvY2F0b3I6Ondhc0xhc3RBbGxvY2F0aW9uKHZvaWQqIHB0ciwg
c2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpICsgc2l6
ZSA9PSBtX2N1cnJlbnRPZmZzZXQgJiYgcHRyID4gbV9jdXJyZW50QmxvY2sgJiYgcHRyIDwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obV9jdXJyZW50QmxvY2spICsgSGVhcEJsb2NrOjpzX2Jsb2Nr
U2l6ZTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpzdGFydGVkQ29weWluZygp
Ci17Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9v
ZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKLSAgICBtX2N1cnJl
bnRPZmZzZXQgPSAwOwotICAgIG1fY3VycmVudEJsb2NrID0gMDsKLX0KLQotaW5saW5lIHZvaWQg
Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2sp
Ci17Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9v
ZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKKyAgICBBU1NFUlQo
IW1fY3VycmVudEJsb2NrKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG5ld0Jsb2NrOwotICAgIG1f
Y3VycmVudE9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihuZXdCbG9jay0+bV9vZmZzZXQpOwor
ICAgIEFTU0VSVChuZXdCbG9jayk7CisgICAgbV9jdXJyZW50UmVtYWluaW5nID0gbmV3QmxvY2st
Pm1fcmVtYWluaW5nOworICAgIG1fY3VycmVudFBheWxvYWRFbmQgPSBuZXdCbG9jay0+cGF5bG9h
ZEVuZCgpOwogfQogCiBpbmxpbmUgc2l6ZV90IENvcGllZEFsbG9jYXRvcjo6Y3VycmVudENhcGFj
aXR5KCkKIHsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKQorICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmNhcGFjaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTIyNTQ5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTUgKzQyLDMwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZU5v
WmVyb0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3RhdGljIFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCBkZXN0cm95KENvcGllZEJsb2NrKik7CiAKKyAgICAvLyBUaGUgcGF5
bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2Nh
dGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOworICAgIGNoYXIqIHBheWxvYWRFbmQoKTsKKyAg
ICBzaXplX3QgcGF5bG9hZENhcGFjaXR5KCk7CisgICAgCisgICAgLy8gVGhlIGRhdGEgaXMgdGhl
IHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBoYXMgYmVlbiB1c2VkIGZvciBhbGxvY2F0aW9ucy4K
KyAgICBjaGFyKiBkYXRhKCk7CisgICAgY2hhciogZGF0YUVuZCgpOworICAgIHNpemVfdCBkYXRh
U2l6ZSgpOworICAgIAorICAgIC8vIFRoZSB3aWxkZXJuZXNzIGlzIHRoZSByZWdpb24gb2YgdGhl
IGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucworICAgIC8vIGJ1dCBoYXMgbm90
IGJlZW4gc28gdXNlZC4KKyAgICBjaGFyKiB3aWxkZXJuZXNzKCk7CisgICAgY2hhciogd2lsZGVy
bmVzc0VuZCgpOworICAgIHNpemVfdCB3aWxkZXJuZXNzU2l6ZSgpOworICAgIAogICAgIHNpemVf
dCBzaXplKCk7CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKIHByaXZhdGU6CiAgICAgQ29waWVk
QmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7Ci0gICAgdm9pZCB6ZXJvRmlsbFRv
RW5kKCk7IC8vIENhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxsIHRvIHRoZSBl
bmQgb2YgdGhlIGJsb2NrLgorICAgIHZvaWQgemVyb0ZpbGxXaWxkZXJuZXNzKCk7IC8vIENhbiBi
ZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gemVyby1maWxsIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2Nr
LgogCi0gICAgdm9pZCogbV9vZmZzZXQ7CisgICAgc2l6ZV90IG1fcmVtYWluaW5nOwogICAgIHVp
bnRwdHJfdCBtX2lzUGlubmVkOwogfTsKIApAQCAtNjIsMTkgKzc3LDE4IEBAIGlubGluZSBDb3Bp
ZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU4KIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVk
QmxvY2s6OmNyZWF0ZShjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24pCiB7
CiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gY3JlYXRlTm9aZXJvRmlsbChhbGxvY2F0aW9uKTsK
LSAgICBibG9jay0+emVyb0ZpbGxUb0VuZCgpOworICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5l
c3MoKTsKICAgICByZXR1cm4gYmxvY2s7CiB9CiAKLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjp6
ZXJvRmlsbFRvRW5kKCkKK2lubGluZSB2b2lkIENvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5l
c3MoKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY2hhciogb2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KG1fb2Zmc2V0KTsKLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+KG9mZnNl
dCksIDAsIHN0YXRpY19jYXN0PHNpemVfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgbV9hbGxvY2F0aW9uLnNpemUoKSkgLSBvZmZzZXQpKTsKKyAgICBtZW1zZXQod2lsZGVybmVz
cygpLCAwLCB3aWxkZXJuZXNzU2l6ZSgpKTsKICNlbHNlCiAgICAgSlNWYWx1ZSBlbXB0eVZhbHVl
OwotICAgIEpTVmFsdWUqIGxpbWl0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKSk7Ci0gICAg
Zm9yIChKU1ZhbHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPiht
X29mZnNldCk7IGN1cnJlbnRWYWx1ZSA8IGxpbWl0OyBjdXJyZW50VmFsdWUrKykKKyAgICBKU1Zh
bHVlKiBsaW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTVmFsdWUqPih3aWxkZXJuZXNzRW5k
KCkpOworICAgIGZvciAoSlNWYWx1ZSogY3VycmVudFZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4od2lsZGVybmVzcygpKTsgY3VycmVudFZhbHVlIDwgbGltaXQ7IGN1cnJlbnRWYWx1
ZSsrKQogICAgICAgICAqY3VycmVudFZhbHVlID0gZW1wdHlWYWx1ZTsKICNlbmRpZgogfQpAQCAt
OTAsMTAgKzEwNCwxMCBAQCBpbmxpbmUgUGFnZUFsbG9jYXRpb25BbGlnbmVkIENvcGllZEJsb2Nr
CiAKIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25B
bGlnbmVkJiBhbGxvY2F0aW9uKQogICAgIDogSGVhcEJsb2NrKGFsbG9jYXRpb24pCi0gICAgLCBt
X29mZnNldChwYXlsb2FkKCkpCisgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkK
ICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHN0
YXRpY19jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZW1haW5pbmcpKSk7CiB9CiAKIGlubGluZSBjaGFy
KiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCkBAIC0xMDEsOSArMTE1LDQ5IEBAIGlubGluZSBjaGFy
KiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgKChzaXplb2YoQ29waWVkQmxvY2spICsgNykgJiB+Nyk7CiB9CiAKK2lubGlu
ZSBjaGFyKiBDb3BpZWRCbG9jazo6cGF5bG9hZEVuZCgpCit7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbV9hbGxvY2F0aW9uLnNpemUoKTsKK30KKworaW5saW5l
IHNpemVfdCBDb3BpZWRCbG9jazo6cGF5bG9hZENhcGFjaXR5KCkKK3sKKyAgICByZXR1cm4gcGF5
bG9hZEVuZCgpIC0gcGF5bG9hZCgpOworfQorCitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRh
dGEoKQoreworICAgIHJldHVybiBwYXlsb2FkKCk7Cit9CisKK2lubGluZSBjaGFyKiBDb3BpZWRC
bG9jazo6ZGF0YUVuZCgpCit7CisgICAgcmV0dXJuIHBheWxvYWRFbmQoKSAtIG1fcmVtYWluaW5n
OworfQorCitpbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpkYXRhU2l6ZSgpCit7CisgICAgcmV0
dXJuIGRhdGFFbmQoKSAtIGRhdGEoKTsKK30KKworaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjp3
aWxkZXJuZXNzKCkKK3sKKyAgICByZXR1cm4gZGF0YUVuZCgpOworfQorCitpbmxpbmUgY2hhciog
Q29waWVkQmxvY2s6OndpbGRlcm5lc3NFbmQoKQoreworICAgIHJldHVybiBwYXlsb2FkRW5kKCk7
Cit9CisKK2lubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OndpbGRlcm5lc3NTaXplKCkKK3sKKyAg
ICByZXR1cm4gd2lsZGVybmVzc0VuZCgpIC0gd2lsZGVybmVzcygpOworfQorCiBpbmxpbmUgc2l6
ZV90IENvcGllZEJsb2NrOjpzaXplKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihzdGF0aWNfY2FzdDxjaGFyKj4obV9vZmZzZXQpIC0gcGF5bG9hZCgpKTsKKyAgICByZXR1cm4g
ZGF0YVNpemUoKTsKIH0KIAogaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6Y2FwYWNpdHkoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNp
b24gMTIyNTQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNw
YWNlOjp0cnlBbGxvY2F0ZVMKIAogICAgIGFsbG9jYXRlQmxvY2soKTsKIAotICAgICpvdXRQdHIg
PSBtX2FsbG9jYXRvci5hbGxvY2F0ZShieXRlcyk7Ci0gICAgQVNTRVJUKCpvdXRQdHIpOworICAg
ICpvdXRQdHIgPSBtX2FsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtOTMsNyArOTIsMTAgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6
OnRyeUFsbG9jYXRlTwogICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4oYmxvY2spKTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAgICAgCi0gICAgKm91dFB0
ciA9IGFsbG9jYXRlRnJvbUJsb2NrKGJsb2NrLCBieXRlcyk7CisgICAgQ29waWVkQWxsb2NhdG9y
IGFsbG9jYXRvcjsKKyAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKKyAgICAq
b3V0UHRyID0gYWxsb2NhdG9yLmZvcmNlQWxsb2NhdGUoYnl0ZXMpOworICAgIGFsbG9jYXRvci5y
ZXNldEN1cnJlbnRCbG9jaygpOwogCiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShibG9ja1NpemUp
OwogCkBAIC0xMDcsMTcgKzEwOSwxMiBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5
UmVhbGxvY2F0CiAgICAgCiAgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKICAgICBBU1NFUlQoIW1f
aGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLQorICAgIAogICAg
IGlmIChpc092ZXJzaXplKG9sZFNpemUpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCiAgICAgICAg
IHJldHVybiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKLQot
ICAgIGlmIChtX2FsbG9jYXRvci53YXNMYXN0QWxsb2NhdGlvbihvbGRQdHIsIG9sZFNpemUpKSB7
Ci0gICAgICAgIHNpemVfdCBkZWx0YSA9IG5ld1NpemUgLSBvbGRTaXplOwotICAgICAgICBpZiAo
bV9hbGxvY2F0b3IuZml0c0luQ3VycmVudEJsb2NrKGRlbHRhKSkgewotICAgICAgICAgICAgKHZv
aWQpbV9hbGxvY2F0b3IuYWxsb2NhdGUoZGVsdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgCisgICAgaWYgKG1fYWxsb2NhdG9yLnRyeVJlYWxsb2Nh
dGUob2xkUHRyLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICB2b2lkKiByZXN1bHQgPSAwOwogICAgIGlmICghdHJ5QWxsb2NhdGUobmV3U2l6ZSwgJnJlc3Vs
dCkpIHsKQEAgLTE1NywxNiArMTU0LDE3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0
cnlSZWFsbG9jYXQKIAogdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRC
bG9jayogYmxvY2spCiB7Ci0gICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoYmxvY2stPm1f
b2Zmc2V0IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgSGVhcEJsb2NrOjpzX2Js
b2NrU2l6ZSk7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOworICAgIAorICAgIGlmICgh
YmxvY2spCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChibG9jay0+bV9vZmZzZXQgPT0gYmxv
Y2stPnBheWxvYWQoKSkgeworICAgIGlmICghYmxvY2stPmRhdGFTaXplKCkpIHsKICAgICAgICAg
cmVjeWNsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJsb2Nr
LT56ZXJvRmlsbFRvRW5kKCk7CisgICAgYmxvY2stPnplcm9GaWxsV2lsZGVybmVzcygpOwogCiAg
ICAgewogICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwpAQCAt
MjI2LDcgKzIyNCw3IEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKICAgICBpZiAo
IW1fdG9TcGFjZS0+aGVhZCgpKQogICAgICAgICBhbGxvY2F0ZUJsb2NrKCk7CiAgICAgZWxzZQot
ICAgICAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jayhzdGF0aWNfY2FzdDxDb3BpZWRC
bG9jayo+KG1fdG9TcGFjZS0+aGVhZCgpKSk7CisgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fdG9TcGFjZS0+aGVhZCgpKSk7CiB9
CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Iodm9pZCopOwogCiBw
cml2YXRlOgotICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZUZyb21CbG9jayhDb3BpZWRCbG9jayos
IHNpemVfdCk7CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6ZShzaXplX3QpOwotICAgIHN0YXRp
YyBib29sIGZpdHNJbkJsb2NrKENvcGllZEJsb2NrKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgQ29w
aWVkQmxvY2sqIG92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAogICAgIENoZWNrZWRCb29s
ZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGlubGlu
ZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygKICAgICBtX3RvU3BhY2UgPSB0ZW1w
OwogCiAgICAgbV9ibG9ja0ZpbHRlci5yZXNldCgpOwotICAgIG1fYWxsb2NhdG9yLnN0YXJ0ZWRD
b3B5aW5nKCk7CisgICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKIAogICAgIEFT
U0VSVCghbV9pbkNvcHlpbmdQaGFzZSk7CiAgICAgQVNTRVJUKCFtX251bWJlck9mTG9hbmVkQmxv
Y2tzKTsKQEAgLTk0LDcgKzk0LDcgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6
YWxsb2NhdAogICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tzKys7CiAgICAgfQogCi0gICAg
QVNTRVJUKGJsb2NrLT5tX29mZnNldCA9PSBibG9jay0+cGF5bG9hZCgpKTsKKyAgICBBU1NFUlQo
IWJsb2NrLT5kYXRhU2l6ZSgpKTsKICAgICByZXR1cm4gYmxvY2s7CiB9CiAKQEAgLTEwMyw0NSAr
MTAzLDI3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKICAgICBp
ZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFw
OjpEb05vdFN3ZWVwKTsKIAorICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7Cisg
ICAgCiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAt
PmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGUoKSk7CiAgICAgICAgIAogICAgIG1fdG9TcGFjZS0+
cHVzaChibG9jayk7CiAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihibG9jaykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5y
ZXNldEN1cnJlbnRCbG9jayhibG9jayk7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpm
aXRzSW5CbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIHNpemVfdCBieXRlcykKLXsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGJsb2NrLT5tX29mZnNldCkgKyBieXRlcyA8IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5jYXBhY2l0eSgpICYmIHN0YXRpY19jYXN0
PGNoYXIqPihibG9jay0+bV9vZmZzZXQpICsgYnl0ZXMgPiBibG9jay0+bV9vZmZzZXQ7CisgICAg
bV9hbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKIH0KIAogaW5saW5lIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQ
dHIpCiB7CiAgICAgQVNTRVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdP
YmplY3QoKSk7CiAKLSAgICBpZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9yLmZp
dHNJbkN1cnJlbnRCbG9jayhieXRlcykpCisgICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpIHx8ICFt
X2FsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKSkKICAgICAgICAgcmV0dXJuIHRy
eUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAgKm91dFB0ciA9IG1f
YWxsb2NhdG9yLmFsbG9jYXRlKGJ5dGVzKTsKICAgICBBU1NFUlQoKm91dFB0cik7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkKiBDb3BpZWRTcGFjZTo6YWxsb2NhdGVGcm9tQmxv
Y2soQ29waWVkQmxvY2sqIGJsb2NrLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgQVNTRVJUKGZpdHNJ
bkJsb2NrKGJsb2NrLCBieXRlcykpOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChibG9jay0+
bV9vZmZzZXQpKTsKLSAgICAKLSAgICB2b2lkKiBwdHIgPSBibG9jay0+bV9vZmZzZXQ7Ci0gICAg
QVNTRVJUKGJsb2NrLT5tX29mZnNldCA+PSBibG9jay0+cGF5bG9hZCgpICYmIGJsb2NrLT5tX29m
ZnNldCA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5jYXBhY2l0eSgp
KTsKLSAgICBibG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2FzdDx2b2lkKj4oKHN0YXRpY19jYXN0
PGNoYXIqPihwdHIpICsgYnl0ZXMpKTsKLSAgICBBU1NFUlQoYmxvY2stPm1fb2Zmc2V0ID49IGJs
b2NrLT5wYXlsb2FkKCkgJiYgYmxvY2stPm1fb2Zmc2V0IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oYmxvY2spICsgYmxvY2stPmNhcGFjaXR5KCkpOwotCi0gICAgQVNTRVJUKGlzOEJ5dGVBbGln
bmVkKHB0cikpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KIGlubGluZSBib29sIENvcGllZFNwYWNl
Ojppc092ZXJzaXplKHNpemVfdCBieXRlcykKIHsKICAgICByZXR1cm4gYnl0ZXMgPiBzX21heEFs
bG9jYXRpb25TaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsOSArNTE1LDggQEAgdm9pZCBNYXJrU3Rh
Y2s6Om1lcmdlT3BhcXVlUm9vdHMoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzdGFydENvcHlpbmco
KQogewotICAgIEFTU0VSVCghbV9jb3B5QmxvY2spOwotICAgIG1fY29weUJsb2NrID0gbV9zaGFy
ZWQubV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwotfSAgICAK
KyAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Cit9CiAKIHZvaWQqIFNs
b3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewpA
QCAtNTI4LDE4ICs1MjcsMTcgQEAgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uo
dm9pZAogCiAgICAgaWYgKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmlzUGlubmVkKHB0cikpCiAg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVy
cyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgorICAgIGlmIChtX2Nv
cGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgCisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdC
bG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKKyAgICBtX2NvcGll
ZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+YWxsb2Nh
dGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpKTsKIAotICAgIC8vIFRoZSBvbmx5IHRpbWUgaXQncyBw
b3NzaWJsZSB0byBoYXZlIGEgbnVsbCBjb3B5IGJsb2NrIGlzIGlmIHdlIGhhdmUganVzdCBzdGFy
dGVkIGNvcHlpbmcuCi0gICAgaWYgKCFtX2NvcHlCbG9jaykKLSAgICAgICAgc3RhcnRDb3B5aW5n
KCk7Ci0KLSAgICBpZiAoIUNvcGllZFNwYWNlOjpmaXRzSW5CbG9jayhtX2NvcHlCbG9jaywgYnl0
ZXMpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbG9jayBhY3Jvc3MgdGhlc2UgdHdv
IGNhbGxzIGJlY2F1c2UgdGhlIG1hc3RlciB0aHJlYWQgd29uJ3QgCi0gICAgICAgIC8vIGNhbGwg
ZG9uZUNvcHlpbmcoKSBiZWNhdXNlIHRoaXMgdGhyZWFkIGlzIGNvbnNpZGVyZWQgYWN0aXZlLgot
ICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29weUJs
b2NrKTsKLSAgICAgICAgbV9jb3B5QmxvY2sgPSBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxv
Y2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7Ci0gICAgfQotICAgIHJldHVybiBDb3BpZWRTcGFj
ZTo6YWxsb2NhdGVGcm9tQmxvY2sobV9jb3B5QmxvY2ssIGJ5dGVzKTsKKyAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZy
ZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQpAQCAtNjM5
LDEyICs2MzcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcAog
ICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQogewotICAgIGlmICghbV9jb3B5
QmxvY2spCisgICAgaWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9j
b3B5QmxvY2spOwotCi0gICAgbV9jb3B5QmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50Qmxv
Y2soKSk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEy
MjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDEyICs3MCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkb25hdGVL
bm93blBhcmFsbGVsKCk7CiAKLSAgICBDb3BpZWRCbG9jayogbV9jb3B5QmxvY2s7CisgICAgQ29w
aWVkQWxsb2NhdG9yIG1fY29waWVkQWxsb2NhdG9yOwogfTsKIAogaW5saW5lIFNsb3RWaXNpdG9y
OjpTbG90VmlzaXRvcihNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCiAgICAgOiBN
YXJrU3RhY2soc2hhcmVkKQotICAgICwgbV9jb3B5QmxvY2soMCkKIHsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjI1NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBS
ZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdy
aXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlw
ZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lz
dGVySUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdl
KHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CisgICAg
ICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1
bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxvY2F0ZUpTRmlu
YWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3Jh
Z2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVz
UmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDEyMjU0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsMjUgKzQzNywxNiBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxK
U0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwg
UmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdpc3RlcklEIHJlc3Vs
dCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2hlY2sg
Zm9yIHdyYXAtYXJvdW5kLgotICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbGxv
Y2F0aW9uIHdpbGwgZml0IGluIHRoZSBjdXJyZW50IGJsb2NrLgotICAgIGxvYWRQdHIoJmFsbG9j
YXRvci0+bV9jdXJyZW50T2Zmc2V0LCByZXN1bHQpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c2l6ZSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2N1cnJlbnRCbG9jaywg
c3RvcmFnZVB0cik7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihIZWFwQmxvY2s6OnNfYmxvY2tT
aXplKSwgc3RvcmFnZVB0cik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEFib3ZlT3JFcXVh
bCwgcmVzdWx0LCBzdG9yYWdlUHRyKSk7Ci0KLSAgICAvLyBMb2FkIHRoZSBvcmlnaW5hbCBvZmZz
ZXQuCi0gICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2N1cnJlbnRPZmZzZXQsIHJlc3VsdCk7Ci0K
LSAgICAvLyBCdW1wIHRoZSBwb2ludGVyIGZvcndhcmQuCi0gICAgbW92ZShyZXN1bHQsIHN0b3Jh
Z2VQdHIpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZSksIHN0b3JhZ2VQdHIpOwotICAg
IHN0b3JlUHRyKHN0b3JhZ2VQdHIsICZhbGxvY2F0b3ItPm1fY3VycmVudE9mZnNldCk7CisgICAg
bG9hZFB0cigmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHJlc3VsdCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViUHRyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQp
KTsKKyAgICBzdG9yZVB0cihyZXN1bHQsICZhbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7
CisgICAgbmVnUHRyKHJlc3VsdCk7CisgICAgYWRkUHRyKEFic29sdXRlQWRkcmVzcygmYWxsb2Nh
dG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgcmVzdWx0KTsKKyAgICBzdWJQdHIoVHJ1c3RlZElt
bTMyKHNpemUpLCByZXN1bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpT
QXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJ
RCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFn
ZVB0cikKQEAgLTQ2NSw3ICs0NTYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpT
QXJyYXkodW5zCiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFja2luZyBzdG9yZSBmaXJzdCB0
byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAgICAgLy8gZG9lc24ndCBoYXBwZW4g
ZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9y
YWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0LCBzdG9yYWdlUHRyKTsKKyAgICBlbWl0
QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOwogCiAg
ICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwgZm9yIHRoZSBhcnJheS4KICAgICBlbWl0QWxsb2NhdGVC
YXNpY0pTT2JqZWN0PEpTQXJyYXksIGZhbHNlPihUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSksIGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIp
Owo=
</data>
<flag name="commit-queue"
          id="161126"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152437</attachid>
            <date>2012-07-14 17:14:39 -0700</date>
            <delta_ts>2012-07-14 20:59:09 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fixcopied_patch_3.diff</filename>
            <type>text/plain</type>
            <size>30915</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMyBA
QAorMjAxMi0wNy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJhdGlvbmFsaXplIGFuZCBvcHRpbWl6ZSBzdG9yYWdlIGFsbG9jYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMzAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGEgYmFj
a3dhcmRzIGJ1bXAgYWxsb2NhdG9yIGZvciBjb3BpZWQgc3BhY2Ugc3RvcmFnZQorICAgICAgICBh
bGxvY2F0aW9uLCBzaG93biBpbiBwc2V1ZG8tY29kZSBiZWxvdzoKKyAgICAgICAgCisgICAgICAg
ICAgICBwb2ludGVyIGJ1bXAoc2l6ZSkgeworICAgICAgICAgICAgICAgIHBvaW50ZXIgdG1wID0g
YWxsb2NhdG9yLT5yZW1haW5pbmc7CisgICAgICAgICAgICAgICAgdG1wIC09IHNpemU7CisgICAg
ICAgICAgICAgICAgaWYgKHRtcCA8IDApCisgICAgICAgICAgICAgICAgICAgIGZhaWw7CisgICAg
ICAgICAgICAgICAgYWxsb2NhdG9yLT5yZW1haW5pbmcgPSB0bXA7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGFsbG9jYXRvci0+cGF5bG9hZEVuZCAtIHRtcCAtIHNpemU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFsbG9jYXRvciBpcyB0aGF0IGl0Ogor
ICAgICAgICAKKyAgICAgICAgLSBPbmx5IHJlcXVpcmVzIG9uZSBjb21wYXJpc29uIGluIHRoZSBj
b21tb24gY2FzZSB3aGVyZSBzaXplIGlzIGtub3duIHRvCisgICAgICAgICAgbm90IGJlIGh1Z2Us
IGFuZCB0aGlzIGNvbXBhcmlzb24gY2FuIGJlIGRvbmUgYnkgY2hlY2tpbmcgdGhlIHNpZ24gYml0
CisgICAgICAgICAgb2YgdGhlIHN1YnRyYWN0aW9uLgorICAgICAgICAKKyAgICAgICAgLSBDYW4g
YmUgaW1wbGVtZW50ZWQgZXZlbiB3aGVuIG9ubHkgb25lIHJlZ2lzdGVyIGlzIGF2YWlsYWJsZS4g
VGhpcworICAgICAgICAgIHJlZ2lzdGVyIGlzIHJldXNlZCBmb3IgYm90aCB0ZW1wb3Jhcnkgc3Rv
cmFnZSBkdXJpbmcgYWxsb2NhdGlvbiBhbmQKKyAgICAgICAgICBmb3IgdGhlIHJlc3VsdC4KKyAg
ICAgICAgCisgICAgICAgIC0gUHJlc2VydmVzIHRoZSBiZWhhdmlvciB0aGF0IG1lbW9yeSBpbiBh
IGJsb2NrIGlzIGZpbGxlZCBpbiBmcm9tIGxvd2VzdAorICAgICAgICAgIGFkZHJlc3MgdG8gaGln
aGVzdCBhZGRyZXNzLCB3aGljaCBhbGxvd3MgZm9yIGEgY2hlYXAgcmVhbGxvY2F0aW9uIGZhc3QK
KyAgICAgICAgICBwYXRoLgorICAgICAgICAKKyAgICAgICAgLSBJcyByZXNpbGllbnQgYWdhaW5z
dCB0aGUgYmxvY2sgdXNlZCBmb3IgYWxsb2NhdGlvbiBiZWluZyB0aGUgbGFzdCBvbmUKKyAgICAg
ICAgICBpbiB2aXJ0dWFsIG1lbW9yeSwgdGhlcmVieSBvdGhlcndpc2UgbGVhZGluZyB0byB0aGUg
cmlzayBvZiBvdmVyZmxvdworICAgICAgICAgIGluIHRoZSBidW1wIHBvaW50ZXIsIGRlc3BpdGUg
b25seSBkb2luZyBvbmUgYnJhbmNoLgorICAgICAgICAKKyAgICAgICAgSW4gb3JkZXIgdG8gaW1w
bGVtZW50IHRoaXMgYWxsb2NhdG9yIHVzaW5nIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBjaHVuawor
ICAgICAgICBvZiBjb2RlLCBJIHJlZmFjdG9yZWQgdGhlIGNvcGllZCBzcGFjZSBjb2RlIHNvIHRo
YXQgYWxsIG9mIHRoZSBhbGxvY2F0aW9uCisgICAgICAgIGxvZ2ljIGlzIGluIENvcGllZEFsbG9j
YXRvciwgYW5kIGFsbCBvZiB0aGUgc3RhdGUgaXMgaW4gZWl0aGVyCisgICAgICAgIENvcGllZEJs
b2NrIG9yIENvcGllZEFsbG9jYXRvci4gVGhpcyBzaG91bGQgbWFrZSBjaGFuZ2luZyB0aGUgYWxs
b2NhdGlvbgorICAgICAgICBmYXN0IHBhdGggZWFzaWVyIGluIHRoZSBmdXR1cmUuCisgICAgICAg
IAorICAgICAgICBJbiBvcmRlciB0byBkbyB0aGlzLCBJIG5lZWRlZCB0byBhZGQgc29tZSBuZXcg
YXNzZW1ibGVyIHN1cHBvcnQsCisgICAgICAgIHBhcnRpY3VsYXJseSBmb3IgdmFyaW91cyBmb3Jt
cyBvZiBhZGQoYWRkcmVzcywgcmVnaXN0ZXIpIGFuZCBuZWdQdHIoKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFu
Z2UgaXMgdG8gZmFjaWxpdGF0ZQorICAgICAgICBmdXJ0aGVyIGlubGluaW5nIG9mIHN0b3JhZ2Ug
YWxsb2NhdGlvbiB3aXRob3V0IGhhdmluZyB0byByZXNlcnZlCisgICAgICAgIGFkZGl0aW9uYWwg
cmVnaXN0ZXJzIG9yIGVtaXQgdG9vIG11Y2ggY29kZS4KKworICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YWRkUHRyKToK
KyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
Om5lZ1B0cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAg
ICAgICAgKE1hY3JvQXNzZW1ibGVyQVJNdjcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTXY3OjphZGQzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjphZGQzMik6CisgICAgICAgIChNYWNy
b0Fzc2VtYmxlclg4Nik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
Lmg6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4Nl82NCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjphZGRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Nl82NDo6bmVnUHRyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChYODZBc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmFkZGxfbXIp
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmFkZHFfbXIpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Om5lZ3Ffcik6CisgICAgICAgICogaGVhcC9Db3BpZWRBbGxvY2F0b3IuaDoK
KyAgICAgICAgKENvcGllZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRv
cjo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRvcjo6Q29waWVkQWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeVJlYWxsb2NhdGUp
OgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OmZvcmNlQWxsb2NhdGUpOgorICAgICAg
ICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnJlc2V0Q3VycmVudEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQWxsb2NhdG9yOjpzZXRDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRBbGxvY2F0b3I6OmN1cnJlbnRDYXBhY2l0eSk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9j
ay5oOgorICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6Onplcm9GaWxsV2lsZGVybmVzcyk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpDb3BpZWRCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpwYXlsb2FkRW5kKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkNvcGllZEJsb2NrOjpwYXlsb2FkQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9j
azo6ZGF0YSk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkYXRhRW5kKToKKyAgICAgICAg
KEpTQzo6Q29waWVkQmxvY2s6OmRhdGFTaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6
OndpbGRlcm5lc3MpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6d2lsZGVybmVzc0VuZCk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3aWxkZXJuZXNzU2l6ZSk6CisgICAgICAgIChK
U0M6OkNvcGllZEJsb2NrOjpzaXplKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVyc2l6ZSk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZG9uZUNvcHlp
bmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNl
KToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAo
SlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkNvcGll
ZFNwYWNlOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeUFs
bG9jYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBbGxvY2F0ZUpT
QXJyYXkpOgorCiAyMDEyLTA3LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBPZmZsaW5lQVNNIFByZXR0eSBwcmludGluZyBhbmQgY29tbWVudGluZyBlbmhhbmNl
bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw2ICsyODAs
MTYgQEAgcHVibGljOgogICAgIC8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgKGkuZS4geDg2KSwgdGhl
c2UgbWV0aG9kcyBkaXJlY3RseSBtYXAgb250byB0aGVpciAzMi1iaXQgZXF1aXZhbGVudHMuCiAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIHVzZSBhIHRlc3QgZm9yIDMyLWJpdG5lc3MgaW5zdGVh
ZCBvZiB0aGlzIHNwZWNpZmljIGV4Y2VwdGlvbj8KICNpZiAhQ1BVKFg4Nl82NCkKKyAgICB2b2lk
IGFkZFB0cihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRk
MzIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3Mg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhZGQzMihzcmMsIGRlc3QpOwor
ICAgIH0KKwogICAgIHZvaWQgYWRkUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBhZGQzMihzcmMsIGRlc3QpOwpAQCAtMzE0LDYgKzMyNCwxMSBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBhbmQzMihpbW0sIHNyY0Rlc3QpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBuZWczMihk
ZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDEyMjYzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNiArMTU3LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFkZDMy
KGltbSwgZGVzdCwgZGVzdCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgYWRkMzIoQWJzb2x1dGVB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYy5t
X3B0ciwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKGRhdGFUZW1wUmVnaXN0ZXIs
IGRlc3QpOworICAgIH0KIAogICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAx
MjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIHB1YmxpYzoKICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbF9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5tX3B0cik7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgYWRkMzIoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfbXIoYWRkcmVzcy5tX3B0ciwg
ZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lt
KGltbS5tX3ZhbHVlLCBhZGRyZXNzLm1fcHRyKTsKQEAgLTc4LDcgKzgzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX2ltKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm1f
cHRyKTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9p
bShpbW0ubV92YWx1ZSwgYWRkcmVzcy5tX3B0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lv
biAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgYW5kMzIoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGFkZDMyKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgZGVz
dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgb3IzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKQEAgLTE0MCw2ICsxNDYsMTcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9ycihzcmMsIGRlc3QpOwogICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZFB0cihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNyYy5tX3B0ciks
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZFB0cihBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
ciksIGRlc3QpOworICAgIH0KIAogICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjRGVzdCkKICAgICB7CkBAIC0xODIsNiArMTk5LDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5uZWdxX3IoZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBvclB0cihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTIyNjMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfQUREX0d2RXYsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CisgICAgCisjaWYgIUNQVShYODZfNjQpCisgICAgdm9pZCBhZGRsX21yKGNvbnN0IHZvaWQq
IGFkZHIsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX0FERF9HdkV2LCBkc3QsIGFkZHIpOworICAgIH0KKyNlbmRpZgogCiAgICAgdm9pZCBh
ZGRsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAg
ewpAQCAtMzM4LDYgKzM0NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX0FERF9Fdkd2LCBzcmMsIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCBhZGRxX21y
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9BRERfR3ZFdiwgZHN0LCBiYXNlLCBvZmZz
ZXQpOworICAgIH0KKwogICAgIHZvaWQgYWRkcV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkK
ICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC00NDMs
NiArNDU1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dS
T1VQM19FdiwgR1JPVVAzX09QX05FRywgZHN0KTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIHZvaWQgbmVncV9yKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfTkVHLCBkc3QpOworICAgIH0K
KyNlbmRpZgorCiAgICAgdm9pZCBuZWdsX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQog
ICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JPVVAz
X09QX05FRywgYmFzZSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsOCBAQAogI2RlZmluZSBDb3BpZWRBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSAiQ29waWVkQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KKyNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQsNjUgKzM2LDEwOSBAQCBjbGFzcyBD
b3BpZWRBbGxvY2F0b3IgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiBwdWJsaWM6CiAgICAgQ29w
aWVkQWxsb2NhdG9yKCk7Ci0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAgICBib29sIGZp
dHNJbkN1cnJlbnRCbG9jayhzaXplX3QpOwotICAgIGJvb2wgd2FzTGFzdEFsbG9jYXRpb24odm9p
ZCosIHNpemVfdCk7Ci0gICAgdm9pZCBzdGFydGVkQ29weWluZygpOwotICAgIHZvaWQgcmVzZXRD
dXJyZW50QmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICAKKyAgICBDaGVja2VkQm9vbGVhbiB0cnlB
bGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOworICAgIENoZWNrZWRCb29sZWFu
IHRyeVJlYWxsb2NhdGUodm9pZCAqb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdC
eXRlcyk7CisgICAgdm9pZCogZm9yY2VBbGxvY2F0ZShzaXplX3QgYnl0ZXMpOworICAgIENvcGll
ZEJsb2NrKiByZXNldEN1cnJlbnRCbG9jaygpOworICAgIHZvaWQgc2V0Q3VycmVudEJsb2NrKENv
cGllZEJsb2NrKik7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSgpOworICAgIAorICAgIGJv
b2wgaXNWYWxpZCgpIHsgcmV0dXJuICEhbV9jdXJyZW50QmxvY2s7IH0KIAogcHJpdmF0ZToKICAg
ICBDb3BpZWRCbG9jayogY3VycmVudEJsb2NrKCkgeyByZXR1cm4gbV9jdXJyZW50QmxvY2s7IH0K
IAotICAgIGNoYXIqIG1fY3VycmVudE9mZnNldDsKKyAgICBzaXplX3QgbV9jdXJyZW50UmVtYWlu
aW5nOworICAgIGNoYXIqIG1fY3VycmVudFBheWxvYWRFbmQ7CiAgICAgQ29waWVkQmxvY2sqIG1f
Y3VycmVudEJsb2NrOyAKIH07CiAKIGlubGluZSBDb3BpZWRBbGxvY2F0b3I6OkNvcGllZEFsbG9j
YXRvcigpCi0gICAgOiBtX2N1cnJlbnRPZmZzZXQoMCkKKyAgICA6IG1fY3VycmVudFJlbWFpbmlu
ZygwKQorICAgICwgbV9jdXJyZW50UGF5bG9hZEVuZCgwKQogICAgICwgbV9jdXJyZW50QmxvY2so
MCkKIHsKIH0KIAotaW5saW5lIHZvaWQqIENvcGllZEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IGJ5dGVzKQoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRP
ZmZzZXQpOwogICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQq
PihieXRlcykpKTsKLSAgICBBU1NFUlQoZml0c0luQ3VycmVudEJsb2NrKGJ5dGVzKSk7Ci0gICAg
dm9pZCogcHRyID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY3VycmVudE9mZnNldCk7Ci0gICAgbV9j
dXJyZW50T2Zmc2V0ICs9IGJ5dGVzOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChwdHIpKTsK
LSAgICByZXR1cm4gcHRyOworICAgIAorICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIGluIGEg
Z3JhdHVpdG91c2x5IGxvdy1sZXZlbCBtYW5uZXIsIGluIG9yZGVyIHRvCisgICAgLy8gc2VydmUg
YXMgYSBraW5kIG9mIHRlbXBsYXRlIGZvciB3aGF0IHRoZSBKSVQgd291bGQgZG8uIE5vdGUgdGhh
dCB0aGUKKyAgICAvLyB3YXkgaXQncyB3cml0dGVuIGl0IG91Z2h0IHRvIG9ubHkgcmVxdWlyZSBv
bmUgcmVnaXN0ZXIsIHdoaWNoIGRvdWJsZXMKKyAgICAvLyBhcyB0aGUgcmVzdWx0LCBwcm92aWRl
ZCB0aGF0IHRoZSBjb21waWxlciBkb2VzIGEgbWluaW1hbCBhbW91bnQgb2YKKyAgICAvLyBjb250
cm9sIGZsb3cgc2ltcGxpZmljYXRpb24gYW5kIHRoZSBieXRlcyBhcmd1bWVudCBpcyBhIGNvbnN0
YW50LgorICAgIAorICAgIHNpemVfdCBjdXJyZW50UmVtYWluaW5nID0gbV9jdXJyZW50UmVtYWlu
aW5nOworICAgIGlmIChieXRlcyA+IGN1cnJlbnRSZW1haW5pbmcpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjdXJyZW50UmVtYWluaW5nIC09IGJ5dGVzOworICAgIG1fY3VycmVudFJlbWFp
bmluZyA9IGN1cnJlbnRSZW1haW5pbmc7CisgICAgKm91dFB0ciA9IG1fY3VycmVudFBheWxvYWRF
bmQgLSBjdXJyZW50UmVtYWluaW5nIC0gYnl0ZXM7CisKKyAgICBBU1NFUlQoaXM4Qnl0ZUFsaWdu
ZWQoKm91dFB0cikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBDaGVja2VkQm9v
bGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeVJlYWxsb2NhdGUoCisgICAgdm9pZCogb2xkUHRyLCBz
aXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcykKK3sKKyAgICBBU1NFUlQoaXM4Qnl0ZUFs
aWduZWQob2xkUHRyKSk7CisgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG9sZEJ5dGVzKSkpOworICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVy
cHJldF9jYXN0PHZvaWQqPihuZXdCeXRlcykpKTsKKyAgICAKKyAgICBBU1NFUlQobmV3Qnl0ZXMg
PiBvbGRCeXRlcyk7CisgICAgCisgICAgc2l6ZV90IGFkZGl0aW9uYWxCeXRlcyA9IG5ld0J5dGVz
IC0gb2xkQnl0ZXM7CisgICAgCisgICAgc2l6ZV90IGN1cnJlbnRSZW1haW5pbmcgPSBtX2N1cnJl
bnRSZW1haW5pbmc7CisgICAgaWYgKG1fY3VycmVudFBheWxvYWRFbmQgLSBjdXJyZW50UmVtYWlu
aW5nIC0gb2xkQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9sZFB0cikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoYWRkaXRpb25hbEJ5dGVzID4gY3VycmVudFJlbWFp
bmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fY3VycmVudFJlbWFpbmlu
ZyA9IGN1cnJlbnRSZW1haW5pbmcgLSBhZGRpdGlvbmFsQnl0ZXM7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSB2b2lkKiBDb3BpZWRBbGxvY2F0b3I6OmZvcmNlQWxsb2NhdGUo
c2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIE5lZWRlZCBiZWNhdXNl
IGNvbXBpbGVycyBkb24ndCByZWFsaXplIHRoaXMgd2lsbCBhbHdheXMgYmUgYXNzaWduZWQuCisg
ICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IHRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0
KTsKKyAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIENvcGllZEJsb2NrKiBDb3BpZWRBbGxvY2F0b3I6OnJlc2V0Q3VycmVudEJsb2NrKCkKK3sK
KyAgICBDb3BpZWRCbG9jayogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2s7CisgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICByZXN1bHQtPm1fcmVtYWluaW5nID0gbV9jdXJyZW50UmVtYWluaW5nOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IDA7CisgICAgICAgIG1fY3VycmVudFJlbWFpbmluZyA9
IDA7CisgICAgICAgIG1fY3VycmVudFBheWxvYWRFbmQgPSAwOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbmxpbmUgYm9vbCBDb3BpZWRBbGxvY2F0b3I6OmZpdHNJbkN1cnJlbnRC
bG9jayhzaXplX3QgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRBbGxvY2F0b3I6OnNldEN1cnJl
bnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2spCiB7Ci0gICAgcmV0dXJuIG1fY3VycmVudE9m
ZnNldCArIGJ5dGVzIDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jdXJyZW50QmxvY2spICsg
SGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSAmJiBtX2N1cnJlbnRPZmZzZXQgKyBieXRlcyA+IG1fY3Vy
cmVudE9mZnNldDsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkQWxsb2NhdG9yOjp3YXNMYXN0QWxs
b2NhdGlvbih2b2lkKiBwdHIsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyKj4ocHRyKSArIHNpemUgPT0gbV9jdXJyZW50T2Zmc2V0ICYmIHB0ciA+IG1fY3VycmVu
dEJsb2NrICYmIHB0ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY3VycmVudEJsb2NrKSAr
IEhlYXBCbG9jazo6c19ibG9ja1NpemU7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEFsbG9jYXRv
cjo6c3RhcnRlZENvcHlpbmcoKQotewotICAgIGlmIChtX2N1cnJlbnRCbG9jaykKLSAgICAgICAg
bV9jdXJyZW50QmxvY2stPm1fb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY3VycmVudE9m
ZnNldCk7Ci0gICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKLSAgICBtX2N1cnJlbnRCbG9jayA9IDA7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEFsbG9jYXRvcjo6cmVzZXRDdXJyZW50QmxvY2soQ29w
aWVkQmxvY2sqIG5ld0Jsb2NrKQotewotICAgIGlmIChtX2N1cnJlbnRCbG9jaykKLSAgICAgICAg
bV9jdXJyZW50QmxvY2stPm1fb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY3VycmVudE9m
ZnNldCk7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBuZXdCbG9jazsKLSAgICBtX2N1cnJlbnRPZmZzZXQgPSBzdGF0aWNfY2FzdDxjaGFyKj4obmV3
QmxvY2stPm1fb2Zmc2V0KTsKKyAgICBBU1NFUlQobmV3QmxvY2spOworICAgIG1fY3VycmVudFJl
bWFpbmluZyA9IG5ld0Jsb2NrLT5tX3JlbWFpbmluZzsKKyAgICBtX2N1cnJlbnRQYXlsb2FkRW5k
ID0gbmV3QmxvY2stPnBheWxvYWRFbmQoKTsKIH0KIAogaW5saW5lIHNpemVfdCBDb3BpZWRBbGxv
Y2F0b3I6OmN1cnJlbnRDYXBhY2l0eSgpCiB7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5jYXBhY2l0eSgpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlz
aW9uIDEyMjYzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwzMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
cGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYp
OwogICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbkFsaWduZWQgZGVzdHJveShDb3BpZWRCbG9jayop
OwogCisgICAgLy8gVGhlIHBheWxvYWQgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBp
cyB1c2FibGUgZm9yIGFsbG9jYXRpb25zLgogICAgIGNoYXIqIHBheWxvYWQoKTsKKyAgICBjaGFy
KiBwYXlsb2FkRW5kKCk7CisgICAgc2l6ZV90IHBheWxvYWRDYXBhY2l0eSgpOworICAgIAorICAg
IC8vIFRoZSBkYXRhIGlzIHRoZSByZWdpb24gb2YgdGhlIGJsb2NrIHRoYXQgaGFzIGJlZW4gdXNl
ZCBmb3IgYWxsb2NhdGlvbnMuCisgICAgY2hhciogZGF0YSgpOworICAgIGNoYXIqIGRhdGFFbmQo
KTsKKyAgICBzaXplX3QgZGF0YVNpemUoKTsKKyAgICAKKyAgICAvLyBUaGUgd2lsZGVybmVzcyBp
cyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2NhdGlvbnMK
KyAgICAvLyBidXQgaGFzIG5vdCBiZWVuIHNvIHVzZWQuCisgICAgY2hhciogd2lsZGVybmVzcygp
OworICAgIGNoYXIqIHdpbGRlcm5lc3NFbmQoKTsKKyAgICBzaXplX3Qgd2lsZGVybmVzc1NpemUo
KTsKKyAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIHNpemVfdCBjYXBhY2l0eSgpOwogCiBw
cml2YXRlOgogICAgIENvcGllZEJsb2NrKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYpOwot
ICAgIHZvaWQgemVyb0ZpbGxUb0VuZCgpOyAvLyBDYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIHRv
IHplcm8tZmlsbCB0byB0aGUgZW5kIG9mIHRoZSBibG9jay4KKyAgICB2b2lkIHplcm9GaWxsV2ls
ZGVybmVzcygpOyAvLyBDYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIHRvIHplcm8tZmlsbCB0byB0
aGUgZW5kIG9mIHRoZSBibG9jay4KIAotICAgIHZvaWQqIG1fb2Zmc2V0OworICAgIHNpemVfdCBt
X3JlbWFpbmluZzsKICAgICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKIH07CiAKQEAgLTYyLDE5ICs3
NywxOCBAQCBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGVOCiBpbmxpbmUg
Q29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGln
bmVkJiBhbGxvY2F0aW9uKQogewogICAgIENvcGllZEJsb2NrKiBibG9jayA9IGNyZWF0ZU5vWmVy
b0ZpbGwoYWxsb2NhdGlvbik7Ci0gICAgYmxvY2stPnplcm9GaWxsVG9FbmQoKTsKKyAgICBibG9j
ay0+emVyb0ZpbGxXaWxkZXJuZXNzKCk7CiAgICAgcmV0dXJuIGJsb2NrOwogfQogCi1pbmxpbmUg
dm9pZCBDb3BpZWRCbG9jazo6emVyb0ZpbGxUb0VuZCgpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6emVyb0ZpbGxXaWxkZXJuZXNzKCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNoYXIq
IG9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihtX29mZnNldCk7Ci0gICAgbWVtc2V0KHN0YXRp
Y19jYXN0PHZvaWQqPihvZmZzZXQpLCAwLCBzdGF0aWNfY2FzdDxzaXplX3Q+KChyZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIG1fYWxsb2NhdGlvbi5zaXplKCkpIC0gb2Zmc2V0KSk7Cisg
ICAgbWVtc2V0KHdpbGRlcm5lc3MoKSwgMCwgd2lsZGVybmVzc1NpemUoKSk7CiAjZWxzZQogICAg
IEpTVmFsdWUgZW1wdHlWYWx1ZTsKLSAgICBKU1ZhbHVlKiBsaW1pdCA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPEpTVmFsdWUqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG1fYWxsb2Nh
dGlvbi5zaXplKCkpOwotICAgIGZvciAoSlNWYWx1ZSogY3VycmVudFZhbHVlID0gcmVpbnRlcnBy
ZXRfY2FzdDxKU1ZhbHVlKj4obV9vZmZzZXQpOyBjdXJyZW50VmFsdWUgPCBsaW1pdDsgY3VycmVu
dFZhbHVlKyspCisgICAgSlNWYWx1ZSogbGltaXQgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1Zh
bHVlKj4od2lsZGVybmVzc0VuZCgpKTsKKyAgICBmb3IgKEpTVmFsdWUqIGN1cnJlbnRWYWx1ZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHdpbGRlcm5lc3MoKSk7IGN1cnJlbnRWYWx1ZSA8
IGxpbWl0OyBjdXJyZW50VmFsdWUrKykKICAgICAgICAgKmN1cnJlbnRWYWx1ZSA9IGVtcHR5VmFs
dWU7CiAjZW5kaWYKIH0KQEAgLTkwLDEwICsxMDQsMTAgQEAgaW5saW5lIFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCBDb3BpZWRCbG9jawogCiBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKGNv
bnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKICAgICA6IEhlYXBCbG9jayhh
bGxvY2F0aW9uKQotICAgICwgbV9vZmZzZXQocGF5bG9hZCgpKQorICAgICwgbV9yZW1haW5pbmco
cGF5bG9hZENhcGFjaXR5KCkpCiAgICAgLCBtX2lzUGlubmVkKGZhbHNlKQogewotICAgIEFTU0VS
VChpczhCeXRlQWxpZ25lZChzdGF0aWNfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CisgICAgQVNT
RVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcmVtYWluaW5nKSkp
OwogfQogCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQpAQCAtMTAxLDkgKzEx
NSw0OSBAQCBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENvcGllZEJsb2NrKSArIDcp
ICYgfjcpOwogfQogCitpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWRFbmQoKQorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG1fYWxsb2NhdGlvbi5z
aXplKCk7Cit9CisKK2lubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OnBheWxvYWRDYXBhY2l0eSgp
Cit7CisgICAgcmV0dXJuIHBheWxvYWRFbmQoKSAtIHBheWxvYWQoKTsKK30KKworaW5saW5lIGNo
YXIqIENvcGllZEJsb2NrOjpkYXRhKCkKK3sKKyAgICByZXR1cm4gcGF5bG9hZCgpOworfQorCitp
bmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRhdGFFbmQoKQoreworICAgIHJldHVybiBwYXlsb2Fk
RW5kKCkgLSBtX3JlbWFpbmluZzsKK30KKworaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6ZGF0
YVNpemUoKQoreworICAgIHJldHVybiBkYXRhRW5kKCkgLSBkYXRhKCk7Cit9CisKK2lubGluZSBj
aGFyKiBDb3BpZWRCbG9jazo6d2lsZGVybmVzcygpCit7CisgICAgcmV0dXJuIGRhdGFFbmQoKTsK
K30KKworaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjp3aWxkZXJuZXNzRW5kKCkKK3sKKyAgICBy
ZXR1cm4gcGF5bG9hZEVuZCgpOworfQorCitpbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjp3aWxk
ZXJuZXNzU2l6ZSgpCit7CisgICAgcmV0dXJuIHdpbGRlcm5lc3NFbmQoKSAtIHdpbGRlcm5lc3Mo
KTsKK30KKwogaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6c2l6ZSgpCiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb2Zmc2V0KSAtIHBheWxv
YWQoKSk7CisgICAgcmV0dXJuIGRhdGFTaXplKCk7CiB9CiAKIGlubGluZSBzaXplX3QgQ29waWVk
QmxvY2s6OmNhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHJldmlzaW9uIDEyMjYzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNyBAQCBDaGVj
a2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTCiAKICAgICBhbGxvY2F0ZUJsb2Nr
KCk7CiAKLSAgICAqb3V0UHRyID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUoYnl0ZXMpOwotICAgIEFT
U0VSVCgqb3V0UHRyKTsKKyAgICAqb3V0UHRyID0gbV9hbGxvY2F0b3IuZm9yY2VBbGxvY2F0ZShi
eXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkzLDcgKzkyLDEwIEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU8KICAgICBtX2Jsb2NrRmlsdGVyLmFkZChy
ZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAgICAgbV9ibG9ja1NldC5hZGQoYmxvY2sp
OwogICAgIAotICAgICpvdXRQdHIgPSBhbGxvY2F0ZUZyb21CbG9jayhibG9jaywgYnl0ZXMpOwor
ICAgIENvcGllZEFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgYWxsb2NhdG9yLnNldEN1cnJlbnRC
bG9jayhibG9jayk7CisgICAgKm91dFB0ciA9IGFsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVz
KTsKKyAgICBhbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKIAogICAgIG1faGVhcC0+ZGlk
QWxsb2NhdGUoYmxvY2tTaXplKTsKIApAQCAtMTA3LDE3ICsxMDksMTIgQEAgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdAogICAgIAogICAgIHZvaWQqIG9sZFB0ciA9ICpw
dHI7CiAgICAgQVNTRVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmpl
Y3QoKSk7Ci0KKyAgICAKICAgICBpZiAoaXNPdmVyc2l6ZShvbGRTaXplKSB8fCBpc092ZXJzaXpl
KG5ld1NpemUpKQogICAgICAgICByZXR1cm4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHB0ciwgb2xk
U2l6ZSwgbmV3U2l6ZSk7Ci0KLSAgICBpZiAobV9hbGxvY2F0b3Iud2FzTGFzdEFsbG9jYXRpb24o
b2xkUHRyLCBvbGRTaXplKSkgewotICAgICAgICBzaXplX3QgZGVsdGEgPSBuZXdTaXplIC0gb2xk
U2l6ZTsKLSAgICAgICAgaWYgKG1fYWxsb2NhdG9yLmZpdHNJbkN1cnJlbnRCbG9jayhkZWx0YSkp
IHsKLSAgICAgICAgICAgICh2b2lkKW1fYWxsb2NhdG9yLmFsbG9jYXRlKGRlbHRhKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQorICAgIAorICAgIGlmIChtX2Fs
bG9jYXRvci50cnlSZWFsbG9jYXRlKG9sZFB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgdm9pZCogcmVzdWx0ID0gMDsKICAgICBpZiAoIXRyeUFsbG9j
YXRlKG5ld1NpemUsICZyZXN1bHQpKSB7CkBAIC0xNTcsMTYgKzE1NCwxNyBAQCBDaGVja2VkQm9v
bGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAKIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVG
aWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewotICAgIEFTU0VSVChibG9jayk7Ci0g
ICAgQVNTRVJUKGJsb2NrLT5tX29mZnNldCA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2Nr
KSArIEhlYXBCbG9jazo6c19ibG9ja1NpemUpOwogICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNl
KTsKKyAgICAKKyAgICBpZiAoIWJsb2NrKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYmxv
Y2stPm1fb2Zmc2V0ID09IGJsb2NrLT5wYXlsb2FkKCkpIHsKKyAgICBpZiAoIWJsb2NrLT5kYXRh
U2l6ZSgpKSB7CiAgICAgICAgIHJlY3ljbGVCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBibG9jay0+emVyb0ZpbGxUb0VuZCgpOworICAgIGJsb2NrLT56ZXJvRmls
bFdpbGRlcm5lc3MoKTsKIAogICAgIHsKICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZt
X3RvU3BhY2VMb2NrKTsKQEAgLTIyNiw3ICsyMjQsNyBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25l
Q29weWluZygpCiAgICAgaWYgKCFtX3RvU3BhY2UtPmhlYWQoKSkKICAgICAgICAgYWxsb2NhdGVC
bG9jaygpOwogICAgIGVsc2UKLSAgICAgICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2so
c3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX3RvU3BhY2UtPmhlYWQoKSkpOworICAgICAgICBt
X2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX3Rv
U3BhY2UtPmhlYWQoKSkpOwogfQogCiBzaXplX3QgQ29waWVkU3BhY2U6OnNpemUoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjI2MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw5ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGJs
b2NrRm9yKHZvaWQqKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGVGcm9t
QmxvY2soQ29waWVkQmxvY2sqLCBzaXplX3QpOwogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUo
c2l6ZV90KTsKLSAgICBzdGF0aWMgYm9vbCBmaXRzSW5CbG9jayhDb3BpZWRCbG9jayosIHNpemVf
dCk7CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7
CiAKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoCiAg
ICAgbV90b1NwYWNlID0gdGVtcDsKIAogICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICBt
X2FsbG9jYXRvci5zdGFydGVkQ29weWluZygpOworICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKCk7CiAKICAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOwogICAgIEFTU0VSVCgh
bV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBDb3BpZWRC
bG9jayogQ29waWVkU3BhY2U6OmFsbG9jYXQKICAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nr
cysrOwogICAgIH0KIAotICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPT0gYmxvY2stPnBheWxv
YWQoKSk7CisgICAgQVNTRVJUKCFibG9jay0+ZGF0YVNpemUoKSk7CiAgICAgcmV0dXJuIGJsb2Nr
OwogfQogCkBAIC0xMDMsNDUgKzEwMywyNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxs
b2NhdGVCbG9jaygpCiAgICAgaWYgKG1faGVhcC0+c2hvdWxkQ29sbGVjdCgpKQogICAgICAgICBt
X2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2VlcCk7CiAKKyAgICBtX2FsbG9jYXRvci5yZXNl
dEN1cnJlbnRCbG9jaygpOworICAgIAogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJs
b2NrOjpjcmVhdGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlKCkpOwogICAgICAg
ICAKICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOwogICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7
Ci0gICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soYmxvY2spOwotfQotCi1pbmxpbmUg
Ym9vbCBDb3BpZWRTcGFjZTo6Zml0c0luQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrLCBzaXplX3Qg
Ynl0ZXMpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQp
ICsgYnl0ZXMgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBibG9jay0+Y2FwYWNp
dHkoKSAmJiBzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zmc2V0KSArIGJ5dGVzID4gYmxv
Y2stPm1fb2Zmc2V0OworICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7CiB9
CiAKIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90
IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIEFTU0VSVCghbV9oZWFwLT5nbG9iYWxEYXRh
KCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogCi0gICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMp
IHx8ICFtX2FsbG9jYXRvci5maXRzSW5DdXJyZW50QmxvY2soYnl0ZXMpKQorICAgIGlmIChpc092
ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cikp
CiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwogICAg
IAotICAgICpvdXRQdHIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShieXRlcyk7CiAgICAgQVNTRVJU
KCpvdXRQdHIpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCogQ29waWVkU3Bh
Y2U6OmFsbG9jYXRlRnJvbUJsb2NrKENvcGllZEJsb2NrKiBibG9jaywgc2l6ZV90IGJ5dGVzKQot
ewotICAgIEFTU0VSVChmaXRzSW5CbG9jayhibG9jaywgYnl0ZXMpKTsKLSAgICBBU1NFUlQoaXM4
Qnl0ZUFsaWduZWQoYmxvY2stPm1fb2Zmc2V0KSk7Ci0gICAgCi0gICAgdm9pZCogcHRyID0gYmxv
Y2stPm1fb2Zmc2V0OwotICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPj0gYmxvY2stPnBheWxv
YWQoKSAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykg
KyBibG9jay0+Y2FwYWNpdHkoKSk7Ci0gICAgYmxvY2stPm1fb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dm9pZCo+KChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSArIGJ5dGVzKSk7Ci0gICAgQVNTRVJUKGJs
b2NrLT5tX29mZnNldCA+PSBibG9jay0+cGF5bG9hZCgpICYmIGJsb2NrLT5tX29mZnNldCA8IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIGJsb2NrLT5jYXBhY2l0eSgpKTsKLQotICAg
IEFTU0VSVChpczhCeXRlQWxpZ25lZChwdHIpKTsKLSAgICByZXR1cm4gcHRyOwotfQotCiBpbmxp
bmUgYm9vbCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgcmV0
dXJuIGJ5dGVzID4gc19tYXhBbGxvY2F0aW9uU2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMTIyNjMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDkgKzUx
NSw4IEBAIHZvaWQgTWFya1N0YWNrOjptZXJnZU9wYXF1ZVJvb3RzKCkKIAogdm9pZCBTbG90Vmlz
aXRvcjo6c3RhcnRDb3B5aW5nKCkKIHsKLSAgICBBU1NFUlQoIW1fY29weUJsb2NrKTsKLSAgICBt
X2NvcHlCbG9jayA9IG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JDb3B5
aW5nUGhhc2UoKTsKLX0gICAgCisgICAgQVNTRVJUKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlk
KCkpOworfQogCiB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZSh2b2lkKiBwdHIs
IHNpemVfdCBieXRlcykKIHsKQEAgLTUyOCwxOCArNTI3LDE3IEBAIHZvaWQqIFNsb3RWaXNpdG9y
OjphbGxvY2F0ZU5ld1NwYWNlKHZvaWQKIAogICAgIGlmIChtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5pc1Bpbm5lZChwdHIpKQogICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3Np
Z25lZC4KKyAgICBpZiAobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1
bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50Qmxv
Y2soKSk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKSk7CiAKLSAgICAvLyBU
aGUgb25seSB0aW1lIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBhIG51bGwgY29weSBibG9jayBpcyBp
ZiB3ZSBoYXZlIGp1c3Qgc3RhcnRlZCBjb3B5aW5nLgotICAgIGlmICghbV9jb3B5QmxvY2spCi0g
ICAgICAgIHN0YXJ0Q29weWluZygpOwotCi0gICAgaWYgKCFDb3BpZWRTcGFjZTo6Zml0c0luQmxv
Y2sobV9jb3B5QmxvY2ssIGJ5dGVzKSkgewotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGxv
Y2sgYWNyb3NzIHRoZXNlIHR3byBjYWxscyBiZWNhdXNlIHRoZSBtYXN0ZXIgdGhyZWFkIHdvbid0
IAotICAgICAgICAvLyBjYWxsIGRvbmVDb3B5aW5nKCkgYmVjYXVzZSB0aGlzIHRocmVhZCBpcyBj
b25zaWRlcmVkIGFjdGl2ZS4KLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZp
bGxpbmdCbG9jayhtX2NvcHlCbG9jayk7Ci0gICAgICAgIG1fY29weUJsb2NrID0gbV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwotICAgIH0KLSAg
ICByZXR1cm4gQ29waWVkU3BhY2U6OmFsbG9jYXRlRnJvbUJsb2NrKG1fY29weUJsb2NrLCBieXRl
cyk7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9yLnRy
eUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKKyAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjp0cnlIYXNo
Q29uc3RMb2NrKCkKQEAgLTYzOSwxMiArNjM3LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlB
bmRBcHBlbmQodm9pZCoqIHAKICAgICAKIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKCkK
IHsKLSAgICBpZiAoIW1fY29weUJsb2NrKQorICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5k
b25lRmlsbGluZ0Jsb2NrKG1fY29weUJsb2NrKTsKLQotICAgIG1fY29weUJsb2NrID0gMDsKKyAg
ICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0
V2Vha1JlZmVyZW5jZXMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCShyZXZpc2lvbiAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMiArNzAsMTEgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogCi0gICAgQ29waWVkQmxvY2sqIG1f
Y29weUJsb2NrOworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKIH07CiAK
IGlubGluZSBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0
YSYgc2hhcmVkKQogICAgIDogTWFya1N0YWNrKHNoYXJlZCkKLSAgICAsIG1fY29weUJsb2NrKDAp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTIyNjMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1
LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBX
cml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJl
VHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lz
dGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VQdHIpOworICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXpl
X3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0Fy
cmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQg
Y2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQ
dHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjI2MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDI1ICs0MzcsMTYg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQogICAgIGVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0cnVjdHVyZSwgcmVz
dWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0
b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQ
dHIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6
ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKIAotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGNoZWNrIGZvciB3cmFwLWFyb3VuZC4KLSAgICAvLyBDaGVjayB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZpdCBpbiB0aGUgY3VycmVudCBibG9jay4K
LSAgICBsb2FkUHRyKCZhbGxvY2F0b3ItPm1fY3VycmVudE9mZnNldCwgcmVzdWx0KTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOwotICAgIGxvYWRQdHIoJmFsbG9jYXRv
ci0+bV9jdXJyZW50QmxvY2ssIHN0b3JhZ2VQdHIpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSksIHN0b3JhZ2VQdHIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlc3VsdCwgc3RvcmFnZVB0cikpOwotCi0gICAgLy8gTG9h
ZCB0aGUgb3JpZ2luYWwgb2Zmc2V0LgotICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJyZW50
T2Zmc2V0LCByZXN1bHQpOwotCi0gICAgLy8gQnVtcCB0aGUgcG9pbnRlciBmb3J3YXJkLgotICAg
IG1vdmUocmVzdWx0LCBzdG9yYWdlUHRyKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemUp
LCBzdG9yYWdlUHRyKTsKLSAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5tX2N1
cnJlbnRPZmZzZXQpOworICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
LCByZXN1bHQpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YlB0cihTaWduZWQsIFRydXN0ZWRJ
bW0zMihzaXplKSwgcmVzdWx0KSk7CisgICAgc3RvcmVQdHIocmVzdWx0LCAmYWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcpOworICAgIG5lZ1B0cihyZXN1bHQpOworICAgIGFkZFB0cihBYnNv
bHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHJlc3VsdCk7Cisg
ICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplKSwgcmVzdWx0KTsKIH0KIAogaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25l
ZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCkBAIC00NjUsNyArNDU2LDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJh
Y2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAg
IC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9uLgotICAgIGVt
aXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc3RvcmFnZVJlc3VsdCwgc3Rv
cmFnZVB0cik7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBz
dG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXku
CiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxs
UmVzdWx0LCBzdG9yYWdlUHRyKTsK
</data>
<flag name="review"
          id="161127"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>