<?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>154720</bug_id>
          
          <creation_ts>2016-02-25 22:52:42 -0800</creation_ts>
          <short_desc>bmalloc: Added a fast XLarge allocator</short_desc>
          <delta_ts>2016-03-03 20:04:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154762</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1168420</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 22:52:42 -0800</bug_when>
    <thetext>bmalloc: Added a fast XLarge allocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168429</commentid>
    <comment_count>1</comment_count>
      <attachid>272306</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 23:36:01 -0800</bug_when>
    <thetext>Created attachment 272306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168430</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 23:36:42 -0800</bug_when>
    <thetext>~/OpenSource/PerformanceTests/MallocBench&gt; cat results.txt 
~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 85ms                           82ms                 ^ 1.04x faster
    list_allocate                                         70ms                           76ms                 ! 1.09x slower
    tree_allocate                                         82ms                           86ms                 ! 1.05x slower
    tree_churn                                            85ms                           88ms                 ! 1.04x slower
    fragment                                              97ms                           77ms                 ^ 1.26x faster
    fragment_iterate                                      84ms                           82ms                 ^ 1.02x faster
    medium                                               206ms                          188ms                  ^ 1.1x faster
    big                                                  160ms                          146ms                  ^ 1.1x faster
    facebook                                             473ms                          252ms                 ^ 1.88x faster
    reddit                                               120ms                          122ms                 ! 1.02x slower
    flickr                                               128ms                          127ms                 ^ 1.01x faster
    theverge                                             158ms                          157ms                 ^ 1.01x faster
    nimlang                                              137ms                          133ms                 ^ 1.03x faster
    message_one                                          218ms                          223ms                 ! 1.02x slower
    message_many                                         120ms                          119ms                 ^ 1.01x faster
    churn --parallel                                      39ms                           39ms                               
    list_allocate --parallel                              72ms                           75ms                 ! 1.04x slower
    tree_allocate --parallel                              85ms                           90ms                 ! 1.06x slower
    tree_churn --parallel                                 87ms                           85ms                 ^ 1.02x faster
    fragment --parallel                                   53ms                           52ms                 ^ 1.02x faster
    fragment_iterate --parallel                           34ms                           32ms                 ^ 1.06x faster
    medium --parallel                                    200ms                          182ms                  ^ 1.1x faster
    big --parallel                                       135ms                          133ms                 ^ 1.02x faster

    &lt;geometric mean&gt;                                     107ms                          102ms                 ^ 1.05x faster
    &lt;arithmetic mean&gt;                                    127ms                          115ms                 ^ 1.11x faster
    &lt;harmonic mean&gt;                                       91ms                           89ms                 ^ 1.02x faster

Peak Memory:
    churn                                                788kB                          804kB                 ! 1.02x bigger
    list_allocate                                      2,100kB                        2,104kB                  ! 1.0x bigger
    tree_allocate                                      5,488kB                        5,492kB                  ! 1.0x bigger
    tree_churn                                         4,800kB                        4,800kB                               
    fragment                                           7,004kB                        7,008kB                  ! 1.0x bigger
    fragment_iterate                                  25,568kB                       25,596kB                  ! 1.0x bigger
    medium                                         1,068,412kB                    1,068,420kB                  ! 1.0x bigger
    big                                            1,060,468kB                    1,060,464kB                 ^ 1.0x smaller
    facebook                                          73,928kB                       73,916kB                 ^ 1.0x smaller
    reddit                                            13,920kB                       13,896kB                 ^ 1.0x smaller
    flickr                                            25,840kB                       25,852kB                  ! 1.0x bigger
    theverge                                          27,012kB                       26,960kB                 ^ 1.0x smaller
    nimlang                                          215,548kB                      217,276kB                 ! 1.01x bigger
    message_one                                        4,704kB                        5,304kB                 ! 1.13x bigger
    message_many                                       4,964kB                        4,908kB                ^ 1.01x smaller
    churn --parallel                                     956kB                          968kB                 ! 1.01x bigger
    list_allocate --parallel                           2,216kB                        2,232kB                 ! 1.01x bigger
    tree_allocate --parallel                           3,380kB                        3,332kB                ^ 1.01x smaller
    tree_churn --parallel                              3,004kB                        3,032kB                 ! 1.01x bigger
    fragment --parallel                                7,144kB                        7,156kB                  ! 1.0x bigger
    fragment_iterate --parallel                       25,680kB                       25,748kB                  ! 1.0x bigger
    medium --parallel                              1,062,960kB                    1,066,388kB                  ! 1.0x bigger
    big --parallel                                 1,055,320kB                    1,058,988kB                  ! 1.0x bigger

    &lt;geometric mean&gt;                                  18,511kB                       18,643kB                 ! 1.01x bigger
    &lt;arithmetic mean&gt;                                204,400kB                      204,811kB                  ! 1.0x bigger
    &lt;harmonic mean&gt;                                    4,418kB                        4,472kB                 ! 1.01x bigger

Memory at End:
    churn                                                380kB                          392kB                 ! 1.03x bigger
    list_allocate                                        408kB                          408kB                               
    tree_allocate                                        468kB                          468kB                               
    tree_churn                                           456kB                          452kB                ^ 1.01x smaller
    fragment                                             468kB                          460kB                ^ 1.02x smaller
    fragment_iterate                                     644kB                          640kB                ^ 1.01x smaller
    medium                                             4,612kB                        4,612kB                               
    big                                                4,616kB                        4,596kB                 ^ 1.0x smaller
    facebook                                           3,336kB                        3,288kB                ^ 1.01x smaller
    reddit                                             2,296kB                        2,272kB                ^ 1.01x smaller
    flickr                                             3,276kB                        3,252kB                ^ 1.01x smaller
    theverge                                           3,320kB                        3,268kB                ^ 1.02x smaller
    nimlang                                           34,256kB                       34,132kB                 ^ 1.0x smaller
    message_one                                          688kB                          700kB                 ! 1.02x bigger
    message_many                                       1,108kB                        1,180kB                 ! 1.06x bigger
    churn --parallel                                     548kB                          552kB                 ! 1.01x bigger
    list_allocate --parallel                             640kB                          624kB                ^ 1.03x smaller
    tree_allocate --parallel                             724kB                          704kB                ^ 1.03x smaller
    tree_churn --parallel                              1,168kB                        1,180kB                 ! 1.01x bigger
    fragment --parallel                                1,312kB                        1,352kB                 ! 1.03x bigger
    fragment_iterate --parallel                          848kB                          852kB                  ! 1.0x bigger
    medium --parallel                                  4,720kB                        4,740kB                  ! 1.0x bigger
    big --parallel                                     4,724kB                        4,720kB                 ^ 1.0x smaller

    &lt;geometric mean&gt;                                   1,424kB                        1,426kB                  ! 1.0x bigger
    &lt;arithmetic mean&gt;                                  3,262kB                        3,254kB                 ^ 1.0x smaller
    &lt;harmonic mean&gt;                                      911kB                          913kB                  ! 1.0x bigger

=====
~/OpenSource/PerformanceTests/MallocBench&gt; 
=====
~/OpenSource/PerformanceTests/MallocBench&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168431</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 23:37:13 -0800</bug_when>
    <thetext>Attachment 272306 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:108:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:109:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:131:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/SortedVector.h:150:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 19 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>1168432</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 23:37:54 -0800</bug_when>
    <thetext>Facebook sees the biggest impact because it allocates and frees some 2MB regions:

    facebook                                             473ms                          252ms                 ^ 1.88x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168433</commentid>
    <comment_count>5</comment_count>
      <attachid>272307</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 23:43:32 -0800</bug_when>
    <thetext>Created attachment 272307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168434</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 23:46:03 -0800</bug_when>
    <thetext>Attachment 272307 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:108:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:109:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:131:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/SortedVector.h:150:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 20 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>1168436</commentid>
    <comment_count>7</comment_count>
      <attachid>272309</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-25 23:48:58 -0800</bug_when>
    <thetext>Created attachment 272309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168437</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 23:51:05 -0800</bug_when>
    <thetext>Attachment 272309 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:108:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:109:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:131:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/SortedVector.h:150:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 20 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>1168440</commentid>
    <comment_count>9</comment_count>
      <attachid>272311</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 00:13:01 -0800</bug_when>
    <thetext>Created attachment 272311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168442</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 00:14:34 -0800</bug_when>
    <thetext>Attachment 272311 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:108:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:109:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/XLargeMap.cpp:131:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/SortedVector.h:156:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 20 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>1168505</commentid>
    <comment_count>11</comment_count>
      <attachid>272311</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-02-26 08:21:40 -0800</bug_when>
    <thetext>Comment on attachment 272311
Patch

r=me

(Should we worry about that 13% increase in peak on message_one?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168531</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 09:42:44 -0800</bug_when>
    <thetext>&gt; (Should we worry about that 13% increase in peak on message_one?)

message_one is multithreaded, so its peak memory is a unavoidably racy.

I verified in a debugger that message_one does not perform XLarge allocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168543</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 09:57:30 -0800</bug_when>
    <thetext>Committed r197174: &lt;http://trac.webkit.org/changeset/197174&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168747</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 16:56:02 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 154762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168751</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-02-26 17:01:27 -0800</bug_when>
    <thetext>This result from ios-simulator tests shows the two different crashes that started after this change was landed:

&lt;https://build.webkit.org/results/Apple%20iOS%209%20Simulator%20Release%20WK2%20(Tests)/r197214%20(3458)/results.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170359</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-03 16:02:31 -0800</bug_when>
    <thetext>It looks like the crash is an ASSERT:

JavaScriptCore[0x6c9b6e] &lt;+62&gt;:  leaq   0x3fc000(%rax), %r14
JavaScriptCore[0x6c9b75] &lt;+69&gt;:  leaq   0x1fffff(%rax), %r12
JavaScriptCore[0x6c9b7c] &lt;+76&gt;:  andq   $-0x200000, %r12
JavaScriptCore[0x6c9b83] &lt;+83&gt;:  leaq   0x200000(%r12), %r15
JavaScriptCore[0x6c9b8b] &lt;+91&gt;:  cmpq   %r14, %r15
JavaScriptCore[0x6c9b8e] &lt;+94&gt;:  ja     0x6c9c5b                  ; &lt;+299&gt;

This corresponds to tryVMAllocate():

RELEASE_BASSERT(alignedEnd &lt;= mappedEnd);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170362</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-03 16:05:31 -0800</bug_when>
    <thetext>Values for &apos;mapped&apos; (the mmap return value) when ASSERTing include:

0x0000000110202000
0x0000000112a01000
0x0000000115201000
0x0000000115801000
0x0000000119803000
0x000000011c001000
0x000000011c801000
0x0000000122402000
0x0000000122a02000
0x0000000128801000</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170365</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-03 16:16:48 -0800</bug_when>
    <thetext>The problem seems to be that the iOS simulator returns VM ranges that are not 16kB aligned. I suppose this could also happen on 32bit iOS devices, maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170473</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-03 20:04:35 -0800</bug_when>
    <thetext>Committed r197545: &lt;http://trac.webkit.org/changeset/197545&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272306</attachid>
            <date>2016-02-25 23:36:01 -0800</date>
            <delta_ts>2016-02-25 23:43:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154720-20160225233543.patch</filename>
            <type>text/plain</type>
            <size>56903</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NyBAQAorMjAxNi0wMi0yNSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFkZGVkIGEg
ZmFzdCBYTGFyZ2UgYWxsb2NhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQ3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIGEgYmlnIHNwZWVkdXAgZm9yIFhMYXJnZSBhbGxvY2F0aW9u
cyBiZWNhdXNlIGl0IGF2b2lkcyBtbWFwCisgICAgICAgIGFuZCBwYWdlIGZhdWx0IGNodXJuLiBJ
dCBhbHNvIGVuYWJsZXMgZnV0dXJlIGRlc2lnbiBjaGFuZ2VzIHRvIGhhbmRsZQorICAgICAgICBh
IHNtYWxsZXIgc2l6ZSByYW5nZSBvbiB0aGUgZmFzdCBwYXRoLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0
aG0uaDoKKyAgICAgICAgKGJtYWxsb2M6OnJvdW5kVXBUb011bHRpcGxlT2YpOgorICAgICAgICAo
Ym1hbGxvYzo6cm91bmREb3duVG9NdWx0aXBsZU9mKTogQWRkZWQgYSBub24tY29uc3RhbnQgcm91
bmQgZG93bi4KKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJt
YWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBYTGFyZ2Ugbm8gbG9uZ2VyIHJlcXVpcmVz
IHRoZSBjYWxsZXIKKyAgICAgICAgdG8gYWxpZ24gdGhpbmdzLgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OmFsbG9jYXRlKTogVHdlYWtlZCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9u
IGZvcgorICAgICAgICBjbGFyaXR5LiBXaGVuIGFsaWdubWVudCBhbmQgbGFyZ2VBbGlnbm1lbnQg
YXJlIGVxdWFsLCBubyBhZGp1c3RtZW50CisgICAgICAgIGlzIG5lY2Vzc2FyeSBzaW5jZSBhbGwg
YWxsb2NhdGlvbnMgZ3VhcmFudGVlIGxhcmdlQWxpZ25tZW50LgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlLgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmV3IGludGVyZmFjZSBmaXhlcyBzb21lIGNvbmN1cnJl
bmN5IGJ1Z3MuIFRoZSBvbGQgY29kZQorICAgICAgICBrZXB0IGFuIGl0ZXJhdG9yIGludG8gdGhl
IFhMYXJnZSBhbGxvY2F0b3IgYWNyb3NzIGxvY2sgZHJvcCBhbmQgYWNxdWlzaXRpb24sCisgICAg
ICAgIHdoaWNoIGlzIG5vdCBjb29sLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFs
bG9jYXRlWExhcmdlKTogWExhcmdlIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgY2FsbGVyCisgICAg
ICAgIHRvIGFsaWduIHRoaW5ncy4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMpOiBBZGRlZCBzY2F2ZW5n
aW5nIGZvciBYTGFyZ2UuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlWExhcmdl
KToKKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6IFNwbGl0IFhM
YXJnZSBvYmplY3RzIHRvIHhMYXJnZUFsaWdubWVudC4KKworICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5QWxsb2NhdGVYTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6eExhcmdlU2l6
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtYTGFyZ2UpOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZSk6IEFsbG9jYXRlIGZyb20gb3VyIG1hcCBiZWZv
cmUgZ29pbmcKKyAgICAgICAgdG8gdGhlIE9TLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpm
aW5kWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAg
ICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6OnNwbGl0KToKKworICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgorICAgICAgICAo
Ym1hbGxvYzo6aXNYTGFyZ2UpOiBHaXZlIFhMYXJnZSBvYmplY3RzIGFuIGV4cGxpY2l0IGFsaWdu
bWVudCBmb3IgY2xhcml0eS4KKworICAgICAgICAqIGJtYWxsb2MvUmFuZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlJhbmdlOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlJhbmdlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoYm1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
Ym1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yPCk6CisgICAgICAgIChibWFsbG9jOjpjYW5NZXJnZSk6
CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6IFNvbWUgaGVscGVycyB0aGF0IHdlcmUgdXNlZnVs
IGluIHdyaXRpbmcgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvU2l6ZXMuaDoKKwor
ICAgICAgICAqIGJtYWxsb2MvU29ydGVkVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6U29ydGVkVmVjdG9yOjpCdWNrZXQ6OkJ1Y2tldCk6CisgICAgICAgIChibWFsbG9jOjpTb3J0
ZWRWZWN0b3I6OkJ1Y2tldDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZl
Y3Rvcjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3Rv
cjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6
Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yOjpp
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6Oml0
ZXJhdG9yOjpza2lwRGVsZXRlZEJ1Y2tldHMpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVj
dG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9j
OjpTb3J0ZWRWZWN0b3I8VD46OmZpbmQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
PFQ+OjpnZXQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yPFQ+Ojp0YWtlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQpOiBBIHNpbXBsZSBh
YnN0cmFjdGlvbiBmb3Iga2VlcGluZworICAgICAgICBhIHNvcnRlZCB2ZWN0b3IuIEluc2VydGlv
biBpcyBhdmVyYWdlIGFtb3J0aXplZCBsb2cobikgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgIGRl
bGV0ZWQgYnVja2V0cyB0aGF0IHdlIGNhbiByZXVzZS4KKworICAgICAgICBUaGlzIGlzIGJldHRl
ciB0aGFuIGEgdHJlZSBiZWNhdXNlIHdlIGdldCBiZXR0ZXIgbG9jYWxpdHksIGxlc3MgbWVtb3J5
CisgICAgICAgIHVzZSwgYW5kIHNpbXBsZXIgY29kZS4gQWxzbywgdHJlZXMgcmVxdWlyZSBhIG5v
ZGUgbWVtb3J5IGFsbG9jYXRvciwgYW5kCisgICAgICAgIGltcGxlbWVudGluZyBhIG1lbW9yeSBh
bGxvY2F0b3IgaW4gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vIGZ1bi4KKworICAgICAgICAqIGJt
YWxsb2MvVk1BbGxvY2F0ZS5oOgorICAgICAgICAoYm1hbGxvYzo6dHJ5Vk1BbGxvY2F0ZSk6IEZp
eGVkIGFuIGluYWNjdXJhY3kgaW4gdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbgorICAgICAgICBo
ZXJlLiBUaGlzIGNvZGUgd2FzIHNvcnQgb2YgdHJ5aW5nIHRvIGVuZm9yY2UgdGhlIGFsaWdubWVu
dCB0aGF0IHRoZQorICAgICAgICBYTGFyZ2UgYWxsb2NhdG9yIGVuZm9yY2VzIC0tIGJ1dCBpdCdz
IGJldHRlciB0byBlbmZvcmNlIHRoYXQgYWxpZ25tZW50CisgICAgICAgIHRoZXJlLgorCisgICAg
ICAgIFRoZSByaWdodCBjYWxjdWxhdGlvbiBpczoKKworICAgICAgICAgICAgdm1BbGlnbm1lbnQg
LSB2bVBhZ2VTaXplICsgdm1TaXplCisKKyAgICAgICAgYmVjYXVzZSB0aGUgd29yc3QgY2FzZSBp
cyB3aGVuIHlvdSBhcmUgYWxpZ25lZCB0byAwICsgdm1QYWdlU2l6ZSwgYW5kCisgICAgICAgIHlv
dSBtdXN0IHdhbGsgZm9yd2FyZCB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgdG8gcmVhY2ggdGhl
IG5leHQKKyAgICAgICAgdm1BbGlnbm1lbnQuCisKKyAgICAgICAgKGJtYWxsb2M6OnRyeVZNRXh0
ZW5kKTogRGVsZXRlZC4gTm8gbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBPUyBmb3IgVk0KKyAgICAg
ICAgc2luY2Ugd2UgbWFuYWdlIG91ciBvd24uCisKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5j
cHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayk6IFVwZGF0
ZWQgZm9yIGNsYXJpdHkuIFdoZW4gd2UKKyAgICAgICAgZ3JvdyB0aGUgbGFyZ2UgaGVhcCB3ZSBr
bm93IHRoYXQgZ3Jvd24gcmVnaW9uIGlzIHdoZXJlIHRoZSBuZXh0IGFsbG9jYXRpb24KKyAgICAg
ICAgd2lsbCB0YWtlIHBsYWNlLCBzbyB3ZSByZXR1cm4gaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBw
dXNoaW5nIGl0IHRvIHRoZQorICAgICAgICBmcmVlIGxpc3QuCisKKyAgICAgICAgVGhpcyBmaXhl
cyBhIHN1YnRsZSBidWcgd2hlcmUgYW4gb3Zlcmx5IGNvbnNlcnZhdGl2ZSBhbGlnbmVkIGFsbG9j
YXRpb24KKyAgICAgICAgYWxnb3JpdGhtIGNhbiBmYWlsIHRvIGFsbG9jYXRlIGF0IGFsbCB3aGVu
IGl0IGdyb3dzIHRoZSBoZWFwLgorCisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdCk6IERpdHRvLgorICAgICAg
ICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KTogRGl0dG8uCisKKyAgICAg
ICAgKiBibWFsbG9jL1ZNU3RhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6Om1lcmdlKTogQWRkZWQg
YSBoZWxwZXIuCisKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxv
Yzo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpWZWN0b3I6OnNpemUpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yOjpj
YXBhY2l0eSk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6Omxhc3QpOgorICAgICAgICAoYm1h
bGxvYzo6VmVjdG9yOjpwb3ApOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjpwdXNoKToK
KyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6cG9wKToKKyAgICAgICAgKGJtYWxsb2M6OlZl
Y3RvcjxUPjo6c2hyaW5rKTogVXNlIGEgcHJvcGVyIGl0ZXJhdG9yIEFQSSB0byBwbGF5IG5pY2UK
KyAgICAgICAgd2l0aCBzdGQgYWxnb3JpdGhtcy4KKworICAgICAgICAoYm1hbGxvYzo6VmVjdG9y
PFQ+OjppbnNlcnQpOiBOZXcgZnVuY3Rpb24gcmVxdWlyZWQgYnkgU29ydGVkVmVjdG9yLgorCisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAo
Ym1hbGxvYzo6VmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSk6IEFsbG93IGZvciBzaHJpbmtpbmcg
YmFjayBhbGwgdGhlIHdheQorICAgICAgICB0byAwIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2hyaW5r
VG9GaXQgd2FudHMuCisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnNocmlua1RvRml0KToKKworICAgICAgICAq
IGJtYWxsb2MvWExhcmdlTWFwLmNwcDogQWRkZWQuIEhlbHBlciBkYXRhIHN0cnVjdHVyZSBmb3Ig
bWFuYWdpbmcgWExhcmdlCisgICAgICAgIG9iamVjdHMuIFdlIGhhdmUgZW5vdWdoIGdyYW51bGFy
aXR5IGluIG91ciBtZXRhZGF0YSB0byByZXByZXNlbnQgYW55CisgICAgICAgIGtpbmQgb2YgYWRk
cmVzcyByYW5nZS4KKworICAgICAgICBXZSBzdG9yZSBmcmVlIHJhbmdlcyBpbiBhIGZsYXQgdmVj
dG9yIGJlY2F1c2UgbW9zdCBwcm9ncmFtcyBoYXZlIHZlcnkKKyAgICAgICAgZmV3IGluZGl2aWR1
YWwgZnJlZSBYTGFyZ2UgcmFuZ2VzLiAoVGhleSB1c3VhbGx5IG1lcmdlLikKKworICAgICAgICBX
ZSBzdG9yZSBhbGxvY2F0ZWQgcmFuZ2VzIGluIGEgc29ydGVkIHZlY3RvciBiZWNhdXNlIHByb2dy
YW1zIG1pZ2h0CisgICAgICAgIGFsbG9jYXRlIGxvdHMgb2YgWExhcmdlIHJhbmdlcy4gRm9yIGV4
YW1wbGUsIGlmIHRoZSBYTGFyZ2UgbWluaW11bSBpcworICAgICAgICAxMjhrQiwgYW5kIHlvdSBo
YXZlIGEgMUdCIHByb2Nlc3MsIHRoYXQncyA4MTkyIHJhbmdlcy4gTGluZWFyIHNjYW4gd291bGQK
KyAgICAgICAgZXhhbWluZSA4MTkyIGl0ZW1zIGJ1dCBiaW5hcnkgc2VhcmNoIG9ubHkgMTMuCisK
KyAgICAgICAgRW1waXJpY2FsbHksIHRoaXMgaXMgMS41WCBmYXN0ZXIgdGhhbiBvdXIgY3VycmVu
dCBsYXJnZSBhbGxvY2F0b3IgaWYgeW91CisgICAgICAgIG1vZGlmeSBNYWxsb2NCZW5jaC9iaWcg
dG8gYWxsb2NhdGUgWExhcmdlIG9iamVjdHMgYW5kIHlvdSBhbGxvY2F0ZQorICAgICAgICAxMjhr
Qi0yNTZrQiByYW5nZXMgaW4gYSAxR0IgYWRkcmVzcyBzcGFjZS4KKworICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjp0YWtlRnJlZSk6IEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgaW4gdGhp
cyBmdW5jdGlvbgorICAgICAgICBiZWNhdXNlIHdlIHN1cHBvcnQgc3VwZXIgaHVnZSBwb2ludGVy
cywgYWxpZ25tZW50cywgYW5kIHNpemVzLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OmFkZEZyZWUpOiBNZXJnZSBlYWdlcmx5IG9uIGZyZWUgYmVjYXVzZSB0aGUgY29zdAorICAgICAg
ICBvZiBtaXNzaW5nIGFuIFhMYXJnZSBvcHBvcnR1bml0eSBpcyBjYXRhc3Ryb3BoaWMsIGFuZCBi
ZWNhdXNlIGFueQorICAgICAgICBhbGxvY2F0b3IgdGhhdCBkb2Vzbid0IG1lcmdlIGVhZ2VybHkg
Y2FuIGNyZWF0ZSBsb3RzIG9mIG9wcG9ydHVuaXRpZXMKKyAgICAgICAgZm9yIHBhdGhvbG9naWNh
bCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZEFsbG9j
YXRlZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmdldEFsbG9jYXRlZCk6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQpOgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OnRha2VQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZFZpcnR1YWwp
OgorICAgICAgICAqIGJtYWxsb2MvWExhcmdlTWFwLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpBbGxvY2F0aW9uOjpvcGVyYXRvcjwpOgorCisgICAgICAgICogYm1hbGxv
Yy9YTGFyZ2VSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpY
TGFyZ2VSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6dm1TdGF0ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6c2V0Vk1TdGF0ZSk6CisgICAgICAgIChibWFs
bG9jOjpjYW5NZXJnZSk6CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6CisgICAgICAgIChibWFs
bG9jOjpYTGFyZ2VSYW5nZTo6c3BsaXQpOiBIZWxwZXIgZm9yIHRyYWNraW5nIFZNU3RhdGUgaW4g
YSByYW5nZS4KKwogMjAxNi0wMi0yMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtYY29kZV0gTGlua2VyIGVycm9ycyBkaXNwbGF5IG1hbmdsZWQgbmFtZXMsIGJ1
dCBubyBsb25nZXIgc2hvdWxkCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDYgKzIxLDkgQEAKIAkJMTQ0MEFGQ0QxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MEFGQ0MxQTk1
MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovOyB9OwogCQkxNDQ4QzMwMDE4RjM3NTQ2MDA1MDI4
MzkgLyogbWJtYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ0OEMyRkYxOEYzNzU0MzAwNTAyODM5IC8qIG1ibWFsbG9jLmNwcCAqLzsgfTsK
IAkJMTQ0OEMzMDExOEYzNzU0QzAwNTAyODM5IC8qIGJtYWxsb2MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDhDMkZFMThGMzc1NDMwMDUwMjgzOSAv
KiBibWFsbG9jLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMTQ0QzA3RjQxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMjFDN0I3MDI2MDA1
MUJCNkEgLyogWExhcmdlTWFwLmNwcCAqLzsgfTsKKwkJMTQ0QzA3RjUxQzdCNzAyNjAwNTFCQjZB
IC8qIFhMYXJnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0QzA3RjMxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5oICovOyB9OworCQkx
NDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDYwNDFFNjFDN0ZGMkVGMDBFOUY5NEUg
LyogU29ydGVkVmVjdG9yLmggKi87IH07CiAJCTE0ODk1RDkxMUEzQTMxOUMwMDA2MjM1RCAvKiBF
bnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovOyB9Owog
CQkxNDg5NUQ5MjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDkwMUEzQTMxOUMwMDA2MjM1
RCAvKiBFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDNjIxNkUxQTlB
OUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUyLDYgKzU1LDcgQEAKIAkJMTRERDc4Q0UxOEY0OEQ3
NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0YxOEY0
OEQ3NTAwOTUwNzAyIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ3OUUyMTIxN0ExQTI1NTAwNkQ0RTlEIC8qIFZlY3Rvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEQwMThG
NDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RTIxNDE3QTFBNjNFMDA2RDRFOUQgLyogVk1BbGxvY2F0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
RUI3OUVBMUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8q
IFhMYXJnZVJhbmdlLmggKi87IH07CiAJCTE0RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ1RjY4NTUxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5jcHAgKi87IH07CiAJCTE0RjI3
MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUu
Y3BwICovOyB9OwogCQkxNEYyNzFDNTE4RUEzOTdFMDA4QzE1MkYgLyogRGVhbGxvY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTkx
NzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLzsgfTsKQEAgLTk3LDYgKzEwMSw4
IEBACiAJCTE0NDQ2QTA3MTdBNjFGQTQwMEY5RUExRCAvKiBQZXJQcm9jZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBlclByb2Nlc3MuaDsgcGF0aCA9IGJtYWxsb2MvUGVy
UHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ4QzJGRTE4RjM3NTQz
MDA1MDI4MzkgLyogYm1hbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBibWFsbG9jLmg7IHBhdGggPSBi
bWFsbG9jL2JtYWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OEMyRkYx
OEYzNzU0MzAwNTAyODM5IC8qIG1ibWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1ibWFs
bG9jLmNwcDsgcGF0aCA9IGJtYWxsb2MvbWJtYWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFhMYXJnZU1hcC5jcHA7IHBhdGggPSBi
bWFsbG9jL1hMYXJnZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0NEMw
N0YzMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gWExhcmdlTWFwLmg7IHBhdGggPSBibWFsbG9jL1hMYXJnZU1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDREQ0VENjE3QTY0OUQ5MDA5M0IyRjIgLyogTXV0
ZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTXV0ZXguaDsgcGF0aCA9IGJt
YWxsb2MvTXV0ZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RjdCRkIxOEJG
QzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBWTUhlYXAuY3BwOyBwYXRoID0gYm1hbGxvYy9WTUhlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDRGN0JGQzE4QkZDNTE3MDAzNTM3RjMgLyogVk1IZWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZNSGVhcC5oOyBwYXRoID0gYm1hbGxv
Yy9WTUhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNyw2ICsxMTMsNyBA
QAogCQkxNDVGNjg1QTE3OURDOTAyMDBENjU1OTggLyogRGVhbGxvY2F0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IERlYWxsb2NhdG9yLmg7IHBh
dGggPSBibWFsbG9jL0RlYWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFu
Z3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkx
NDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU2l6ZXMuaDsgcGF0aCA9IGJtYWxsb2MvU2l6ZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8qIFJhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBSYW5nZS5oOyBw
YXRoID0gYm1hbGxvYy9SYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKKwkJMTQ2MDQx
RTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTb3J0ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvU29ydGVkVmVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NkJFRTFFMThDODQxQzUwMDAyRDVB
MiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU2VncmVnYXRlZEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCRUUyMTE4Qzg0NUFFMDAwMkQ1
QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHA7IHBhdGggPSBibWFsbG9jL1NlZ3JlZ2F0
ZWRGcmVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzlFMjEyMTdB
MUEyNTUwMDZENEU5RCAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5l
RW5kaW5nID0gMDsgbmFtZSA9IFZlY3Rvci5oOyBwYXRoID0gYm1hbGxvYy9WZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0g
eGNvZGUubGFuZy5vYmpjcHA7IH07CkBAIC0xMjgsNiArMTM1LDcgQEAKIAkJMTREOURCNDUxN0Yy
NDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bGluZUVuZGluZyA9IDA7IG5hbWUgPSBGaXhlZFZlY3Rvci5oOyBwYXRoID0gYm1hbGxvYy9GaXhl
ZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlv
bklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTREQTMyMEMxODg3NUIwOTAw
NzI2OUUwIC8qIEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSGVhcC5o
OyBwYXRoID0gYm1hbGxvYy9IZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEhlYXAuY3BwOyBwYXRoID0gYm1hbGxvYy9IZWFwLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJn
ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFhMYXJnZVJhbmdlLmg7
IHBhdGggPSBibWFsbG9jL1hMYXJnZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RjI3MUJFMThFQTM5NjMwMDhDMTUyRiAvKiBsaWJibWFsbG9jLmEgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMTU5
LDYgKzE2NywxNiBAQAogCQkJbmFtZSA9IGFwaTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBoZWFwOiB4bGFyZ2UgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE0NEMwN0YyMUM3Qjcw
MjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovLAorCQkJCTE0NEMwN0YzMUM3QjcwMjYwMDUx
QkI2QSAvKiBYTGFyZ2VNYXAuaCAqLywKKwkJCQkxNEVCNzlFODFDN0MxQkM0MDA1RTgzNEYgLyog
WExhcmdlUmFuZ2UuaCAqLywKKwkJCSk7CisJCQluYW1lID0gImhlYXA6IHhsYXJnZSI7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxNDVGNjgzNjE3OURDNDVGMDBENjU1OTgg
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTY2LDYgKzE4NCw3
IEBACiAJCQkJMTREOURCNEQxN0YyODY1QzAwRUFBQjc5IC8qIGNhY2hlICovLAogCQkJCTE0N0FB
QTlDMThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLywKIAkJCQkxNDdBQUE5QTE4Q0U1
RkQzMDAyMjAxRTQgLyogaGVhcDogc21hbGwgKi8sCisJCQkJMTQ0QzA3RjcxQzdCNzA3RDAwNTFC
QjZBIC8qIGhlYXA6IHhsYXJnZSAqLywKIAkJCQkxNEQ5REI0RTE3RjI4NjZFMDBFQUFCNzkgLyog
aGVhcCAqLywKIAkJCQkxNEQ5REI0RjE3RjI4Njg5MDBFQUFCNzkgLyogc3RkbGliICovLAogCQkJ
CTE0QjY1MEM0MThGMzlGNDgwMDc1MTk2OCAvKiBDb25maWd1cmF0aW9ucyAqLywKQEAgLTI2OCw2
ICsyODcsNyBAQAogCQkJCTE0NDQ2QTA3MTdBNjFGQTQwMEY5RUExRCAvKiBQZXJQcm9jZXNzLmgg
Ki8sCiAJCQkJMTQ0NDY5RkQxN0E2MUYxRjAwRjlFQTFEIC8qIFBlclRocmVhZC5oICovLAogCQkJ
CTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICovLAorCQkJCTE0NjA0MUU2MUM3
RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLywKIAkJCQkxNDNDQjgxQTE5MDIyQkM5
MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3BwICovLAogCQkJCTE0M0NCODFCMTkwMjJCQzkwMEIx
NkE0NSAvKiBTdGF0aWNNdXRleC5oICovLAogCQkJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAv
KiBTeXNjYWxsLmggKi8sCkBAIC0zMTEsNiArMzMxLDcgQEAKIAkJCQkxNERENzg5MDE4RjQ4Q0VC
MDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThGNDhENzUw
MDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhEMDE4RjQ4RDc1
MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRFQjc5RUExQzdD
MUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQwQUZD
OTFBOTUxNDI0MDA4MzdGQUEgLyogU3VwZXJDaHVuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQz
RUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NERENzhDRTE4RjQ4RDc1MDA5NTA3MDIgLyogU3lzY2FsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MjQsNyArMzQ1LDkgQEAKIAkJCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIgLyogQWxnb3JpdGht
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCRDE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxQ
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg4RTE4RjQ4Q0NEMDA5NTA3MDIgLyogQm91
bmRhcnlUYWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NjA0MUU3MUM3RkYyRUYwMEU5Rjk0RSAv
KiBTb3J0ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM4MThGNDhENzUwMDk1
MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQ0QzA3RjUxQzdCNzAy
NjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMkNEOUIxQUEx
MkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJDMThG
NDhENkIwMDk1MDcwMiAvKiBTbWFsbExpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk4
MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNDE4LDYg
KzQ0MSw3IEBACiAJCQkJMTQzRUY5QUYxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM3MThFQTM5OTAwMDhDMTUyRiAvKiBIZWFwLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM5MThFQTM5OTAwMDhDMTUyRiAvKiBWTUhlYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMTQ0QzA3RjQxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1h
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDODE4RUEzOTkwMDA4QzE1MkYgLyogT2Jq
ZWN0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNTE4RUEzOTdFMDA4QzE1MkYg
LyogRGVhbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzQxOEVBMzk3QjAw
OEMxNTJGIC8qIENhY2hlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsZ29yaXRobS5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTYgQEAgdGVtcGxhdGU8
c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubAogICAgIHJldHVybiByb3VuZFVwVG9NdWx0
aXBsZU9mKGRpdmlzb3IsIHgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBy
b3VuZERvd25Ub011bHRpcGxlT2Yoc2l6ZV90IGRpdmlzb3IsIFQgeCkKK3sKKyAgICBCQVNTRVJU
KGlzUG93ZXJPZlR3byhkaXZpc29yKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4o
bWFzayhyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oeCksIH4oZGl2aXNvciAtIDF1bCkpKTsK
K30KKwogdGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4
cHIgVCByb3VuZERvd25Ub011bHRpcGxlT2YoVCB4KQogewogICAgIHN0YXRpY19hc3NlcnQoaXNQ
b3dlck9mVHdvKGRpdmlzb3IpLCAiJ2Rpdmlzb3InIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4obWFzayhyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oeCksIH4oZGl2aXNvciAtIDF1bCkpKTsKKyAgICByZXR1cm4gcm91bmREb3duVG9N
dWx0aXBsZU9mKGRpdmlzb3IsIHgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRp
dmlkZVJvdW5kaW5nVXAoVCBudW1lcmF0b3IsIFQgZGVub21pbmF0b3IsIFQmIHF1b3RpZW50LCBU
JiByZW1haW5kZXIpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZShzaXplX3Qgc2l6ZQogCiAgICAgaWYgKHNpemUgPD0geExhcmdlTWF4KSB7CiAgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgp
KTsKLSAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnRyeUFs
bG9jYXRlWExhcmdlKGxvY2ssIHN1cGVyQ2h1bmtTaXplLCByb3VuZFVwVG9NdWx0aXBsZU9mPHhM
YXJnZUFsaWdubWVudD4oc2l6ZSkpOworICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKS0+dHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZQogICAgIGlmIChzaXplIDw9IGxhcmdlTWF4
ICYmIGFsaWdubWVudCA8PSBsYXJnZU1heCkgewogICAgICAgICBzaXplID0gc3RkOjptYXgobGFy
Z2VNaW4sIHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKICAgICAg
ICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oYWxpZ25t
ZW50KTsKLSAgICAgICAgc2l6ZV90IHVuYWxpZ25lZFNpemUgPSBsYXJnZU1pbiArIGFsaWdubWVu
dCArIHNpemU7CisgICAgICAgIHNpemVfdCB1bmFsaWduZWRTaXplID0gbGFyZ2VNaW4gKyBhbGln
bm1lbnQgLSBsYXJnZUFsaWdubWVudCArIHNpemU7CiAgICAgICAgIGlmICh1bmFsaWduZWRTaXpl
IDw9IGxhcmdlTWF4ICYmIGFsaWdubWVudCA8PSBsYXJnZUNodW5rU2l6ZSAvIDIpIHsKICAgICAg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+
OjptdXRleCgpKTsKICAgICAgICAgICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0
Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSk7CkBAIC05OCw4ICs5OCw2IEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFs
aWdubWUKICAgICB9CiAKICAgICBpZiAoc2l6ZSA8PSB4TGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9
IHhMYXJnZU1heCkgewotICAgICAgICBzaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VB
bGlnbm1lbnQ+KHNpemUpOwotICAgICAgICBhbGlnbm1lbnQgPSBzdGQ6Om1heChzdXBlckNodW5r
U2l6ZSwgYWxpZ25tZW50KTsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBs
b2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICByZXR1cm4gUGVyUHJvY2Vz
czxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplKTsKICAgICB9CkBAIC0xNDQsMzYgKzE0MiwxNSBAQCB2b2lkKiBBbGxvY2F0b3I6OnJlYWxs
b2NhdGUodm9pZCogb2JqZWN0CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwot
ICAgICAgICBSYW5nZSYgcmFuZ2UgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5m
aW5kWExhcmdlKGxvY2ssIG9iamVjdCk7Ci0gICAgICAgIG9sZFNpemUgPSByYW5nZS5zaXplKCk7
Ci0KLSAgICAgICAgbmV3U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50
PihuZXdTaXplKTsKKyAgICAgICAgb2xkU2l6ZSA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RD
YXNlKCktPnhMYXJnZVNpemUobG9jaywgb2JqZWN0KTsKIAogICAgICAgICBpZiAobmV3U2l6ZSA9
PSBvbGRTaXplKQogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKIAogICAgICAgICBpZiAobmV3
U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IGxhcmdlTWF4KSB7Ci0gICAgICAgICAgICBuZXdT
aXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KG5ld1NpemUpOwotICAg
ICAgICAgICAgaWYgKG9sZFNpemUgLSBuZXdTaXplID49IHhMYXJnZUFsaWdubWVudCkgewotICAg
ICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgdm1EZWFsbG9jYXRl
KHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpICsgbmV3U2l6ZSwgb2xkU2l6ZSAtIG5ld1NpemUp
OwotICAgICAgICAgICAgICAgIGxvY2subG9jaygpOwotCi0gICAgICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZShvYmplY3QsIG5ld1NpemUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rWExhcmdlKGxvY2ssIFJhbmdlKG9i
amVjdCwgb2xkU2l6ZSksIG5ld1NpemUpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAg
ICAgICAgfQotCi0gICAgICAgIGlmIChuZXdTaXplID4gb2xkU2l6ZSkgewotICAgICAgICAgICAg
bG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGJvb2wgd2FzRXh0ZW5kZWQgPSB0cnlWTUV4dGVu
ZChvYmplY3QsIG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICAgICAgbG9jay5sb2NrKCk7Ci0K
LSAgICAgICAgICAgIGlmICh3YXNFeHRlbmRlZCkgewotICAgICAgICAgICAgICAgIHJhbmdlID0g
UmFuZ2Uob2JqZWN0LCBuZXdTaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBA
IC0yMjksNyArMjA2LDYgQEAgTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJn
ZQogCiBOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZShzaXplX3Qgc2l6
ZSkKIHsKLSAgICBzaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KHNp
emUpOwogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhl
YXA+OjptdXRleCgpKTsKICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+YWxsb2NhdGVYTGFyZ2UobG9jaywgc2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVh
cC5jcHAJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShz
dGQ6OnVuaXF1ZV9sb2NrPFN0YQogCiAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2ssIHNsZWVw
RHVyYXRpb24pOwogICAgIHNjYXZlbmdlTGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24p
OworICAgIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKIAogICAg
IHNsZWVwKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogfQpAQCAtMTA2LDYgKzEwNywyMiBAQCB2b2lk
IEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmplY3RzKHN0ZDo6dW5pCiAgICAgfQogfQogCit2b2lkIEhl
YXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYg
bG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1cmF0aW9uKQoreworICAgIHdo
aWxlIChYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VQaHlzaWNhbCgpKSB7Cisg
ICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNT
bG9wcHkocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKKyAgICAgICAgbG9jay5sb2NrKCk7
CisgICAgICAgIAorICAgICAgICByYW5nZS5zZXRWTVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpOwor
ICAgICAgICBtX3hMYXJnZU1hcC5hZGRWaXJ0dWFsKHJhbmdlKTsKKworICAgICAgICB3YWl0VW50
aWxGYWxzZShsb2NrLCBzbGVlcER1cmF0aW9uLCBtX2lzQWxsb2NhdGluZ1BhZ2VzKTsKKyAgICB9
CisKKyAgICBtX3hMYXJnZU1hcC5zaHJpbmtUb0ZpdCgpOworfQorCiB2b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNp
emVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUm
IHJhbmdlQ2FjaGUpCiB7CiAgICAgQkFTU0VSVCghcmFuZ2VDYWNoZS5zaXplKCkpOwpAQCAtMjAy
LDUyICsyMTksNiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAg
ICAgbV9zY2F2ZW5nZXIucnVuKCk7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlWExhcmdlKGxvY2ssIGFs
aWdubWVudCwgc2l6ZSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGFsbG9jYXRl
WExhcmdlKGxvY2ssIHN1cGVyQ2h1bmtTaXplLCBzaXplKTsKLX0KLQotdm9pZCogSGVhcDo6dHJ5
QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKQotewotICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVu
dCkpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50ID49IHN1cGVyQ2h1bmtTaXplKTsKLSAgICBCQVNT
RVJUKHNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsK
LQotICAgIHZvaWQqIHJlc3VsdCA9IHRyeVZNQWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgbV94TGFyZ2VPYmpl
Y3RzLnB1c2goUmFuZ2UocmVzdWx0LCBzaXplKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
UmFuZ2UmIEhlYXA6OmZpbmRYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2
b2lkKiBvYmplY3QpCi17Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1feExhcmdlT2JqZWN0cykg
ewotICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSAhPSBvYmplY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcmV0dXJuIHJhbmdlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQkFTU0VS
VChmYWxzZSk7Ci0gICAgcmV0dXJuICpzdGF0aWNfY2FzdDxSYW5nZSo+KG51bGxwdHIpOyAvLyBT
aWxlbmNlIGNvbXBpbGVyIGVycm9yLgotfQotCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVYTGFyZ2Uo
c3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHZvaWQqIG9iamVjdCkKLXsKLSAg
ICBSYW5nZSB0b0RlYWxsb2NhdGUgPSBtX3hMYXJnZU9iamVjdHMucG9wKCZmaW5kWExhcmdlKGxv
Y2ssIG9iamVjdCkpOwotCi0gICAgbG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2NhdGUodG9E
ZWFsbG9jYXRlLmJlZ2luKCksIHRvRGVhbGxvY2F0ZS5zaXplKCkpOwotICAgIGxvY2subG9jaygp
OwotfQotCiBpbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VP
YmplY3QmIGxhcmdlT2JqZWN0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBCQVNTRVJUKGxhcmdlT2Jq
ZWN0LmlzRnJlZSgpKTsKQEAgLTM3Miw0ICszNDMsMTAyIEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0
ZUxhcmdlKHN0ZDo6bG9ja19ndWEKICAgICBkZWFsbG9jYXRlTGFyZ2UobG9jaywgbGFyZ2VPYmpl
Y3QpOwogfQogCit2b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwor
ICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxv
Y2ssIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGln
bm1lbnQsIHNpemUpOworfQorCitYTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKFhM
YXJnZVJhbmdlJiByYW5nZSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAg
WExhcmdlUmFuZ2UgcHJldjsKKyAgICBYTGFyZ2VSYW5nZSBuZXh0OworCisgICAgc2l6ZV90IGFs
aWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOworICAgIGlmICh0ZXN0KHJhbmdlLmJlZ2luKCks
IGFsaWdubWVudE1hc2spKSB7CisgICAgICAgIHNpemVfdCBwcmVmaXhTaXplID0gcm91bmRVcFRv
TXVsdGlwbGVPZihhbGlnbm1lbnQsIHJhbmdlLmJlZ2luKCkpIC0gcmFuZ2UuYmVnaW4oKTsKKyAg
ICAgICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNw
bGl0KHByZWZpeFNpemUpOworICAgICAgICBwcmV2ID0gcGFpci5maXJzdDsKKyAgICAgICAgcmFu
Z2UgPSBwYWlyLnNlY29uZDsKKyAgICB9CisKKyAgICBpZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+
PSB4TGFyZ2VBbGlnbm1lbnQpIHsKKyAgICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRV
cFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KHNpemUpOworICAgICAgICBzdGQ6OnBhaXI8
WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBwYWlyID0gcmFuZ2Uuc3BsaXQoYWxpZ25lZFNpemUp
OworICAgICAgICByYW5nZSA9IHBhaXIuZmlyc3Q7CisgICAgICAgIG5leHQgPSBwYWlyLnNlY29u
ZDsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IG91ciByYW5nZSBtaWdodCBjb250YWlu
IGFuIHVudXNlZCB0YWlsIGZyYWdtZW50LiBUaGlzIGlzCisgICAgLy8gY29tbW9uLiBXZSBjYW4n
dCBhbGxvY2F0ZSB0aGUgdGFpbCBmcmFnbWVudCBiZWNhdXNlIGl0J3MgYWxpZ25lZCB0byBsZXNz
CisgICAgLy8gdGhhbiB4TGFyZ2VBbGlnbm1lbnQuIFNvLCB3ZSBwYWlyIHRoZSBhbGxvY2F0aW9u
IHdpdGggaXRzIHRhaWwgZnJhZ21lbnQKKyAgICAvLyBpbiB0aGUgYWxsb2NhdGVkIGxpc3QuIFRo
aXMgaXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBiZWNhdXNlIGl0CisgICAgLy8ga2VlcHMg
dGhlIGZyZWUgbGlzdCBzaG9ydCwgc3BlZWRpbmcgdXAgYWxsb2NhdGlvbiBhbmQgbWVyZ2luZy4K
KworICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IGFsbG9jYXRlZCA9IHJh
bmdlLnNwbGl0KHJvdW5kVXBUb011bHRpcGxlT2Y8dm1QYWdlU2l6ZT4oc2l6ZSkpOworICAgIGlm
IChhbGxvY2F0ZWQuZmlyc3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgeworICAgICAgICB2bUFs
bG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShhbGxvY2F0ZWQuZmlyc3QuYmVnaW4oKSwgYWxsb2Nh
dGVkLmZpcnN0LnNpemUoKSk7CisgICAgICAgIGFsbG9jYXRlZC5maXJzdC5zZXRWTVN0YXRlKFZN
U3RhdGU6OlBoeXNpY2FsKTsKKyAgICB9CisKKyAgICBtX3hMYXJnZU1hcC5hZGRBbGxvY2F0ZWQo
cHJldiwgYWxsb2NhdGVkLCBuZXh0KTsKKyAgICByZXR1cm4gYWxsb2NhdGVkLmZpcnN0OworfQor
Cit2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgQkFTU0VSVChpc1Bv
d2VyT2ZUd28oYWxpZ25tZW50KSk7CisgICAgQkFTU0VSVChhbGlnbm1lbnQgPCB4TGFyZ2VNYXgp
OworCisgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7CisKKyAgICBhbGlnbm1lbnQgPSBy
b3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4oYWxpZ25tZW50KTsKKworICAgIFhM
YXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUZyZWUoYWxpZ25tZW50LCBzaXplKTsK
KyAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgIC8vIFdlIGFsbG9jYXRlIFZNIGluIGFsaWduZWQg
bXVsdGlwbGVzIHRvIGluY3JlYXNlIHRoZSBjaGFuY2VzIHRoYXQKKyAgICAgICAgLy8gdGhlIE9T
IHdpbGwgcHJvdmlkZSBjb250aWd1b3VzIHJhbmdlcyB0aGF0IHdlIGNhbiBtZXJnZS4KKyAgICAg
ICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1l
bnQ+KHNpemUpOworCisgICAgICAgIHZvaWQqIGJlZ2luID0gdHJ5Vk1BbGxvY2F0ZShhbGlnbm1l
bnQsIGFsaWduZWRTaXplKTsKKyAgICAgICAgaWYgKCFiZWdpbikKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByYW5nZSA9IFhMYXJnZVJhbmdlKGJlZ2luLCBhbGlnbmVkU2l6
ZSwgVk1TdGF0ZTo6VmlydHVhbCk7CisgICAgfQorCisgICAgcmV0dXJuIHNwbGl0QW5kQWxsb2Nh
dGUocmFuZ2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKK30KKworc2l6ZV90IEhlYXA6OnhM
YXJnZVNpemUoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCit7
CisgICAgcmV0dXJuIG1feExhcmdlTWFwLmdldEFsbG9jYXRlZChvYmplY3QpLnNpemUoKTsKK30K
Kwordm9pZCBIZWFwOjpzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
LCBjb25zdCBSYW5nZSYgb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBCQVNTRVJUKG9i
amVjdC5zaXplKCkgPiBuZXdTaXplKTsKKworICAgIGlmIChvYmplY3Quc2l6ZSgpIC0gbmV3U2l6
ZSA8IHZtUGFnZVNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBYTGFyZ2VSYW5nZSBy
YW5nZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0LmJlZ2luKCkpOworICAgIHNw
bGl0QW5kQWxsb2NhdGUocmFuZ2UsIHhMYXJnZUFsaWdubWVudCwgbmV3U2l6ZSk7CisKKyAgICBt
X3NjYXZlbmdlci5ydW4oKTsKK30KKwordm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdlKHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQoreworICAgIFhMYXJnZVJh
bmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUFsbG9jYXRlZChvYmplY3QpOworICAgIG1feExh
cmdlTWFwLmFkZEZyZWUocmFuZ2UpOworICAgIAorICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNp
b24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKICNpbmNsdWRlICJW
TUhlYXAuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJYTGFyZ2VNYXAuaCIKICNp
bmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxtdXRleD4KIApAQCAtNjEsNyArNjIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5QWxs
b2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7Ci0gICAgUmFuZ2UmIGZpbmRYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0
aWNNdXRleD4mLCB2b2lkKik7CisgICAgc2l6ZV90IHhMYXJnZVNpemUoc3RkOjp1bmlxdWVfbG9j
azxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5nZSYsIHNpemVfdCBuZXdTaXplKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGVYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2
b2lkKik7CiAKICAgICB2b2lkIHNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1cmF0aW9uKTsKQEAgLTgxLDEwICs4
MywxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcq
JiwgUmFuZ2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyom
LCBSYW5nZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRU
YWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7Ci0gICAgCisKKyAgICBY
TGFyZ2VSYW5nZSBzcGxpdEFuZEFsbG9jYXRlKFhMYXJnZVJhbmdlJiwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKKwogICAgIHZvaWQgY29uY3VycmVudFNjYXZlbmdlKCk7CiAgICAgdm9pZCBz
Y2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKTsKICAgICB2b2lkIHNjYXZlbmdlTGFyZ2VPYmplY3RzKHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7Cisg
ICAgdm9pZCBzY2F2ZW5nZVhMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRl
eD4mLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsKIAogICAgIHN0ZDo6YXJyYXk8c3RkOjph
cnJheTxMaW5lTWV0YWRhdGEsIHNtYWxsTGluZUNvdW50Piwgc21hbGxNYXggLyBhbGlnbm1lbnQ+
IG1fc21hbGxMaW5lTWV0YWRhdGE7CiAKQEAgLTkzLDcgKzk4LDggQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFsbFBhZ2VzOwogCiAgICAgU2VncmVnYXRlZEZyZWVMaXN0
IG1fbGFyZ2VPYmplY3RzOwotICAgIFZlY3RvcjxSYW5nZT4gbV94TGFyZ2VPYmplY3RzOworICAg
IAorICAgIFhMYXJnZU1hcCBtX3hMYXJnZU1hcDsKIAogICAgIGJvb2wgbV9pc0FsbG9jYXRpbmdQ
YWdlczsKICAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2
ZW5nZSk+IG1fc2NhdmVuZ2VyOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3Qu
aAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDcgQEAgaW5saW5lIExhcmdlT2JqZWN0
IExhcmdlT2JqZWN0OjptZXJnZSgpIAogCiBpbmxpbmUgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBM
YXJnZU9iamVjdD4gTGFyZ2VPYmplY3Q6OnNwbGl0KHNpemVfdCBzaXplKSBjb25zdAogeworICAg
IEJBU1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkpOwogICAgIFJhbmdlIHNwbGl0KGJlZ2luKCks
IHNpemUpOwogICAgIFJhbmdlIGxlZnRvdmVyID0gUmFuZ2Uoc3BsaXQuZW5kKCksIHRoaXMtPnNp
emUoKSAtIHNpemUpOwogICAgIEJBU1NFUlQobGVmdG92ZXIuc2l6ZSgpID49IGxhcmdlTWluKTsK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCShyZXZpc2lvbiAxOTcxNjEpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBpbmxpbmUgYm9vbCBpc1NtYWxsKHZvaWQqIG9iamVjdCkKIAogaW5saW5l
IGJvb2wgaXNYTGFyZ2Uodm9pZCogb2JqZWN0KQogewotICAgIHJldHVybiAhdGVzdChvYmplY3Qs
IH5zdXBlckNodW5rTWFzayk7CisgICAgcmV0dXJuICF0ZXN0KG9iamVjdCwgfnhMYXJnZU1hc2sp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9SYW5nZS5o
CShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1JhbmdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUmFuZ2VfaAogI2RlZmluZSBS
YW5nZV9oCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0ZGRlZj4KIAogbmFt
ZXNwYWNlIGJtYWxsb2MgewpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISEqdGhpczsgfQogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJhbmdl
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iZWdpbiA8IG90aGVyLm1fYmVnaW47IH0KIAogcHJp
dmF0ZToKQEAgLTU2LDYgKzU4LDE2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKIH07
CiAKK2lubGluZSBib29sIGNhbk1lcmdlKGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYgYikK
K3sKKyAgICByZXR1cm4gYS5iZWdpbigpID09IGIuZW5kKCkgfHwgYS5lbmQoKSA9PSBiLmJlZ2lu
KCk7Cit9CisKK2lubGluZSBSYW5nZSBtZXJnZShjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2Um
IGIpCit7CisgICAgcmV0dXJuIFJhbmdlKHN0ZDo6bWluKGEuYmVnaW4oKSwgYi5iZWdpbigpKSwg
YS5zaXplKCkgKyBiLnNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAogI2Vu
ZGlmIC8vIFJhbmdlX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHJldmlzaW9uIDE5NzE2
MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsOCBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bGFyZ2VDaHVua01ldGFkYXRhU2l6ZSA9IDQgKiBrQjsgLy8gc2l6ZW9mKExhcmdlQ2h1bmspCiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlQ2h1bmtTaXplIC0gbGFyZ2VD
aHVua01ldGFkYXRhU2l6ZTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlQWxpZ25t
ZW50ID0gdm1QYWdlU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdubWVu
dCA9IHN1cGVyQ2h1bmtTaXplOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWFzayA9
IH4oeExhcmdlQWxpZ25tZW50IC0gMSk7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VN
YXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0geExhcmdlQWxpZ25tZW50
OyAvLyBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyB1cCB0byB4TGFyZ2VBbGlnbm1lbnQgZG9lcyBu
b3Qgb3ZlcmZsb3cuCiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGZyZWVMaXN0U2VhcmNoRGVw
dGggPSAxNjsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTb3J0ZWRWZWN0b3JfaAorI2RlZmluZSBTb3J0ZWRWZWN0
b3JfaAorCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1l
c3BhY2UgYm1hbGxvYyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTb3J0ZWRWZWN0
b3IgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+
Ojp2YWx1ZSwgIlNvcnRlZFZlY3RvciBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuIik7
CisKKyAgICBzdHJ1Y3QgQnVja2V0IHsKKyAgICAgICAgZXhwbGljaXQgQnVja2V0KFQgdmFsdWUp
CisgICAgICAgICAgICA6IHZhbHVlKHZhbHVlKQorICAgICAgICAgICAgLCBpc0RlbGV0ZWQoZmFs
c2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gYm9vbCBvcGVyYXRvcjwoY29uc3QgVSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyOworICAgICAgICB9CisKKyAgICAgICAg
VCB2YWx1ZTsKKyAgICAgICAgYm9vbCBpc0RlbGV0ZWQ7CisgICAgfTsKKworcHVibGljOgorICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKEJ1Y2tldCog
YnVja2V0LCBCdWNrZXQqIGVuZCkKKyAgICAgICAgICAgIDogbV9idWNrZXQoYnVja2V0KQorICAg
ICAgICAgICAgLCBtX2VuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNraXBEZWxldGVk
QnVja2V0cygpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICB7CisgICAgICAgICAgICBCQVNTRVJUKG1fYnVja2V0ICE9IG1fZW5kKTsKKyAgICAg
ICAgICAgICsrbV9idWNrZXQ7CisgICAgICAgICAgICBza2lwRGVsZXRlZEJ1Y2tldHMoKTsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2J1Y2tldCAhPSBvdGhlci5tX2J1Y2tldDsKKyAgICAgICAgfQorCisgICAgICAgIFQmIG9w
ZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJBU1NFUlQobV9idWNrZXQgPCBtX2Vu
ZCk7CisgICAgICAgICAgICBCQVNTRVJUKCFtX2J1Y2tldC0+aXNEZWxldGVkKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1Y2tldC0+dmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBUKiBvcGVy
YXRvci0+KCkgIHsgcmV0dXJuICZvcGVyYXRvciooKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFNvcnRlZFZlY3RvcjsKKworICAgICAgICB2b2lkIHNraXBEZWxldGVk
QnVja2V0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChtX2J1Y2tldCAhPSBtX2Vu
ZCAmJiBtX2J1Y2tldC0+aXNEZWxldGVkKQorICAgICAgICAgICAgICAgICsrbV9idWNrZXQ7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWNrZXQqIG1fYnVja2V0OworICAgICAgICBCdWNrZXQqIG1f
ZW5kOworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKG1f
dmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIGl0ZXJhdG9yKG1fdmVjdG9yLmVuZCgpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KKworICAg
IHZvaWQgaW5zZXJ0KGNvbnN0IFQmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGl0ZXJh
dG9yIGZpbmQoY29uc3QgVSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFQgZ2V0KGNvbnN0
IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBUIHRha2UoY29uc3QgVSYpOworCisgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworCitwcml2YXRlOgorICAgIFZlY3RvcjxCdWNrZXQ+IG1fdmVj
dG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgU29ydGVkVmVjdG9yPFQ+Ojpp
bnNlcnQoY29uc3QgVCYgdmFsdWUpCit7CisgICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQo
bV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIHZhbHVlKTsKKyAgICBpZiAoaXQgIT0g
bV92ZWN0b3IuZW5kKCkgJiYgaXQtPmlzRGVsZXRlZCkgeworICAgICAgICAqaXQgPSBCdWNrZXQo
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92ZWN0b3IuaW5zZXJ0KGl0
LCBCdWNrZXQodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KK3R5cGVuYW1lIFNvcnRlZFZlY3RvcjxUPjo6aXRlcmF0b3IgU29ydGVkVmVjdG9y
PFQ+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKQoreworICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2Jv
dW5kKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IGl0ZXJhdG9yKGl0LCBtX3ZlY3Rvci5lbmQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CitUIFNvcnRlZFZlY3RvcjxUPjo6Z2V0KGNvbnN0IFUmIHZh
bHVlKQoreworICAgIHJldHVybiAqZmluZCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CitUIFNvcnRlZFZlY3RvcjxUPjo6dGFrZShjb25zdCBV
JiB2YWx1ZSkKK3sKKyAgICBhdXRvIGl0ID0gZmluZCh2YWx1ZSk7CisgICAgaXQubV9idWNrZXQt
PmlzRGVsZXRlZCA9IHRydWU7CisgICAgcmV0dXJuIGl0Lm1fYnVja2V0LT52YWx1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgU29ydGVkVmVjdG9yPFQ+OjpzaHJpbmtUb0ZpdCgp
Cit7CisgICAgYXV0byBpc0RlbGV0ZWQgPSBbXShjb25zdCBCdWNrZXQmIGJ1Y2tldCkgeworICAg
ICAgICByZXR1cm4gYnVja2V0LmlzRGVsZXRlZDsKKyAgICB9OworCisgICAgYXV0byBuZXdFbmQg
PSBzdGQ6OnJlbW92ZV9pZihtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgaXNEZWxl
dGVkKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld0VuZCAtIG1fdmVjdG9yLmJlZ2luKCk7Cisg
ICAgbV92ZWN0b3Iuc2hyaW5rKG5ld1NpemUpOworCisgICAgbV92ZWN0b3Iuc2hyaW5rVG9GaXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYgLy8gU29ydGVkVmVjdG9y
X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0ZS5oCShyZXZpc2lvbiAxOTcxNjEp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODIsMjkgKzgyLDYgQEAgaW5saW5lIHZvaWQqIHRyeVZNQWxsb2NhdGUoc2l6ZV90IHZtU2l6
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBib29sIHRyeVZNRXh0ZW5kKHZvaWQq
IHAsIHNpemVfdCB2bU9sZFNpemUsIHNpemVfdCB2bU5ld1NpemUpCi17Ci0gICAgdm1WYWxpZGF0
ZSh2bU9sZFNpemUpOwotICAgIHZtVmFsaWRhdGUodm1OZXdTaXplKTsKLSAgICAKLSAgICBCQVNT
RVJUKHZtT2xkU2l6ZSA8IHZtTmV3U2l6ZSk7Ci0KLSAgICB2b2lkKiBuZXh0QWRkcmVzcyA9IHN0
YXRpY19jYXN0PGNoYXIqPihwKSArIHZtT2xkU2l6ZTsKLSAgICBzaXplX3QgZXh0ZW50aW9uU2l6
ZSA9IHZtTmV3U2l6ZSAtIHZtT2xkU2l6ZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobmV4
dEFkZHJlc3MsIGV4dGVudGlvblNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklW
QVRFIHwgTUFQX0FOT04sIEJNQUxMT0NfVk1fVEFHLCAwKTsKLQotICAgIGlmIChyZXN1bHQgPT0g
TUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJlc3VsdCAhPSBu
ZXh0QWRkcmVzcykgewotICAgICAgICBtdW5tYXAocmVzdWx0LCBleHRlbnRpb25TaXplKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
aW5saW5lIHZvaWQqIHZtQWxsb2NhdGUoc2l6ZV90IHZtU2l6ZSkKIHsKICAgICB2b2lkKiByZXN1
bHQgPSB0cnlWTUFsbG9jYXRlKHZtU2l6ZSk7CkBAIC0xMjYsNyArMTAzLDcgQEAgaW5saW5lIHZv
aWQqIHRyeVZNQWxsb2NhdGUoc2l6ZV90IHZtQWxpZwogICAgIHZtVmFsaWRhdGUodm1TaXplKTsK
ICAgICB2bVZhbGlkYXRlKHZtQWxpZ25tZW50KTsKIAotICAgIHNpemVfdCBtYXBwZWRTaXplID0g
c3RkOjptYXgodm1TaXplLCB2bUFsaWdubWVudCkgKyB2bUFsaWdubWVudDsKKyAgICBzaXplX3Qg
bWFwcGVkU2l6ZSA9IHZtQWxpZ25tZW50IC0gdm1QYWdlU2l6ZSArIHZtU2l6ZTsKICAgICBjaGFy
KiBtYXBwZWQgPSBzdGF0aWNfY2FzdDxjaGFyKj4odHJ5Vk1BbGxvY2F0ZShtYXBwZWRTaXplKSk7
CiAgICAgaWYgKCFtYXBwZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTM1LDYgKzEx
Miw4IEBAIGlubGluZSB2b2lkKiB0cnlWTUFsbG9jYXRlKHNpemVfdCB2bUFsaWcKICAgICBjaGFy
KiBhbGlnbmVkID0gcm91bmRVcFRvTXVsdGlwbGVPZih2bUFsaWdubWVudCwgbWFwcGVkKTsKICAg
ICBjaGFyKiBhbGlnbmVkRW5kID0gYWxpZ25lZCArIHZtU2l6ZTsKICAgICAKKyAgICBSRUxFQVNF
X0JBU1NFUlQoYWxpZ25lZEVuZCA8PSBtYXBwZWRFbmQpOworICAgIAogICAgIGlmIChzaXplX3Qg
bGVmdEV4dHJhID0gYWxpZ25lZCAtIG1hcHBlZCkKICAgICAgICAgdm1EZWFsbG9jYXRlKG1hcHBl
ZCwgbGVmdEV4dHJhKTsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHJl
dmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDE0IEBAIHZvaWQgVk1IZWFwOjphbGxvY2F0ZVNtYWxs
Q2h1bmsoc3RkOjpsb2MKICAgICAgICAgbV9zbWFsbFBhZ2VzLnB1c2goaXQpOwogfQogCi12b2lk
IFZNSGVhcDo6YWxsb2NhdGVMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
IGxvY2spCitMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQogewogICAgIGlmICghbV9sYXJnZUNodW5rcy5zaXpl
KCkpCiAgICAgICAgIGFsbG9jYXRlU3VwZXJDaHVuayhsb2NrKTsKIAogICAgIC8vIFdlIGluaXRp
YWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9pZCBkaXJ0eWluZyB0aGVpciBtZXRhZGF0YSBwYWdl
cy4KICAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rID0gbmV3IChtX2xhcmdlQ2h1bmtzLnBvcCgp
LT5sYXJnZUNodW5rKCkpIExhcmdlQ2h1bms7Ci0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qo
bGFyZ2VDaHVuay0+YmVnaW4oKSk7Ci0gICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KGxhcmdlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gTGFyZ2VPYmplY3QobGFyZ2VDaHVuay0+YmVnaW4oKSk7CiB9CiAK
IHZvaWQgVk1IZWFwOjphbGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgJKHJldmlzaW9uIDE5NzE2MSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGFsbG9jYXRlU21hbGxD
aHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBhbGxvY2F0ZUxh
cmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOworICAgIExhcmdlT2JqZWN0
IGFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAg
dm9pZCBhbGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwog
CiAgICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKQEAgLTg1LDI2ICs4NSwyMCBA
QCBpbmxpbmUgU21hbGxQYWdlKiBWTUhlYXA6OmFsbG9jYXRlU21hbGxQCiAKIGlubGluZSBMYXJn
ZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUpCiB7Ci0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmpl
Y3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpIHsK
LSAgICAgICAgYWxsb2NhdGVMYXJnZUNodW5rKGxvY2spOwotICAgICAgICBsYXJnZU9iamVjdCA9
IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7Ci0gICAgICAgIEJBU1NFUlQobGFyZ2VPYmplY3Qp
OwotICAgIH0KKyAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0
cy50YWtlKHNpemUpKQorICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAKLSAgICByZXR1cm4g
bGFyZ2VPYmplY3Q7CisgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKKyAgICByZXR1cm4g
YWxsb2NhdGVMYXJnZUNodW5rKGxvY2spOwogfQogCiBpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFw
OjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ss
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKIHsK
LSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25t
ZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KSB7Ci0gICAg
ICAgIGFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX2xh
cmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAg
IEJBU1NFUlQobGFyZ2VPYmplY3QpOwotICAgIH0KKyAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VP
YmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSkpCisgICAgICAgIHJldHVybiBsYXJnZU9iamVjdDsKIAotICAgIHJldHVybiBsYXJnZU9iamVj
dDsKKyAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPD0gbGFyZ2VNYXgpOworICAgIHJldHVybiBh
bGxvY2F0ZUxhcmdlQ2h1bmsobG9jayk7CiB9CiAKIGlubGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxv
Y2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgU21hbGxQ
YWdlKiBwYWdlKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHJldmlzaW9uIDE5NzE2
MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw2ICs3NCwxMyBAQCBwcml2YXRlOgogICAgIFN0YXRlIG1fc3RhdGU7CiB9OwogCitpbmxp
bmUgVk1TdGF0ZSBtZXJnZShWTVN0YXRlIGEsIFZNU3RhdGUgYikKK3sKKyAgICBWTVN0YXRlIHJl
c3VsdChhKTsKKyAgICByZXN1bHQubWVyZ2UoYik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5kaWYgLy8gVk1TdGF0ZV9oCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvVmVjdG9yLmgJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCwxNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogY2xhc3MgVmVjdG9yIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICJWZWN0b3IgbXVzdCBoYXZlIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLiIpOwogcHVibGljOgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7Cisg
ICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKKwogICAgIFZlY3Rvcihjb25zdCBW
ZWN0b3ImKSA9IGRlbGV0ZTsKICAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3ImKSA9
IGRlbGV0ZTsKIAogICAgIFZlY3RvcigpOwogICAgIH5WZWN0b3IoKTsKIAotICAgIFQqIGJlZ2lu
KCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAgICBUKiBlbmQoKSB7IHJldHVybiBtX2J1ZmZlciAr
IG1fc2l6ZTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2J1ZmZlciArIG1fc2l6ZTsgfQogCiAgICAgc2l6
ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KICAgICBzaXplX3QgY2FwYWNpdHkoKSB7IHJl
dHVybiBtX2NhcGFjaXR5OyB9CkBAIC01NiwxOSArNTksMjMgQEAgcHVibGljOgogICAgIFQmIGxh
c3QoKSB7IHJldHVybiBtX2J1ZmZlclttX3NpemUgLSAxXTsgfQogCiAgICAgdm9pZCBwdXNoKGNv
bnN0IFQmKTsKLSAgICB2b2lkIHB1c2goY29uc3QgVCosIGNvbnN0IFQqKTsKKwogICAgIFQgcG9w
KCk7CiAgICAgVCBwb3Aoc2l6ZV90KTsKLSAgICBUIHBvcChjb25zdCBUKiBpdCkgeyByZXR1cm4g
cG9wKGl0IC0gYmVnaW4oKSk7IH0KKyAgICBUIHBvcChjb25zdF9pdGVyYXRvciBpdCkgeyByZXR1
cm4gcG9wKGl0IC0gYmVnaW4oKSk7IH0KKyAgICAKKyAgICB2b2lkIGluc2VydChpdGVyYXRvciwg
Y29uc3QgVCYpOwogCiAgICAgdm9pZCBzaHJpbmsoc2l6ZV90KTsKIAorICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGdyb3dGYWN0b3Ig
PSAyOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2hyaW5rRmFjdG9yID0gNDsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGluaXRpYWxDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBzaXplb2YoVCk7
CiAKLSAgICB2b2lkIGdyb3dDYXBhY2l0eShzaXplX3Qgc2l6ZSk7CisgICAgdm9pZCBncm93Q2Fw
YWNpdHkoKTsKICAgICB2b2lkIHNocmlua0NhcGFjaXR5KCk7CiAgICAgdm9pZCByZWFsbG9jYXRl
QnVmZmVyKHNpemVfdCk7CiAKQEAgLTEwMywyMSArMTEwLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBJTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3QgVCYgdmFsdWUpCiB7CiAgICAg
aWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQotICAgICAgICBncm93Q2FwYWNpdHkobV9zaXplKTsK
KyAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CiAgICAgbV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFZlY3RvcjxUPjo6cHVzaChjb25zdCBU
KiBiZWdpbiwgY29uc3QgVCogZW5kKQotewotICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsg
KGVuZCAtIGJlZ2luKTsKLSAgICBpZiAobmV3U2l6ZSA+IG1fY2FwYWNpdHkpCi0gICAgICAgIGdy
b3dDYXBhY2l0eShuZXdTaXplKTsKLSAgICBzdGQ6Om1lbWNweSh0aGlzLT5lbmQoKSwgYmVnaW4s
IChlbmQgLSBiZWdpbikgKiBzaXplb2YoVCkpOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCBWZWN0b3I8VD46OnBvcCgpCiB7CiAgICAg
QkFTU0VSVChtX3NpemUpOwpAQCAtMTM1LDYgKzEzMiwyMCBAQCBpbmxpbmUgVCBWZWN0b3I8VD46
OnBvcChzaXplX3QgaSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgVmVjdG9yPFQ+
OjppbnNlcnQoaXRlcmF0b3IgaXQsIGNvbnN0IFQmIHZhbHVlKQoreworICAgIHNpemVfdCBpbmRl
eCA9IGl0IC0gYmVnaW4oKTsKKyAgICBzaXplX3QgbW92ZUNvdW50ID0gZW5kKCkgLSBpdDsKKwor
ICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CisK
KyAgICBzdGQ6Om1lbW1vdmUoJm1fYnVmZmVyW2luZGV4ICsgMV0sICZtX2J1ZmZlcltpbmRleF0s
IG1vdmVDb3VudCAqIHNpemVvZihUKSk7CisgICAgbV9idWZmZXJbaW5kZXhdID0gdmFsdWU7Cisg
ICAgbV9zaXplKys7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdm9pZCBWZWN0
b3I8VD46OnNocmluayhzaXplX3Qgc2l6ZSkKIHsKICAgICBCQVNTRVJUKHNpemUgPD0gbV9zaXpl
KTsKQEAgLTE0Nyw3ICsxNTgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBWZWN0b3I8
VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQogewogICAgIHNpemVfdCB2
bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3Q2FwYWNpdHkgKiBzaXplb2YoVCkpOwotICAgIFQq
IG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPih2bUFsbG9jYXRlKHZtU2l6ZSkpOworICAgIFQq
IG5ld0J1ZmZlciA9IHZtU2l6ZSA/IHN0YXRpY19jYXN0PFQqPih2bUFsbG9jYXRlKHZtU2l6ZSkp
IDogbnVsbHB0cjsKICAgICBpZiAobV9idWZmZXIpIHsKICAgICAgICAgc3RkOjptZW1jcHkobmV3
QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplICogc2l6ZW9mKFQpKTsKICAgICAgICAgdm1EZWFsbG9j
YXRlKG1fYnVmZmVyLCBibWFsbG9jOjp2bVNpemUobV9jYXBhY2l0eSAqIHNpemVvZihUKSkpOwpA
QCAtMTY1LDEyICsxNzYsMTkgQEAgTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtDYXBh
Y2l0eQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+
Ojpncm93Q2FwYWNpdHkoc2l6ZV90IHNpemUpCitOT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46Omdy
b3dDYXBhY2l0eSgpCiB7Ci0gICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4KGluaXRpYWxDYXBh
Y2l0eSwgc2l6ZSAqIGdyb3dGYWN0b3IpOworICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChp
bml0aWFsQ2FwYWNpdHksIG1fc2l6ZSAqIGdyb3dGYWN0b3IpOwogICAgIHJlYWxsb2NhdGVCdWZm
ZXIobmV3Q2FwYWNpdHkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBWZWN0b3I8
VD46OnNocmlua1RvRml0KCkKK3sKKyAgICBpZiAobV9zaXplIDwgbV9jYXBhY2l0eSkKKyAgICAg
ICAgcmVhbGxvY2F0ZUJ1ZmZlcihtX3NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CiAKICNlbmRpZiAvLyBWZWN0b3JfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFy
Z2VNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFw
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiWExhcmdlTWFwLmgiCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKworWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlRnJlZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFs
aWdubWVudCAtIDE7CisKKyAgICBYTGFyZ2VSYW5nZSogY2FuZGlkYXRlID0gbV9mcmVlLmVuZCgp
OworICAgIGZvciAoWExhcmdlUmFuZ2UqIGl0ID0gbV9mcmVlLmJlZ2luKCk7IGl0ICE9IG1fZnJl
ZS5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNpemUoKSA8IHNpemUpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoY2FuZGlkYXRlICE9IG1fZnJlZS5lbmQoKSAm
JiBjYW5kaWRhdGUtPmJlZ2luKCkgPCBpdC0+YmVnaW4oKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmICh0ZXN0KGl0LT5iZWdpbigpLCBhbGlnbm1lbnRNYXNrKSkgeworICAg
ICAgICAgICAgY2hhciogYWxpZ25lZCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBp
dC0+YmVnaW4oKSk7CisgICAgICAgICAgICBpZiAoYWxpZ25lZCA8IGl0LT5iZWdpbigpKSAvLyBD
aGVjayBmb3Igb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGNoYXIqIGFsaWduZWRFbmQgPSBhbGlnbmVkICsgc2l6ZTsKKyAgICAgICAgICAgIGlmIChh
bGlnbmVkRW5kIDwgYWxpZ25lZCkgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoYWxpZ25lZEVuZCA+IGl0LT5lbmQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbmRpZGF0
ZSA9IGl0OworICAgIH0KKyAgICAKKyAgICBpZiAoY2FuZGlkYXRlID09IG1fZnJlZS5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIFhMYXJnZVJhbmdlKCk7CisKKyAgICByZXR1cm4gbV9mcmVlLnBvcChj
YW5kaWRhdGUpOworfQorCit2b2lkIFhMYXJnZU1hcDo6YWRkRnJlZShjb25zdCBYTGFyZ2VSYW5n
ZSYgcmFuZ2UpCit7CisgICAgWExhcmdlUmFuZ2UgbWVyZ2VkID0gcmFuZ2U7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBv
dGhlciA9IG1fZnJlZVtpXTsKKworICAgICAgICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgb3RoZXIp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbWVyZ2VkID0gbWVyZ2UobWVyZ2Vk
LCBtX2ZyZWUucG9wKGktLSkpOworICAgIH0KKyAgICAKKyAgICBtX2ZyZWUucHVzaChtZXJnZWQp
OworfQorCit2b2lkIFhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKGNvbnN0IFhMYXJnZVJhbmdlJiBw
cmV2LCBjb25zdCBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiYgYWxsb2NhdGVk
LCBjb25zdCBYTGFyZ2VSYW5nZSYgbmV4dCkKK3sKKyAgICBpZiAocHJldikKKyAgICAgICAgbV9m
cmVlLnB1c2gocHJldik7CisgICAgCisgICAgaWYgKG5leHQpCisgICAgICAgIG1fZnJlZS5wdXNo
KG5leHQpOworCisgICAgbV9hbGxvY2F0ZWQuaW5zZXJ0KHsgYWxsb2NhdGVkLmZpcnN0LCBhbGxv
Y2F0ZWQuc2Vjb25kIH0pOworfQorCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OmdldEFsbG9jYXRl
ZCh2b2lkKiBvYmplY3QpCit7CisgICAgcmV0dXJuIG1fYWxsb2NhdGVkLmZpbmQob2JqZWN0KS0+
b2JqZWN0OworfQorCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQodm9pZCog
b2JqZWN0KQoreworICAgIEFsbG9jYXRpb24gYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGVkLnRha2Uo
b2JqZWN0KTsKKyAgICByZXR1cm4gbWVyZ2UoYWxsb2NhdGlvbi5vYmplY3QsIGFsbG9jYXRpb24u
dW51c2VkKTsKK30KKwordm9pZCBYTGFyZ2VNYXA6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2Zy
ZWUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2FsbG9jYXRlZC5zaHJpbmtUb0ZpdCgpOworfQorCitY
TGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VQaHlzaWNhbCgpIHsKKyAgICBhdXRvIGhhc1BoeXNp
Y2FsID0gW10oY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKSB7CisgICAgICAgIHJldHVybiByYW5n
ZS52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKKyAgICB9OworCisgICAgYXV0byBpdCA9IHN0ZDo6
ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9mcmVlLmVuZCgpLCBoYXNQaHlzaWNhbCk7CisgICAg
aWYgKGl0ICE9IG1fZnJlZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJlZS5wb3AoaXQpOwor
CisgICAgYXV0byBoYXNVbnVzZWQgPSBbXShjb25zdCBBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKSB7
CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9uLnVudXNlZCAmJiBhbGxvY2F0aW9uLnVudXNlZC52
bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKKyAgICB9OworICAgIAorICAgIFhMYXJnZVJhbmdlIHN3
YXBwZWQ7CisgICAgYXV0byBpdDIgPSBzdGQ6OmZpbmRfaWYobV9hbGxvY2F0ZWQuYmVnaW4oKSwg
bV9hbGxvY2F0ZWQuZW5kKCksIGhhc1VudXNlZCk7CisgICAgaWYgKGl0MiAhPSBtX2FsbG9jYXRl
ZC5lbmQoKSkKKyAgICAgICAgc3RkOjpzd2FwKGl0Mi0+dW51c2VkLCBzd2FwcGVkKTsKKyAgICAK
KyAgICByZXR1cm4gc3dhcHBlZDsKK30KKwordm9pZCBYTGFyZ2VNYXA6OmFkZFZpcnR1YWwoY29u
c3QgWExhcmdlUmFuZ2UmIHJhbmdlKQoreworICAgIGF1dG8gY2FuTWVyZ2UgPSBbJnJhbmdlXShj
b25zdCBBbGxvY2F0aW9uJiBvdGhlcikgeworICAgICAgICByZXR1cm4gb3RoZXIub2JqZWN0LmVu
ZCgpID09IHJhbmdlLmJlZ2luKCk7CisgICAgfTsKKworICAgIGlmIChyYW5nZS5zaXplKCkgPCB4
TGFyZ2VBbGlnbm1lbnQpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhbiB1bnVzZWQgZnJhZ21lbnQs
IHNvIGl0IG1pZ2h0IGJlbG9uZyBpbiB0aGUgYWxsb2NhdGVkIGxpc3QuCisgICAgICAgIGF1dG8g
aXQgPSBzdGQ6OmZpbmRfaWYobV9hbGxvY2F0ZWQuYmVnaW4oKSwgbV9hbGxvY2F0ZWQuZW5kKCks
IGNhbk1lcmdlKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fYWxsb2NhdGVkLmVuZCgpKSB7CisgICAg
ICAgICAgICBCQVNTRVJUKCFpdC0+dW51c2VkKTsKKyAgICAgICAgICAgIGl0LT51bnVzZWQgPSBy
YW5nZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdl
IGRpZG4ndCBmaW5kIGEgbmVpZ2hib3IgaW4gdGhlIGFsbG9jYXRlZCBsaXN0LCBvdXIgbmVpZ2hi
b3IgbXVzdAorICAgICAgICAvLyBoYXZlIGJlZW4gZnJlZWQuIFdlJ2xsIG1lcmdlIHdpdGggaXQg
YmVsb3cuCisgICAgfQorCisgICAgYWRkRnJlZShyYW5nZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFhMYXJnZU1hcF9oCisjZGVmaW5lIFhMYXJnZU1hcF9oCisKKyNpbmNsdWRl
ICJTb3J0ZWRWZWN0b3IuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJYTGFyZ2VS
YW5nZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitj
bGFzcyBYTGFyZ2VNYXAgeworcHVibGljOgorICAgIHZvaWQgYWRkRnJlZShjb25zdCBYTGFyZ2VS
YW5nZSYpOworICAgIFhMYXJnZVJhbmdlIHRha2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCk7CisKKyAgICB2b2lkIGFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29u
c3Qgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mLCBjb25zdCBYTGFyZ2VSYW5n
ZSYgbmV4dCk7CisgICAgWExhcmdlUmFuZ2UgZ2V0QWxsb2NhdGVkKHZvaWQqKTsKKyAgICBYTGFy
Z2VSYW5nZSB0YWtlQWxsb2NhdGVkKHZvaWQqKTsKKworICAgIFhMYXJnZVJhbmdlIHRha2VQaHlz
aWNhbCgpOworICAgIHZvaWQgYWRkVmlydHVhbChjb25zdCBYTGFyZ2VSYW5nZSYpOworICAgIAor
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQWxsb2NhdGlv
biB7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEFsbG9jYXRpb24mIG90aGVyKSBjb25z
dCB7IHJldHVybiBvYmplY3QgPCBvdGhlci5vYmplY3Q7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRv
cjwodm9pZCogcHRyKSBjb25zdCB7IHJldHVybiBvYmplY3QuYmVnaW4oKSA8IHB0cjsgfQorCisg
ICAgICAgIFhMYXJnZVJhbmdlIG9iamVjdDsKKyAgICAgICAgWExhcmdlUmFuZ2UgdW51c2VkOwor
ICAgIH07CisKKyAgICBWZWN0b3I8WExhcmdlUmFuZ2U+IG1fZnJlZTsKKyAgICBTb3J0ZWRWZWN0
b3I8QWxsb2NhdGlvbj4gbV9hbGxvY2F0ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CisKKyNlbmRpZiAvLyBYTGFyZ2VNYXBfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Y
TGFyZ2VSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdl
UmFuZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFu
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgWExhcmdlUmFuZ2VfaAorI2RlZmlu
ZSBYTGFyZ2VSYW5nZV9oCisKKyNpbmNsdWRlICJWTVN0YXRlLmgiCisKK25hbWVzcGFjZSBibWFs
bG9jIHsKKworY2xhc3MgWExhcmdlUmFuZ2UgOiBwdWJsaWMgUmFuZ2UgeworcHVibGljOgorICAg
IFhMYXJnZVJhbmdlKCkKKyAgICAgICAgOiBSYW5nZSgpCisgICAgICAgICwgbV92bVN0YXRlKFZN
U3RhdGU6OlZpcnR1YWwpCisgICAgeworICAgIH0KKworICAgIFhMYXJnZVJhbmdlKHZvaWQqIGJl
Z2luLCBzaXplX3Qgc2l6ZSwgVk1TdGF0ZSB2bVN0YXRlKQorICAgICAgICA6IFJhbmdlKGJlZ2lu
LCBzaXplKQorICAgICAgICAsIG1fdm1TdGF0ZSh2bVN0YXRlKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgVk1TdGF0ZSB2bVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV92bVN0YXRlOyB9CisgICAg
dm9pZCBzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkgeyBtX3ZtU3RhdGUgPSB2bVN0YXRlOyB9
CisKKyAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBzcGxpdChzaXplX3Qp
IGNvbnN0OworCitwcml2YXRlOgorICAgIFZNU3RhdGUgbV92bVN0YXRlOworfTsKKworaW5saW5l
IGJvb2wgY2FuTWVyZ2UoY29uc3QgWExhcmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBi
KQoreworICAgIGlmIChhLmVuZCgpID09IGIuYmVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgaWYgKGIuZW5kKCkgPT0gYS5iZWdpbigpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBYTGFyZ2VSYW5nZSBtZXJn
ZShjb25zdCBYTGFyZ2VSYW5nZSYgYSwgY29uc3QgWExhcmdlUmFuZ2UmIGIpCit7CisgICAgcmV0
dXJuIFhMYXJnZVJhbmdlKAorICAgICAgICBzdGQ6Om1pbihhLmJlZ2luKCksIGIuYmVnaW4oKSks
CisgICAgICAgIGEuc2l6ZSgpICsgYi5zaXplKCksCisgICAgICAgIG1lcmdlKGEudm1TdGF0ZSgp
LCBiLnZtU3RhdGUoKSkpOworfQorCitpbmxpbmUgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFy
Z2VSYW5nZT4gWExhcmdlUmFuZ2U6OnNwbGl0KHNpemVfdCBzaXplKSBjb25zdAoreworICAgIEJB
U1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkpOworCisgICAgWExhcmdlUmFuZ2UgbGVmdChiZWdp
bigpLCBzaXplLCB2bVN0YXRlKCkpOworICAgIFhMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCks
IHRoaXMtPnNpemUoKSAtIHNpemUsIHZtU3RhdGUoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGxlZnQsIHJpZ2h0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYg
Ly8gWExhcmdlUmFuZ2VfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272307</attachid>
            <date>2016-02-25 23:43:32 -0800</date>
            <delta_ts>2016-02-25 23:48:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154720-20160225234315.patch</filename>
            <type>text/plain</type>
            <size>57294</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NyBAQAorMjAxNi0wMi0yNSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFkZGVkIGEg
ZmFzdCBYTGFyZ2UgYWxsb2NhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQ3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIGEgYmlnIHNwZWVkdXAgZm9yIFhMYXJnZSBhbGxvY2F0aW9u
cyBiZWNhdXNlIGl0IGF2b2lkcyBtbWFwCisgICAgICAgIGFuZCBwYWdlIGZhdWx0IGNodXJuLiBJ
dCBhbHNvIGVuYWJsZXMgZnV0dXJlIGRlc2lnbiBjaGFuZ2VzIHRvIGhhbmRsZQorICAgICAgICBh
IHNtYWxsZXIgc2l6ZSByYW5nZSBvbiB0aGUgZmFzdCBwYXRoLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0
aG0uaDoKKyAgICAgICAgKGJtYWxsb2M6OnJvdW5kVXBUb011bHRpcGxlT2YpOgorICAgICAgICAo
Ym1hbGxvYzo6cm91bmREb3duVG9NdWx0aXBsZU9mKTogQWRkZWQgYSBub24tY29uc3RhbnQgcm91
bmQgZG93bi4KKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJt
YWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBYTGFyZ2Ugbm8gbG9uZ2VyIHJlcXVpcmVz
IHRoZSBjYWxsZXIKKyAgICAgICAgdG8gYWxpZ24gdGhpbmdzLgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OmFsbG9jYXRlKTogVHdlYWtlZCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9u
IGZvcgorICAgICAgICBjbGFyaXR5LiBXaGVuIGFsaWdubWVudCBhbmQgbGFyZ2VBbGlnbm1lbnQg
YXJlIGVxdWFsLCBubyBhZGp1c3RtZW50CisgICAgICAgIGlzIG5lY2Vzc2FyeSBzaW5jZSBhbGwg
YWxsb2NhdGlvbnMgZ3VhcmFudGVlIGxhcmdlQWxpZ25tZW50LgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlLgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmV3IGludGVyZmFjZSBmaXhlcyBzb21lIGNvbmN1cnJl
bmN5IGJ1Z3MuIFRoZSBvbGQgY29kZQorICAgICAgICBrZXB0IGFuIGl0ZXJhdG9yIGludG8gdGhl
IFhMYXJnZSBhbGxvY2F0b3IgYWNyb3NzIGxvY2sgZHJvcCBhbmQgYWNxdWlzaXRpb24sCisgICAg
ICAgIHdoaWNoIGlzIG5vdCBjb29sLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFs
bG9jYXRlWExhcmdlKTogWExhcmdlIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgY2FsbGVyCisgICAg
ICAgIHRvIGFsaWduIHRoaW5ncy4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMpOiBBZGRlZCBzY2F2ZW5n
aW5nIGZvciBYTGFyZ2UuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlWExhcmdl
KToKKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6IFNwbGl0IFhM
YXJnZSBvYmplY3RzIHRvIHhMYXJnZUFsaWdubWVudC4KKworICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5QWxsb2NhdGVYTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6eExhcmdlU2l6
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtYTGFyZ2UpOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZSk6IEFsbG9jYXRlIGZyb20gb3VyIG1hcCBiZWZv
cmUgZ29pbmcKKyAgICAgICAgdG8gdGhlIE9TLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpm
aW5kWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAg
ICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6OnNwbGl0KToKKworICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgorICAgICAgICAo
Ym1hbGxvYzo6aXNYTGFyZ2UpOiBHaXZlIFhMYXJnZSBvYmplY3RzIGFuIGV4cGxpY2l0IGFsaWdu
bWVudCBmb3IgY2xhcml0eS4KKworICAgICAgICAqIGJtYWxsb2MvUmFuZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlJhbmdlOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlJhbmdlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoYm1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
Ym1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yPCk6CisgICAgICAgIChibWFsbG9jOjpjYW5NZXJnZSk6
CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6IFNvbWUgaGVscGVycyB0aGF0IHdlcmUgdXNlZnVs
IGluIHdyaXRpbmcgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvU2l6ZXMuaDoKKwor
ICAgICAgICAqIGJtYWxsb2MvU29ydGVkVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6U29ydGVkVmVjdG9yOjpCdWNrZXQ6OkJ1Y2tldCk6CisgICAgICAgIChibWFsbG9jOjpTb3J0
ZWRWZWN0b3I6OkJ1Y2tldDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZl
Y3Rvcjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3Rv
cjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6
Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yOjpp
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6Oml0
ZXJhdG9yOjpza2lwRGVsZXRlZEJ1Y2tldHMpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVj
dG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9j
OjpTb3J0ZWRWZWN0b3I8VD46OmZpbmQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
PFQ+OjpnZXQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yPFQ+Ojp0YWtlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQpOiBBIHNpbXBsZSBh
YnN0cmFjdGlvbiBmb3Iga2VlcGluZworICAgICAgICBhIHNvcnRlZCB2ZWN0b3IuIEluc2VydGlv
biBpcyBhdmVyYWdlIGFtb3J0aXplZCBsb2cobikgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgIGRl
bGV0ZWQgYnVja2V0cyB0aGF0IHdlIGNhbiByZXVzZS4KKworICAgICAgICBUaGlzIGlzIGJldHRl
ciB0aGFuIGEgdHJlZSBiZWNhdXNlIHdlIGdldCBiZXR0ZXIgbG9jYWxpdHksIGxlc3MgbWVtb3J5
CisgICAgICAgIHVzZSwgYW5kIHNpbXBsZXIgY29kZS4gQWxzbywgdHJlZXMgcmVxdWlyZSBhIG5v
ZGUgbWVtb3J5IGFsbG9jYXRvciwgYW5kCisgICAgICAgIGltcGxlbWVudGluZyBhIG1lbW9yeSBh
bGxvY2F0b3IgaW4gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vIGZ1bi4KKworICAgICAgICAqIGJt
YWxsb2MvVk1BbGxvY2F0ZS5oOgorICAgICAgICAoYm1hbGxvYzo6dHJ5Vk1BbGxvY2F0ZSk6IEZp
eGVkIGFuIGluYWNjdXJhY3kgaW4gdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbgorICAgICAgICBo
ZXJlLiBUaGlzIGNvZGUgd2FzIHNvcnQgb2YgdHJ5aW5nIHRvIGVuZm9yY2UgdGhlIGFsaWdubWVu
dCB0aGF0IHRoZQorICAgICAgICBYTGFyZ2UgYWxsb2NhdG9yIGVuZm9yY2VzIC0tIGJ1dCBpdCdz
IGJldHRlciB0byBlbmZvcmNlIHRoYXQgYWxpZ25tZW50CisgICAgICAgIHRoZXJlLgorCisgICAg
ICAgIFRoZSByaWdodCBjYWxjdWxhdGlvbiBpczoKKworICAgICAgICAgICAgdm1BbGlnbm1lbnQg
LSB2bVBhZ2VTaXplICsgdm1TaXplCisKKyAgICAgICAgYmVjYXVzZSB0aGUgd29yc3QgY2FzZSBp
cyB3aGVuIHlvdSBhcmUgYWxpZ25lZCB0byAwICsgdm1QYWdlU2l6ZSwgYW5kCisgICAgICAgIHlv
dSBtdXN0IHdhbGsgZm9yd2FyZCB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgdG8gcmVhY2ggdGhl
IG5leHQKKyAgICAgICAgdm1BbGlnbm1lbnQuCisKKyAgICAgICAgKGJtYWxsb2M6OnRyeVZNRXh0
ZW5kKTogRGVsZXRlZC4gTm8gbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBPUyBmb3IgVk0KKyAgICAg
ICAgc2luY2Ugd2UgbWFuYWdlIG91ciBvd24uCisKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5j
cHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayk6IFVwZGF0
ZWQgZm9yIGNsYXJpdHkuIFdoZW4gd2UKKyAgICAgICAgZ3JvdyB0aGUgbGFyZ2UgaGVhcCB3ZSBr
bm93IHRoYXQgZ3Jvd24gcmVnaW9uIGlzIHdoZXJlIHRoZSBuZXh0IGFsbG9jYXRpb24KKyAgICAg
ICAgd2lsbCB0YWtlIHBsYWNlLCBzbyB3ZSByZXR1cm4gaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBw
dXNoaW5nIGl0IHRvIHRoZQorICAgICAgICBmcmVlIGxpc3QuCisKKyAgICAgICAgVGhpcyBmaXhl
cyBhIHN1YnRsZSBidWcgd2hlcmUgYW4gb3Zlcmx5IGNvbnNlcnZhdGl2ZSBhbGlnbmVkIGFsbG9j
YXRpb24KKyAgICAgICAgYWxnb3JpdGhtIGNhbiBmYWlsIHRvIGFsbG9jYXRlIGF0IGFsbCB3aGVu
IGl0IGdyb3dzIHRoZSBoZWFwLgorCisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdCk6IERpdHRvLgorICAgICAg
ICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KTogRGl0dG8uCisKKyAgICAg
ICAgKiBibWFsbG9jL1ZNU3RhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6Om1lcmdlKTogQWRkZWQg
YSBoZWxwZXIuCisKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxv
Yzo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpWZWN0b3I6OnNpemUpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yOjpj
YXBhY2l0eSk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6Omxhc3QpOgorICAgICAgICAoYm1h
bGxvYzo6VmVjdG9yOjpwb3ApOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjpwdXNoKToK
KyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6cG9wKToKKyAgICAgICAgKGJtYWxsb2M6OlZl
Y3RvcjxUPjo6c2hyaW5rKTogVXNlIGEgcHJvcGVyIGl0ZXJhdG9yIEFQSSB0byBwbGF5IG5pY2UK
KyAgICAgICAgd2l0aCBzdGQgYWxnb3JpdGhtcy4KKworICAgICAgICAoYm1hbGxvYzo6VmVjdG9y
PFQ+OjppbnNlcnQpOiBOZXcgZnVuY3Rpb24gcmVxdWlyZWQgYnkgU29ydGVkVmVjdG9yLgorCisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAo
Ym1hbGxvYzo6VmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSk6IEFsbG93IGZvciBzaHJpbmtpbmcg
YmFjayBhbGwgdGhlIHdheQorICAgICAgICB0byAwIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2hyaW5r
VG9GaXQgd2FudHMuCisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnNocmlua1RvRml0KToKKworICAgICAgICAq
IGJtYWxsb2MvWExhcmdlTWFwLmNwcDogQWRkZWQuIEhlbHBlciBkYXRhIHN0cnVjdHVyZSBmb3Ig
bWFuYWdpbmcgWExhcmdlCisgICAgICAgIG9iamVjdHMuIFdlIGhhdmUgZW5vdWdoIGdyYW51bGFy
aXR5IGluIG91ciBtZXRhZGF0YSB0byByZXByZXNlbnQgYW55CisgICAgICAgIGtpbmQgb2YgYWRk
cmVzcyByYW5nZS4KKworICAgICAgICBXZSBzdG9yZSBmcmVlIHJhbmdlcyBpbiBhIGZsYXQgdmVj
dG9yIGJlY2F1c2UgbW9zdCBwcm9ncmFtcyBoYXZlIHZlcnkKKyAgICAgICAgZmV3IGluZGl2aWR1
YWwgZnJlZSBYTGFyZ2UgcmFuZ2VzLiAoVGhleSB1c3VhbGx5IG1lcmdlLikKKworICAgICAgICBX
ZSBzdG9yZSBhbGxvY2F0ZWQgcmFuZ2VzIGluIGEgc29ydGVkIHZlY3RvciBiZWNhdXNlIHByb2dy
YW1zIG1pZ2h0CisgICAgICAgIGFsbG9jYXRlIGxvdHMgb2YgWExhcmdlIHJhbmdlcy4gRm9yIGV4
YW1wbGUsIGlmIHRoZSBYTGFyZ2UgbWluaW11bSBpcworICAgICAgICAxMjhrQiwgYW5kIHlvdSBo
YXZlIGEgMUdCIHByb2Nlc3MsIHRoYXQncyA4MTkyIHJhbmdlcy4gTGluZWFyIHNjYW4gd291bGQK
KyAgICAgICAgZXhhbWluZSA4MTkyIGl0ZW1zIGJ1dCBiaW5hcnkgc2VhcmNoIG9ubHkgMTMuCisK
KyAgICAgICAgRW1waXJpY2FsbHksIHRoaXMgaXMgMS41WCBmYXN0ZXIgdGhhbiBvdXIgY3VycmVu
dCBsYXJnZSBhbGxvY2F0b3IgaWYgeW91CisgICAgICAgIG1vZGlmeSBNYWxsb2NCZW5jaC9iaWcg
dG8gYWxsb2NhdGUgWExhcmdlIG9iamVjdHMgYW5kIHlvdSBhbGxvY2F0ZQorICAgICAgICAxMjhr
Qi0yNTZrQiByYW5nZXMgaW4gYSAxR0IgYWRkcmVzcyBzcGFjZS4KKworICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjp0YWtlRnJlZSk6IEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgaW4gdGhp
cyBmdW5jdGlvbgorICAgICAgICBiZWNhdXNlIHdlIHN1cHBvcnQgc3VwZXIgaHVnZSBwb2ludGVy
cywgYWxpZ25tZW50cywgYW5kIHNpemVzLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OmFkZEZyZWUpOiBNZXJnZSBlYWdlcmx5IG9uIGZyZWUgYmVjYXVzZSB0aGUgY29zdAorICAgICAg
ICBvZiBtaXNzaW5nIGFuIFhMYXJnZSBvcHBvcnR1bml0eSBpcyBjYXRhc3Ryb3BoaWMsIGFuZCBi
ZWNhdXNlIGFueQorICAgICAgICBhbGxvY2F0b3IgdGhhdCBkb2Vzbid0IG1lcmdlIGVhZ2VybHkg
Y2FuIGNyZWF0ZSBsb3RzIG9mIG9wcG9ydHVuaXRpZXMKKyAgICAgICAgZm9yIHBhdGhvbG9naWNh
bCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZEFsbG9j
YXRlZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmdldEFsbG9jYXRlZCk6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQpOgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OnRha2VQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZFZpcnR1YWwp
OgorICAgICAgICAqIGJtYWxsb2MvWExhcmdlTWFwLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpBbGxvY2F0aW9uOjpvcGVyYXRvcjwpOgorCisgICAgICAgICogYm1hbGxv
Yy9YTGFyZ2VSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpY
TGFyZ2VSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6dm1TdGF0ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6c2V0Vk1TdGF0ZSk6CisgICAgICAgIChibWFs
bG9jOjpjYW5NZXJnZSk6CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6CisgICAgICAgIChibWFs
bG9jOjpYTGFyZ2VSYW5nZTo6c3BsaXQpOiBIZWxwZXIgZm9yIHRyYWNraW5nIFZNU3RhdGUgaW4g
YSByYW5nZS4KKwogMjAxNi0wMi0yMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtYY29kZV0gTGlua2VyIGVycm9ycyBkaXNwbGF5IG1hbmdsZWQgbmFtZXMsIGJ1
dCBubyBsb25nZXIgc2hvdWxkCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk3
MTYxKQorKysgU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDYgKzEzLDcgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvU2VncmVnYXRl
ZEZyZWVMaXN0LmNwcAogICAgIGJtYWxsb2MvU3RhdGljTXV0ZXguY3BwCiAgICAgYm1hbGxvYy9W
TUhlYXAuY3BwCisgICAgYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCiAgICAgYm1hbGxvYy9tYm1hbGxv
Yy5jcHAKICkKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw5IEBACiAJCTE0NDBBRkNEMUE5NTI3QUYwMDgzN0ZBQSAvKiBab25lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDBBRkNDMUE5NTI3QUYwMDgz
N0ZBQSAvKiBab25lLmNwcCAqLzsgfTsKIAkJMTQ0OEMzMDAxOEYzNzU0NjAwNTAyODM5IC8qIG1i
bWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NDhDMkZGMThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi87IH07CiAJCTE0NDhD
MzAxMThGMzc1NEMwMDUwMjgzOSAvKiBibWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRTE4RjM3NTQzMDA1MDI4MzkgLyogYm1hbGxv
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8q
IFhMYXJnZU1hcC5jcHAgKi87IH07CisJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFy
Z2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NEMwN0YzMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCAqLzsgfTsKKwkJMTQ2MDQxRTcx
QzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRl
ZFZlY3Rvci5oICovOyB9OwogCQkxNDg5NUQ5MTFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4
OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJMTQ4OTVE
OTIxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDg5NUQ5MDFBM0EzMTlDMDAwNjIzNUQgLyogRW52
aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNEM2MjE2RjFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzYyMTZFMUE5QTlBNjIwMEU3
MjI5MyAvKiBMYXJnZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC01Miw2ICs1NSw3IEBACiAJCTE0REQ3OENFMThGNDhENzUwMDk1MDcw
MiAvKiBTeXNjYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyogU3lzY2FsbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENGMThGNDhENzUwMDk1
MDcwMiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NzlFMjEyMTdBMUEyNTUwMDZENEU5RCAvKiBWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhEMDE4RjQ4RDc1MDA5
NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ3OUUyMTQxN0ExQTYzRTAwNkQ0RTlEIC8qIFZNQWxsb2NhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEVCNzlFQTFD
N0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VS
YW5nZS5oICovOyB9OwogCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU1
MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuY3BwICovOyB9OwogCQkxNEYyNzFDNDE4RUEz
OTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ0NDY5RTQxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmNwcCAqLzsg
fTsKIAkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU5MTc5REM5MDIw
MEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05Nyw2ICsxMDEsOCBAQAogCQkx
NDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBQZXJQcm9jZXNzLmg7IHBhdGggPSBibWFsbG9jL1BlclByb2Nlc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OEMyRkUxOEYzNzU0MzAwNTAyODM5
IC8qIGJtYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYm1hbGxvYy5oOyBwYXRoID0gYm1hbGxvYy9i
bWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDhDMkZGMThGMzc1NDMw
MDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBtYm1hbGxvYy5jcHA7
IHBhdGggPSBibWFsbG9jL21ibWFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBYTGFyZ2VNYXAuY3BwOyBwYXRoID0gYm1hbGxvYy9Y
TGFyZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRDMDdGMzFDN0I3
MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFhMYXJnZU1hcC5oOyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE11dGV4Lmg7IHBhdGggPSBibWFsbG9jL011
dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NEY3QkZCMThCRkM1MTcwMDM1
MzdGMyAvKiBWTUhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
Vk1IZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWTUhlYXAuaDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDcsNiArMTEzLDcgQEAKIAkJMTQ1
RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBEZWFsbG9jYXRvci5oOyBwYXRoID0gYm1h
bGxvYy9EZWFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3Bl
Y2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTQ1RjY4NzQx
NzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFNpemVzLmg7IHBhdGggPSBibWFsbG9jL1NpemVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gUmFuZ2UuaDsgcGF0aCA9IGJt
YWxsb2MvUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmlj
YXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CisJCTE0NjA0MUU2MUM3RkYy
RUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU29ydGVkVmVjdG9yLmg7IHBhdGggPSBibWFsbG9jL1NvcnRlZFZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2Vn
cmVnYXRlZEZyZWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlZ3Jl
Z2F0ZWRGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QkVFMjExOEM4NDVBRTAwMDJENUEyIC8qIFNl
Z3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc5RTIxMjE3QTFBMjU1MDA2
RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9
IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvVmVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxh
bmcub2JqY3BwOyB9OwpAQCAtMTI4LDYgKzEzNSw3IEBACiAJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVB
QUI3OSAvKiBGaXhlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRp
bmcgPSAwOyBuYW1lID0gRml4ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4ZWRWZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlm
aWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjBDMTg4NzVCMDkwMDcyNjlFMCAv
KiBIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXAuaDsgcGF0aCA9
IGJtYWxsb2MvSGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBMzIwRTE4
ODc1RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBIZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBYTGFyZ2VSYW5nZS5oOyBwYXRoID0g
Ym1hbGxvYy9YTGFyZ2VSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEYy
NzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKQEAgLTE1OSw2ICsxNjcs
MTYgQEAKIAkJCW5hbWUgPSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQkxNDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJC
NkEgLyogWExhcmdlTWFwLmNwcCAqLywKKwkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyog
WExhcmdlTWFwLmggKi8sCisJCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJh
bmdlLmggKi8sCisJCQkpOworCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4ID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE2Niw2ICsxODQsNyBAQAogCQkJ
CTE0RDlEQjREMTdGMjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdBQUE5QzE4Q0U2
MDEwMDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENFNUZEMzAwMjIw
MUU0IC8qIGhlYXA6IHNtYWxsICovLAorCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBo
ZWFwOiB4bGFyZ2UgKi8sCiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8s
CiAJCQkJMTREOURCNEYxN0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJCQkxNEI2NTBD
NDE4RjM5RjQ4MDA3NTE5NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yNjgsNiArMjg3LDcg
QEAKIAkJCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovLAogCQkJ
CTE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKIAkJCQkxNDVGNjg3
ODE3OUUzQTQ0MDBENjU1OTggLyogUmFuZ2UuaCAqLywKKwkJCQkxNDYwNDFFNjFDN0ZGMkVGMDBF
OUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi8sCiAJCQkJMTQzQ0I4MUExOTAyMkJDOTAwQjE2QTQ1
IC8qIFN0YXRpY011dGV4LmNwcCAqLywKIAkJCQkxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyog
U3RhdGljTXV0ZXguaCAqLywKIAkJCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyogU3lzY2Fs
bC5oICovLApAQCAtMzExLDYgKzMzMSw3IEBACiAJCQkJMTRERDc4OTAxOEY0OENFQjAwOTUwNzAy
IC8qIFNpemVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIg
LyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4RDAxOEY0OEQ3NTAwOTUwNzAy
IC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RUI3OUVBMUM3QzFCQzQwMDVF
ODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFGQzkxQTk1MTQy
NDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0M0VGOUIwMUE5
RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4Q0Ux
OEY0OEQ3NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovLApAQCAtMzI0LDcgKzM0
NSw5IEBACiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRobS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsUGFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJvdW5kYXJ5VGFn
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUgLyogU29ydGVk
VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyog
Rml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2
QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDJDRDlCMUFBMTJDRkIwMDc3
MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCQzE4RjQ4RDZCMDA5
NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5ODE4RjQ4RDRB
MDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQxOCw2ICs0NDEsNyBA
QAogCQkJCTE0M0VGOUFGMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE0NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzgxOEVBMzk5MDAwOEMxNTJGIC8qIE9iamVjdFR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM0MThFQTM5N0IwMDhDMTUyRiAv
KiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0
aG0uaAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0
aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDE2IEBAIHRlbXBsYXRlPHNpemVfdCBk
aXZpc29yLCB0eXBlbmFtZSBUPiBpbmwKICAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZihk
aXZpc29yLCB4KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmREb3du
VG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29yLCBUIHgpCit7CisgICAgQkFTU0VSVChpc1Bvd2Vy
T2ZUd28oZGl2aXNvcikpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KG1hc2socmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7Cit9CisKIHRl
bXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIFQgcm91
bmREb3duVG9NdWx0aXBsZU9mKFQgeCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KGlzUG93ZXJPZlR3
byhkaXZpc29yKSwgIidkaXZpc29yJyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFQ+KG1hc2socmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7CisgICAgcmV0dXJuIHJvdW5kRG93blRvTXVsdGlwbGVP
ZihkaXZpc29yLCB4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBkaXZpZGVSb3Vu
ZGluZ1VwKFQgbnVtZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90aWVudCwgVCYgcmVtYWlu
ZGVyKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTk3
MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90
IHNpemUKIAogICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCkgewogICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAg
ICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT50cnlBbGxvY2F0ZVhM
YXJnZShsb2NrLCBzdXBlckNodW5rU2l6ZSwgcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGln
bm1lbnQ+KHNpemUpKTsKKyAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RD
YXNlKCktPnRyeUFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCAmJiBhbGln
bm1lbnQgPD0gbGFyZ2VNYXgpIHsKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KGxhcmdlTWluLCBy
b3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CiAgICAgICAgIGFsaWdu
bWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVudCk7Ci0g
ICAgICAgIHNpemVfdCB1bmFsaWduZWRTaXplID0gbGFyZ2VNaW4gKyBhbGlnbm1lbnQgKyBzaXpl
OworICAgICAgICBzaXplX3QgdW5hbGlnbmVkU2l6ZSA9IGxhcmdlTWluICsgYWxpZ25tZW50IC0g
bGFyZ2VBbGlnbm1lbnQgKyBzaXplOwogICAgICAgICBpZiAodW5hbGlnbmVkU2l6ZSA8PSBsYXJn
ZU1heCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VDaHVua1NpemUgLyAyKSB7CiAgICAgICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgo
KSk7CiAgICAgICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+
YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwpAQCAt
OTgsOCArOTgsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1lCiAg
ICAgfQogCiAgICAgaWYgKHNpemUgPD0geExhcmdlTWF4ICYmIGFsaWdubWVudCA8PSB4TGFyZ2VN
YXgpIHsKLSAgICAgICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50
PihzaXplKTsKLSAgICAgICAgYWxpZ25tZW50ID0gc3RkOjptYXgoc3VwZXJDaHVua1NpemUsIGFs
aWdubWVudCk7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPEhlYXA+OjptdXRleCgpKTsKICAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiAg
ICAgfQpAQCAtMTQ0LDM2ICsxNDIsMTUgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZv
aWQqIG9iamVjdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICAgICAg
UmFuZ2UmIHJhbmdlID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+ZmluZFhMYXJn
ZShsb2NrLCBvYmplY3QpOwotICAgICAgICBvbGRTaXplID0gcmFuZ2Uuc2l6ZSgpOwotCi0gICAg
ICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4obmV3U2l6
ZSk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT54
TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7CiAKICAgICAgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6
ZSkKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAgICAgaWYgKG5ld1NpemUgPCBv
bGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewotICAgICAgICAgICAgbmV3U2l6ZSA9IHJv
dW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKLSAgICAgICAgICAg
IGlmIChvbGRTaXplIC0gbmV3U2l6ZSA+PSB4TGFyZ2VBbGlnbm1lbnQpIHsKLSAgICAgICAgICAg
ICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgIHZtRGVhbGxvY2F0ZShzdGF0aWNf
Y2FzdDxjaGFyKj4ob2JqZWN0KSArIG5ld1NpemUsIG9sZFNpemUgLSBuZXdTaXplKTsKLSAgICAg
ICAgICAgICAgICBsb2NrLmxvY2soKTsKLQotICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2Uo
b2JqZWN0LCBuZXdTaXplKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBlclByb2Nlc3M8
SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hMYXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9s
ZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0K
LQotICAgICAgICBpZiAobmV3U2l6ZSA+IG9sZFNpemUpIHsKLSAgICAgICAgICAgIGxvY2sudW5s
b2NrKCk7Ci0gICAgICAgICAgICBib29sIHdhc0V4dGVuZGVkID0gdHJ5Vk1FeHRlbmQob2JqZWN0
LCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwotCi0gICAgICAg
ICAgICBpZiAod2FzRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlKG9i
amVjdCwgbmV3U2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtMjI5LDcg
KzIwNiw2IEBAIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2UKIAogTk9f
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNpemUpCiB7Ci0g
ICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKTsKICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0
ZXgoKSk7CiAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9j
YXRlWExhcmdlKGxvY2ssIHNpemUpOwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShy
ZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGEKIAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVlcER1cmF0aW9u
KTsKICAgICBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKKyAgICBz
Y2F2ZW5nZVhMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAgICBzbGVlcChs
b2NrLCBzbGVlcER1cmF0aW9uKTsKIH0KQEAgLTEwNiw2ICsxMDcsMjIgQEAgdm9pZCBIZWFwOjpz
Y2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVuaQogICAgIH0KIH0KIAordm9pZCBIZWFwOjpzY2F2
ZW5nZVhMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbikKK3sKKyAgICB3aGlsZSAoWExh
cmdlUmFuZ2UgcmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlUGh5c2ljYWwoKSkgeworICAgICAgICBs
b2NrLnVubG9jaygpOworICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJh
bmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CisgICAgICAgIGxvY2subG9jaygpOworICAgICAg
ICAKKyAgICAgICAgcmFuZ2Uuc2V0Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsKKyAgICAgICAg
bV94TGFyZ2VNYXAuYWRkVmlydHVhbChyYW5nZSk7CisKKyAgICAgICAgd2FpdFVudGlsRmFsc2Uo
bG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7CisgICAgfQorCisgICAg
bV94TGFyZ2VNYXAuc2hyaW5rVG9GaXQoKTsKK30KKwogdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6
ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNh
Y2hlKQogewogICAgIEJBU1NFUlQoIXJhbmdlQ2FjaGUuc2l6ZSgpKTsKQEAgLTIwMiw1MiArMjE5
LDYgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9jawogICAgIG1fc2Nh
dmVuZ2VyLnJ1bigpOwogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1lbnQs
IHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShs
b2NrLCBzdXBlckNodW5rU2l6ZSwgc2l6ZSk7Ci19Ci0KLXZvaWQqIEhlYXA6OnRyeUFsbG9jYXRl
WExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLSAg
ICBCQVNTRVJUKGFsaWdubWVudCA+PSBzdXBlckNodW5rU2l6ZSk7Ci0gICAgQkFTU0VSVChzaXpl
ID09IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKSk7Ci0KLSAgICB2
b2lkKiByZXN1bHQgPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIG1feExhcmdlT2JqZWN0cy5wdXNo
KFJhbmdlKHJlc3VsdCwgc2l6ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJhbmdlJiBI
ZWFwOjpmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2Jq
ZWN0KQotewotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3hMYXJnZU9iamVjdHMpIHsKLSAgICAg
ICAgaWYgKHJhbmdlLmJlZ2luKCkgIT0gb2JqZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0JBU1NFUlQoZmFsc2Up
OwotICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8UmFuZ2UqPihudWxscHRyKTsgLy8gU2lsZW5jZSBj
b21waWxlciBlcnJvci4KLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCB2b2lkKiBvYmplY3QpCi17Ci0gICAgUmFuZ2Ug
dG9EZWFsbG9jYXRlID0gbV94TGFyZ2VPYmplY3RzLnBvcCgmZmluZFhMYXJnZShsb2NrLCBvYmpl
Y3QpKTsKLQotICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgdm1EZWFsbG9jYXRlKHRvRGVhbGxvY2F0
ZS5iZWdpbigpLCB0b0RlYWxsb2NhdGUuc2l6ZSgpKTsKLSAgICBsb2NrLmxvY2soKTsKLX0KLQog
aW5saW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0JiBs
YXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0Zy
ZWUoKSk7CkBAIC0zNzIsNCArMzQzLDEwMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhCiAgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKIH0K
IAordm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCogcmVz
dWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBSRUxF
QVNFX0JBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBIZWFw
OjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplKTsKK30KKworWExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5n
ZSYgcmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIFhMYXJnZVJh
bmdlIHByZXY7CisgICAgWExhcmdlUmFuZ2UgbmV4dDsKKworICAgIHNpemVfdCBhbGlnbm1lbnRN
YXNrID0gYWxpZ25tZW50IC0gMTsKKyAgICBpZiAodGVzdChyYW5nZS5iZWdpbigpLCBhbGlnbm1l
bnRNYXNrKSkgeworICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxl
T2YoYWxpZ25tZW50LCByYW5nZS5iZWdpbigpKSAtIHJhbmdlLmJlZ2luKCk7CisgICAgICAgIHN0
ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5zcGxpdChwcmVm
aXhTaXplKTsKKyAgICAgICAgcHJldiA9IHBhaXIuZmlyc3Q7CisgICAgICAgIHJhbmdlID0gcGFp
ci5zZWNvbmQ7CisgICAgfQorCisgICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUgPj0geExhcmdl
QWxpZ25tZW50KSB7CisgICAgICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRp
cGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKTsKKyAgICAgICAgc3RkOjpwYWlyPFhMYXJnZVJh
bmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KGFsaWduZWRTaXplKTsKKyAgICAg
ICAgcmFuZ2UgPSBwYWlyLmZpcnN0OworICAgICAgICBuZXh0ID0gcGFpci5zZWNvbmQ7CisgICAg
fQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFpbiBhbiB1bnVz
ZWQgdGFpbCBmcmFnbWVudC4gVGhpcyBpcworICAgIC8vIGNvbW1vbi4gV2UgY2FuJ3QgYWxsb2Nh
dGUgdGhlIHRhaWwgZnJhZ21lbnQgYmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVzcworICAgIC8v
IHRoYW4geExhcmdlQWxpZ25tZW50LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlvbiB3aXRoIGl0
cyB0YWlsIGZyYWdtZW50CisgICAgLy8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBUaGlzIGlzIGFu
IGltcG9ydGFudCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdAorICAgIC8vIGtlZXBzIHRoZSBmcmVl
IGxpc3Qgc2hvcnQsIHNwZWVkaW5nIHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcuCisKKyAgICBz
dGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSByYW5nZS5zcGxp
dChyb3VuZFVwVG9NdWx0aXBsZU9mPHZtUGFnZVNpemU+KHNpemUpKTsKKyAgICBpZiAoYWxsb2Nh
dGVkLmZpcnN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKKyAgICAgICAgdm1BbGxvY2F0ZVBo
eXNpY2FsUGFnZXNTbG9wcHkoYWxsb2NhdGVkLmZpcnN0LmJlZ2luKCksIGFsbG9jYXRlZC5maXJz
dC5zaXplKCkpOworICAgICAgICBhbGxvY2F0ZWQuZmlyc3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQ
aHlzaWNhbCk7CisgICAgfQorCisgICAgbV94TGFyZ2VNYXAuYWRkQWxsb2NhdGVkKHByZXYsIGFs
bG9jYXRlZCwgbmV4dCk7CisgICAgcmV0dXJuIGFsbG9jYXRlZC5maXJzdDsKK30KKwordm9pZCog
SGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIEJBU1NFUlQoaXNQb3dlck9mVHdv
KGFsaWdubWVudCkpOworICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4KTsKKworICAg
IG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOworCisgICAgYWxpZ25tZW50ID0gcm91bmRVcFRv
TXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVudCk7CisKKyAgICBYTGFyZ2VSYW5n
ZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VGcmVlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgaWYg
KCFyYW5nZSkgeworICAgICAgICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVkIG11bHRpcGxl
cyB0byBpbmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0CisgICAgICAgIC8vIHRoZSBPUyB3aWxsIHBy
b3ZpZGUgY29udGlndW91cyByYW5nZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCisgICAgICAgIHNpemVf
dCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXpl
KTsKKworICAgICAgICB2b2lkKiBiZWdpbiA9IHRyeVZNQWxsb2NhdGUoYWxpZ25tZW50LCBhbGln
bmVkU2l6ZSk7CisgICAgICAgIGlmICghYmVnaW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmFuZ2UgPSBYTGFyZ2VSYW5nZShiZWdpbiwgYWxpZ25lZFNpemUsIFZNU3Rh
dGU6OlZpcnR1YWwpOworICAgIH0KKworICAgIHJldHVybiBzcGxpdEFuZEFsbG9jYXRlKHJhbmdl
LCBhbGlnbm1lbnQsIHNpemUpLmJlZ2luKCk7Cit9CisKK3NpemVfdCBIZWFwOjp4TGFyZ2VTaXpl
KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQoreworICAgIHJl
dHVybiBtX3hMYXJnZU1hcC5nZXRBbGxvY2F0ZWQob2JqZWN0KS5zaXplKCk7Cit9CisKK3ZvaWQg
SGVhcDo6c2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3Qg
UmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQkFTU0VSVChvYmplY3Quc2l6
ZSgpID4gbmV3U2l6ZSk7CisKKyAgICBpZiAob2JqZWN0LnNpemUoKSAtIG5ld1NpemUgPCB2bVBh
Z2VTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgWExhcmdlUmFuZ2UgcmFuZ2UgPSBt
X3hMYXJnZU1hcC50YWtlQWxsb2NhdGVkKG9iamVjdC5iZWdpbigpKTsKKyAgICBzcGxpdEFuZEFs
bG9jYXRlKHJhbmdlLCB4TGFyZ2VBbGlnbm1lbnQsIG5ld1NpemUpOworCisgICAgbV9zY2F2ZW5n
ZXIucnVuKCk7Cit9CisKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZShzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKK3sKKyAgICBYTGFyZ2VSYW5nZSByYW5n
ZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKKyAgICBtX3hMYXJnZU1hcC5h
ZGRGcmVlKHJhbmdlKTsKKyAgICAKKyAgICBtX3NjYXZlbmdlci5ydW4oKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDE5NzE2
MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgi
CiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlTWFwLmgiCiAjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8bXV0ZXg+CiAKQEAgLTYxLDcgKzYyLDggQEAgcHVibGljOgogICAg
IHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlWExh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3QpOwotICAgIFJhbmdlJiBmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
Jiwgdm9pZCopOworICAgIHNpemVfdCB4TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+Jiwgdm9pZCopOworICAgIHZvaWQgc2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8
U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgdm9pZCBk
ZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOwog
CiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CkBAIC04MSwxMCArODMsMTMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG1lcmdlTGFyZ2UoQmVnaW5UYWcqJiwgRW5kVGFnKiYsIFJhbmdl
Jik7CiAgICAgdm9pZCBtZXJnZUxhcmdlTGVmdChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2Um
LCBib29sJiBpblZNSGVhcCk7CiAgICAgdm9pZCBtZXJnZUxhcmdlUmlnaHQoRW5kVGFnKiYsIEJl
Z2luVGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhlYXApOwotICAgIAorCisgICAgWExhcmdlUmFu
Z2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCk7CisKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgpOwogICAgIHZvaWQgc2NhdmVuZ2VT
bWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOworICAgIHZvaWQg
c2NhdmVuZ2VYTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAKICAgICBzdGQ6OmFycmF5PHN0ZDo6YXJyYXk8TGlu
ZU1ldGFkYXRhLCBzbWFsbExpbmVDb3VudD4sIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxs
TGluZU1ldGFkYXRhOwogCkBAIC05Myw3ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNt
YWxsUGFnZSo+IG1fc21hbGxQYWdlczsKIAogICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdCBtX2xhcmdl
T2JqZWN0czsKLSAgICBWZWN0b3I8UmFuZ2U+IG1feExhcmdlT2JqZWN0czsKKyAgICAKKyAgICBY
TGFyZ2VNYXAgbV94TGFyZ2VNYXA7CiAKICAgICBib29sIG1faXNBbGxvY2F0aW5nUGFnZXM7CiAg
ICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25jdXJyZW50U2NhdmVuZ2UpPiBt
X3NjYXZlbmdlcjsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgJKHJldmlz
aW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIGlubGluZSBMYXJnZU9iamVjdCBMYXJnZU9i
amVjdDo6bWVyZ2UoKSAKIAogaW5saW5lIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmpl
Y3Q+IExhcmdlT2JqZWN0OjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKIHsKKyAgICBCQVNTRVJU
KHNpemUgPD0gdGhpcy0+c2l6ZSgpKTsKICAgICBSYW5nZSBzcGxpdChiZWdpbigpLCBzaXplKTsK
ICAgICBSYW5nZSBsZWZ0b3ZlciA9IFJhbmdlKHNwbGl0LmVuZCgpLCB0aGlzLT5zaXplKCkgLSBz
aXplKTsKICAgICBCQVNTRVJUKGxlZnRvdmVyLnNpemUoKSA+PSBsYXJnZU1pbik7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgaW5saW5lIGJvb2wgaXNTbWFsbCh2b2lkKiBvYmplY3QpCiAKIGlubGluZSBib29sIGlz
WExhcmdlKHZvaWQqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCB+c3VwZXJD
aHVua01hc2spOworICAgIHJldHVybiAhdGVzdChvYmplY3QsIH54TGFyZ2VNYXNrKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUmFuZ2UuaAkocmV2aXNp
b24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9SYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJhbmdlX2gKICNkZWZpbmUgUmFuZ2VfaAog
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdGRkZWY+CiAKIG5hbWVzcGFjZSBi
bWFsbG9jIHsKQEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV9zaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuICEhKnRoaXM7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSYW5nZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gPCBvdGhlci5tX2JlZ2luOyB9CiAKIHByaXZhdGU6CkBA
IC01Niw2ICs1OCwxNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9OwogCitpbmxp
bmUgYm9vbCBjYW5NZXJnZShjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCit7CisgICAg
cmV0dXJuIGEuYmVnaW4oKSA9PSBiLmVuZCgpIHx8IGEuZW5kKCkgPT0gYi5iZWdpbigpOworfQor
CitpbmxpbmUgUmFuZ2UgbWVyZ2UoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdlJiBiKQorewor
ICAgIHJldHVybiBSYW5nZShzdGQ6Om1pbihhLmJlZ2luKCksIGIuYmVnaW4oKSksIGEuc2l6ZSgp
ICsgYi5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBS
YW5nZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzcz
LDggQEAgbmFtZXNwYWNlIFNpemVzIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1
bmtNZXRhZGF0YVNpemUgPSA0ICoga0I7IC8vIHNpemVvZihMYXJnZUNodW5rKQogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VNYXggPSBsYXJnZUNodW5rU2l6ZSAtIGxhcmdlQ2h1bmtNZXRh
ZGF0YVNpemU7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdubWVudCA9IHZt
UGFnZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1lbnQgPSBzdXBl
ckNodW5rU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sgPSB+KHhMYXJn
ZUFsaWdubWVudCAtIDEpOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWF4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVudDsgLy8gTWFr
ZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMgbm90IG92ZXJm
bG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERlcHRoID0gMTY7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU29ydGVkVmVjdG9yX2gKKyNkZWZpbmUgU29ydGVkVmVjdG9yX2gKKwor
I2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIGJt
YWxsb2MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgU29ydGVkVmVjdG9yIHsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUs
ICJTb3J0ZWRWZWN0b3IgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworCisgICAg
c3RydWN0IEJ1Y2tldCB7CisgICAgICAgIGV4cGxpY2l0IEJ1Y2tldChUIHZhbHVlKQorICAgICAg
ICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgICwgaXNEZWxldGVkKGZhbHNlKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjsKKyAgICAgICAgfQorCisgICAgICAgIFQgdmFsdWU7
CisgICAgICAgIGJvb2wgaXNEZWxldGVkOworICAgIH07CisKK3B1YmxpYzoKKyAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcihCdWNrZXQqIGJ1Y2tldCwg
QnVja2V0KiBlbmQpCisgICAgICAgICAgICA6IG1fYnVja2V0KGJ1Y2tldCkKKyAgICAgICAgICAg
ICwgbV9lbmQoZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBza2lwRGVsZXRlZEJ1Y2tldHMo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQkFTU0VSVChtX2J1Y2tldCAhPSBtX2VuZCk7CisgICAgICAgICAgICAr
K21fYnVja2V0OworICAgICAgICAgICAgc2tpcERlbGV0ZWRCdWNrZXRzKCk7CisgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWNr
ZXQgIT0gb3RoZXIubV9idWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcioo
KQorICAgICAgICB7CisgICAgICAgICAgICBCQVNTRVJUKG1fYnVja2V0IDwgbV9lbmQpOworICAg
ICAgICAgICAgQkFTU0VSVCghbV9idWNrZXQtPmlzRGVsZXRlZCk7CisgICAgICAgICAgICByZXR1
cm4gbV9idWNrZXQtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgVCogb3BlcmF0b3ItPigp
ICB7IHJldHVybiAmb3BlcmF0b3IqKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBTb3J0ZWRWZWN0b3I7CisKKyAgICAgICAgdm9pZCBza2lwRGVsZXRlZEJ1Y2tldHMo
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9idWNrZXQgIT0gbV9lbmQgJiYgbV9i
dWNrZXQtPmlzRGVsZXRlZCkKKyAgICAgICAgICAgICAgICArK21fYnVja2V0OworICAgICAgICB9
CisKKyAgICAgICAgQnVja2V0KiBtX2J1Y2tldDsKKyAgICAgICAgQnVja2V0KiBtX2VuZDsKKyAg
ICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcihtX3ZlY3Rvci5i
ZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBp
dGVyYXRvcihtX3ZlY3Rvci5lbmQoKSwgbV92ZWN0b3IuZW5kKCkpOyB9CisKKyAgICB2b2lkIGlu
c2VydChjb25zdCBUJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpdGVyYXRvciBmaW5k
KGNvbnN0IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBUIGdldChjb25zdCBVJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gVCB0YWtlKGNvbnN0IFUmKTsKKworICAgIHZvaWQgc2hy
aW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8QnVja2V0PiBtX3ZlY3RvcjsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFNvcnRlZFZlY3RvcjxUPjo6aW5zZXJ0KGNv
bnN0IFQmIHZhbHVlKQoreworICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fdmVjdG9y
LmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCB2YWx1ZSk7CisgICAgaWYgKGl0ICE9IG1fdmVjdG9y
LmVuZCgpICYmIGl0LT5pc0RlbGV0ZWQpIHsKKyAgICAgICAgKml0ID0gQnVja2V0KHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmVjdG9yLmluc2VydChpdCwgQnVja2V0
KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
Cit0eXBlbmFtZSBTb3J0ZWRWZWN0b3I8VD46Oml0ZXJhdG9yIFNvcnRlZFZlY3RvcjxUPjo6Zmlu
ZChjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3Zl
Y3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgdmFsdWUpOworICAgIHJldHVybiBpdGVyYXRv
cihpdCwgbV92ZWN0b3IuZW5kKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorVCBTb3J0ZWRWZWN0b3I8VD46OmdldChjb25zdCBVJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gKmZpbmQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorVCBTb3J0ZWRWZWN0b3I8VD46OnRha2UoY29uc3QgVSYgdmFsdWUp
Cit7CisgICAgYXV0byBpdCA9IGZpbmQodmFsdWUpOworICAgIGl0Lm1fYnVja2V0LT5pc0RlbGV0
ZWQgPSB0cnVlOworICAgIHJldHVybiBpdC5tX2J1Y2tldC0+dmFsdWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit2b2lkIFNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQoKQoreworICAg
IGF1dG8gaXNEZWxldGVkID0gW10oY29uc3QgQnVja2V0JiBidWNrZXQpIHsKKyAgICAgICAgcmV0
dXJuIGJ1Y2tldC5pc0RlbGV0ZWQ7CisgICAgfTsKKworICAgIGF1dG8gbmV3RW5kID0gc3RkOjpy
ZW1vdmVfaWYobV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIGlzRGVsZXRlZCk7Cisg
ICAgc2l6ZV90IG5ld1NpemUgPSBuZXdFbmQgLSBtX3ZlY3Rvci5iZWdpbigpOworICAgIG1fdmVj
dG9yLnNocmluayhuZXdTaXplKTsKKworICAgIG1fdmVjdG9yLnNocmlua1RvRml0KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIFNvcnRlZFZlY3Rvcl9oCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMTk3MTYxKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDI5
ICs4Miw2IEBAIGlubGluZSB2b2lkKiB0cnlWTUFsbG9jYXRlKHNpemVfdCB2bVNpemUKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgYm9vbCB0cnlWTUV4dGVuZCh2b2lkKiBwLCBzaXpl
X3Qgdm1PbGRTaXplLCBzaXplX3Qgdm1OZXdTaXplKQotewotICAgIHZtVmFsaWRhdGUodm1PbGRT
aXplKTsKLSAgICB2bVZhbGlkYXRlKHZtTmV3U2l6ZSk7Ci0gICAgCi0gICAgQkFTU0VSVCh2bU9s
ZFNpemUgPCB2bU5ld1NpemUpOwotCi0gICAgdm9pZCogbmV4dEFkZHJlc3MgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4ocCkgKyB2bU9sZFNpemU7Ci0gICAgc2l6ZV90IGV4dGVudGlvblNpemUgPSB2bU5l
d1NpemUgLSB2bU9sZFNpemU7Ci0KLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG5leHRBZGRyZXNz
LCBleHRlbnRpb25TaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCBCTUFMTE9DX1ZNX1RBRywgMCk7Ci0KLSAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlM
RUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZXN1bHQgIT0gbmV4dEFkZHJl
c3MpIHsKLSAgICAgICAgbXVubWFwKHJlc3VsdCwgZXh0ZW50aW9uU2l6ZSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSB2
b2lkKiB2bUFsbG9jYXRlKHNpemVfdCB2bVNpemUpCiB7CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5
Vk1BbGxvY2F0ZSh2bVNpemUpOwpAQCAtMTI2LDcgKzEwMyw3IEBAIGlubGluZSB2b2lkKiB0cnlW
TUFsbG9jYXRlKHNpemVfdCB2bUFsaWcKICAgICB2bVZhbGlkYXRlKHZtU2l6ZSk7CiAgICAgdm1W
YWxpZGF0ZSh2bUFsaWdubWVudCk7CiAKLSAgICBzaXplX3QgbWFwcGVkU2l6ZSA9IHN0ZDo6bWF4
KHZtU2l6ZSwgdm1BbGlnbm1lbnQpICsgdm1BbGlnbm1lbnQ7CisgICAgc2l6ZV90IG1hcHBlZFNp
emUgPSB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgKyB2bVNpemU7CiAgICAgY2hhciogbWFwcGVk
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHRyeVZNQWxsb2NhdGUobWFwcGVkU2l6ZSkpOwogICAgIGlm
ICghbWFwcGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzNSw2ICsxMTIsOCBAQCBp
bmxpbmUgdm9pZCogdHJ5Vk1BbGxvY2F0ZShzaXplX3Qgdm1BbGlnCiAgICAgY2hhciogYWxpZ25l
ZCA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1BbGlnbm1lbnQsIG1hcHBlZCk7CiAgICAgY2hhciog
YWxpZ25lZEVuZCA9IGFsaWduZWQgKyB2bVNpemU7CiAgICAgCisgICAgUkVMRUFTRV9CQVNTRVJU
KGFsaWduZWRFbmQgPD0gbWFwcGVkRW5kKTsKKyAgICAKICAgICBpZiAoc2l6ZV90IGxlZnRFeHRy
YSA9IGFsaWduZWQgLSBtYXBwZWQpCiAgICAgICAgIHZtRGVhbGxvY2F0ZShtYXBwZWQsIGxlZnRF
eHRyYSk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCShyZXZpc2lvbiAx
OTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDE1ICs0NywxNCBAQCB2b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKHN0
ZDo6bG9jCiAgICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKGl0KTsKIH0KIAotdm9pZCBWTUhlYXA6
OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQor
TGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaykKIHsKICAgICBpZiAoIW1fbGFyZ2VDaHVua3Muc2l6ZSgpKQogICAg
ICAgICBhbGxvY2F0ZVN1cGVyQ2h1bmsobG9jayk7CiAKICAgICAvLyBXZSBpbml0aWFsaXplIGNo
dW5rcyBsYXppbHkgdG8gYXZvaWQgZGlydHlpbmcgdGhlaXIgbWV0YWRhdGEgcGFnZXMuCiAgICAg
TGFyZ2VDaHVuayogbGFyZ2VDaHVuayA9IG5ldyAobV9sYXJnZUNodW5rcy5wb3AoKS0+bGFyZ2VD
aHVuaygpKSBMYXJnZUNodW5rOwotICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KGxhcmdlQ2h1
bmstPmJlZ2luKCkpOwotICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9iamVjdCk7Cisg
ICAgcmV0dXJuIExhcmdlT2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwogfQogCiB2b2lkIFZN
SGVhcDo6YWxsb2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQpJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwotICAgIHZvaWQgYWxsb2NhdGVMYXJnZUNodW5r
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKKyAgICBMYXJnZU9iamVjdCBhbGxvY2F0
ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgYWxs
b2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKIAogICAgIFZl
Y3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CkBAIC04NSwyNiArODUsMjAgQEAgaW5saW5l
IFNtYWxsUGFnZSogVk1IZWFwOjphbGxvY2F0ZVNtYWxsUAogCiBpbmxpbmUgTGFyZ2VPYmplY3Qg
Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
IGxvY2ssIHNpemVfdCBzaXplKQogewotICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9s
YXJnZU9iamVjdHMudGFrZShzaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KSB7Ci0gICAgICAg
IGFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX2xhcmdl
T2JqZWN0cy50YWtlKHNpemUpOwotICAgICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0KTsKLSAgICB9
CisgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShz
aXplKSkKKyAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogCi0gICAgcmV0dXJuIGxhcmdlT2Jq
ZWN0OworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7CisgICAgcmV0dXJuIGFsbG9jYXRl
TGFyZ2VDaHVuayhsb2NrKTsKIH0KIAogaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2Nh
dGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCiB7Ci0gICAgTGFy
Z2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6
ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkgewotICAgICAgICBhbGxv
Y2F0ZUxhcmdlQ2h1bmsobG9jayk7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVj
dHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgICAgICBCQVNTRVJU
KGxhcmdlT2JqZWN0KTsKLSAgICB9CisgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0g
bV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpKQorICAg
ICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAKLSAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CisgICAg
QkFTU0VSVCh1bmFsaWduZWRTaXplIDw9IGxhcmdlTWF4KTsKKyAgICByZXR1cm4gYWxsb2NhdGVM
YXJnZUNodW5rKGxvY2spOwogfQogCiBpbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVTbWFs
bFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIFNtYWxsUGFnZSogcGFn
ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsMTMgQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBtX3N0YXRlOwogfTsKIAoraW5saW5lIFZNU3Rh
dGUgbWVyZ2UoVk1TdGF0ZSBhLCBWTVN0YXRlIGIpCit7CisgICAgVk1TdGF0ZSByZXN1bHQoYSk7
CisgICAgcmVzdWx0Lm1lcmdlKGIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIGJtYWxsb2MKIAogI2VuZGlmIC8vIFZNU3RhdGVfaApJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1ZlY3Rvci5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Zl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGNsYXNzIFZlY3RvciB7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAiVmVjdG9yIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVz
dHJ1Y3Rvci4iKTsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7CisKICAgICBWZWN0b3IoY29uc3QgVmVjdG9yJikg
PSBkZWxldGU7CiAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJikgPSBkZWxldGU7
CiAKICAgICBWZWN0b3IoKTsKICAgICB+VmVjdG9yKCk7CiAKLSAgICBUKiBiZWdpbigpIHsgcmV0
dXJuIG1fYnVmZmVyOyB9Ci0gICAgVCogZW5kKCkgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7
IH0KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7IH0KIAogICAgIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgc2l6ZV90IGNhcGFjaXR5KCkgeyByZXR1cm4gbV9j
YXBhY2l0eTsgfQpAQCAtNTYsMTkgKzU5LDIzIEBAIHB1YmxpYzoKICAgICBUJiBsYXN0KCkgeyBy
ZXR1cm4gbV9idWZmZXJbbV9zaXplIC0gMV07IH0KIAogICAgIHZvaWQgcHVzaChjb25zdCBUJik7
Ci0gICAgdm9pZCBwdXNoKGNvbnN0IFQqLCBjb25zdCBUKik7CisKICAgICBUIHBvcCgpOwogICAg
IFQgcG9wKHNpemVfdCk7Ci0gICAgVCBwb3AoY29uc3QgVCogaXQpIHsgcmV0dXJuIHBvcChpdCAt
IGJlZ2luKCkpOyB9CisgICAgVCBwb3AoY29uc3RfaXRlcmF0b3IgaXQpIHsgcmV0dXJuIHBvcChp
dCAtIGJlZ2luKCkpOyB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0IFQm
KTsKIAogICAgIHZvaWQgc2hyaW5rKHNpemVfdCk7CiAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7
CisKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBncm93RmFjdG9yID0gMjsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNocmlua0ZhY3RvciA9IDQ7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gc2l6ZW9mKFQpOwogCi0gICAg
dm9pZCBncm93Q2FwYWNpdHkoc2l6ZV90IHNpemUpOworICAgIHZvaWQgZ3Jvd0NhcGFjaXR5KCk7
CiAgICAgdm9pZCBzaHJpbmtDYXBhY2l0eSgpOwogICAgIHZvaWQgcmVhbGxvY2F0ZUJ1ZmZlcihz
aXplX3QpOwogCkBAIC0xMDMsMjEgKzExMCwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogSU5M
SU5FIHZvaWQgVmVjdG9yPFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQogewogICAgIGlmIChtX3Np
emUgPT0gbV9jYXBhY2l0eSkKLSAgICAgICAgZ3Jvd0NhcGFjaXR5KG1fc2l6ZSk7CisgICAgICAg
IGdyb3dDYXBhY2l0eSgpOwogICAgIG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3QgVCogYmVnaW4s
IGNvbnN0IFQqIGVuZCkKLXsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIChlbmQgLSBi
ZWdpbik7Ci0gICAgaWYgKG5ld1NpemUgPiBtX2NhcGFjaXR5KQotICAgICAgICBncm93Q2FwYWNp
dHkobmV3U2l6ZSk7Ci0gICAgc3RkOjptZW1jcHkodGhpcy0+ZW5kKCksIGJlZ2luLCAoZW5kIC0g
YmVnaW4pICogc2l6ZW9mKFQpKTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQgVmVjdG9yPFQ+Ojpwb3AoKQogewogICAgIEJBU1NFUlQo
bV9zaXplKTsKQEAgLTEzNSw2ICsxMzIsMjAgQEAgaW5saW5lIFQgVmVjdG9yPFQ+Ojpwb3Aoc2l6
ZV90IGkpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFZlY3RvcjxUPjo6aW5zZXJ0
KGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBpdCAt
IGJlZ2luKCk7CisgICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0gaXQ7CisKKyAgICBpZiAo
bV9zaXplID09IG1fY2FwYWNpdHkpCisgICAgICAgIGdyb3dDYXBhY2l0eSgpOworCisgICAgc3Rk
OjptZW1tb3ZlKCZtX2J1ZmZlcltpbmRleCArIDFdLCAmbV9idWZmZXJbaW5kZXhdLCBtb3ZlQ291
bnQgKiBzaXplb2YoVCkpOworICAgIG1fYnVmZmVyW2luZGV4XSA9IHZhbHVlOworICAgIG1fc2l6
ZSsrOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHZvaWQgVmVjdG9yPFQ+Ojpz
aHJpbmsoc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChzaXplIDw9IG1fc2l6ZSk7CkBAIC0x
NDcsNyArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgVmVjdG9yPFQ+OjpyZWFs
bG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKICAgICBzaXplX3Qgdm1TaXplID0g
Ym1hbGxvYzo6dm1TaXplKG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpKTsKLSAgICBUKiBuZXdCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxUKj4odm1BbGxvY2F0ZSh2bVNpemUpKTsKKyAgICBUKiBuZXdCdWZm
ZXIgPSB2bVNpemUgPyBzdGF0aWNfY2FzdDxUKj4odm1BbGxvY2F0ZSh2bVNpemUpKSA6IG51bGxw
dHI7CiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIHN0ZDo6bWVtY3B5KG5ld0J1ZmZlciwg
bV9idWZmZXIsIG1fc2l6ZSAqIHNpemVvZihUKSk7CiAgICAgICAgIHZtRGVhbGxvY2F0ZShtX2J1
ZmZlciwgYm1hbGxvYzo6dm1TaXplKG1fY2FwYWNpdHkgKiBzaXplb2YoVCkpKTsKQEAgLTE2NSwx
MiArMTc2LDE5IEBAIE5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6c2hyaW5rQ2FwYWNpdHkKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0Nh
cGFjaXR5KHNpemVfdCBzaXplKQorTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpncm93Q2FwYWNp
dHkoKQogewotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChpbml0aWFsQ2FwYWNpdHksIHNp
emUgKiBncm93RmFjdG9yKTsKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtYXgoaW5pdGlhbENh
cGFjaXR5LCBtX3NpemUgKiBncm93RmFjdG9yKTsKICAgICByZWFsbG9jYXRlQnVmZmVyKG5ld0Nh
cGFjaXR5KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgVmVjdG9yPFQ+OjpzaHJp
bmtUb0ZpdCgpCit7CisgICAgaWYgKG1fc2l6ZSA8IG1fY2FwYWNpdHkpCisgICAgICAgIHJlYWxs
b2NhdGVCdWZmZXIobV9zaXplKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5k
aWYgLy8gVmVjdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlhMYXJnZU1hcC5oIgorCituYW1lc3BhY2UgYm1h
bGxvYyB7CisKK1hMYXJnZVJhbmdlIFhMYXJnZU1hcDo6dGFrZUZyZWUoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQg
LSAxOworCisgICAgWExhcmdlUmFuZ2UqIGNhbmRpZGF0ZSA9IG1fZnJlZS5lbmQoKTsKKyAgICBm
b3IgKFhMYXJnZVJhbmdlKiBpdCA9IG1fZnJlZS5iZWdpbigpOyBpdCAhPSBtX2ZyZWUuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zaXplKCkgPCBzaXplKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBtX2ZyZWUuZW5kKCkgJiYgY2FuZGlk
YXRlLT5iZWdpbigpIDwgaXQtPmJlZ2luKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBpZiAodGVzdChpdC0+YmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKKyAgICAgICAgICAg
IGNoYXIqIGFsaWduZWQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgaXQtPmJlZ2lu
KCkpOworICAgICAgICAgICAgaWYgKGFsaWduZWQgPCBpdC0+YmVnaW4oKSkgLy8gQ2hlY2sgZm9y
IG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjaGFy
KiBhbGlnbmVkRW5kID0gYWxpZ25lZCArIHNpemU7CisgICAgICAgICAgICBpZiAoYWxpZ25lZEVu
ZCA8IGFsaWduZWQpIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgaWYgKGFsaWduZWRFbmQgPiBpdC0+ZW5kKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjYW5kaWRhdGUgPSBpdDsK
KyAgICB9CisgICAgCisgICAgaWYgKGNhbmRpZGF0ZSA9PSBtX2ZyZWUuZW5kKCkpCisgICAgICAg
IHJldHVybiBYTGFyZ2VSYW5nZSgpOworCisgICAgcmV0dXJuIG1fZnJlZS5wb3AoY2FuZGlkYXRl
KTsKK30KKwordm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUoY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdl
KQoreworICAgIFhMYXJnZVJhbmdlIG1lcmdlZCA9IHJhbmdlOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgb3RoZXIgPSBt
X2ZyZWVbaV07CisKKyAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQsIG90aGVyKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1lcmdlZCA9IG1lcmdlKG1lcmdlZCwgbV9mcmVl
LnBvcChpLS0pKTsKKyAgICB9CisgICAgCisgICAgbV9mcmVlLnB1c2gobWVyZ2VkKTsKK30KKwor
dm9pZCBYTGFyZ2VNYXA6OmFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29u
c3Qgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mIGFsbG9jYXRlZCwgY29uc3Qg
WExhcmdlUmFuZ2UmIG5leHQpCit7CisgICAgaWYgKHByZXYpCisgICAgICAgIG1fZnJlZS5wdXNo
KHByZXYpOworICAgIAorICAgIGlmIChuZXh0KQorICAgICAgICBtX2ZyZWUucHVzaChuZXh0KTsK
KworICAgIG1fYWxsb2NhdGVkLmluc2VydCh7IGFsbG9jYXRlZC5maXJzdCwgYWxsb2NhdGVkLnNl
Y29uZCB9KTsKK30KKworWExhcmdlUmFuZ2UgWExhcmdlTWFwOjpnZXRBbGxvY2F0ZWQodm9pZCog
b2JqZWN0KQoreworICAgIHJldHVybiBtX2FsbG9jYXRlZC5maW5kKG9iamVjdCktPm9iamVjdDsK
K30KKworWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlQWxsb2NhdGVkKHZvaWQqIG9iamVjdCkK
K3sKKyAgICBBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSBtX2FsbG9jYXRlZC50YWtlKG9iamVjdCk7
CisgICAgcmV0dXJuIG1lcmdlKGFsbG9jYXRpb24ub2JqZWN0LCBhbGxvY2F0aW9uLnVudXNlZCk7
Cit9CisKK3ZvaWQgWExhcmdlTWFwOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9mcmVlLnNocmlu
a1RvRml0KCk7CisgICAgbV9hbGxvY2F0ZWQuc2hyaW5rVG9GaXQoKTsKK30KKworWExhcmdlUmFu
Z2UgWExhcmdlTWFwOjp0YWtlUGh5c2ljYWwoKSB7CisgICAgYXV0byBoYXNQaHlzaWNhbCA9IFtd
KGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkgeworICAgICAgICByZXR1cm4gcmFuZ2Uudm1TdGF0
ZSgpLmhhc1BoeXNpY2FsKCk7CisgICAgfTsKKworICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYo
bV9mcmVlLmJlZ2luKCksIG1fZnJlZS5lbmQoKSwgaGFzUGh5c2ljYWwpOworICAgIGlmIChpdCAh
PSBtX2ZyZWUuZW5kKCkpCisgICAgICAgIHJldHVybiBtX2ZyZWUucG9wKGl0KTsKKworICAgIGF1
dG8gaGFzVW51c2VkID0gW10oY29uc3QgQWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgeworICAgICAg
ICByZXR1cm4gYWxsb2NhdGlvbi51bnVzZWQgJiYgYWxsb2NhdGlvbi51bnVzZWQudm1TdGF0ZSgp
Lmhhc1BoeXNpY2FsKCk7CisgICAgfTsKKyAgICAKKyAgICBYTGFyZ2VSYW5nZSBzd2FwcGVkOwor
ICAgIGF1dG8gaXQyID0gc3RkOjpmaW5kX2lmKG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2Nh
dGVkLmVuZCgpLCBoYXNVbnVzZWQpOworICAgIGlmIChpdDIgIT0gbV9hbGxvY2F0ZWQuZW5kKCkp
CisgICAgICAgIHN0ZDo6c3dhcChpdDItPnVudXNlZCwgc3dhcHBlZCk7CisgICAgCisgICAgcmV0
dXJuIHN3YXBwZWQ7Cit9CisKK3ZvaWQgWExhcmdlTWFwOjphZGRWaXJ0dWFsKGNvbnN0IFhMYXJn
ZVJhbmdlJiByYW5nZSkKK3sKKyAgICBhdXRvIGNhbk1lcmdlID0gWyZyYW5nZV0oY29uc3QgQWxs
b2NhdGlvbiYgb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIG90aGVyLm9iamVjdC5lbmQoKSA9PSBy
YW5nZS5iZWdpbigpOworICAgIH07CisKKyAgICBpZiAocmFuZ2Uuc2l6ZSgpIDwgeExhcmdlQWxp
Z25tZW50KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gdW51c2VkIGZyYWdtZW50LCBzbyBpdCBt
aWdodCBiZWxvbmcgaW4gdGhlIGFsbG9jYXRlZCBsaXN0LgorICAgICAgICBhdXRvIGl0ID0gc3Rk
OjpmaW5kX2lmKG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgpLCBjYW5NZXJn
ZSk7CisgICAgICAgIGlmIChpdCAhPSBtX2FsbG9jYXRlZC5lbmQoKSkgeworICAgICAgICAgICAg
QkFTU0VSVCghaXQtPnVudXNlZCk7CisgICAgICAgICAgICBpdC0+dW51c2VkID0gcmFuZ2U7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBkaWRuJ3Qg
ZmluZCBhIG5laWdoYm9yIGluIHRoZSBhbGxvY2F0ZWQgbGlzdCwgb3VyIG5laWdoYm9yIG11c3QK
KyAgICAgICAgLy8gaGF2ZSBiZWVuIGZyZWVkLiBXZSdsbCBtZXJnZSB3aXRoIGl0IGJlbG93Lgor
ICAgIH0KKworICAgIGFkZEZyZWUocmFuZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBYTGFyZ2VNYXBfaAorI2RlZmluZSBYTGFyZ2VNYXBfaAorCisjaW5jbHVkZSAiU29ydGVk
VmVjdG9yLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlUmFuZ2UuaCIK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworY2xhc3MgWExh
cmdlTWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkZEZyZWUoY29uc3QgWExhcmdlUmFuZ2UmKTsK
KyAgICBYTGFyZ2VSYW5nZSB0YWtlRnJlZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworCisg
ICAgdm9pZCBhZGRBbGxvY2F0ZWQoY29uc3QgWExhcmdlUmFuZ2UmIHByZXYsIGNvbnN0IHN0ZDo6
cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+JiwgY29uc3QgWExhcmdlUmFuZ2UmIG5leHQp
OworICAgIFhMYXJnZVJhbmdlIGdldEFsbG9jYXRlZCh2b2lkKik7CisgICAgWExhcmdlUmFuZ2Ug
dGFrZUFsbG9jYXRlZCh2b2lkKik7CisKKyAgICBYTGFyZ2VSYW5nZSB0YWtlUGh5c2ljYWwoKTsK
KyAgICB2b2lkIGFkZFZpcnR1YWwoY29uc3QgWExhcmdlUmFuZ2UmKTsKKyAgICAKKyAgICB2b2lk
IHNocmlua1RvRml0KCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEFsbG9jYXRpb24geworICAg
ICAgICBib29sIG9wZXJhdG9yPChjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gb2JqZWN0IDwgb3RoZXIub2JqZWN0OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KHZvaWQq
IHB0cikgY29uc3QgeyByZXR1cm4gb2JqZWN0LmJlZ2luKCkgPCBwdHI7IH0KKworICAgICAgICBY
TGFyZ2VSYW5nZSBvYmplY3Q7CisgICAgICAgIFhMYXJnZVJhbmdlIHVudXNlZDsKKyAgICB9Owor
CisgICAgVmVjdG9yPFhMYXJnZVJhbmdlPiBtX2ZyZWU7CisgICAgU29ydGVkVmVjdG9yPEFsbG9j
YXRpb24+IG1fYWxsb2NhdGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5k
aWYgLy8gWExhcmdlTWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFu
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFhMYXJnZVJhbmdlX2gKKyNkZWZpbmUgWExhcmdl
UmFuZ2VfaAorCisjaW5jbHVkZSAiVk1TdGF0ZS5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisK
K2NsYXNzIFhMYXJnZVJhbmdlIDogcHVibGljIFJhbmdlIHsKK3B1YmxpYzoKKyAgICBYTGFyZ2VS
YW5nZSgpCisgICAgICAgIDogUmFuZ2UoKQorICAgICAgICAsIG1fdm1TdGF0ZShWTVN0YXRlOjpW
aXJ0dWFsKQorICAgIHsKKyAgICB9CisKKyAgICBYTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6
ZV90IHNpemUsIFZNU3RhdGUgdm1TdGF0ZSkKKyAgICAgICAgOiBSYW5nZShiZWdpbiwgc2l6ZSkK
KyAgICAgICAgLCBtX3ZtU3RhdGUodm1TdGF0ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZN
U3RhdGUgdm1TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm1TdGF0ZTsgfQorICAgIHZvaWQgc2V0
Vk1TdGF0ZShWTVN0YXRlIHZtU3RhdGUpIHsgbV92bVN0YXRlID0gdm1TdGF0ZTsgfQorCisgICAg
c3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gc3BsaXQoc2l6ZV90KSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBWTVN0YXRlIG1fdm1TdGF0ZTsKK307CisKK2lubGluZSBib29sIGNh
bk1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiBhLCBjb25zdCBYTGFyZ2VSYW5nZSYgYikKK3sKKyAg
ICBpZiAoYS5lbmQoKSA9PSBiLmJlZ2luKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIGlmIChiLmVuZCgpID09IGEuYmVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgWExhcmdlUmFuZ2UgbWVyZ2UoY29uc3Qg
WExhcmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQoreworICAgIHJldHVybiBYTGFy
Z2VSYW5nZSgKKyAgICAgICAgc3RkOjptaW4oYS5iZWdpbigpLCBiLmJlZ2luKCkpLAorICAgICAg
ICBhLnNpemUoKSArIGIuc2l6ZSgpLAorICAgICAgICBtZXJnZShhLnZtU3RhdGUoKSwgYi52bVN0
YXRlKCkpKTsKK30KKworaW5saW5lIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+
IFhMYXJnZVJhbmdlOjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICBCQVNTRVJUKHNp
emUgPD0gdGhpcy0+c2l6ZSgpKTsKKworICAgIFhMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgc2l6
ZSwgdm1TdGF0ZSgpKTsKKyAgICBYTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCB0aGlzLT5z
aXplKCkgLSBzaXplLCB2bVN0YXRlKCkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0
LCByaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIFhMYXJn
ZVJhbmdlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272309</attachid>
            <date>2016-02-25 23:48:58 -0800</date>
            <delta_ts>2016-02-26 00:12:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154720-20160225234840.patch</filename>
            <type>text/plain</type>
            <size>57417</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NyBAQAorMjAxNi0wMi0yNSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFkZGVkIGEg
ZmFzdCBYTGFyZ2UgYWxsb2NhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQ3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIGEgYmlnIHNwZWVkdXAgZm9yIFhMYXJnZSBhbGxvY2F0aW9u
cyBiZWNhdXNlIGl0IGF2b2lkcyBtbWFwCisgICAgICAgIGFuZCBwYWdlIGZhdWx0IGNodXJuLiBJ
dCBhbHNvIGVuYWJsZXMgZnV0dXJlIGRlc2lnbiBjaGFuZ2VzIHRvIGhhbmRsZQorICAgICAgICBh
IHNtYWxsZXIgc2l6ZSByYW5nZSBvbiB0aGUgZmFzdCBwYXRoLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0
aG0uaDoKKyAgICAgICAgKGJtYWxsb2M6OnJvdW5kVXBUb011bHRpcGxlT2YpOgorICAgICAgICAo
Ym1hbGxvYzo6cm91bmREb3duVG9NdWx0aXBsZU9mKTogQWRkZWQgYSBub24tY29uc3RhbnQgcm91
bmQgZG93bi4KKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJt
YWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBYTGFyZ2Ugbm8gbG9uZ2VyIHJlcXVpcmVz
IHRoZSBjYWxsZXIKKyAgICAgICAgdG8gYWxpZ24gdGhpbmdzLgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OmFsbG9jYXRlKTogVHdlYWtlZCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9u
IGZvcgorICAgICAgICBjbGFyaXR5LiBXaGVuIGFsaWdubWVudCBhbmQgbGFyZ2VBbGlnbm1lbnQg
YXJlIGVxdWFsLCBubyBhZGp1c3RtZW50CisgICAgICAgIGlzIG5lY2Vzc2FyeSBzaW5jZSBhbGwg
YWxsb2NhdGlvbnMgZ3VhcmFudGVlIGxhcmdlQWxpZ25tZW50LgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlLgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmV3IGludGVyZmFjZSBmaXhlcyBzb21lIGNvbmN1cnJl
bmN5IGJ1Z3MuIFRoZSBvbGQgY29kZQorICAgICAgICBrZXB0IGFuIGl0ZXJhdG9yIGludG8gdGhl
IFhMYXJnZSBhbGxvY2F0b3IgYWNyb3NzIGxvY2sgZHJvcCBhbmQgYWNxdWlzaXRpb24sCisgICAg
ICAgIHdoaWNoIGlzIG5vdCBjb29sLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFs
bG9jYXRlWExhcmdlKTogWExhcmdlIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgY2FsbGVyCisgICAg
ICAgIHRvIGFsaWduIHRoaW5ncy4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMpOiBBZGRlZCBzY2F2ZW5n
aW5nIGZvciBYTGFyZ2UuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlWExhcmdl
KToKKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6IFNwbGl0IFhM
YXJnZSBvYmplY3RzIHRvIHhMYXJnZUFsaWdubWVudC4KKworICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5QWxsb2NhdGVYTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6eExhcmdlU2l6
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtYTGFyZ2UpOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZSk6IEFsbG9jYXRlIGZyb20gb3VyIG1hcCBiZWZv
cmUgZ29pbmcKKyAgICAgICAgdG8gdGhlIE9TLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpm
aW5kWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAg
ICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6OnNwbGl0KToKKworICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgorICAgICAgICAo
Ym1hbGxvYzo6aXNYTGFyZ2UpOiBHaXZlIFhMYXJnZSBvYmplY3RzIGFuIGV4cGxpY2l0IGFsaWdu
bWVudCBmb3IgY2xhcml0eS4KKworICAgICAgICAqIGJtYWxsb2MvUmFuZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlJhbmdlOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlJhbmdlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoYm1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
Ym1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yPCk6CisgICAgICAgIChibWFsbG9jOjpjYW5NZXJnZSk6
CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6IFNvbWUgaGVscGVycyB0aGF0IHdlcmUgdXNlZnVs
IGluIHdyaXRpbmcgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvU2l6ZXMuaDoKKwor
ICAgICAgICAqIGJtYWxsb2MvU29ydGVkVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6U29ydGVkVmVjdG9yOjpCdWNrZXQ6OkJ1Y2tldCk6CisgICAgICAgIChibWFsbG9jOjpTb3J0
ZWRWZWN0b3I6OkJ1Y2tldDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZl
Y3Rvcjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3Rv
cjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6
Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yOjpp
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6Oml0
ZXJhdG9yOjpza2lwRGVsZXRlZEJ1Y2tldHMpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVj
dG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9j
OjpTb3J0ZWRWZWN0b3I8VD46OmZpbmQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
PFQ+OjpnZXQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yPFQ+Ojp0YWtlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQpOiBBIHNpbXBsZSBh
YnN0cmFjdGlvbiBmb3Iga2VlcGluZworICAgICAgICBhIHNvcnRlZCB2ZWN0b3IuIEluc2VydGlv
biBpcyBhdmVyYWdlIGFtb3J0aXplZCBsb2cobikgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgIGRl
bGV0ZWQgYnVja2V0cyB0aGF0IHdlIGNhbiByZXVzZS4KKworICAgICAgICBUaGlzIGlzIGJldHRl
ciB0aGFuIGEgdHJlZSBiZWNhdXNlIHdlIGdldCBiZXR0ZXIgbG9jYWxpdHksIGxlc3MgbWVtb3J5
CisgICAgICAgIHVzZSwgYW5kIHNpbXBsZXIgY29kZS4gQWxzbywgdHJlZXMgcmVxdWlyZSBhIG5v
ZGUgbWVtb3J5IGFsbG9jYXRvciwgYW5kCisgICAgICAgIGltcGxlbWVudGluZyBhIG1lbW9yeSBh
bGxvY2F0b3IgaW4gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vIGZ1bi4KKworICAgICAgICAqIGJt
YWxsb2MvVk1BbGxvY2F0ZS5oOgorICAgICAgICAoYm1hbGxvYzo6dHJ5Vk1BbGxvY2F0ZSk6IEZp
eGVkIGFuIGluYWNjdXJhY3kgaW4gdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbgorICAgICAgICBo
ZXJlLiBUaGlzIGNvZGUgd2FzIHNvcnQgb2YgdHJ5aW5nIHRvIGVuZm9yY2UgdGhlIGFsaWdubWVu
dCB0aGF0IHRoZQorICAgICAgICBYTGFyZ2UgYWxsb2NhdG9yIGVuZm9yY2VzIC0tIGJ1dCBpdCdz
IGJldHRlciB0byBlbmZvcmNlIHRoYXQgYWxpZ25tZW50CisgICAgICAgIHRoZXJlLgorCisgICAg
ICAgIFRoZSByaWdodCBjYWxjdWxhdGlvbiBpczoKKworICAgICAgICAgICAgdm1BbGlnbm1lbnQg
LSB2bVBhZ2VTaXplICsgdm1TaXplCisKKyAgICAgICAgYmVjYXVzZSB0aGUgd29yc3QgY2FzZSBp
cyB3aGVuIHlvdSBhcmUgYWxpZ25lZCB0byAwICsgdm1QYWdlU2l6ZSwgYW5kCisgICAgICAgIHlv
dSBtdXN0IHdhbGsgZm9yd2FyZCB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgdG8gcmVhY2ggdGhl
IG5leHQKKyAgICAgICAgdm1BbGlnbm1lbnQuCisKKyAgICAgICAgKGJtYWxsb2M6OnRyeVZNRXh0
ZW5kKTogRGVsZXRlZC4gTm8gbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBPUyBmb3IgVk0KKyAgICAg
ICAgc2luY2Ugd2UgbWFuYWdlIG91ciBvd24uCisKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5j
cHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayk6IFVwZGF0
ZWQgZm9yIGNsYXJpdHkuIFdoZW4gd2UKKyAgICAgICAgZ3JvdyB0aGUgbGFyZ2UgaGVhcCB3ZSBr
bm93IHRoYXQgZ3Jvd24gcmVnaW9uIGlzIHdoZXJlIHRoZSBuZXh0IGFsbG9jYXRpb24KKyAgICAg
ICAgd2lsbCB0YWtlIHBsYWNlLCBzbyB3ZSByZXR1cm4gaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBw
dXNoaW5nIGl0IHRvIHRoZQorICAgICAgICBmcmVlIGxpc3QuCisKKyAgICAgICAgVGhpcyBmaXhl
cyBhIHN1YnRsZSBidWcgd2hlcmUgYW4gb3Zlcmx5IGNvbnNlcnZhdGl2ZSBhbGlnbmVkIGFsbG9j
YXRpb24KKyAgICAgICAgYWxnb3JpdGhtIGNhbiBmYWlsIHRvIGFsbG9jYXRlIGF0IGFsbCB3aGVu
IGl0IGdyb3dzIHRoZSBoZWFwLgorCisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdCk6IERpdHRvLgorICAgICAg
ICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KTogRGl0dG8uCisKKyAgICAg
ICAgKiBibWFsbG9jL1ZNU3RhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6Om1lcmdlKTogQWRkZWQg
YSBoZWxwZXIuCisKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxv
Yzo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpWZWN0b3I6OnNpemUpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yOjpj
YXBhY2l0eSk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6Omxhc3QpOgorICAgICAgICAoYm1h
bGxvYzo6VmVjdG9yOjpwb3ApOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjpwdXNoKToK
KyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6cG9wKToKKyAgICAgICAgKGJtYWxsb2M6OlZl
Y3RvcjxUPjo6c2hyaW5rKTogVXNlIGEgcHJvcGVyIGl0ZXJhdG9yIEFQSSB0byBwbGF5IG5pY2UK
KyAgICAgICAgd2l0aCBzdGQgYWxnb3JpdGhtcy4KKworICAgICAgICAoYm1hbGxvYzo6VmVjdG9y
PFQ+OjppbnNlcnQpOiBOZXcgZnVuY3Rpb24gcmVxdWlyZWQgYnkgU29ydGVkVmVjdG9yLgorCisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAo
Ym1hbGxvYzo6VmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSk6IEFsbG93IGZvciBzaHJpbmtpbmcg
YmFjayBhbGwgdGhlIHdheQorICAgICAgICB0byAwIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2hyaW5r
VG9GaXQgd2FudHMuCisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnNocmlua1RvRml0KToKKworICAgICAgICAq
IGJtYWxsb2MvWExhcmdlTWFwLmNwcDogQWRkZWQuIEhlbHBlciBkYXRhIHN0cnVjdHVyZSBmb3Ig
bWFuYWdpbmcgWExhcmdlCisgICAgICAgIG9iamVjdHMuIFdlIGhhdmUgZW5vdWdoIGdyYW51bGFy
aXR5IGluIG91ciBtZXRhZGF0YSB0byByZXByZXNlbnQgYW55CisgICAgICAgIGtpbmQgb2YgYWRk
cmVzcyByYW5nZS4KKworICAgICAgICBXZSBzdG9yZSBmcmVlIHJhbmdlcyBpbiBhIGZsYXQgdmVj
dG9yIGJlY2F1c2UgbW9zdCBwcm9ncmFtcyBoYXZlIHZlcnkKKyAgICAgICAgZmV3IGluZGl2aWR1
YWwgZnJlZSBYTGFyZ2UgcmFuZ2VzLiAoVGhleSB1c3VhbGx5IG1lcmdlLikKKworICAgICAgICBX
ZSBzdG9yZSBhbGxvY2F0ZWQgcmFuZ2VzIGluIGEgc29ydGVkIHZlY3RvciBiZWNhdXNlIHByb2dy
YW1zIG1pZ2h0CisgICAgICAgIGFsbG9jYXRlIGxvdHMgb2YgWExhcmdlIHJhbmdlcy4gRm9yIGV4
YW1wbGUsIGlmIHRoZSBYTGFyZ2UgbWluaW11bSBpcworICAgICAgICAxMjhrQiwgYW5kIHlvdSBo
YXZlIGEgMUdCIHByb2Nlc3MsIHRoYXQncyA4MTkyIHJhbmdlcy4gTGluZWFyIHNjYW4gd291bGQK
KyAgICAgICAgZXhhbWluZSA4MTkyIGl0ZW1zIGJ1dCBiaW5hcnkgc2VhcmNoIG9ubHkgMTMuCisK
KyAgICAgICAgRW1waXJpY2FsbHksIHRoaXMgaXMgMS41WCBmYXN0ZXIgdGhhbiBvdXIgY3VycmVu
dCBsYXJnZSBhbGxvY2F0b3IgaWYgeW91CisgICAgICAgIG1vZGlmeSBNYWxsb2NCZW5jaC9iaWcg
dG8gYWxsb2NhdGUgWExhcmdlIG9iamVjdHMgYW5kIHlvdSBhbGxvY2F0ZQorICAgICAgICAxMjhr
Qi0yNTZrQiByYW5nZXMgaW4gYSAxR0IgYWRkcmVzcyBzcGFjZS4KKworICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjp0YWtlRnJlZSk6IEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgaW4gdGhp
cyBmdW5jdGlvbgorICAgICAgICBiZWNhdXNlIHdlIHN1cHBvcnQgc3VwZXIgaHVnZSBwb2ludGVy
cywgYWxpZ25tZW50cywgYW5kIHNpemVzLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OmFkZEZyZWUpOiBNZXJnZSBlYWdlcmx5IG9uIGZyZWUgYmVjYXVzZSB0aGUgY29zdAorICAgICAg
ICBvZiBtaXNzaW5nIGFuIFhMYXJnZSBvcHBvcnR1bml0eSBpcyBjYXRhc3Ryb3BoaWMsIGFuZCBi
ZWNhdXNlIGFueQorICAgICAgICBhbGxvY2F0b3IgdGhhdCBkb2Vzbid0IG1lcmdlIGVhZ2VybHkg
Y2FuIGNyZWF0ZSBsb3RzIG9mIG9wcG9ydHVuaXRpZXMKKyAgICAgICAgZm9yIHBhdGhvbG9naWNh
bCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZEFsbG9j
YXRlZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmdldEFsbG9jYXRlZCk6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQpOgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OnRha2VQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZFZpcnR1YWwp
OgorICAgICAgICAqIGJtYWxsb2MvWExhcmdlTWFwLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpBbGxvY2F0aW9uOjpvcGVyYXRvcjwpOgorCisgICAgICAgICogYm1hbGxv
Yy9YTGFyZ2VSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpY
TGFyZ2VSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6dm1TdGF0ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6c2V0Vk1TdGF0ZSk6CisgICAgICAgIChibWFs
bG9jOjpjYW5NZXJnZSk6CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6CisgICAgICAgIChibWFs
bG9jOjpYTGFyZ2VSYW5nZTo6c3BsaXQpOiBIZWxwZXIgZm9yIHRyYWNraW5nIFZNU3RhdGUgaW4g
YSByYW5nZS4KKwogMjAxNi0wMi0yMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtYY29kZV0gTGlua2VyIGVycm9ycyBkaXNwbGF5IG1hbmdsZWQgbmFtZXMsIGJ1
dCBubyBsb25nZXIgc2hvdWxkCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk3
MTYxKQorKysgU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDYgKzEzLDcgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvU2VncmVnYXRl
ZEZyZWVMaXN0LmNwcAogICAgIGJtYWxsb2MvU3RhdGljTXV0ZXguY3BwCiAgICAgYm1hbGxvYy9W
TUhlYXAuY3BwCisgICAgYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCiAgICAgYm1hbGxvYy9tYm1hbGxv
Yy5jcHAKICkKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw5IEBACiAJCTE0NDBBRkNEMUE5NTI3QUYwMDgzN0ZBQSAvKiBab25lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDBBRkNDMUE5NTI3QUYwMDgz
N0ZBQSAvKiBab25lLmNwcCAqLzsgfTsKIAkJMTQ0OEMzMDAxOEYzNzU0NjAwNTAyODM5IC8qIG1i
bWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NDhDMkZGMThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi87IH07CiAJCTE0NDhD
MzAxMThGMzc1NEMwMDUwMjgzOSAvKiBibWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRTE4RjM3NTQzMDA1MDI4MzkgLyogYm1hbGxv
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8q
IFhMYXJnZU1hcC5jcHAgKi87IH07CisJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFy
Z2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NEMwN0YzMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUg
LyogU29ydGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDYwNDFFNjFDN0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4OTVEOTExQTNB
MzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9u
bWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4OTVE
OTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDNjIxNkYxQTlBOUE2MjAwRTcyMjkzIC8q
IExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTIsNiArNTUsNyBAQAog
CQkxNERENzhDRTE4RjQ4RDc1MDA5NTA3MDIgLyogU3lzY2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8q
IFN5c2NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNERENzhDRjE4RjQ4RDc1MDA5NTA3MDIgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQg
LyogVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTRERDc4RDAxOEY0OEQ3NTAwOTUwNzAyIC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlFMjE0MTdBMUE2M0UwMDZE
NEU5RCAvKiBWTUFsbG9jYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMTRFQjc5RUExQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVCNzlFODFD
N0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NUY2ODU1MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuY3BwICovOyB9OwogCQkxNEYy
NzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTQxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hl
LmNwcCAqLzsgfTsKIAkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU5
MTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05Nyw2ICsxMDEs
OCBAQAogCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQZXJQcm9jZXNzLmg7IHBhdGggPSBibWFsbG9jL1Bl
clByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OEMyRkUxOEYzNzU0
MzAwNTAyODM5IC8qIGJtYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYm1hbGxvYy5oOyBwYXRoID0g
Ym1hbGxvYy9ibWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDhDMkZG
MThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBtYm1h
bGxvYy5jcHA7IHBhdGggPSBibWFsbG9jL21ibWFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBYTGFyZ2VNYXAuY3BwOyBwYXRoID0g
Ym1hbGxvYy9YTGFyZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRD
MDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFhMYXJnZU1hcC5oOyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11
dGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE11dGV4Lmg7IHBhdGggPSBi
bWFsbG9jL011dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NEY3QkZCMThC
RkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gVk1IZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWTUhlYXAuaDsgcGF0aCA9IGJtYWxs
b2MvVk1IZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDcsNiArMTEzLDcg
QEAKIAkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBEZWFsbG9jYXRvci5oOyBw
YXRoID0gYm1hbGxvYy9EZWFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xh
bmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJ
MTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNpemVzLmg7IHBhdGggPSBibWFsbG9jL1NpemVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gUmFuZ2UuaDsg
cGF0aCA9IGJtYWxsb2MvUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFn
ZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CisJCTE0NjA0
MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU29ydGVkVmVjdG9yLmg7IHBhdGggPSBibWFsbG9jL1NvcnRlZFZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1
QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QkVFMjExOEM4NDVBRTAwMDJE
NUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdh
dGVkRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc5RTIxMjE3
QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGlu
ZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9
IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTI4LDYgKzEzNSw3IEBACiAJCTE0RDlEQjQ1MTdG
MjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gRml4ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4
ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRp
b25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjBDMTg4NzVCMDkw
MDcyNjlFMCAvKiBIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXAu
aDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NERBMzIwRTE4ODc1RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBIZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFy
Z2VSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBYTGFyZ2VSYW5nZS5o
OyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKQEAgLTE1
OSw2ICsxNjcsMTYgQEAKIAkJCW5hbWUgPSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQkxNDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDRDMDdGMjFDN0I3
MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmNwcCAqLywKKwkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1
MUJCNkEgLyogWExhcmdlTWFwLmggKi8sCisJCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8q
IFhMYXJnZVJhbmdlLmggKi8sCisJCQkpOworCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE2Niw2ICsxODQs
NyBAQAogCQkJCTE0RDlEQjREMTdGMjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdB
QUE5QzE4Q0U2MDEwMDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENF
NUZEMzAwMjIwMUU0IC8qIGhlYXA6IHNtYWxsICovLAorCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUx
QkI2QSAvKiBoZWFwOiB4bGFyZ2UgKi8sCiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8q
IGhlYXAgKi8sCiAJCQkJMTREOURCNEYxN0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJ
CQkxNEI2NTBDNDE4RjM5RjQ4MDA3NTE5NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yNjgs
NiArMjg3LDcgQEAKIAkJCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5o
ICovLAogCQkJCTE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKIAkJ
CQkxNDVGNjg3ODE3OUUzQTQ0MDBENjU1OTggLyogUmFuZ2UuaCAqLywKKwkJCQkxNDYwNDFFNjFD
N0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi8sCiAJCQkJMTQzQ0I4MUExOTAyMkJD
OTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLywKIAkJCQkxNDNDQjgxQjE5MDIyQkM5MDBC
MTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLywKIAkJCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0Yg
LyogU3lzY2FsbC5oICovLApAQCAtMzExLDYgKzMzMSw3IEBACiAJCQkJMTRERDc4OTAxOEY0OENF
QjAwOTUwNzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNzE4RjQ4RDc1
MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4RDAxOEY0OEQ3
NTAwOTUwNzAyIC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RUI3OUVBMUM3
QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFG
QzkxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
M0VGOUIwMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4Q0UxOEY0OEQ3NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovLApAQCAt
MzI0LDcgKzM0NSw5IEBACiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxs
UGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJv
dW5kYXJ5VGFnLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUg
LyogU29ydGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5
NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NEMwN0Y1MUM3Qjcw
MjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDJDRDlCMUFB
MTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCQzE4
RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5
ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQxOCw2
ICs0NDEsNyBAQAogCQkJCTE0M0VGOUFGMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTE0NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzgxOEVBMzk5MDAwOEMxNTJGIC8qIE9i
amVjdFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJG
IC8qIERlYWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM0MThFQTM5N0Iw
MDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGdvcml0aG0uaAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDE2IEBAIHRlbXBsYXRl
PHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmwKICAgICByZXR1cm4gcm91bmRVcFRvTXVs
dGlwbGVPZihkaXZpc29yLCB4KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQg
cm91bmREb3duVG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29yLCBUIHgpCit7CisgICAgQkFTU0VS
VChpc1Bvd2VyT2ZUd28oZGl2aXNvcikpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+
KG1hc2socmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7
Cit9CisKIHRlbXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3Rl
eHByIFQgcm91bmREb3duVG9NdWx0aXBsZU9mKFQgeCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KGlz
UG93ZXJPZlR3byhkaXZpc29yKSwgIidkaXZpc29yJyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIp
OwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KG1hc2socmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7CisgICAgcmV0dXJuIHJvdW5kRG93blRv
TXVsdGlwbGVPZihkaXZpc29yLCB4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBk
aXZpZGVSb3VuZGluZ1VwKFQgbnVtZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90aWVudCwg
VCYgcmVtYWluZGVyKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IHNpemUKIAogICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCkgewogICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgo
KSk7Ci0gICAgICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT50cnlB
bGxvY2F0ZVhMYXJnZShsb2NrLCBzdXBlckNodW5rU2l6ZSwgcm91bmRVcFRvTXVsdGlwbGVPZjx4
TGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKKyAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPnRyeUFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1h
eCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VNYXgpIHsKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KGxh
cmdlTWluLCByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CiAgICAg
ICAgIGFsaWdubWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KGFsaWdu
bWVudCk7Ci0gICAgICAgIHNpemVfdCB1bmFsaWduZWRTaXplID0gbGFyZ2VNaW4gKyBhbGlnbm1l
bnQgKyBzaXplOworICAgICAgICBzaXplX3QgdW5hbGlnbmVkU2l6ZSA9IGxhcmdlTWluICsgYWxp
Z25tZW50IC0gbGFyZ2VBbGlnbm1lbnQgKyBzaXplOwogICAgICAgICBpZiAodW5hbGlnbmVkU2l6
ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VDaHVua1NpemUgLyAyKSB7CiAgICAg
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFw
Pjo6bXV0ZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNp
emUpOwpAQCAtOTgsOCArOTgsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lCiAgICAgfQogCiAgICAgaWYgKHNpemUgPD0geExhcmdlTWF4ICYmIGFsaWdubWVudCA8
PSB4TGFyZ2VNYXgpIHsKLSAgICAgICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdl
QWxpZ25tZW50PihzaXplKTsKLSAgICAgICAgYWxpZ25tZW50ID0gc3RkOjptYXgoc3VwZXJDaHVu
a1NpemUsIGFsaWdubWVudCk7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKICAgICAgICAgcmV0dXJuIFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwg
c2l6ZSk7CiAgICAgfQpAQCAtMTQ0LDM2ICsxNDIsMTUgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFs
bG9jYXRlKHZvaWQqIG9iamVjdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsK
LSAgICAgICAgUmFuZ2UmIHJhbmdlID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+
ZmluZFhMYXJnZShsb2NrLCBvYmplY3QpOwotICAgICAgICBvbGRTaXplID0gcmFuZ2Uuc2l6ZSgp
OwotCi0gICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVu
dD4obmV3U2l6ZSk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0
Q2FzZSgpLT54TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7CiAKICAgICAgICAgaWYgKG5ld1NpemUg
PT0gb2xkU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAgICAgaWYgKG5l
d1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewotICAgICAgICAgICAgbmV3
U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKLSAg
ICAgICAgICAgIGlmIChvbGRTaXplIC0gbmV3U2l6ZSA+PSB4TGFyZ2VBbGlnbm1lbnQpIHsKLSAg
ICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgIHZtRGVhbGxvY2F0
ZShzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIG5ld1NpemUsIG9sZFNpemUgLSBuZXdTaXpl
KTsKLSAgICAgICAgICAgICAgICBsb2NrLmxvY2soKTsKLQotICAgICAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2Uob2JqZWN0LCBuZXdTaXplKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBl
clByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hMYXJnZShsb2NrLCBSYW5nZShv
YmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAg
ICAgICAgIH0KLQotICAgICAgICBpZiAobmV3U2l6ZSA+IG9sZFNpemUpIHsKLSAgICAgICAgICAg
IGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBib29sIHdhc0V4dGVuZGVkID0gdHJ5Vk1FeHRl
bmQob2JqZWN0LCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwot
Ci0gICAgICAgICAgICBpZiAod2FzRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICByYW5nZSA9
IFJhbmdlKG9iamVjdCwgbmV3U2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpA
QCAtMjI5LDcgKzIwNiw2IEBAIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFy
Z2UKIAogTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNp
emUpCiB7Ci0gICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50Pihz
aXplKTsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxI
ZWFwPjo6bXV0ZXgoKSk7CiAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNl
KCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIHNpemUpOwogfQpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuY3BwCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uo
c3RkOjp1bmlxdWVfbG9jazxTdGEKIAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVl
cER1cmF0aW9uKTsKICAgICBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9u
KTsKKyAgICBzY2F2ZW5nZVhMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAg
ICBzbGVlcChsb2NrLCBzbGVlcER1cmF0aW9uKTsKIH0KQEAgLTEwNiw2ICsxMDcsMjIgQEAgdm9p
ZCBIZWFwOjpzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVuaQogICAgIH0KIH0KIAordm9pZCBI
ZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
IGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbikKK3sKKyAgICB3
aGlsZSAoWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlUGh5c2ljYWwoKSkgewor
ICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2Vz
U2xvcHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CisgICAgICAgIGxvY2subG9jaygp
OworICAgICAgICAKKyAgICAgICAgcmFuZ2Uuc2V0Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsK
KyAgICAgICAgbV94TGFyZ2VNYXAuYWRkVmlydHVhbChyYW5nZSk7CisKKyAgICAgICAgd2FpdFVu
dGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7CisgICAg
fQorCisgICAgbV94TGFyZ2VNYXAuc2hyaW5rVG9GaXQoKTsKK30KKwogdm9pZCBIZWFwOjphbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hl
JiByYW5nZUNhY2hlKQogewogICAgIEJBU1NFUlQoIXJhbmdlQ2FjaGUuc2l6ZSgpKTsKQEAgLTIw
Miw1MiArMjE5LDYgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9jawog
ICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBh
bGlnbm1lbnQsIHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0
ZVhMYXJnZShsb2NrLCBzdXBlckNodW5rU2l6ZSwgc2l6ZSk7Ci19Ci0KLXZvaWQqIEhlYXA6OnRy
eUFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1l
bnQpKTsKLSAgICBCQVNTRVJUKGFsaWdubWVudCA+PSBzdXBlckNodW5rU2l6ZSk7Ci0gICAgQkFT
U0VSVChzaXplID09IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKSk7
Ci0KLSAgICB2b2lkKiByZXN1bHQgPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIG1feExhcmdlT2Jq
ZWN0cy5wdXNoKFJhbmdlKHJlc3VsdCwgc2l6ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVJhbmdlJiBIZWFwOjpmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
dm9pZCogb2JqZWN0KQotewotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3hMYXJnZU9iamVjdHMp
IHsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgIT0gb2JqZWN0KQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0JBU1NF
UlQoZmFsc2UpOwotICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8UmFuZ2UqPihudWxscHRyKTsgLy8g
U2lsZW5jZSBjb21waWxlciBlcnJvci4KLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdl
KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCB2b2lkKiBvYmplY3QpCi17Ci0g
ICAgUmFuZ2UgdG9EZWFsbG9jYXRlID0gbV94TGFyZ2VPYmplY3RzLnBvcCgmZmluZFhMYXJnZShs
b2NrLCBvYmplY3QpKTsKLQotICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgdm1EZWFsbG9jYXRlKHRv
RGVhbGxvY2F0ZS5iZWdpbigpLCB0b0RlYWxsb2NhdGUuc2l6ZSgpKTsKLSAgICBsb2NrLmxvY2so
KTsKLX0KLQogaW5saW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKExhcmdl
T2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChsYXJnZU9i
amVjdC5pc0ZyZWUoKSk7CkBAIC0zNzIsNCArMzQzLDEwMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2Nh
dGVMYXJnZShzdGQ6OmxvY2tfZ3VhCiAgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2Jq
ZWN0KTsKIH0KIAordm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsK
KyAgICBSRUxFQVNFX0JBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBs
b2NrLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVYTGFyZ2UobG9jaywgYWxp
Z25tZW50LCBzaXplKTsKK30KKworWExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShY
TGFyZ2VSYW5nZSYgcmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAg
IFhMYXJnZVJhbmdlIHByZXY7CisgICAgWExhcmdlUmFuZ2UgbmV4dDsKKworICAgIHNpemVfdCBh
bGlnbm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKKyAgICBpZiAodGVzdChyYW5nZS5iZWdpbigp
LCBhbGlnbm1lbnRNYXNrKSkgeworICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25tZW50LCByYW5nZS5iZWdpbigpKSAtIHJhbmdlLmJlZ2luKCk7Cisg
ICAgICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5z
cGxpdChwcmVmaXhTaXplKTsKKyAgICAgICAgcHJldiA9IHBhaXIuZmlyc3Q7CisgICAgICAgIHJh
bmdlID0gcGFpci5zZWNvbmQ7CisgICAgfQorCisgICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUg
Pj0geExhcmdlQWxpZ25tZW50KSB7CisgICAgICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKTsKKyAgICAgICAgc3RkOjpwYWly
PFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KGFsaWduZWRTaXpl
KTsKKyAgICAgICAgcmFuZ2UgPSBwYWlyLmZpcnN0OworICAgICAgICBuZXh0ID0gcGFpci5zZWNv
bmQ7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFp
biBhbiB1bnVzZWQgdGFpbCBmcmFnbWVudC4gVGhpcyBpcworICAgIC8vIGNvbW1vbi4gV2UgY2Fu
J3QgYWxsb2NhdGUgdGhlIHRhaWwgZnJhZ21lbnQgYmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVz
cworICAgIC8vIHRoYW4geExhcmdlQWxpZ25tZW50LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlv
biB3aXRoIGl0cyB0YWlsIGZyYWdtZW50CisgICAgLy8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBU
aGlzIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdAorICAgIC8vIGtlZXBz
IHRoZSBmcmVlIGxpc3Qgc2hvcnQsIHNwZWVkaW5nIHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcu
CisKKyAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSBy
YW5nZS5zcGxpdChyb3VuZFVwVG9NdWx0aXBsZU9mPHZtUGFnZVNpemU+KHNpemUpKTsKKyAgICBp
ZiAoYWxsb2NhdGVkLmZpcnN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKKyAgICAgICAgdm1B
bGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkoYWxsb2NhdGVkLmZpcnN0LmJlZ2luKCksIGFsbG9j
YXRlZC5maXJzdC5zaXplKCkpOworICAgICAgICBhbGxvY2F0ZWQuZmlyc3Quc2V0Vk1TdGF0ZShW
TVN0YXRlOjpQaHlzaWNhbCk7CisgICAgfQorCisgICAgbV94TGFyZ2VNYXAuYWRkQWxsb2NhdGVk
KHByZXYsIGFsbG9jYXRlZCwgbmV4dCk7CisgICAgcmV0dXJuIGFsbG9jYXRlZC5maXJzdDsKK30K
Kwordm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIEJBU1NFUlQoaXNQ
b3dlck9mVHdvKGFsaWdubWVudCkpOworICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4
KTsKKworICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOworCisgICAgYWxpZ25tZW50ID0g
cm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVudCk7CisKKyAgICBY
TGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VGcmVlKGFsaWdubWVudCwgc2l6ZSk7
CisgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVk
IG11bHRpcGxlcyB0byBpbmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0CisgICAgICAgIC8vIHRoZSBP
UyB3aWxsIHByb3ZpZGUgY29udGlndW91cyByYW5nZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCisgICAg
ICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25t
ZW50PihzaXplKTsKKworICAgICAgICB2b2lkKiBiZWdpbiA9IHRyeVZNQWxsb2NhdGUoYWxpZ25t
ZW50LCBhbGlnbmVkU2l6ZSk7CisgICAgICAgIGlmICghYmVnaW4pCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmFuZ2UgPSBYTGFyZ2VSYW5nZShiZWdpbiwgYWxpZ25lZFNp
emUsIFZNU3RhdGU6OlZpcnR1YWwpOworICAgIH0KKworICAgIHJldHVybiBzcGxpdEFuZEFsbG9j
YXRlKHJhbmdlLCBhbGlnbm1lbnQsIHNpemUpLmJlZ2luKCk7Cit9CisKK3NpemVfdCBIZWFwOjp4
TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQor
eworICAgIHJldHVybiBtX3hMYXJnZU1hcC5nZXRBbGxvY2F0ZWQob2JqZWN0KS5zaXplKCk7Cit9
CisKK3ZvaWQgSGVhcDo6c2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
JiwgY29uc3QgUmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQkFTU0VSVChv
YmplY3Quc2l6ZSgpID4gbmV3U2l6ZSk7CisKKyAgICBpZiAob2JqZWN0LnNpemUoKSAtIG5ld1Np
emUgPCB2bVBhZ2VTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgWExhcmdlUmFuZ2Ug
cmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlQWxsb2NhdGVkKG9iamVjdC5iZWdpbigpKTsKKyAgICBz
cGxpdEFuZEFsbG9jYXRlKHJhbmdlLCB4TGFyZ2VBbGlnbm1lbnQsIG5ld1NpemUpOworCisgICAg
bV9zY2F2ZW5nZXIucnVuKCk7Cit9CisKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZShzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKK3sKKyAgICBYTGFyZ2VS
YW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKKyAgICBtX3hM
YXJnZU1hcC5hZGRGcmVlKHJhbmdlKTsKKyAgICAKKyAgICBtX3NjYXZlbmdlci5ydW4oKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlz
aW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSAi
Vk1IZWFwLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlTWFwLmgiCiAj
aW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bXV0ZXg+CiAKQEAgLTYxLDcgKzYyLDggQEAgcHVi
bGljOgogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHRyeUFs
bG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3QpOwotICAgIFJhbmdlJiBmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHNpemVfdCB4TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xv
Y2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHZvaWQgc2hyaW5rWExhcmdlKHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QgbmV3U2l6ZSk7CiAg
ICAgdm9pZCBkZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
dm9pZCopOwogCiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CkBAIC04MSwxMCAr
ODMsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlTGFyZ2UoQmVnaW5UYWcqJiwgRW5kVGFn
KiYsIFJhbmdlJik7CiAgICAgdm9pZCBtZXJnZUxhcmdlTGVmdChFbmRUYWcqJiwgQmVnaW5UYWcq
JiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CiAgICAgdm9pZCBtZXJnZUxhcmdlUmlnaHQoRW5k
VGFnKiYsIEJlZ2luVGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhlYXApOwotICAgIAorCisgICAg
WExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CisKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgpOwogICAgIHZvaWQg
c2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwor
ICAgIHZvaWQgc2NhdmVuZ2VYTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAKICAgICBzdGQ6OmFycmF5PHN0ZDo6
YXJyYXk8TGluZU1ldGFkYXRhLCBzbWFsbExpbmVDb3VudD4sIHNtYWxsTWF4IC8gYWxpZ25tZW50
PiBtX3NtYWxsTGluZU1ldGFkYXRhOwogCkBAIC05Myw3ICs5OCw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKIAogICAgIFNlZ3JlZ2F0ZWRGcmVlTGlz
dCBtX2xhcmdlT2JqZWN0czsKLSAgICBWZWN0b3I8UmFuZ2U+IG1feExhcmdlT2JqZWN0czsKKyAg
ICAKKyAgICBYTGFyZ2VNYXAgbV94TGFyZ2VNYXA7CiAKICAgICBib29sIG1faXNBbGxvY2F0aW5n
UGFnZXM7CiAgICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25jdXJyZW50U2Nh
dmVuZ2UpPiBtX3NjYXZlbmdlcjsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0
LmgJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIGlubGluZSBMYXJnZU9iamVj
dCBMYXJnZU9iamVjdDo6bWVyZ2UoKSAKIAogaW5saW5lIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwg
TGFyZ2VPYmplY3Q+IExhcmdlT2JqZWN0OjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKIHsKKyAg
ICBCQVNTRVJUKHNpemUgPD0gdGhpcy0+c2l6ZSgpKTsKICAgICBSYW5nZSBzcGxpdChiZWdpbigp
LCBzaXplKTsKICAgICBSYW5nZSBsZWZ0b3ZlciA9IFJhbmdlKHNwbGl0LmVuZCgpLCB0aGlzLT5z
aXplKCkgLSBzaXplKTsKICAgICBCQVNTRVJUKGxlZnRvdmVyLnNpemUoKSA+PSBsYXJnZU1pbik7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkocmV2aXNpb24gMTk3MTYxKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgaW5saW5lIGJvb2wgaXNTbWFsbCh2b2lkKiBvYmplY3QpCiAKIGlubGlu
ZSBib29sIGlzWExhcmdlKHZvaWQqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gIXRlc3Qob2JqZWN0
LCB+c3VwZXJDaHVua01hc2spOworICAgIHJldHVybiAhdGVzdChvYmplY3QsIH54TGFyZ2VNYXNr
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUmFuZ2Uu
aAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9SYW5nZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJhbmdlX2gKICNkZWZpbmUg
UmFuZ2VfaAogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdGRkZWY+CiAKIG5h
bWVzcGFjZSBibWFsbG9jIHsKQEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhKnRoaXM7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSYW5n
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gPCBvdGhlci5tX2JlZ2luOyB9CiAKIHBy
aXZhdGU6CkBAIC01Niw2ICs1OCwxNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9
OwogCitpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIp
Cit7CisgICAgcmV0dXJuIGEuYmVnaW4oKSA9PSBiLmVuZCgpIHx8IGEuZW5kKCkgPT0gYi5iZWdp
bigpOworfQorCitpbmxpbmUgUmFuZ2UgbWVyZ2UoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdl
JiBiKQoreworICAgIHJldHVybiBSYW5nZShzdGQ6Om1pbihhLmJlZ2luKCksIGIuYmVnaW4oKSks
IGEuc2l6ZSgpICsgYi5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNl
bmRpZiAvLyBSYW5nZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTcx
NjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDggQEAgbmFtZXNwYWNlIFNpemVzIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxhcmdlQ2h1bmtNZXRhZGF0YVNpemUgPSA0ICoga0I7IC8vIHNpemVvZihMYXJnZUNodW5rKQog
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNYXggPSBsYXJnZUNodW5rU2l6ZSAtIGxhcmdl
Q2h1bmtNZXRhZGF0YVNpemU7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdu
bWVudCA9IHZtUGFnZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1l
bnQgPSBzdXBlckNodW5rU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sg
PSB+KHhMYXJnZUFsaWdubWVudCAtIDEpOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdl
TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVu
dDsgLy8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMg
bm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERl
cHRoID0gMTY7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgU29ydGVkVmVjdG9yX2gKKyNkZWZpbmUgU29ydGVkVmVj
dG9yX2gKKworI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgU29ydGVkVmVj
dG9yIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxU
Pjo6dmFsdWUsICJTb3J0ZWRWZWN0b3IgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIp
OworCisgICAgc3RydWN0IEJ1Y2tldCB7CisgICAgICAgIGV4cGxpY2l0IEJ1Y2tldChUIHZhbHVl
KQorICAgICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgICwgaXNEZWxldGVkKGZh
bHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFUmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjsKKyAgICAgICAgfQorCisgICAgICAg
IFQgdmFsdWU7CisgICAgICAgIGJvb2wgaXNEZWxldGVkOworICAgIH07CisKK3B1YmxpYzoKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcihCdWNrZXQq
IGJ1Y2tldCwgQnVja2V0KiBlbmQpCisgICAgICAgICAgICA6IG1fYnVja2V0KGJ1Y2tldCkKKyAg
ICAgICAgICAgICwgbV9lbmQoZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBza2lwRGVsZXRl
ZEJ1Y2tldHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQkFTU0VSVChtX2J1Y2tldCAhPSBtX2VuZCk7CisgICAg
ICAgICAgICArK21fYnVja2V0OworICAgICAgICAgICAgc2tpcERlbGV0ZWRCdWNrZXRzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9idWNrZXQgIT0gb3RoZXIubV9idWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICBUJiBv
cGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICBCQVNTRVJUKG1fYnVja2V0IDwgbV9l
bmQpOworICAgICAgICAgICAgQkFTU0VSVCghbV9idWNrZXQtPmlzRGVsZXRlZCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9idWNrZXQtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgVCogb3Bl
cmF0b3ItPigpICB7IHJldHVybiAmb3BlcmF0b3IqKCk7IH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBTb3J0ZWRWZWN0b3I7CisKKyAgICAgICAgdm9pZCBza2lwRGVsZXRl
ZEJ1Y2tldHMoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9idWNrZXQgIT0gbV9l
bmQgJiYgbV9idWNrZXQtPmlzRGVsZXRlZCkKKyAgICAgICAgICAgICAgICArK21fYnVja2V0Owor
ICAgICAgICB9CisKKyAgICAgICAgQnVja2V0KiBtX2J1Y2tldDsKKyAgICAgICAgQnVja2V0KiBt
X2VuZDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciht
X3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBpdGVyYXRvcihtX3ZlY3Rvci5lbmQoKSwgbV92ZWN0b3IuZW5kKCkpOyB9CisKKyAg
ICB2b2lkIGluc2VydChjb25zdCBUJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpdGVy
YXRvciBmaW5kKGNvbnN0IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBUIGdldChjb25z
dCBVJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gVCB0YWtlKGNvbnN0IFUmKTsKKworICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8QnVja2V0PiBtX3Zl
Y3RvcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFNvcnRlZFZlY3RvcjxUPjo6
aW5zZXJ0KGNvbnN0IFQmIHZhbHVlKQoreworICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5k
KG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCB2YWx1ZSk7CisgICAgaWYgKGl0ICE9
IG1fdmVjdG9yLmVuZCgpICYmIGl0LT5pc0RlbGV0ZWQpIHsKKyAgICAgICAgKml0ID0gQnVja2V0
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmVjdG9yLmluc2VydChp
dCwgQnVja2V0KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5
cGVuYW1lIFU+Cit0eXBlbmFtZSBTb3J0ZWRWZWN0b3I8VD46Oml0ZXJhdG9yIFNvcnRlZFZlY3Rv
cjxUPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9i
b3VuZChtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgdmFsdWUpOworICAgIHJldHVy
biBpdGVyYXRvcihpdCwgbV92ZWN0b3IuZW5kKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorVCBTb3J0ZWRWZWN0b3I8VD46OmdldChjb25zdCBVJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gKmZpbmQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorVCBTb3J0ZWRWZWN0b3I8VD46OnRha2UoY29uc3Qg
VSYgdmFsdWUpCit7CisgICAgYXV0byBpdCA9IGZpbmQodmFsdWUpOworICAgIGl0Lm1fYnVja2V0
LT5pc0RlbGV0ZWQgPSB0cnVlOworICAgIHJldHVybiBpdC5tX2J1Y2tldC0+dmFsdWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQo
KQoreworICAgIGF1dG8gaXNEZWxldGVkID0gW10oY29uc3QgQnVja2V0JiBidWNrZXQpIHsKKyAg
ICAgICAgcmV0dXJuIGJ1Y2tldC5pc0RlbGV0ZWQ7CisgICAgfTsKKworICAgIGF1dG8gbmV3RW5k
ID0gc3RkOjpyZW1vdmVfaWYobV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIGlzRGVs
ZXRlZCk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdFbmQgLSBtX3ZlY3Rvci5iZWdpbigpOwor
ICAgIG1fdmVjdG9yLnNocmluayhuZXdTaXplKTsKKworICAgIG1fdmVjdG9yLnNocmlua1RvRml0
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIFNvcnRlZFZlY3Rv
cl9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMTk3MTYx
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDI5ICs4Miw2IEBAIGlubGluZSB2b2lkKiB0cnlWTUFsbG9jYXRlKHNpemVfdCB2bVNp
emUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgYm9vbCB0cnlWTUV4dGVuZCh2b2lk
KiBwLCBzaXplX3Qgdm1PbGRTaXplLCBzaXplX3Qgdm1OZXdTaXplKQotewotICAgIHZtVmFsaWRh
dGUodm1PbGRTaXplKTsKLSAgICB2bVZhbGlkYXRlKHZtTmV3U2l6ZSk7Ci0gICAgCi0gICAgQkFT
U0VSVCh2bU9sZFNpemUgPCB2bU5ld1NpemUpOwotCi0gICAgdm9pZCogbmV4dEFkZHJlc3MgPSBz
dGF0aWNfY2FzdDxjaGFyKj4ocCkgKyB2bU9sZFNpemU7Ci0gICAgc2l6ZV90IGV4dGVudGlvblNp
emUgPSB2bU5ld1NpemUgLSB2bU9sZFNpemU7Ci0KLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG5l
eHRBZGRyZXNzLCBleHRlbnRpb25TaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJ
VkFURSB8IE1BUF9BTk9OLCBCTUFMTE9DX1ZNX1RBRywgMCk7Ci0KLSAgICBpZiAocmVzdWx0ID09
IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZXN1bHQgIT0g
bmV4dEFkZHJlc3MpIHsKLSAgICAgICAgbXVubWFwKHJlc3VsdCwgZXh0ZW50aW9uU2l6ZSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IGlubGluZSB2b2lkKiB2bUFsbG9jYXRlKHNpemVfdCB2bVNpemUpCiB7CiAgICAgdm9pZCogcmVz
dWx0ID0gdHJ5Vk1BbGxvY2F0ZSh2bVNpemUpOwpAQCAtMTI2LDcgKzEwMyw3IEBAIGlubGluZSB2
b2lkKiB0cnlWTUFsbG9jYXRlKHNpemVfdCB2bUFsaWcKICAgICB2bVZhbGlkYXRlKHZtU2l6ZSk7
CiAgICAgdm1WYWxpZGF0ZSh2bUFsaWdubWVudCk7CiAKLSAgICBzaXplX3QgbWFwcGVkU2l6ZSA9
IHN0ZDo6bWF4KHZtU2l6ZSwgdm1BbGlnbm1lbnQpICsgdm1BbGlnbm1lbnQ7CisgICAgc2l6ZV90
IG1hcHBlZFNpemUgPSB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgKyB2bVNpemU7CiAgICAgY2hh
ciogbWFwcGVkID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHRyeVZNQWxsb2NhdGUobWFwcGVkU2l6ZSkp
OwogICAgIGlmICghbWFwcGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzNSw2ICsx
MTIsOCBAQCBpbmxpbmUgdm9pZCogdHJ5Vk1BbGxvY2F0ZShzaXplX3Qgdm1BbGlnCiAgICAgY2hh
ciogYWxpZ25lZCA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1BbGlnbm1lbnQsIG1hcHBlZCk7CiAg
ICAgY2hhciogYWxpZ25lZEVuZCA9IGFsaWduZWQgKyB2bVNpemU7CiAgICAgCisgICAgUkVMRUFT
RV9CQVNTRVJUKGFsaWduZWRFbmQgPD0gbWFwcGVkRW5kKTsKKyAgICAKICAgICBpZiAoc2l6ZV90
IGxlZnRFeHRyYSA9IGFsaWduZWQgLSBtYXBwZWQpCiAgICAgICAgIHZtRGVhbGxvY2F0ZShtYXBw
ZWQsIGxlZnRFeHRyYSk7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCShy
ZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDE1ICs0NywxNCBAQCB2b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKHN0ZDo6bG9jCiAgICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKGl0KTsKIH0KIAotdm9p
ZCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiBsb2NrKQorTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKIHsKICAgICBpZiAoIW1fbGFyZ2VDaHVua3Muc2l6
ZSgpKQogICAgICAgICBhbGxvY2F0ZVN1cGVyQ2h1bmsobG9jayk7CiAKICAgICAvLyBXZSBpbml0
aWFsaXplIGNodW5rcyBsYXppbHkgdG8gYXZvaWQgZGlydHlpbmcgdGhlaXIgbWV0YWRhdGEgcGFn
ZXMuCiAgICAgTGFyZ2VDaHVuayogbGFyZ2VDaHVuayA9IG5ldyAobV9sYXJnZUNodW5rcy5wb3Ao
KS0+bGFyZ2VDaHVuaygpKSBMYXJnZUNodW5rOwotICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0
KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwotICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9i
amVjdCk7CisgICAgcmV0dXJuIExhcmdlT2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwogfQog
CiB2b2lkIFZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTcxNjEpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxs
Q2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwotICAgIHZvaWQgYWxsb2NhdGVM
YXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKKyAgICBMYXJnZU9iamVj
dCBhbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAg
IHZvaWQgYWxsb2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsK
IAogICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CkBAIC04NSwyNiArODUsMjAg
QEAgaW5saW5lIFNtYWxsUGFnZSogVk1IZWFwOjphbGxvY2F0ZVNtYWxsUAogCiBpbmxpbmUgTGFy
Z2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQogewotICAgIExhcmdlT2JqZWN0IGxhcmdlT2Jq
ZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KSB7
Ci0gICAgICAgIGFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrKTsKLSAgICAgICAgbGFyZ2VPYmplY3Qg
PSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwotICAgICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0
KTsKLSAgICB9CisgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVj
dHMudGFrZShzaXplKSkKKyAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogCi0gICAgcmV0dXJu
IGxhcmdlT2JqZWN0OworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7CisgICAgcmV0dXJu
IGFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrKTsKIH0KIAogaW5saW5lIExhcmdlT2JqZWN0IFZNSGVh
cDo6YWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCiB7
Ci0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdu
bWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkgewotICAg
ICAgICBhbGxvY2F0ZUxhcmdlQ2h1bmsobG9jayk7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gbV9s
YXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgICAg
ICBCQVNTRVJUKGxhcmdlT2JqZWN0KTsKLSAgICB9CisgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdl
T2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNp
emUpKQorICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAKLSAgICByZXR1cm4gbGFyZ2VPYmpl
Y3Q7CisgICAgQkFTU0VSVCh1bmFsaWduZWRTaXplIDw9IGxhcmdlTWF4KTsKKyAgICByZXR1cm4g
YWxsb2NhdGVMYXJnZUNodW5rKGxvY2spOwogfQogCiBpbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxs
b2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIFNtYWxs
UGFnZSogcGFnZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCShyZXZpc2lvbiAxOTcx
NjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsMTMgQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBtX3N0YXRlOwogfTsKIAoraW5s
aW5lIFZNU3RhdGUgbWVyZ2UoVk1TdGF0ZSBhLCBWTVN0YXRlIGIpCit7CisgICAgVk1TdGF0ZSBy
ZXN1bHQoYSk7CisgICAgcmVzdWx0Lm1lcmdlKGIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAogI2VuZGlmIC8vIFZNU3RhdGVfaApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIGNsYXNzIFZlY3RvciB7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAiVmVjdG9yIG11c3QgaGF2ZSBhIHRy
aXZpYWwgZGVzdHJ1Y3Rvci4iKTsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7CisKICAgICBWZWN0b3IoY29uc3Qg
VmVjdG9yJikgPSBkZWxldGU7CiAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJikg
PSBkZWxldGU7CiAKICAgICBWZWN0b3IoKTsKICAgICB+VmVjdG9yKCk7CiAKLSAgICBUKiBiZWdp
bigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgVCogZW5kKCkgeyByZXR1cm4gbV9idWZmZXIg
KyBtX3NpemU7IH0KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7IH0KIAogICAgIHNp
emVfdCBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgc2l6ZV90IGNhcGFjaXR5KCkgeyBy
ZXR1cm4gbV9jYXBhY2l0eTsgfQpAQCAtNTYsMTkgKzU5LDIzIEBAIHB1YmxpYzoKICAgICBUJiBs
YXN0KCkgeyByZXR1cm4gbV9idWZmZXJbbV9zaXplIC0gMV07IH0KIAogICAgIHZvaWQgcHVzaChj
b25zdCBUJik7Ci0gICAgdm9pZCBwdXNoKGNvbnN0IFQqLCBjb25zdCBUKik7CisKICAgICBUIHBv
cCgpOwogICAgIFQgcG9wKHNpemVfdCk7Ci0gICAgVCBwb3AoY29uc3QgVCogaXQpIHsgcmV0dXJu
IHBvcChpdCAtIGJlZ2luKCkpOyB9CisgICAgVCBwb3AoY29uc3RfaXRlcmF0b3IgaXQpIHsgcmV0
dXJuIHBvcChpdCAtIGJlZ2luKCkpOyB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Is
IGNvbnN0IFQmKTsKIAogICAgIHZvaWQgc2hyaW5rKHNpemVfdCk7CiAKKyAgICB2b2lkIHNocmlu
a1RvRml0KCk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBncm93RmFjdG9y
ID0gMjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNocmlua0ZhY3RvciA9IDQ7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gc2l6ZW9mKFQp
OwogCi0gICAgdm9pZCBncm93Q2FwYWNpdHkoc2l6ZV90IHNpemUpOworICAgIHZvaWQgZ3Jvd0Nh
cGFjaXR5KCk7CiAgICAgdm9pZCBzaHJpbmtDYXBhY2l0eSgpOwogICAgIHZvaWQgcmVhbGxvY2F0
ZUJ1ZmZlcihzaXplX3QpOwogCkBAIC0xMDMsMjEgKzExMCwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQogewogICAg
IGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKLSAgICAgICAgZ3Jvd0NhcGFjaXR5KG1fc2l6ZSk7
CisgICAgICAgIGdyb3dDYXBhY2l0eSgpOwogICAgIG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVl
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3Qg
VCogYmVnaW4sIGNvbnN0IFQqIGVuZCkKLXsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSAr
IChlbmQgLSBiZWdpbik7Ci0gICAgaWYgKG5ld1NpemUgPiBtX2NhcGFjaXR5KQotICAgICAgICBn
cm93Q2FwYWNpdHkobmV3U2l6ZSk7Ci0gICAgc3RkOjptZW1jcHkodGhpcy0+ZW5kKCksIGJlZ2lu
LCAoZW5kIC0gYmVnaW4pICogc2l6ZW9mKFQpKTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQgVmVjdG9yPFQ+Ojpwb3AoKQogewogICAg
IEJBU1NFUlQobV9zaXplKTsKQEAgLTEzNSw2ICsxMzIsMjAgQEAgaW5saW5lIFQgVmVjdG9yPFQ+
Ojpwb3Aoc2l6ZV90IGkpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFZlY3RvcjxU
Pjo6aW5zZXJ0KGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgaW5k
ZXggPSBpdCAtIGJlZ2luKCk7CisgICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0gaXQ7CisK
KyAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCisgICAgICAgIGdyb3dDYXBhY2l0eSgpOwor
CisgICAgc3RkOjptZW1tb3ZlKCZtX2J1ZmZlcltpbmRleCArIDFdLCAmbV9idWZmZXJbaW5kZXhd
LCBtb3ZlQ291bnQgKiBzaXplb2YoVCkpOworICAgIG1fYnVmZmVyW2luZGV4XSA9IHZhbHVlOwor
ICAgIG1fc2l6ZSsrOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHZvaWQgVmVj
dG9yPFQ+OjpzaHJpbmsoc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChzaXplIDw9IG1fc2l6
ZSk7CkBAIC0xNDcsNyArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgVmVjdG9y
PFQ+OjpyZWFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKICAgICBzaXplX3Qg
dm1TaXplID0gYm1hbGxvYzo6dm1TaXplKG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpKTsKLSAgICBU
KiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4odm1BbGxvY2F0ZSh2bVNpemUpKTsKKyAgICBU
KiBuZXdCdWZmZXIgPSB2bVNpemUgPyBzdGF0aWNfY2FzdDxUKj4odm1BbGxvY2F0ZSh2bVNpemUp
KSA6IG51bGxwdHI7CiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIHN0ZDo6bWVtY3B5KG5l
d0J1ZmZlciwgbV9idWZmZXIsIG1fc2l6ZSAqIHNpemVvZihUKSk7CiAgICAgICAgIHZtRGVhbGxv
Y2F0ZShtX2J1ZmZlciwgYm1hbGxvYzo6dm1TaXplKG1fY2FwYWNpdHkgKiBzaXplb2YoVCkpKTsK
QEAgLTE2NSwxMiArMTc2LDE5IEBAIE5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6c2hyaW5rQ2Fw
YWNpdHkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSB2b2lkIFZlY3RvcjxU
Pjo6Z3Jvd0NhcGFjaXR5KHNpemVfdCBzaXplKQorTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpn
cm93Q2FwYWNpdHkoKQogewotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChpbml0aWFsQ2Fw
YWNpdHksIHNpemUgKiBncm93RmFjdG9yKTsKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtYXgo
aW5pdGlhbENhcGFjaXR5LCBtX3NpemUgKiBncm93RmFjdG9yKTsKICAgICByZWFsbG9jYXRlQnVm
ZmVyKG5ld0NhcGFjaXR5KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgVmVjdG9y
PFQ+OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgaWYgKG1fc2l6ZSA8IG1fY2FwYWNpdHkpCisgICAg
ICAgIHJlYWxsb2NhdGVCdWZmZXIobV9zaXplKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwogCiAjZW5kaWYgLy8gVmVjdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExh
cmdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1h
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlhMYXJnZU1hcC5oIgorCituYW1l
c3BhY2UgYm1hbGxvYyB7CisKK1hMYXJnZVJhbmdlIFhMYXJnZU1hcDo6dGFrZUZyZWUoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBh
bGlnbm1lbnQgLSAxOworCisgICAgWExhcmdlUmFuZ2UqIGNhbmRpZGF0ZSA9IG1fZnJlZS5lbmQo
KTsKKyAgICBmb3IgKFhMYXJnZVJhbmdlKiBpdCA9IG1fZnJlZS5iZWdpbigpOyBpdCAhPSBtX2Zy
ZWUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zaXplKCkgPCBzaXplKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBtX2ZyZWUuZW5kKCkg
JiYgY2FuZGlkYXRlLT5iZWdpbigpIDwgaXQtPmJlZ2luKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAodGVzdChpdC0+YmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKKyAg
ICAgICAgICAgIGNoYXIqIGFsaWduZWQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwg
aXQtPmJlZ2luKCkpOworICAgICAgICAgICAgaWYgKGFsaWduZWQgPCBpdC0+YmVnaW4oKSkgLy8g
Q2hlY2sgZm9yIG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBjaGFyKiBhbGlnbmVkRW5kID0gYWxpZ25lZCArIHNpemU7CisgICAgICAgICAgICBpZiAo
YWxpZ25lZEVuZCA8IGFsaWduZWQpIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGFsaWduZWRFbmQgPiBpdC0+ZW5kKCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjYW5kaWRh
dGUgPSBpdDsKKyAgICB9CisgICAgCisgICAgaWYgKGNhbmRpZGF0ZSA9PSBtX2ZyZWUuZW5kKCkp
CisgICAgICAgIHJldHVybiBYTGFyZ2VSYW5nZSgpOworCisgICAgcmV0dXJuIG1fZnJlZS5wb3Ao
Y2FuZGlkYXRlKTsKK30KKwordm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUoY29uc3QgWExhcmdlUmFu
Z2UmIHJhbmdlKQoreworICAgIFhMYXJnZVJhbmdlIG1lcmdlZCA9IHJhbmdlOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYg
b3RoZXIgPSBtX2ZyZWVbaV07CisKKyAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQsIG90aGVy
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1lcmdlZCA9IG1lcmdlKG1lcmdl
ZCwgbV9mcmVlLnBvcChpLS0pKTsKKyAgICB9CisgICAgCisgICAgbV9mcmVlLnB1c2gobWVyZ2Vk
KTsKK30KKwordm9pZCBYTGFyZ2VNYXA6OmFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYg
cHJldiwgY29uc3Qgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mIGFsbG9jYXRl
ZCwgY29uc3QgWExhcmdlUmFuZ2UmIG5leHQpCit7CisgICAgaWYgKHByZXYpCisgICAgICAgIG1f
ZnJlZS5wdXNoKHByZXYpOworICAgIAorICAgIGlmIChuZXh0KQorICAgICAgICBtX2ZyZWUucHVz
aChuZXh0KTsKKworICAgIG1fYWxsb2NhdGVkLmluc2VydCh7IGFsbG9jYXRlZC5maXJzdCwgYWxs
b2NhdGVkLnNlY29uZCB9KTsKK30KKworWExhcmdlUmFuZ2UgWExhcmdlTWFwOjpnZXRBbGxvY2F0
ZWQodm9pZCogb2JqZWN0KQoreworICAgIHJldHVybiBtX2FsbG9jYXRlZC5maW5kKG9iamVjdCkt
Pm9iamVjdDsKK30KKworWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlQWxsb2NhdGVkKHZvaWQq
IG9iamVjdCkKK3sKKyAgICBBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSBtX2FsbG9jYXRlZC50YWtl
KG9iamVjdCk7CisgICAgcmV0dXJuIG1lcmdlKGFsbG9jYXRpb24ub2JqZWN0LCBhbGxvY2F0aW9u
LnVudXNlZCk7Cit9CisKK3ZvaWQgWExhcmdlTWFwOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9m
cmVlLnNocmlua1RvRml0KCk7CisgICAgbV9hbGxvY2F0ZWQuc2hyaW5rVG9GaXQoKTsKK30KKwor
WExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlUGh5c2ljYWwoKSB7CisgICAgYXV0byBoYXNQaHlz
aWNhbCA9IFtdKGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkgeworICAgICAgICByZXR1cm4gcmFu
Z2Uudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7CisgICAgfTsKKworICAgIGF1dG8gaXQgPSBzdGQ6
OmZpbmRfaWYobV9mcmVlLmJlZ2luKCksIG1fZnJlZS5lbmQoKSwgaGFzUGh5c2ljYWwpOworICAg
IGlmIChpdCAhPSBtX2ZyZWUuZW5kKCkpCisgICAgICAgIHJldHVybiBtX2ZyZWUucG9wKGl0KTsK
KworICAgIGF1dG8gaGFzVW51c2VkID0gW10oY29uc3QgQWxsb2NhdGlvbiYgYWxsb2NhdGlvbikg
eworICAgICAgICByZXR1cm4gYWxsb2NhdGlvbi51bnVzZWQgJiYgYWxsb2NhdGlvbi51bnVzZWQu
dm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7CisgICAgfTsKKyAgICAKKyAgICBYTGFyZ2VSYW5nZSBz
d2FwcGVkOworICAgIGF1dG8gaXQyID0gc3RkOjpmaW5kX2lmKG1fYWxsb2NhdGVkLmJlZ2luKCks
IG1fYWxsb2NhdGVkLmVuZCgpLCBoYXNVbnVzZWQpOworICAgIGlmIChpdDIgIT0gbV9hbGxvY2F0
ZWQuZW5kKCkpCisgICAgICAgIHN0ZDo6c3dhcChpdDItPnVudXNlZCwgc3dhcHBlZCk7CisgICAg
CisgICAgcmV0dXJuIHN3YXBwZWQ7Cit9CisKK3ZvaWQgWExhcmdlTWFwOjphZGRWaXJ0dWFsKGNv
bnN0IFhMYXJnZVJhbmdlJiByYW5nZSkKK3sKKyAgICBhdXRvIGNhbk1lcmdlID0gWyZyYW5nZV0o
Y29uc3QgQWxsb2NhdGlvbiYgb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIG90aGVyLm9iamVjdC5l
bmQoKSA9PSByYW5nZS5iZWdpbigpOworICAgIH07CisKKyAgICBpZiAocmFuZ2Uuc2l6ZSgpIDwg
eExhcmdlQWxpZ25tZW50KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gdW51c2VkIGZyYWdtZW50
LCBzbyBpdCBtaWdodCBiZWxvbmcgaW4gdGhlIGFsbG9jYXRlZCBsaXN0LgorICAgICAgICBhdXRv
IGl0ID0gc3RkOjpmaW5kX2lmKG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgp
LCBjYW5NZXJnZSk7CisgICAgICAgIGlmIChpdCAhPSBtX2FsbG9jYXRlZC5lbmQoKSkgeworICAg
ICAgICAgICAgQkFTU0VSVCghaXQtPnVudXNlZCk7CisgICAgICAgICAgICBpdC0+dW51c2VkID0g
cmFuZ2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhIG5laWdoYm9yIGluIHRoZSBhbGxvY2F0ZWQgbGlzdCwgb3VyIG5laWdo
Ym9yIG11c3QKKyAgICAgICAgLy8gaGF2ZSBiZWVuIGZyZWVkLiBXZSdsbCBtZXJnZSB3aXRoIGl0
IGJlbG93LgorICAgIH0KKworICAgIGFkZEZyZWUocmFuZ2UpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBYTGFyZ2VNYXBfaAorI2RlZmluZSBYTGFyZ2VNYXBfaAorCisjaW5jbHVk
ZSAiU29ydGVkVmVjdG9yLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdl
UmFuZ2UuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKwor
Y2xhc3MgWExhcmdlTWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkZEZyZWUoY29uc3QgWExhcmdl
UmFuZ2UmKTsKKyAgICBYTGFyZ2VSYW5nZSB0YWtlRnJlZShzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3QpOworCisgICAgdm9pZCBhZGRBbGxvY2F0ZWQoY29uc3QgWExhcmdlUmFuZ2UmIHByZXYsIGNv
bnN0IHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+JiwgY29uc3QgWExhcmdlUmFu
Z2UmIG5leHQpOworICAgIFhMYXJnZVJhbmdlIGdldEFsbG9jYXRlZCh2b2lkKik7CisgICAgWExh
cmdlUmFuZ2UgdGFrZUFsbG9jYXRlZCh2b2lkKik7CisKKyAgICBYTGFyZ2VSYW5nZSB0YWtlUGh5
c2ljYWwoKTsKKyAgICB2b2lkIGFkZFZpcnR1YWwoY29uc3QgWExhcmdlUmFuZ2UmKTsKKyAgICAK
KyAgICB2b2lkIHNocmlua1RvRml0KCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEFsbG9jYXRp
b24geworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb2JqZWN0IDwgb3RoZXIub2JqZWN0OyB9CisgICAgICAgIGJvb2wgb3BlcmF0
b3I8KHZvaWQqIHB0cikgY29uc3QgeyByZXR1cm4gb2JqZWN0LmJlZ2luKCkgPCBwdHI7IH0KKwor
ICAgICAgICBYTGFyZ2VSYW5nZSBvYmplY3Q7CisgICAgICAgIFhMYXJnZVJhbmdlIHVudXNlZDsK
KyAgICB9OworCisgICAgVmVjdG9yPFhMYXJnZVJhbmdlPiBtX2ZyZWU7CisgICAgU29ydGVkVmVj
dG9yPEFsbG9jYXRpb24+IG1fYWxsb2NhdGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YworCisjZW5kaWYgLy8gWExhcmdlTWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
WExhcmdlUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJn
ZVJhbmdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJh
bmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFhMYXJnZVJhbmdlX2gKKyNkZWZp
bmUgWExhcmdlUmFuZ2VfaAorCisjaW5jbHVkZSAiVk1TdGF0ZS5oIgorCituYW1lc3BhY2UgYm1h
bGxvYyB7CisKK2NsYXNzIFhMYXJnZVJhbmdlIDogcHVibGljIFJhbmdlIHsKK3B1YmxpYzoKKyAg
ICBYTGFyZ2VSYW5nZSgpCisgICAgICAgIDogUmFuZ2UoKQorICAgICAgICAsIG1fdm1TdGF0ZShW
TVN0YXRlOjpWaXJ0dWFsKQorICAgIHsKKyAgICB9CisKKyAgICBYTGFyZ2VSYW5nZSh2b2lkKiBi
ZWdpbiwgc2l6ZV90IHNpemUsIFZNU3RhdGUgdm1TdGF0ZSkKKyAgICAgICAgOiBSYW5nZShiZWdp
biwgc2l6ZSkKKyAgICAgICAgLCBtX3ZtU3RhdGUodm1TdGF0ZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFZNU3RhdGUgdm1TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm1TdGF0ZTsgfQorICAg
IHZvaWQgc2V0Vk1TdGF0ZShWTVN0YXRlIHZtU3RhdGUpIHsgbV92bVN0YXRlID0gdm1TdGF0ZTsg
fQorCisgICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gc3BsaXQoc2l6ZV90
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWTVN0YXRlIG1fdm1TdGF0ZTsKK307CisKK2lubGlu
ZSBib29sIGNhbk1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiBhLCBjb25zdCBYTGFyZ2VSYW5nZSYg
YikKK3sKKyAgICBpZiAoYS5lbmQoKSA9PSBiLmJlZ2luKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIGlmIChiLmVuZCgpID09IGEuYmVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgWExhcmdlUmFuZ2UgbWVy
Z2UoY29uc3QgWExhcmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQoreworICAgIHJl
dHVybiBYTGFyZ2VSYW5nZSgKKyAgICAgICAgc3RkOjptaW4oYS5iZWdpbigpLCBiLmJlZ2luKCkp
LAorICAgICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAorICAgICAgICBtZXJnZShhLnZtU3RhdGUo
KSwgYi52bVN0YXRlKCkpKTsKK30KKworaW5saW5lIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExh
cmdlUmFuZ2U+IFhMYXJnZVJhbmdlOjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICBC
QVNTRVJUKHNpemUgPD0gdGhpcy0+c2l6ZSgpKTsKKworICAgIFhMYXJnZVJhbmdlIGxlZnQoYmVn
aW4oKSwgc2l6ZSwgdm1TdGF0ZSgpKTsKKyAgICBYTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgp
LCB0aGlzLT5zaXplKCkgLSBzaXplLCB2bVN0YXRlKCkpOworICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihsZWZ0LCByaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlm
IC8vIFhMYXJnZVJhbmdlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272311</attachid>
            <date>2016-02-26 00:13:01 -0800</date>
            <delta_ts>2016-02-26 08:21:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154720-20160226001244.patch</filename>
            <type>text/plain</type>
            <size>57617</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NyBAQAorMjAxNi0wMi0yNSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFkZGVkIGEg
ZmFzdCBYTGFyZ2UgYWxsb2NhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQ3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIGEgYmlnIHNwZWVkdXAgZm9yIFhMYXJnZSBhbGxvY2F0aW9u
cyBiZWNhdXNlIGl0IGF2b2lkcyBtbWFwCisgICAgICAgIGFuZCBwYWdlIGZhdWx0IGNodXJuLiBJ
dCBhbHNvIGVuYWJsZXMgZnV0dXJlIGRlc2lnbiBjaGFuZ2VzIHRvIGhhbmRsZQorICAgICAgICBh
IHNtYWxsZXIgc2l6ZSByYW5nZSBvbiB0aGUgZmFzdCBwYXRoLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0
aG0uaDoKKyAgICAgICAgKGJtYWxsb2M6OnJvdW5kVXBUb011bHRpcGxlT2YpOgorICAgICAgICAo
Ym1hbGxvYzo6cm91bmREb3duVG9NdWx0aXBsZU9mKTogQWRkZWQgYSBub24tY29uc3RhbnQgcm91
bmQgZG93bi4KKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJt
YWxsb2M6OkFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOiBYTGFyZ2Ugbm8gbG9uZ2VyIHJlcXVpcmVz
IHRoZSBjYWxsZXIKKyAgICAgICAgdG8gYWxpZ24gdGhpbmdzLgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OmFsbG9jYXRlKTogVHdlYWtlZCB0aGUgYWxpZ25tZW50IGNhbGN1bGF0aW9u
IGZvcgorICAgICAgICBjbGFyaXR5LiBXaGVuIGFsaWdubWVudCBhbmQgbGFyZ2VBbGlnbm1lbnQg
YXJlIGVxdWFsLCBubyBhZGp1c3RtZW50CisgICAgICAgIGlzIG5lY2Vzc2FyeSBzaW5jZSBhbGwg
YWxsb2NhdGlvbnMgZ3VhcmFudGVlIGxhcmdlQWxpZ25tZW50LgorCisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlLgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmV3IGludGVyZmFjZSBmaXhlcyBzb21lIGNvbmN1cnJl
bmN5IGJ1Z3MuIFRoZSBvbGQgY29kZQorICAgICAgICBrZXB0IGFuIGl0ZXJhdG9yIGludG8gdGhl
IFhMYXJnZSBhbGxvY2F0b3IgYWNyb3NzIGxvY2sgZHJvcCBhbmQgYWNxdWlzaXRpb24sCisgICAg
ICAgIHdoaWNoIGlzIG5vdCBjb29sLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFs
bG9jYXRlWExhcmdlKTogWExhcmdlIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgY2FsbGVyCisgICAg
ICAgIHRvIGFsaWduIHRoaW5ncy4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMpOiBBZGRlZCBzY2F2ZW5n
aW5nIGZvciBYTGFyZ2UuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlWExhcmdl
KToKKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6IFNwbGl0IFhM
YXJnZSBvYmplY3RzIHRvIHhMYXJnZUFsaWdubWVudC4KKworICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5QWxsb2NhdGVYTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6eExhcmdlU2l6
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtYTGFyZ2UpOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZSk6IEFsbG9jYXRlIGZyb20gb3VyIG1hcCBiZWZv
cmUgZ29pbmcKKyAgICAgICAgdG8gdGhlIE9TLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpm
aW5kWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAg
ICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6OnNwbGl0KToKKworICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgorICAgICAgICAo
Ym1hbGxvYzo6aXNYTGFyZ2UpOiBHaXZlIFhMYXJnZSBvYmplY3RzIGFuIGV4cGxpY2l0IGFsaWdu
bWVudCBmb3IgY2xhcml0eS4KKworICAgICAgICAqIGJtYWxsb2MvUmFuZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlJhbmdlOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlJhbmdlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoYm1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
Ym1hbGxvYzo6UmFuZ2U6Om9wZXJhdG9yPCk6CisgICAgICAgIChibWFsbG9jOjpjYW5NZXJnZSk6
CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6IFNvbWUgaGVscGVycyB0aGF0IHdlcmUgdXNlZnVs
IGluIHdyaXRpbmcgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvU2l6ZXMuaDoKKwor
ICAgICAgICAqIGJtYWxsb2MvU29ydGVkVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6U29ydGVkVmVjdG9yOjpCdWNrZXQ6OkJ1Y2tldCk6CisgICAgICAgIChibWFsbG9jOjpTb3J0
ZWRWZWN0b3I6OkJ1Y2tldDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZl
Y3Rvcjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3Rv
cjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6
Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yOjpp
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6Oml0
ZXJhdG9yOjpza2lwRGVsZXRlZEJ1Y2tldHMpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVj
dG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpTb3J0ZWRWZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9j
OjpTb3J0ZWRWZWN0b3I8VD46OmZpbmQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9y
PFQ+OjpnZXQpOgorICAgICAgICAoYm1hbGxvYzo6U29ydGVkVmVjdG9yPFQ+Ojp0YWtlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNvcnRlZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQpOiBBIHNpbXBsZSBh
YnN0cmFjdGlvbiBmb3Iga2VlcGluZworICAgICAgICBhIHNvcnRlZCB2ZWN0b3IuIEluc2VydGlv
biBpcyBhdmVyYWdlIGFtb3J0aXplZCBsb2cobikgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgIGRl
bGV0ZWQgYnVja2V0cyB0aGF0IHdlIGNhbiByZXVzZS4KKworICAgICAgICBUaGlzIGlzIGJldHRl
ciB0aGFuIGEgdHJlZSBiZWNhdXNlIHdlIGdldCBiZXR0ZXIgbG9jYWxpdHksIGxlc3MgbWVtb3J5
CisgICAgICAgIHVzZSwgYW5kIHNpbXBsZXIgY29kZS4gQWxzbywgdHJlZXMgcmVxdWlyZSBhIG5v
ZGUgbWVtb3J5IGFsbG9jYXRvciwgYW5kCisgICAgICAgIGltcGxlbWVudGluZyBhIG1lbW9yeSBh
bGxvY2F0b3IgaW4gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vIGZ1bi4KKworICAgICAgICAqIGJt
YWxsb2MvVk1BbGxvY2F0ZS5oOgorICAgICAgICAoYm1hbGxvYzo6dHJ5Vk1BbGxvY2F0ZSk6IEZp
eGVkIGFuIGluYWNjdXJhY3kgaW4gdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbgorICAgICAgICBo
ZXJlLiBUaGlzIGNvZGUgd2FzIHNvcnQgb2YgdHJ5aW5nIHRvIGVuZm9yY2UgdGhlIGFsaWdubWVu
dCB0aGF0IHRoZQorICAgICAgICBYTGFyZ2UgYWxsb2NhdG9yIGVuZm9yY2VzIC0tIGJ1dCBpdCdz
IGJldHRlciB0byBlbmZvcmNlIHRoYXQgYWxpZ25tZW50CisgICAgICAgIHRoZXJlLgorCisgICAg
ICAgIFRoZSByaWdodCBjYWxjdWxhdGlvbiBpczoKKworICAgICAgICAgICAgdm1BbGlnbm1lbnQg
LSB2bVBhZ2VTaXplICsgdm1TaXplCisKKyAgICAgICAgYmVjYXVzZSB0aGUgd29yc3QgY2FzZSBp
cyB3aGVuIHlvdSBhcmUgYWxpZ25lZCB0byAwICsgdm1QYWdlU2l6ZSwgYW5kCisgICAgICAgIHlv
dSBtdXN0IHdhbGsgZm9yd2FyZCB2bUFsaWdubWVudCAtIHZtUGFnZVNpemUgdG8gcmVhY2ggdGhl
IG5leHQKKyAgICAgICAgdm1BbGlnbm1lbnQuCisKKyAgICAgICAgKGJtYWxsb2M6OnRyeVZNRXh0
ZW5kKTogRGVsZXRlZC4gTm8gbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBPUyBmb3IgVk0KKyAgICAg
ICAgc2luY2Ugd2UgbWFuYWdlIG91ciBvd24uCisKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5j
cHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayk6IFVwZGF0
ZWQgZm9yIGNsYXJpdHkuIFdoZW4gd2UKKyAgICAgICAgZ3JvdyB0aGUgbGFyZ2UgaGVhcCB3ZSBr
bm93IHRoYXQgZ3Jvd24gcmVnaW9uIGlzIHdoZXJlIHRoZSBuZXh0IGFsbG9jYXRpb24KKyAgICAg
ICAgd2lsbCB0YWtlIHBsYWNlLCBzbyB3ZSByZXR1cm4gaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBw
dXNoaW5nIGl0IHRvIHRoZQorICAgICAgICBmcmVlIGxpc3QuCisKKyAgICAgICAgVGhpcyBmaXhl
cyBhIHN1YnRsZSBidWcgd2hlcmUgYW4gb3Zlcmx5IGNvbnNlcnZhdGl2ZSBhbGlnbmVkIGFsbG9j
YXRpb24KKyAgICAgICAgYWxnb3JpdGhtIGNhbiBmYWlsIHRvIGFsbG9jYXRlIGF0IGFsbCB3aGVu
IGl0IGdyb3dzIHRoZSBoZWFwLgorCisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdCk6IERpdHRvLgorICAgICAg
ICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KTogRGl0dG8uCisKKyAgICAg
ICAgKiBibWFsbG9jL1ZNU3RhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6Om1lcmdlKTogQWRkZWQg
YSBoZWxwZXIuCisKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxv
Yzo6VmVjdG9yOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpWZWN0b3I6OnNpemUpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yOjpj
YXBhY2l0eSk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I6Omxhc3QpOgorICAgICAgICAoYm1h
bGxvYzo6VmVjdG9yOjpwb3ApOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjpwdXNoKToK
KyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6cG9wKToKKyAgICAgICAgKGJtYWxsb2M6OlZl
Y3RvcjxUPjo6c2hyaW5rKTogVXNlIGEgcHJvcGVyIGl0ZXJhdG9yIEFQSSB0byBwbGF5IG5pY2UK
KyAgICAgICAgd2l0aCBzdGQgYWxnb3JpdGhtcy4KKworICAgICAgICAoYm1hbGxvYzo6VmVjdG9y
PFQ+OjppbnNlcnQpOiBOZXcgZnVuY3Rpb24gcmVxdWlyZWQgYnkgU29ydGVkVmVjdG9yLgorCisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAo
Ym1hbGxvYzo6VmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSk6IEFsbG93IGZvciBzaHJpbmtpbmcg
YmFjayBhbGwgdGhlIHdheQorICAgICAgICB0byAwIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2hyaW5r
VG9GaXQgd2FudHMuCisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnNocmlua1RvRml0KToKKworICAgICAgICAq
IGJtYWxsb2MvWExhcmdlTWFwLmNwcDogQWRkZWQuIEhlbHBlciBkYXRhIHN0cnVjdHVyZSBmb3Ig
bWFuYWdpbmcgWExhcmdlCisgICAgICAgIG9iamVjdHMuIFdlIGhhdmUgZW5vdWdoIGdyYW51bGFy
aXR5IGluIG91ciBtZXRhZGF0YSB0byByZXByZXNlbnQgYW55CisgICAgICAgIGtpbmQgb2YgYWRk
cmVzcyByYW5nZS4KKworICAgICAgICBXZSBzdG9yZSBmcmVlIHJhbmdlcyBpbiBhIGZsYXQgdmVj
dG9yIGJlY2F1c2UgbW9zdCBwcm9ncmFtcyBoYXZlIHZlcnkKKyAgICAgICAgZmV3IGluZGl2aWR1
YWwgZnJlZSBYTGFyZ2UgcmFuZ2VzLiAoVGhleSB1c3VhbGx5IG1lcmdlLikKKworICAgICAgICBX
ZSBzdG9yZSBhbGxvY2F0ZWQgcmFuZ2VzIGluIGEgc29ydGVkIHZlY3RvciBiZWNhdXNlIHByb2dy
YW1zIG1pZ2h0CisgICAgICAgIGFsbG9jYXRlIGxvdHMgb2YgWExhcmdlIHJhbmdlcy4gRm9yIGV4
YW1wbGUsIGlmIHRoZSBYTGFyZ2UgbWluaW11bSBpcworICAgICAgICAxMjhrQiwgYW5kIHlvdSBo
YXZlIGEgMUdCIHByb2Nlc3MsIHRoYXQncyA4MTkyIHJhbmdlcy4gTGluZWFyIHNjYW4gd291bGQK
KyAgICAgICAgZXhhbWluZSA4MTkyIGl0ZW1zIGJ1dCBiaW5hcnkgc2VhcmNoIG9ubHkgMTMuCisK
KyAgICAgICAgRW1waXJpY2FsbHksIHRoaXMgaXMgMS41WCBmYXN0ZXIgdGhhbiBvdXIgY3VycmVu
dCBsYXJnZSBhbGxvY2F0b3IgaWYgeW91CisgICAgICAgIG1vZGlmeSBNYWxsb2NCZW5jaC9iaWcg
dG8gYWxsb2NhdGUgWExhcmdlIG9iamVjdHMgYW5kIHlvdSBhbGxvY2F0ZQorICAgICAgICAxMjhr
Qi0yNTZrQiByYW5nZXMgaW4gYSAxR0IgYWRkcmVzcyBzcGFjZS4KKworICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjp0YWtlRnJlZSk6IEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgaW4gdGhp
cyBmdW5jdGlvbgorICAgICAgICBiZWNhdXNlIHdlIHN1cHBvcnQgc3VwZXIgaHVnZSBwb2ludGVy
cywgYWxpZ25tZW50cywgYW5kIHNpemVzLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OmFkZEZyZWUpOiBNZXJnZSBlYWdlcmx5IG9uIGZyZWUgYmVjYXVzZSB0aGUgY29zdAorICAgICAg
ICBvZiBtaXNzaW5nIGFuIFhMYXJnZSBvcHBvcnR1bml0eSBpcyBjYXRhc3Ryb3BoaWMsIGFuZCBi
ZWNhdXNlIGFueQorICAgICAgICBhbGxvY2F0b3IgdGhhdCBkb2Vzbid0IG1lcmdlIGVhZ2VybHkg
Y2FuIGNyZWF0ZSBsb3RzIG9mIG9wcG9ydHVuaXRpZXMKKyAgICAgICAgZm9yIHBhdGhvbG9naWNh
bCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZEFsbG9j
YXRlZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmdldEFsbG9jYXRlZCk6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQpOgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6
OnRha2VQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OmFkZFZpcnR1YWwp
OgorICAgICAgICAqIGJtYWxsb2MvWExhcmdlTWFwLmg6IEFkZGVkLgorICAgICAgICAoYm1hbGxv
Yzo6WExhcmdlTWFwOjpBbGxvY2F0aW9uOjpvcGVyYXRvcjwpOgorCisgICAgICAgICogYm1hbGxv
Yy9YTGFyZ2VSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpY
TGFyZ2VSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6dm1TdGF0ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpYTGFyZ2VSYW5nZTo6c2V0Vk1TdGF0ZSk6CisgICAgICAgIChibWFs
bG9jOjpjYW5NZXJnZSk6CisgICAgICAgIChibWFsbG9jOjptZXJnZSk6CisgICAgICAgIChibWFs
bG9jOjpYTGFyZ2VSYW5nZTo6c3BsaXQpOiBIZWxwZXIgZm9yIHRyYWNraW5nIFZNU3RhdGUgaW4g
YSByYW5nZS4KKwogMjAxNi0wMi0yMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtYY29kZV0gTGlua2VyIGVycm9ycyBkaXNwbGF5IG1hbmdsZWQgbmFtZXMsIGJ1
dCBubyBsb25nZXIgc2hvdWxkCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk3
MTYxKQorKysgU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDYgKzEzLDcgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvU2VncmVnYXRl
ZEZyZWVMaXN0LmNwcAogICAgIGJtYWxsb2MvU3RhdGljTXV0ZXguY3BwCiAgICAgYm1hbGxvYy9W
TUhlYXAuY3BwCisgICAgYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCiAgICAgYm1hbGxvYy9tYm1hbGxv
Yy5jcHAKICkKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw5IEBACiAJCTE0NDBBRkNEMUE5NTI3QUYwMDgzN0ZBQSAvKiBab25lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDBBRkNDMUE5NTI3QUYwMDgz
N0ZBQSAvKiBab25lLmNwcCAqLzsgfTsKIAkJMTQ0OEMzMDAxOEYzNzU0NjAwNTAyODM5IC8qIG1i
bWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NDhDMkZGMThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi87IH07CiAJCTE0NDhD
MzAxMThGMzc1NEMwMDUwMjgzOSAvKiBibWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRTE4RjM3NTQzMDA1MDI4MzkgLyogYm1hbGxv
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0
NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8q
IFhMYXJnZU1hcC5jcHAgKi87IH07CisJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFy
Z2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NEMwN0YzMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUg
LyogU29ydGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDYwNDFFNjFDN0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4OTVEOTExQTNB
MzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9u
bWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4OTVE
OTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDNjIxNkYxQTlBOUE2MjAwRTcyMjkzIC8q
IExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTIsNiArNTUsNyBAQAog
CQkxNERENzhDRTE4RjQ4RDc1MDA5NTA3MDIgLyogU3lzY2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8q
IFN5c2NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNERENzhDRjE4RjQ4RDc1MDA5NTA3MDIgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQg
LyogVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTRERDc4RDAxOEY0OEQ3NTAwOTUwNzAyIC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlFMjE0MTdBMUE2M0UwMDZE
NEU5RCAvKiBWTUFsbG9jYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMTRFQjc5RUExQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVCNzlFODFD
N0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NUY2ODU1MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuY3BwICovOyB9OwogCQkxNEYy
NzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTQxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hl
LmNwcCAqLzsgfTsKIAkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU5
MTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05Nyw2ICsxMDEs
OCBAQAogCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQZXJQcm9jZXNzLmg7IHBhdGggPSBibWFsbG9jL1Bl
clByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OEMyRkUxOEYzNzU0
MzAwNTAyODM5IC8qIGJtYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYm1hbGxvYy5oOyBwYXRoID0g
Ym1hbGxvYy9ibWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDhDMkZG
MThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBtYm1h
bGxvYy5jcHA7IHBhdGggPSBibWFsbG9jL21ibWFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBYTGFyZ2VNYXAuY3BwOyBwYXRoID0g
Ym1hbGxvYy9YTGFyZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDRD
MDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFhMYXJnZU1hcC5oOyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11
dGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE11dGV4Lmg7IHBhdGggPSBi
bWFsbG9jL011dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NEY3QkZCMThC
RkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gVk1IZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWTUhlYXAuaDsgcGF0aCA9IGJtYWxs
b2MvVk1IZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDcsNiArMTEzLDcg
QEAKIAkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBEZWFsbG9jYXRvci5oOyBw
YXRoID0gYm1hbGxvYy9EZWFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xh
bmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJ
MTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNpemVzLmg7IHBhdGggPSBibWFsbG9jL1NpemVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gUmFuZ2UuaDsg
cGF0aCA9IGJtYWxsb2MvUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFn
ZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CisJCTE0NjA0
MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU29ydGVkVmVjdG9yLmg7IHBhdGggPSBibWFsbG9jL1NvcnRlZFZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1
QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2QkVFMjExOEM4NDVBRTAwMDJE
NUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdh
dGVkRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc5RTIxMjE3
QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGlu
ZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9
IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTI4LDYgKzEzNSw3IEBACiAJCTE0RDlEQjQ1MTdG
MjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gRml4ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4
ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRp
b25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjBDMTg4NzVCMDkw
MDcyNjlFMCAvKiBIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXAu
aDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NERBMzIwRTE4ODc1RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBIZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFy
Z2VSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBYTGFyZ2VSYW5nZS5o
OyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKQEAgLTE1
OSw2ICsxNjcsMTYgQEAKIAkJCW5hbWUgPSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQkxNDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDRDMDdGMjFDN0I3
MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmNwcCAqLywKKwkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1
MUJCNkEgLyogWExhcmdlTWFwLmggKi8sCisJCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8q
IFhMYXJnZVJhbmdlLmggKi8sCisJCQkpOworCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE2Niw2ICsxODQs
NyBAQAogCQkJCTE0RDlEQjREMTdGMjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdB
QUE5QzE4Q0U2MDEwMDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENF
NUZEMzAwMjIwMUU0IC8qIGhlYXA6IHNtYWxsICovLAorCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUx
QkI2QSAvKiBoZWFwOiB4bGFyZ2UgKi8sCiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8q
IGhlYXAgKi8sCiAJCQkJMTREOURCNEYxN0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJ
CQkxNEI2NTBDNDE4RjM5RjQ4MDA3NTE5NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yNjgs
NiArMjg3LDcgQEAKIAkJCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5o
ICovLAogCQkJCTE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKIAkJ
CQkxNDVGNjg3ODE3OUUzQTQ0MDBENjU1OTggLyogUmFuZ2UuaCAqLywKKwkJCQkxNDYwNDFFNjFD
N0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi8sCiAJCQkJMTQzQ0I4MUExOTAyMkJD
OTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLywKIAkJCQkxNDNDQjgxQjE5MDIyQkM5MDBC
MTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLywKIAkJCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0Yg
LyogU3lzY2FsbC5oICovLApAQCAtMzExLDYgKzMzMSw3IEBACiAJCQkJMTRERDc4OTAxOEY0OENF
QjAwOTUwNzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNzE4RjQ4RDc1
MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4RDAxOEY0OEQ3
NTAwOTUwNzAyIC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RUI3OUVBMUM3
QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFG
QzkxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
M0VGOUIwMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4Q0UxOEY0OEQ3NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovLApAQCAt
MzI0LDcgKzM0NSw5IEBACiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxs
UGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJv
dW5kYXJ5VGFnLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUg
LyogU29ydGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5
NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NEMwN0Y1MUM3Qjcw
MjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDJDRDlCMUFB
MTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCQzE4
RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5
ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQxOCw2
ICs0NDEsNyBAQAogCQkJCTE0M0VGOUFGMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTE0NEMwN0Y0MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzgxOEVBMzk5MDAwOEMxNTJGIC8qIE9i
amVjdFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJG
IC8qIERlYWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM0MThFQTM5N0Iw
MDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGdvcml0aG0uaAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDE2IEBAIHRlbXBsYXRl
PHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmwKICAgICByZXR1cm4gcm91bmRVcFRvTXVs
dGlwbGVPZihkaXZpc29yLCB4KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQg
cm91bmREb3duVG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29yLCBUIHgpCit7CisgICAgQkFTU0VS
VChpc1Bvd2VyT2ZUd28oZGl2aXNvcikpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+
KG1hc2socmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7
Cit9CisKIHRlbXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3Rl
eHByIFQgcm91bmREb3duVG9NdWx0aXBsZU9mKFQgeCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KGlz
UG93ZXJPZlR3byhkaXZpc29yKSwgIidkaXZpc29yJyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIp
OwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KG1hc2socmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHgpLCB+KGRpdmlzb3IgLSAxdWwpKSk7CisgICAgcmV0dXJuIHJvdW5kRG93blRv
TXVsdGlwbGVPZihkaXZpc29yLCB4KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBk
aXZpZGVSb3VuZGluZ1VwKFQgbnVtZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90aWVudCwg
VCYgcmVtYWluZGVyKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoc2l6ZV90IHNpemUKIAogICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCkgewogICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgo
KSk7Ci0gICAgICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT50cnlB
bGxvY2F0ZVhMYXJnZShsb2NrLCBzdXBlckNodW5rU2l6ZSwgcm91bmRVcFRvTXVsdGlwbGVPZjx4
TGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKKyAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPnRyeUFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1h
eCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VNYXgpIHsKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KGxh
cmdlTWluLCByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CiAgICAg
ICAgIGFsaWdubWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KGFsaWdu
bWVudCk7Ci0gICAgICAgIHNpemVfdCB1bmFsaWduZWRTaXplID0gbGFyZ2VNaW4gKyBhbGlnbm1l
bnQgKyBzaXplOworICAgICAgICBzaXplX3QgdW5hbGlnbmVkU2l6ZSA9IGxhcmdlTWluICsgYWxp
Z25tZW50IC0gbGFyZ2VBbGlnbm1lbnQgKyBzaXplOwogICAgICAgICBpZiAodW5hbGlnbmVkU2l6
ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VDaHVua1NpemUgLyAyKSB7CiAgICAg
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFw
Pjo6bXV0ZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNp
emUpOwpAQCAtOTgsOCArOTgsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lCiAgICAgfQogCiAgICAgaWYgKHNpemUgPD0geExhcmdlTWF4ICYmIGFsaWdubWVudCA8
PSB4TGFyZ2VNYXgpIHsKLSAgICAgICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdl
QWxpZ25tZW50PihzaXplKTsKLSAgICAgICAgYWxpZ25tZW50ID0gc3RkOjptYXgoc3VwZXJDaHVu
a1NpemUsIGFsaWdubWVudCk7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKICAgICAgICAgcmV0dXJuIFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwg
c2l6ZSk7CiAgICAgfQpAQCAtMTQ0LDM2ICsxNDIsMTUgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFs
bG9jYXRlKHZvaWQqIG9iamVjdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsK
LSAgICAgICAgUmFuZ2UmIHJhbmdlID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+
ZmluZFhMYXJnZShsb2NrLCBvYmplY3QpOwotICAgICAgICBvbGRTaXplID0gcmFuZ2Uuc2l6ZSgp
OwotCi0gICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVu
dD4obmV3U2l6ZSk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0
Q2FzZSgpLT54TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7CiAKICAgICAgICAgaWYgKG5ld1NpemUg
PT0gb2xkU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAgICAgaWYgKG5l
d1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewotICAgICAgICAgICAgbmV3
U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKLSAg
ICAgICAgICAgIGlmIChvbGRTaXplIC0gbmV3U2l6ZSA+PSB4TGFyZ2VBbGlnbm1lbnQpIHsKLSAg
ICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgIHZtRGVhbGxvY2F0
ZShzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIG5ld1NpemUsIG9sZFNpemUgLSBuZXdTaXpl
KTsKLSAgICAgICAgICAgICAgICBsb2NrLmxvY2soKTsKLQotICAgICAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2Uob2JqZWN0LCBuZXdTaXplKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBl
clByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hMYXJnZShsb2NrLCBSYW5nZShv
YmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAg
ICAgICAgIH0KLQotICAgICAgICBpZiAobmV3U2l6ZSA+IG9sZFNpemUpIHsKLSAgICAgICAgICAg
IGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBib29sIHdhc0V4dGVuZGVkID0gdHJ5Vk1FeHRl
bmQob2JqZWN0LCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwot
Ci0gICAgICAgICAgICBpZiAod2FzRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICByYW5nZSA9
IFJhbmdlKG9iamVjdCwgbmV3U2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpA
QCAtMjI5LDcgKzIwNiw2IEBAIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFy
Z2UKIAogTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNp
emUpCiB7Ci0gICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50Pihz
aXplKTsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxI
ZWFwPjo6bXV0ZXgoKSk7CiAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNl
KCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIHNpemUpOwogfQpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuY3BwCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uo
c3RkOjp1bmlxdWVfbG9jazxTdGEKIAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVl
cER1cmF0aW9uKTsKICAgICBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9u
KTsKKyAgICBzY2F2ZW5nZVhMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAg
ICBzbGVlcChsb2NrLCBzbGVlcER1cmF0aW9uKTsKIH0KQEAgLTEwNiw2ICsxMDcsMjIgQEAgdm9p
ZCBIZWFwOjpzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVuaQogICAgIH0KIH0KIAordm9pZCBI
ZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
IGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbikKK3sKKyAgICB3
aGlsZSAoWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlUGh5c2ljYWwoKSkgewor
ICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2Vz
U2xvcHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CisgICAgICAgIGxvY2subG9jaygp
OworICAgICAgICAKKyAgICAgICAgcmFuZ2Uuc2V0Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsK
KyAgICAgICAgbV94TGFyZ2VNYXAuYWRkVmlydHVhbChyYW5nZSk7CisKKyAgICAgICAgd2FpdFVu
dGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7CisgICAg
fQorCisgICAgbV94TGFyZ2VNYXAuc2hyaW5rVG9GaXQoKTsKK30KKwogdm9pZCBIZWFwOjphbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hl
JiByYW5nZUNhY2hlKQogewogICAgIEJBU1NFUlQoIXJhbmdlQ2FjaGUuc2l6ZSgpKTsKQEAgLTIw
Miw1MiArMjE5LDYgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9jawog
ICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBh
bGlnbm1lbnQsIHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0
ZVhMYXJnZShsb2NrLCBzdXBlckNodW5rU2l6ZSwgc2l6ZSk7Ci19Ci0KLXZvaWQqIEhlYXA6OnRy
eUFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1l
bnQpKTsKLSAgICBCQVNTRVJUKGFsaWdubWVudCA+PSBzdXBlckNodW5rU2l6ZSk7Ci0gICAgQkFT
U0VSVChzaXplID09IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKSk7
Ci0KLSAgICB2b2lkKiByZXN1bHQgPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIG1feExhcmdlT2Jq
ZWN0cy5wdXNoKFJhbmdlKHJlc3VsdCwgc2l6ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVJhbmdlJiBIZWFwOjpmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
dm9pZCogb2JqZWN0KQotewotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3hMYXJnZU9iamVjdHMp
IHsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgIT0gb2JqZWN0KQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0JBU1NF
UlQoZmFsc2UpOwotICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8UmFuZ2UqPihudWxscHRyKTsgLy8g
U2lsZW5jZSBjb21waWxlciBlcnJvci4KLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdl
KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCB2b2lkKiBvYmplY3QpCi17Ci0g
ICAgUmFuZ2UgdG9EZWFsbG9jYXRlID0gbV94TGFyZ2VPYmplY3RzLnBvcCgmZmluZFhMYXJnZShs
b2NrLCBvYmplY3QpKTsKLQotICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgdm1EZWFsbG9jYXRlKHRv
RGVhbGxvY2F0ZS5iZWdpbigpLCB0b0RlYWxsb2NhdGUuc2l6ZSgpKTsKLSAgICBsb2NrLmxvY2so
KTsKLX0KLQogaW5saW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKExhcmdl
T2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChsYXJnZU9i
amVjdC5pc0ZyZWUoKSk7CkBAIC0zNzIsNCArMzQzLDEwMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2Nh
dGVMYXJnZShzdGQ6OmxvY2tfZ3VhCiAgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2Jq
ZWN0KTsKIH0KIAordm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsK
KyAgICBSRUxFQVNFX0JBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBs
b2NrLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVYTGFyZ2UobG9jaywgYWxp
Z25tZW50LCBzaXplKTsKK30KKworWExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShY
TGFyZ2VSYW5nZSYgcmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAg
IFhMYXJnZVJhbmdlIHByZXY7CisgICAgWExhcmdlUmFuZ2UgbmV4dDsKKworICAgIHNpemVfdCBh
bGlnbm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKKyAgICBpZiAodGVzdChyYW5nZS5iZWdpbigp
LCBhbGlnbm1lbnRNYXNrKSkgeworICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25tZW50LCByYW5nZS5iZWdpbigpKSAtIHJhbmdlLmJlZ2luKCk7Cisg
ICAgICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5z
cGxpdChwcmVmaXhTaXplKTsKKyAgICAgICAgcHJldiA9IHBhaXIuZmlyc3Q7CisgICAgICAgIHJh
bmdlID0gcGFpci5zZWNvbmQ7CisgICAgfQorCisgICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUg
Pj0geExhcmdlQWxpZ25tZW50KSB7CisgICAgICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKTsKKyAgICAgICAgc3RkOjpwYWly
PFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KGFsaWduZWRTaXpl
KTsKKyAgICAgICAgcmFuZ2UgPSBwYWlyLmZpcnN0OworICAgICAgICBuZXh0ID0gcGFpci5zZWNv
bmQ7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFp
biBhbiB1bnVzZWQgdGFpbCBmcmFnbWVudC4gVGhpcyBpcworICAgIC8vIGNvbW1vbi4gV2UgY2Fu
J3QgYWxsb2NhdGUgdGhlIHRhaWwgZnJhZ21lbnQgYmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVz
cworICAgIC8vIHRoYW4geExhcmdlQWxpZ25tZW50LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlv
biB3aXRoIGl0cyB0YWlsIGZyYWdtZW50CisgICAgLy8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBU
aGlzIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdAorICAgIC8vIGtlZXBz
IHRoZSBmcmVlIGxpc3Qgc2hvcnQsIHNwZWVkaW5nIHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcu
CisKKyAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSBy
YW5nZS5zcGxpdChyb3VuZFVwVG9NdWx0aXBsZU9mPHZtUGFnZVNpemU+KHNpemUpKTsKKyAgICBp
ZiAoYWxsb2NhdGVkLmZpcnN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKKyAgICAgICAgdm1B
bGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkoYWxsb2NhdGVkLmZpcnN0LmJlZ2luKCksIGFsbG9j
YXRlZC5maXJzdC5zaXplKCkpOworICAgICAgICBhbGxvY2F0ZWQuZmlyc3Quc2V0Vk1TdGF0ZShW
TVN0YXRlOjpQaHlzaWNhbCk7CisgICAgfQorCisgICAgbV94TGFyZ2VNYXAuYWRkQWxsb2NhdGVk
KHByZXYsIGFsbG9jYXRlZCwgbmV4dCk7CisgICAgcmV0dXJuIGFsbG9jYXRlZC5maXJzdDsKK30K
Kwordm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIEJBU1NFUlQoaXNQ
b3dlck9mVHdvKGFsaWdubWVudCkpOworICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4
KTsKKworICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOworCisgICAgYWxpZ25tZW50ID0g
cm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVudCk7CisKKyAgICBY
TGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VGcmVlKGFsaWdubWVudCwgc2l6ZSk7
CisgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVk
IG11bHRpcGxlcyB0byBpbmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0CisgICAgICAgIC8vIHRoZSBP
UyB3aWxsIHByb3ZpZGUgY29udGlndW91cyByYW5nZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCisgICAg
ICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25t
ZW50PihzaXplKTsKKworICAgICAgICB2b2lkKiBiZWdpbiA9IHRyeVZNQWxsb2NhdGUoYWxpZ25t
ZW50LCBhbGlnbmVkU2l6ZSk7CisgICAgICAgIGlmICghYmVnaW4pCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmFuZ2UgPSBYTGFyZ2VSYW5nZShiZWdpbiwgYWxpZ25lZFNp
emUsIFZNU3RhdGU6OlZpcnR1YWwpOworICAgIH0KKworICAgIHJldHVybiBzcGxpdEFuZEFsbG9j
YXRlKHJhbmdlLCBhbGlnbm1lbnQsIHNpemUpLmJlZ2luKCk7Cit9CisKK3NpemVfdCBIZWFwOjp4
TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQor
eworICAgIHJldHVybiBtX3hMYXJnZU1hcC5nZXRBbGxvY2F0ZWQob2JqZWN0KS5zaXplKCk7Cit9
CisKK3ZvaWQgSGVhcDo6c2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
JiwgY29uc3QgUmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQkFTU0VSVChv
YmplY3Quc2l6ZSgpID4gbmV3U2l6ZSk7CisKKyAgICBpZiAob2JqZWN0LnNpemUoKSAtIG5ld1Np
emUgPCB2bVBhZ2VTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgWExhcmdlUmFuZ2Ug
cmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlQWxsb2NhdGVkKG9iamVjdC5iZWdpbigpKTsKKyAgICBz
cGxpdEFuZEFsbG9jYXRlKHJhbmdlLCB4TGFyZ2VBbGlnbm1lbnQsIG5ld1NpemUpOworCisgICAg
bV9zY2F2ZW5nZXIucnVuKCk7Cit9CisKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZShzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKK3sKKyAgICBYTGFyZ2VS
YW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKKyAgICBtX3hM
YXJnZU1hcC5hZGRGcmVlKHJhbmdlKTsKKyAgICAKKyAgICBtX3NjYXZlbmdlci5ydW4oKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlz
aW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSAi
Vk1IZWFwLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlTWFwLmgiCiAj
aW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bXV0ZXg+CiAKQEAgLTYxLDcgKzYyLDggQEAgcHVi
bGljOgogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIHZvaWQqIHRyeUFs
bG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3QpOwotICAgIFJhbmdlJiBmaW5kWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHNpemVfdCB4TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xv
Y2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHZvaWQgc2hyaW5rWExhcmdlKHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QgbmV3U2l6ZSk7CiAg
ICAgdm9pZCBkZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
dm9pZCopOwogCiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CkBAIC04MSwxMCAr
ODMsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlTGFyZ2UoQmVnaW5UYWcqJiwgRW5kVGFn
KiYsIFJhbmdlJik7CiAgICAgdm9pZCBtZXJnZUxhcmdlTGVmdChFbmRUYWcqJiwgQmVnaW5UYWcq
JiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CiAgICAgdm9pZCBtZXJnZUxhcmdlUmlnaHQoRW5k
VGFnKiYsIEJlZ2luVGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhlYXApOwotICAgIAorCisgICAg
WExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CisKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgpOwogICAgIHZvaWQg
c2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwor
ICAgIHZvaWQgc2NhdmVuZ2VYTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAKICAgICBzdGQ6OmFycmF5PHN0ZDo6
YXJyYXk8TGluZU1ldGFkYXRhLCBzbWFsbExpbmVDb3VudD4sIHNtYWxsTWF4IC8gYWxpZ25tZW50
PiBtX3NtYWxsTGluZU1ldGFkYXRhOwogCkBAIC05Myw3ICs5OCw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKIAogICAgIFNlZ3JlZ2F0ZWRGcmVlTGlz
dCBtX2xhcmdlT2JqZWN0czsKLSAgICBWZWN0b3I8UmFuZ2U+IG1feExhcmdlT2JqZWN0czsKKyAg
ICAKKyAgICBYTGFyZ2VNYXAgbV94TGFyZ2VNYXA7CiAKICAgICBib29sIG1faXNBbGxvY2F0aW5n
UGFnZXM7CiAgICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25jdXJyZW50U2Nh
dmVuZ2UpPiBtX3NjYXZlbmdlcjsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0
LmgJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIGlubGluZSBMYXJnZU9iamVj
dCBMYXJnZU9iamVjdDo6bWVyZ2UoKSAKIAogaW5saW5lIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwg
TGFyZ2VPYmplY3Q+IExhcmdlT2JqZWN0OjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKIHsKKyAg
ICBCQVNTRVJUKHNpemUgPD0gdGhpcy0+c2l6ZSgpKTsKICAgICBSYW5nZSBzcGxpdChiZWdpbigp
LCBzaXplKTsKICAgICBSYW5nZSBsZWZ0b3ZlciA9IFJhbmdlKHNwbGl0LmVuZCgpLCB0aGlzLT5z
aXplKCkgLSBzaXplKTsKICAgICBCQVNTRVJUKGxlZnRvdmVyLnNpemUoKSA+PSBsYXJnZU1pbik7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkocmV2aXNpb24gMTk3MTYxKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgaW5saW5lIGJvb2wgaXNTbWFsbCh2b2lkKiBvYmplY3QpCiAKIGlubGlu
ZSBib29sIGlzWExhcmdlKHZvaWQqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gIXRlc3Qob2JqZWN0
LCB+c3VwZXJDaHVua01hc2spOworICAgIHJldHVybiAhdGVzdChvYmplY3QsIH54TGFyZ2VNYXNr
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUmFuZ2Uu
aAkocmV2aXNpb24gMTk3MTYxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9SYW5nZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJhbmdlX2gKICNkZWZpbmUg
UmFuZ2VfaAogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdGRkZWY+CiAKIG5h
bWVzcGFjZSBibWFsbG9jIHsKQEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhKnRoaXM7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSYW5n
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gPCBvdGhlci5tX2JlZ2luOyB9CiAKIHBy
aXZhdGU6CkBAIC01Niw2ICs1OCwxNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9
OwogCitpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIp
Cit7CisgICAgcmV0dXJuIGEuYmVnaW4oKSA9PSBiLmVuZCgpIHx8IGEuZW5kKCkgPT0gYi5iZWdp
bigpOworfQorCitpbmxpbmUgUmFuZ2UgbWVyZ2UoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdl
JiBiKQoreworICAgIHJldHVybiBSYW5nZShzdGQ6Om1pbihhLmJlZ2luKCksIGIuYmVnaW4oKSks
IGEuc2l6ZSgpICsgYi5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNl
bmRpZiAvLyBSYW5nZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTcx
NjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDggQEAgbmFtZXNwYWNlIFNpemVzIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxhcmdlQ2h1bmtNZXRhZGF0YVNpemUgPSA0ICoga0I7IC8vIHNpemVvZihMYXJnZUNodW5rKQog
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNYXggPSBsYXJnZUNodW5rU2l6ZSAtIGxhcmdl
Q2h1bmtNZXRhZGF0YVNpemU7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdu
bWVudCA9IHZtUGFnZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1l
bnQgPSBzdXBlckNodW5rU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sg
PSB+KHhMYXJnZUFsaWdubWVudCAtIDEpOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdl
TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVu
dDsgLy8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMg
bm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERl
cHRoID0gMTY7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgU29ydGVkVmVjdG9yX2gKKyNkZWZpbmUgU29ydGVkVmVj
dG9yX2gKKworI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgU29ydGVkVmVj
dG9yIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxU
Pjo6dmFsdWUsICJTb3J0ZWRWZWN0b3IgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIp
OworCisgICAgc3RydWN0IEJ1Y2tldCB7CisgICAgICAgIGV4cGxpY2l0IEJ1Y2tldChUIHZhbHVl
KQorICAgICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgICwgaXNEZWxldGVkKGZh
bHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFUmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjsKKyAgICAgICAgfQorCisgICAgICAg
IFQgdmFsdWU7CisgICAgICAgIGJvb2wgaXNEZWxldGVkOworICAgIH07CisKK3B1YmxpYzoKKyAg
ICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVy
YXRvcl90YWcsIFQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKEJ1Y2tldCogYnVj
a2V0LCBCdWNrZXQqIGVuZCkKKyAgICAgICAgICAgIDogbV9idWNrZXQoYnVja2V0KQorICAgICAg
ICAgICAgLCBtX2VuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNraXBEZWxldGVkQnVj
a2V0cygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBpdGVy
YXRvciYgb3RoZXIpCisgICAgICAgICAgICA6IG1fYnVja2V0KG90aGVyLm1fYnVja2V0KQorICAg
ICAgICAgICAgLCBtX2VuZChvdGhlci5tX2VuZCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBCQVNT
RVJUKG1fYnVja2V0ICE9IG1fZW5kKTsKKyAgICAgICAgICAgICsrbV9idWNrZXQ7CisgICAgICAg
ICAgICBza2lwRGVsZXRlZEJ1Y2tldHMoKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2J1Y2tldCAhPSBvdGhlci5tX2J1Y2tl
dDsKKyAgICAgICAgfQorCisgICAgICAgIFQmIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEJBU1NFUlQobV9idWNrZXQgPCBtX2VuZCk7CisgICAgICAgICAgICBCQVNTRVJUKCFt
X2J1Y2tldC0+aXNEZWxldGVkKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1Y2tldC0+dmFsdWU7
CisgICAgICAgIH0KKworICAgICAgICBUKiBvcGVyYXRvci0+KCkgIHsgcmV0dXJuICZvcGVyYXRv
ciooKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNvcnRlZFZlY3Rv
cjsKKworICAgICAgICB2b2lkIHNraXBEZWxldGVkQnVja2V0cygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHdoaWxlIChtX2J1Y2tldCAhPSBtX2VuZCAmJiBtX2J1Y2tldC0+aXNEZWxldGVkKQor
ICAgICAgICAgICAgICAgICsrbV9idWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICBCdWNrZXQq
IG1fYnVja2V0OworICAgICAgICBCdWNrZXQqIG1fZW5kOworICAgIH07CisKKyAgICBpdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVu
ZCgpKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKG1fdmVjdG9yLmVu
ZCgpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KKworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFQmKTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVSYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFQgZ2V0KGNvbnN0IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBUIHRha2UoY29uc3QgVSYpOworCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworCitwcml2
YXRlOgorICAgIFZlY3RvcjxCdWNrZXQ+IG1fdmVjdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgU29ydGVkVmVjdG9yPFQ+OjppbnNlcnQoY29uc3QgVCYgdmFsdWUpCit7Cisg
ICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3Iu
ZW5kKCksIHZhbHVlKTsKKyAgICBpZiAoaXQgIT0gbV92ZWN0b3IuZW5kKCkgJiYgaXQtPmlzRGVs
ZXRlZCkgeworICAgICAgICAqaXQgPSBCdWNrZXQodmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV92ZWN0b3IuaW5zZXJ0KGl0LCBCdWNrZXQodmFsdWUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KK3R5cGVuYW1lIFNvcnRlZFZl
Y3RvcjxUPjo6aXRlcmF0b3IgU29ydGVkVmVjdG9yPFQ+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKQor
eworICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVj
dG9yLmVuZCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yKGl0LCBtX3ZlY3Rvci5lbmQo
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CitUIFNv
cnRlZFZlY3RvcjxUPjo6Z2V0KGNvbnN0IFUmIHZhbHVlKQoreworICAgIHJldHVybiAqZmluZCh2
YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CitU
IFNvcnRlZFZlY3RvcjxUPjo6dGFrZShjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBhdXRvIGl0ID0g
ZmluZCh2YWx1ZSk7CisgICAgaXQubV9idWNrZXQtPmlzRGVsZXRlZCA9IHRydWU7CisgICAgcmV0
dXJuIGl0Lm1fYnVja2V0LT52YWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQg
U29ydGVkVmVjdG9yPFQ+OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgYXV0byBpc0RlbGV0ZWQgPSBb
XShjb25zdCBCdWNrZXQmIGJ1Y2tldCkgeworICAgICAgICByZXR1cm4gYnVja2V0LmlzRGVsZXRl
ZDsKKyAgICB9OworCisgICAgYXV0byBuZXdFbmQgPSBzdGQ6OnJlbW92ZV9pZihtX3ZlY3Rvci5i
ZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgaXNEZWxldGVkKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9
IG5ld0VuZCAtIG1fdmVjdG9yLmJlZ2luKCk7CisgICAgbV92ZWN0b3Iuc2hyaW5rKG5ld1NpemUp
OworCisgICAgbV92ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYworCisjZW5kaWYgLy8gU29ydGVkVmVjdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVk1BbGxvY2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Vk1BbGxvY2F0ZS5oCShyZXZpc2lvbiAxOTcxNjEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1ZNQWxsb2NhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjkgKzgyLDYgQEAgaW5saW5lIHZv
aWQqIHRyeVZNQWxsb2NhdGUoc2l6ZV90IHZtU2l6ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWlubGluZSBib29sIHRyeVZNRXh0ZW5kKHZvaWQqIHAsIHNpemVfdCB2bU9sZFNpemUsIHNpemVf
dCB2bU5ld1NpemUpCi17Ci0gICAgdm1WYWxpZGF0ZSh2bU9sZFNpemUpOwotICAgIHZtVmFsaWRh
dGUodm1OZXdTaXplKTsKLSAgICAKLSAgICBCQVNTRVJUKHZtT2xkU2l6ZSA8IHZtTmV3U2l6ZSk7
Ci0KLSAgICB2b2lkKiBuZXh0QWRkcmVzcyA9IHN0YXRpY19jYXN0PGNoYXIqPihwKSArIHZtT2xk
U2l6ZTsKLSAgICBzaXplX3QgZXh0ZW50aW9uU2l6ZSA9IHZtTmV3U2l6ZSAtIHZtT2xkU2l6ZTsK
LQotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobmV4dEFkZHJlc3MsIGV4dGVudGlvblNpemUsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIEJNQUxMT0NfVk1f
VEFHLCAwKTsKLQotICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKHJlc3VsdCAhPSBuZXh0QWRkcmVzcykgewotICAgICAgICBtdW5t
YXAocmVzdWx0LCBleHRlbnRpb25TaXplKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQqIHZtQWxsb2NhdGUoc2l6
ZV90IHZtU2l6ZSkKIHsKICAgICB2b2lkKiByZXN1bHQgPSB0cnlWTUFsbG9jYXRlKHZtU2l6ZSk7
CkBAIC0xMjYsNyArMTAzLDcgQEAgaW5saW5lIHZvaWQqIHRyeVZNQWxsb2NhdGUoc2l6ZV90IHZt
QWxpZwogICAgIHZtVmFsaWRhdGUodm1TaXplKTsKICAgICB2bVZhbGlkYXRlKHZtQWxpZ25tZW50
KTsKIAotICAgIHNpemVfdCBtYXBwZWRTaXplID0gc3RkOjptYXgodm1TaXplLCB2bUFsaWdubWVu
dCkgKyB2bUFsaWdubWVudDsKKyAgICBzaXplX3QgbWFwcGVkU2l6ZSA9IHZtQWxpZ25tZW50IC0g
dm1QYWdlU2l6ZSArIHZtU2l6ZTsKICAgICBjaGFyKiBtYXBwZWQgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4odHJ5Vk1BbGxvY2F0ZShtYXBwZWRTaXplKSk7CiAgICAgaWYgKCFtYXBwZWQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTM1LDYgKzExMiw4IEBAIGlubGluZSB2b2lkKiB0cnlWTUFs
bG9jYXRlKHNpemVfdCB2bUFsaWcKICAgICBjaGFyKiBhbGlnbmVkID0gcm91bmRVcFRvTXVsdGlw
bGVPZih2bUFsaWdubWVudCwgbWFwcGVkKTsKICAgICBjaGFyKiBhbGlnbmVkRW5kID0gYWxpZ25l
ZCArIHZtU2l6ZTsKICAgICAKKyAgICBSRUxFQVNFX0JBU1NFUlQoYWxpZ25lZEVuZCA8PSBtYXBw
ZWRFbmQpOworICAgIAogICAgIGlmIChzaXplX3QgbGVmdEV4dHJhID0gYWxpZ25lZCAtIG1hcHBl
ZCkKICAgICAgICAgdm1EZWFsbG9jYXRlKG1hcHBlZCwgbGVmdEV4dHJhKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDE0
IEBAIHZvaWQgVk1IZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2MKICAgICAgICAgbV9z
bWFsbFBhZ2VzLnB1c2goaXQpOwogfQogCi12b2lkIFZNSGVhcDo6YWxsb2NhdGVMYXJnZUNodW5r
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCitMYXJnZU9iamVjdCBWTUhlYXA6
OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQog
ewogICAgIGlmICghbV9sYXJnZUNodW5rcy5zaXplKCkpCiAgICAgICAgIGFsbG9jYXRlU3VwZXJD
aHVuayhsb2NrKTsKIAogICAgIC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9p
ZCBkaXJ0eWluZyB0aGVpciBtZXRhZGF0YSBwYWdlcy4KICAgICBMYXJnZUNodW5rKiBsYXJnZUNo
dW5rID0gbmV3IChtX2xhcmdlQ2h1bmtzLnBvcCgpLT5sYXJnZUNodW5rKCkpIExhcmdlQ2h1bms7
Ci0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QobGFyZ2VDaHVuay0+YmVnaW4oKSk7Ci0gICAg
bV9sYXJnZU9iamVjdHMuaW5zZXJ0KGxhcmdlT2JqZWN0KTsKKyAgICByZXR1cm4gTGFyZ2VPYmpl
Y3QobGFyZ2VDaHVuay0+YmVnaW4oKSk7CiB9CiAKIHZvaWQgVk1IZWFwOjphbGxvY2F0ZVN1cGVy
Q2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1ZNSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Vk1IZWFwLmgJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIAogcHJp
dmF0ZToKICAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+Jik7Ci0gICAgdm9pZCBhbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYpOworICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdm9pZCBhbGxvY2F0ZVN1cGVyQ2h1bmsoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogCiAgICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1f
c21hbGxQYWdlczsKQEAgLTg1LDI2ICs4NSwyMCBAQCBpbmxpbmUgU21hbGxQYWdlKiBWTUhlYXA6
OmFsbG9jYXRlU21hbGxQCiAKIGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFy
Z2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUp
CiB7Ci0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNp
emUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpIHsKLSAgICAgICAgYWxsb2NhdGVMYXJnZUNodW5r
KGxvY2spOwotICAgICAgICBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7
Ci0gICAgICAgIEJBU1NFUlQobGFyZ2VPYmplY3QpOwotICAgIH0KKyAgICBpZiAoTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpKQorICAgICAgICByZXR1
cm4gbGFyZ2VPYmplY3Q7CiAKLSAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CisgICAgQkFTU0VSVChz
aXplIDw9IGxhcmdlTWF4KTsKKyAgICByZXR1cm4gYWxsb2NhdGVMYXJnZUNodW5rKGxvY2spOwog
fQogCiBpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKIHsKLSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVj
dCA9IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsK
LSAgICBpZiAoIWxhcmdlT2JqZWN0KSB7Ci0gICAgICAgIGFsbG9jYXRlTGFyZ2VDaHVuayhsb2Nr
KTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwg
c2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAgIEJBU1NFUlQobGFyZ2VPYmplY3QpOwotICAg
IH0KKyAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtl
KGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSkpCisgICAgICAgIHJldHVybiBsYXJnZU9i
amVjdDsKIAotICAgIHJldHVybiBsYXJnZU9iamVjdDsKKyAgICBCQVNTRVJUKHVuYWxpZ25lZFNp
emUgPD0gbGFyZ2VNYXgpOworICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlQ2h1bmsobG9jayk7CiB9
CiAKIGlubGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYgbG9jaywgU21hbGxQYWdlKiBwYWdlKQpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9WTVN0YXRlLmgJKHJldmlzaW9uIDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxMyBAQCBwcml2YXRlOgog
ICAgIFN0YXRlIG1fc3RhdGU7CiB9OwogCitpbmxpbmUgVk1TdGF0ZSBtZXJnZShWTVN0YXRlIGEs
IFZNU3RhdGUgYikKK3sKKyAgICBWTVN0YXRlIHJlc3VsdChhKTsKKyAgICByZXN1bHQubWVyZ2Uo
Yik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAj
ZW5kaWYgLy8gVk1TdGF0ZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHJldmlzaW9u
IDE5NzE2MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDE0ICs0MCwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgVmVjdG9y
IHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6
dmFsdWUsICJWZWN0b3IgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOwogcHVibGlj
OgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CisgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9p
dGVyYXRvcjsKKwogICAgIFZlY3Rvcihjb25zdCBWZWN0b3ImKSA9IGRlbGV0ZTsKICAgICBWZWN0
b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3ImKSA9IGRlbGV0ZTsKIAogICAgIFZlY3RvcigpOwog
ICAgIH5WZWN0b3IoKTsKIAotICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAg
ICBUKiBlbmQoKSB7IHJldHVybiBtX2J1ZmZlciArIG1fc2l6ZTsgfQorICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X2J1ZmZlciArIG1fc2l6ZTsgfQogCiAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KICAgICBzaXplX3QgY2FwYWNpdHkoKSB7IHJldHVybiBtX2NhcGFjaXR5OyB9CkBAIC01Niwx
OSArNTksMjMgQEAgcHVibGljOgogICAgIFQmIGxhc3QoKSB7IHJldHVybiBtX2J1ZmZlclttX3Np
emUgLSAxXTsgfQogCiAgICAgdm9pZCBwdXNoKGNvbnN0IFQmKTsKLSAgICB2b2lkIHB1c2goY29u
c3QgVCosIGNvbnN0IFQqKTsKKwogICAgIFQgcG9wKCk7CiAgICAgVCBwb3Aoc2l6ZV90KTsKLSAg
ICBUIHBvcChjb25zdCBUKiBpdCkgeyByZXR1cm4gcG9wKGl0IC0gYmVnaW4oKSk7IH0KKyAgICBU
IHBvcChjb25zdF9pdGVyYXRvciBpdCkgeyByZXR1cm4gcG9wKGl0IC0gYmVnaW4oKSk7IH0KKyAg
ICAKKyAgICB2b2lkIGluc2VydChpdGVyYXRvciwgY29uc3QgVCYpOwogCiAgICAgdm9pZCBzaHJp
bmsoc2l6ZV90KTsKIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGdyb3dGYWN0b3IgPSAyOwogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc2hyaW5rRmFjdG9yID0gNDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGluaXRpYWxDYXBh
Y2l0eSA9IHZtUGFnZVNpemUgLyBzaXplb2YoVCk7CiAKLSAgICB2b2lkIGdyb3dDYXBhY2l0eShz
aXplX3Qgc2l6ZSk7CisgICAgdm9pZCBncm93Q2FwYWNpdHkoKTsKICAgICB2b2lkIHNocmlua0Nh
cGFjaXR5KCk7CiAgICAgdm9pZCByZWFsbG9jYXRlQnVmZmVyKHNpemVfdCk7CiAKQEAgLTEwMywy
MSArMTEwLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBJTkxJTkUgdm9pZCBWZWN0b3I8VD46
OnB1c2goY29uc3QgVCYgdmFsdWUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQot
ICAgICAgICBncm93Q2FwYWNpdHkobV9zaXplKTsKKyAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CiAg
ICAgbV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIFZlY3RvcjxUPjo6cHVzaChjb25zdCBUKiBiZWdpbiwgY29uc3QgVCogZW5kKQotewot
ICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgKGVuZCAtIGJlZ2luKTsKLSAgICBpZiAobmV3
U2l6ZSA+IG1fY2FwYWNpdHkpCi0gICAgICAgIGdyb3dDYXBhY2l0eShuZXdTaXplKTsKLSAgICBz
dGQ6Om1lbWNweSh0aGlzLT5lbmQoKSwgYmVnaW4sIChlbmQgLSBiZWdpbikgKiBzaXplb2YoVCkp
OwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxp
bmUgVCBWZWN0b3I8VD46OnBvcCgpCiB7CiAgICAgQkFTU0VSVChtX3NpemUpOwpAQCAtMTM1LDYg
KzEzMiwyMCBAQCBpbmxpbmUgVCBWZWN0b3I8VD46OnBvcChzaXplX3QgaSkKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQgVmVjdG9yPFQ+OjppbnNlcnQoaXRlcmF0b3IgaXQsIGNvbnN0
IFQmIHZhbHVlKQoreworICAgIHNpemVfdCBpbmRleCA9IGl0IC0gYmVnaW4oKTsKKyAgICBzaXpl
X3QgbW92ZUNvdW50ID0gZW5kKCkgLSBpdDsKKworICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0
eSkKKyAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CisKKyAgICBzdGQ6Om1lbW1vdmUoJm1fYnVmZmVy
W2luZGV4ICsgMV0sICZtX2J1ZmZlcltpbmRleF0sIG1vdmVDb3VudCAqIHNpemVvZihUKSk7Cisg
ICAgbV9idWZmZXJbaW5kZXhdID0gdmFsdWU7CisgICAgbV9zaXplKys7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VD46OnNocmluayhzaXplX3Qgc2l6ZSkK
IHsKICAgICBCQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKQEAgLTE0Nyw3ICsxNTgsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90
IG5ld0NhcGFjaXR5KQogewogICAgIHNpemVfdCB2bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3
Q2FwYWNpdHkgKiBzaXplb2YoVCkpOwotICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQq
Pih2bUFsbG9jYXRlKHZtU2l6ZSkpOworICAgIFQqIG5ld0J1ZmZlciA9IHZtU2l6ZSA/IHN0YXRp
Y19jYXN0PFQqPih2bUFsbG9jYXRlKHZtU2l6ZSkpIDogbnVsbHB0cjsKICAgICBpZiAobV9idWZm
ZXIpIHsKICAgICAgICAgc3RkOjptZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplICog
c2l6ZW9mKFQpKTsKICAgICAgICAgdm1EZWFsbG9jYXRlKG1fYnVmZmVyLCBibWFsbG9jOjp2bVNp
emUobV9jYXBhY2l0eSAqIHNpemVvZihUKSkpOwpAQCAtMTY1LDEyICsxNzYsMTkgQEAgTk9fSU5M
SU5FIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpncm93Q2FwYWNpdHkoc2l6ZV90IHNpemUp
CitOT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCiB7Ci0gICAgc2l6ZV90
IG5ld0NhcGFjaXR5ID0gbWF4KGluaXRpYWxDYXBhY2l0eSwgc2l6ZSAqIGdyb3dGYWN0b3IpOwor
ICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChpbml0aWFsQ2FwYWNpdHksIG1fc2l6ZSAqIGdy
b3dGYWN0b3IpOwogICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCBWZWN0b3I8VD46OnNocmlua1RvRml0KCkKK3sKKyAgICBp
ZiAobV9zaXplIDwgbV9jYXBhY2l0eSkKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihtX3NpemUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBWZWN0b3JfaApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiWExhcmdlTWFwLmgiCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworWExhcmdlUmFu
Z2UgWExhcmdlTWFwOjp0YWtlRnJlZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sK
KyAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CisKKyAgICBYTGFyZ2VS
YW5nZSogY2FuZGlkYXRlID0gbV9mcmVlLmVuZCgpOworICAgIGZvciAoWExhcmdlUmFuZ2UqIGl0
ID0gbV9mcmVlLmJlZ2luKCk7IGl0ICE9IG1fZnJlZS5lbmQoKTsgKytpdCkgeworICAgICAgICBp
ZiAoaXQtPnNpemUoKSA8IHNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoY2FuZGlkYXRlICE9IG1fZnJlZS5lbmQoKSAmJiBjYW5kaWRhdGUtPmJlZ2luKCkgPCBpdC0+
YmVnaW4oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0ZXN0KGl0LT5i
ZWdpbigpLCBhbGlnbm1lbnRNYXNrKSkgeworICAgICAgICAgICAgY2hhciogYWxpZ25lZCA9IHJv
dW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBpdC0+YmVnaW4oKSk7CisgICAgICAgICAgICBp
ZiAoYWxpZ25lZCA8IGl0LT5iZWdpbigpKSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNoYXIqIGFsaWduZWRFbmQgPSBhbGln
bmVkICsgc2l6ZTsKKyAgICAgICAgICAgIGlmIChhbGlnbmVkRW5kIDwgYWxpZ25lZCkgLy8gQ2hl
Y2sgZm9yIG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBpZiAoYWxpZ25lZEVuZCA+IGl0LT5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhbmRpZGF0ZSA9IGl0OworICAgIH0KKyAgICAKKyAgICBp
ZiAoY2FuZGlkYXRlID09IG1fZnJlZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJhbmdl
KCk7CisKKyAgICByZXR1cm4gbV9mcmVlLnBvcChjYW5kaWRhdGUpOworfQorCit2b2lkIFhMYXJn
ZU1hcDo6YWRkRnJlZShjb25zdCBYTGFyZ2VSYW5nZSYgcmFuZ2UpCit7CisgICAgWExhcmdlUmFu
Z2UgbWVyZ2VkID0gcmFuZ2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5z
aXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBvdGhlciA9IG1fZnJlZVtpXTsKKworICAgICAg
ICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgb3RoZXIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgbWVyZ2VkID0gbWVyZ2UobWVyZ2VkLCBtX2ZyZWUucG9wKGktLSkpOworICAgIH0K
KyAgICAKKyAgICBtX2ZyZWUucHVzaChtZXJnZWQpOworfQorCit2b2lkIFhMYXJnZU1hcDo6YWRk
QWxsb2NhdGVkKGNvbnN0IFhMYXJnZVJhbmdlJiBwcmV2LCBjb25zdCBzdGQ6OnBhaXI8WExhcmdl
UmFuZ2UsIFhMYXJnZVJhbmdlPiYgYWxsb2NhdGVkLCBjb25zdCBYTGFyZ2VSYW5nZSYgbmV4dCkK
K3sKKyAgICBpZiAocHJldikKKyAgICAgICAgbV9mcmVlLnB1c2gocHJldik7CisgICAgCisgICAg
aWYgKG5leHQpCisgICAgICAgIG1fZnJlZS5wdXNoKG5leHQpOworCisgICAgbV9hbGxvY2F0ZWQu
aW5zZXJ0KHsgYWxsb2NhdGVkLmZpcnN0LCBhbGxvY2F0ZWQuc2Vjb25kIH0pOworfQorCitYTGFy
Z2VSYW5nZSBYTGFyZ2VNYXA6OmdldEFsbG9jYXRlZCh2b2lkKiBvYmplY3QpCit7CisgICAgcmV0
dXJuIG1fYWxsb2NhdGVkLmZpbmQob2JqZWN0KS0+b2JqZWN0OworfQorCitYTGFyZ2VSYW5nZSBY
TGFyZ2VNYXA6OnRha2VBbGxvY2F0ZWQodm9pZCogb2JqZWN0KQoreworICAgIEFsbG9jYXRpb24g
YWxsb2NhdGlvbiA9IG1fYWxsb2NhdGVkLnRha2Uob2JqZWN0KTsKKyAgICByZXR1cm4gbWVyZ2Uo
YWxsb2NhdGlvbi5vYmplY3QsIGFsbG9jYXRpb24udW51c2VkKTsKK30KKwordm9pZCBYTGFyZ2VN
YXA6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2ZyZWUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2Fs
bG9jYXRlZC5zaHJpbmtUb0ZpdCgpOworfQorCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VQ
aHlzaWNhbCgpIHsKKyAgICBhdXRvIGhhc1BoeXNpY2FsID0gW10oY29uc3QgWExhcmdlUmFuZ2Um
IHJhbmdlKSB7CisgICAgICAgIHJldHVybiByYW5nZS52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsK
KyAgICB9OworCisgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9m
cmVlLmVuZCgpLCBoYXNQaHlzaWNhbCk7CisgICAgaWYgKGl0ICE9IG1fZnJlZS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1fZnJlZS5wb3AoaXQpOworCisgICAgYXV0byBoYXNVbnVzZWQgPSBbXShj
b25zdCBBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKSB7CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9u
LnVudXNlZCAmJiBhbGxvY2F0aW9uLnVudXNlZC52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKKyAg
ICB9OworICAgIAorICAgIFhMYXJnZVJhbmdlIHN3YXBwZWQ7CisgICAgYXV0byBpdDIgPSBzdGQ6
OmZpbmRfaWYobV9hbGxvY2F0ZWQuYmVnaW4oKSwgbV9hbGxvY2F0ZWQuZW5kKCksIGhhc1VudXNl
ZCk7CisgICAgaWYgKGl0MiAhPSBtX2FsbG9jYXRlZC5lbmQoKSkKKyAgICAgICAgc3RkOjpzd2Fw
KGl0Mi0+dW51c2VkLCBzd2FwcGVkKTsKKyAgICAKKyAgICByZXR1cm4gc3dhcHBlZDsKK30KKwor
dm9pZCBYTGFyZ2VNYXA6OmFkZFZpcnR1YWwoY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKQorewor
ICAgIGF1dG8gY2FuTWVyZ2UgPSBbJnJhbmdlXShjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikgewor
ICAgICAgICByZXR1cm4gb3RoZXIub2JqZWN0LmVuZCgpID09IHJhbmdlLmJlZ2luKCk7CisgICAg
fTsKKworICAgIGlmIChyYW5nZS5zaXplKCkgPCB4TGFyZ2VBbGlnbm1lbnQpIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyBhbiB1bnVzZWQgZnJhZ21lbnQsIHNvIGl0IG1pZ2h0IGJlbG9uZyBpbiB0aGUg
YWxsb2NhdGVkIGxpc3QuCisgICAgICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9hbGxvY2F0
ZWQuYmVnaW4oKSwgbV9hbGxvY2F0ZWQuZW5kKCksIGNhbk1lcmdlKTsKKyAgICAgICAgaWYgKGl0
ICE9IG1fYWxsb2NhdGVkLmVuZCgpKSB7CisgICAgICAgICAgICBCQVNTRVJUKCFpdC0+dW51c2Vk
KTsKKyAgICAgICAgICAgIGl0LT51bnVzZWQgPSByYW5nZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgbmVpZ2hib3IgaW4g
dGhlIGFsbG9jYXRlZCBsaXN0LCBvdXIgbmVpZ2hib3IgbXVzdAorICAgICAgICAvLyBoYXZlIGJl
ZW4gZnJlZWQuIFdlJ2xsIG1lcmdlIHdpdGggaXQgYmVsb3cuCisgICAgfQorCisgICAgYWRkRnJl
ZShyYW5nZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvWExhcmdlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9YTGFyZ2VNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
WExhcmdlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFhMYXJnZU1hcF9oCisj
ZGVmaW5lIFhMYXJnZU1hcF9oCisKKyNpbmNsdWRlICJTb3J0ZWRWZWN0b3IuaCIKKyNpbmNsdWRl
ICJWZWN0b3IuaCIKKyNpbmNsdWRlICJYTGFyZ2VSYW5nZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBYTGFyZ2VNYXAgeworcHVibGljOgor
ICAgIHZvaWQgYWRkRnJlZShjb25zdCBYTGFyZ2VSYW5nZSYpOworICAgIFhMYXJnZVJhbmdlIHRh
a2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CisKKyAgICB2b2lkIGFkZEFsbG9jYXRl
ZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29uc3Qgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBY
TGFyZ2VSYW5nZT4mLCBjb25zdCBYTGFyZ2VSYW5nZSYgbmV4dCk7CisgICAgWExhcmdlUmFuZ2Ug
Z2V0QWxsb2NhdGVkKHZvaWQqKTsKKyAgICBYTGFyZ2VSYW5nZSB0YWtlQWxsb2NhdGVkKHZvaWQq
KTsKKworICAgIFhMYXJnZVJhbmdlIHRha2VQaHlzaWNhbCgpOworICAgIHZvaWQgYWRkVmlydHVh
bChjb25zdCBYTGFyZ2VSYW5nZSYpOworICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKwor
cHJpdmF0ZToKKyAgICBzdHJ1Y3QgQWxsb2NhdGlvbiB7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IEFsbG9jYXRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiBvYmplY3QgPCBvdGhlci5v
YmplY3Q7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcjwodm9pZCogcHRyKSBjb25zdCB7IHJldHVy
biBvYmplY3QuYmVnaW4oKSA8IHB0cjsgfQorCisgICAgICAgIFhMYXJnZVJhbmdlIG9iamVjdDsK
KyAgICAgICAgWExhcmdlUmFuZ2UgdW51c2VkOworICAgIH07CisKKyAgICBWZWN0b3I8WExhcmdl
UmFuZ2U+IG1fZnJlZTsKKyAgICBTb3J0ZWRWZWN0b3I8QWxsb2NhdGlvbj4gbV9hbGxvY2F0ZWQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCisKKyNlbmRpZiAvLyBYTGFyZ2VNYXBfaApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFuZ2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgWExhcmdlUmFuZ2VfaAorI2RlZmluZSBYTGFyZ2VSYW5nZV9oCisKKyNpbmNsdWRl
ICJWTVN0YXRlLmgiCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworY2xhc3MgWExhcmdlUmFuZ2Ug
OiBwdWJsaWMgUmFuZ2UgeworcHVibGljOgorICAgIFhMYXJnZVJhbmdlKCkKKyAgICAgICAgOiBS
YW5nZSgpCisgICAgICAgICwgbV92bVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpCisgICAgeworICAg
IH0KKworICAgIFhMYXJnZVJhbmdlKHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSwgVk1TdGF0ZSB2
bVN0YXRlKQorICAgICAgICA6IFJhbmdlKGJlZ2luLCBzaXplKQorICAgICAgICAsIG1fdm1TdGF0
ZSh2bVN0YXRlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVk1TdGF0ZSB2bVN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV92bVN0YXRlOyB9CisgICAgdm9pZCBzZXRWTVN0YXRlKFZNU3RhdGUgdm1T
dGF0ZSkgeyBtX3ZtU3RhdGUgPSB2bVN0YXRlOyB9CisKKyAgICBzdGQ6OnBhaXI8WExhcmdlUmFu
Z2UsIFhMYXJnZVJhbmdlPiBzcGxpdChzaXplX3QpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZN
U3RhdGUgbV92bVN0YXRlOworfTsKKworaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgWExhcmdl
UmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQoreworICAgIGlmIChhLmVuZCgpID09IGIu
YmVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGIuZW5kKCkgPT0g
YS5iZWdpbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2lubGluZSBYTGFyZ2VSYW5nZSBtZXJnZShjb25zdCBYTGFyZ2VSYW5nZSYgYSwgY29u
c3QgWExhcmdlUmFuZ2UmIGIpCit7CisgICAgcmV0dXJuIFhMYXJnZVJhbmdlKAorICAgICAgICBz
dGQ6Om1pbihhLmJlZ2luKCksIGIuYmVnaW4oKSksCisgICAgICAgIGEuc2l6ZSgpICsgYi5zaXpl
KCksCisgICAgICAgIG1lcmdlKGEudm1TdGF0ZSgpLCBiLnZtU3RhdGUoKSkpOworfQorCitpbmxp
bmUgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gWExhcmdlUmFuZ2U6OnNwbGl0
KHNpemVfdCBzaXplKSBjb25zdAoreworICAgIEJBU1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkp
OworCisgICAgWExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBzaXplLCB2bVN0YXRlKCkpOworICAg
IFhMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHRoaXMtPnNpemUoKSAtIHNpemUsIHZtU3Rh
dGUoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYgLy8gWExhcmdlUmFuZ2VfaAo=
</data>
<flag name="review"
          id="297077"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>