<?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>89875</bug_id>
          
          <creation_ts>2012-06-25 06:31:40 -0700</creation_ts>
          <short_desc>[WK2] Drop WebProcess capabilities on Linux using seccomp filters</short_desc>
          <delta_ts>2013-04-09 02:06:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.tmpsantos.com.br/cgi-bin/gitweb.cgi?p=webkit.git;a=shortlog;h=refs/heads/seccomp_filters</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91836</dependson>
          <blocked>89874</blocked>
    
    <blocked>110014</blocked>
    
    <blocked>110365</blocked>
    
    <blocked>111543</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago Marcos P. Santos">tmpsantos</reporter>
          <assigned_to name="Thiago Marcos P. Santos">tmpsantos</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>enrica</cc>
    
    <cc>felipe</cc>
    
    <cc>guijemont</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>hnandor</cc>
    
    <cc>hyatt</cc>
    
    <cc>jarkko.j.sakkinen</cc>
    
    <cc>joone</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rhodovan.u-szeged</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656523</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-25 06:31:40 -0700</bug_when>
    <thetext>This feature needs deep investigation, but looks like we can achieve similar design as the Mac sandbox using seccomp with filters on Linux. We might be able to block the WebProcess from opening files (delegating the task to the UIProcess and perform some policy check) and/or constrain the file access to certain files/folders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674558</commentid>
    <comment_count>1</comment_count>
    <who name="Guillaume Emont">guijemont</who>
    <bug_when>2012-07-20 07:34:51 -0700</bug_when>
    <thetext>An alternative that might require less work and could be a first step to have some sandboxing would be to use setuid-sandbox[1], which is the standalone version of the sandbox used in Chrome on Linux (though they are working on using seccomp too AFAIK).

[1] http://code.google.com/p/setuid-sandbox/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674578</commentid>
    <comment_count>2</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-07-20 08:06:40 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; An alternative that might require less work and could be a first step to have some sandboxing would be to use setuid-sandbox[1], which is the standalone version of the sandbox used in Chrome on Linux (though they are working on using seccomp too AFAIK).
&gt; 
&gt; [1] http://code.google.com/p/setuid-sandbox/

Renata is working on this track at bug 90005.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686697</commentid>
    <comment_count>3</comment_count>
      <attachid>156368</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-03 07:14:49 -0700</bug_when>
    <thetext>Created attachment 156368
Work in progress of SeccompFilters v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686708</commentid>
    <comment_count>4</comment_count>
      <attachid>156370</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-03 07:20:50 -0700</bug_when>
    <thetext>Created attachment 156370
Work in progress of SeccompFilters v2

Fixed a nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686715</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 07:24:18 -0700</bug_when>
    <thetext>Attachment 156370 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/PlatformEfl.cmake&apos;, u&apos;Sourc...&quot; exit_code: 1
Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:37:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:170:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 12 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>686752</commentid>
    <comment_count>6</comment_count>
      <attachid>156370</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 08:06:07 -0700</bug_when>
    <thetext>Comment on attachment 156370
Work in progress of SeccompFilters v2

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

Looks pretty ok for a start

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:50
&gt; +    // No being able to initialize seccomp is considered a security
&gt; +    // hole and the application should not go beyond this point. In fact,

security breach?

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:63
&gt; +    seccomp_release(m_seccompContext);

why not just m_context

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:66
&gt; +void SeccompFilters::setupFilters()

initializeFilters? or just initialize()

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:68
&gt; +    // Prioritize the are the most frequent calls.

I didn&apos;t get that English

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:75
&gt; +    // in the way it is implemented now. It is only blocking syscalls we are not

right now

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:78
&gt; +    // The list bellow summarizes the syscall whitelist needed by a EFL

below

why EFL here, in a non EFL file?

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:114
&gt; +    // Used by g_system_thread_set_name().
&gt; +    seccomp_rule_add_or_crash(m_seccompContext, SCMP_ACT_ALLOW, SCMP_SYS(prctl), 0);
&gt; +

if USE(GLIB) ?

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.h:38
&gt; +class SeccompFilters {
&gt; +public:
&gt; +    SeccompFilters();
&gt; +    virtual ~SeccompFilters();

who will inherit from this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686783</commentid>
    <comment_count>7</comment_count>
      <attachid>156370</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-03 08:45:47 -0700</bug_when>
    <thetext>Comment on attachment 156370
Work in progress of SeccompFilters v2

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

Thanks for having a look.

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:66
&gt;&gt; +void SeccompFilters::setupFilters()
&gt; 
&gt; initializeFilters? or just initialize()

+1 for inititalize and platformInitialize()

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:68
&gt;&gt; +    // Prioritize the are the most frequent calls.
&gt; 
&gt; I didn&apos;t get that English

&quot;Prioritize the most frequent calls.&quot;

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:78
&gt;&gt; +    // The list bellow summarizes the syscall whitelist needed by a EFL
&gt; 
&gt; below
&gt; 
&gt; why EFL here, in a non EFL file?

This WARNING section is a temporary documentation of the work in progress. I&apos;m just describing the test environment in case someone wants to give it a try. Probably if you try the same rule set on Qt (and I&apos;m working on testing this right now), it will crash.

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:114
&gt;&gt; +
&gt; 
&gt; if USE(GLIB) ?

It should go to platformSetupFilters() after the triage.

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.h:38
&gt;&gt; +    virtual ~SeccompFilters();
&gt; 
&gt; who will inherit from this?

No one. I first wrote this as an interface and later changed to the platformInitialize() style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686833</commentid>
    <comment_count>8</comment_count>
      <attachid>156397</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-03 09:27:39 -0700</bug_when>
    <thetext>Created attachment 156397
Work in progress of SeccompFilters v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686937</commentid>
    <comment_count>9</comment_count>
      <attachid>156397</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-08-03 10:45:08 -0700</bug_when>
    <thetext>Comment on attachment 156397
Work in progress of SeccompFilters v3

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

Reviewing without looking at the seccomp-specific bits yet. I wonder if the EFL-independent part shouldn&apos;t be sent in a separate patch, together with build-webkit changes.

&gt; Source/WebKit2/PlatformEfl.cmake:168
&gt; +    LIST (APPEND WebKit2_LIBRARIES
&gt; +        ${LIBSECCOMP_LIBRARIES}
&gt; +    )

You also need to include its include path to the list of included directories.

&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:36
&gt; +#define seccomp_rule_add_or_crash(context, action, syscall, count, ...) \

Isn&apos;t it better to uppercase this macro name to make it clear it is a macro?

&gt; Source/cmake/FindLibSeccomp.cmake:31
&gt; +INCLUDE(FindPkgConfig)
&gt; +
&gt; +PKG_CHECK_MODULES(LIBSECCOMP REQUIRED libseccomp&gt;=1.0.0)

Please see https://bugs.webkit.org/show_bug.cgi?id=91864#c18 for my comments on why this should be expanded into proper CMake FIND_LIBRARY/FIND_PATH calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686999</commentid>
    <comment_count>10</comment_count>
      <attachid>156397</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-03 11:42:23 -0700</bug_when>
    <thetext>Comment on attachment 156397
Work in progress of SeccompFilters v3

Attachment 156397 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13425732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687140</commentid>
    <comment_count>11</comment_count>
      <attachid>156397</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-03 14:17:40 -0700</bug_when>
    <thetext>Comment on attachment 156397
Work in progress of SeccompFilters v3

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

&gt;&gt; Source/WebKit2/Shared/seccomp/SeccompFilters.cpp:36
&gt;&gt; +#define seccomp_rule_add_or_crash(context, action, syscall, count, ...) \
&gt; 
&gt; Isn&apos;t it better to uppercase this macro name to make it clear it is a macro?

This macro is temporary. I&apos;m trying to land a patch on seccomp that would allow me to wrap this in a method.

&gt;&gt; Source/cmake/FindLibSeccomp.cmake:31
&gt;&gt; +PKG_CHECK_MODULES(LIBSECCOMP REQUIRED libseccomp&gt;=1.0.0)
&gt; 
&gt; Please see https://bugs.webkit.org/show_bug.cgi?id=91864#c18 for my comments on why this should be expanded into proper CMake FIND_LIBRARY/FIND_PATH calls.

Let&apos;s discuss this one when the patch is final. I have a feeling that this one is going to be long... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687798</commentid>
    <comment_count>12</comment_count>
      <attachid>156604</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-05 23:41:16 -0700</bug_when>
    <thetext>Created attachment 156604
Work in progress of SeccompFilters v4

Added to Qt buildsystem. It could load pages just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687800</commentid>
    <comment_count>13</comment_count>
      <attachid>156605</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-05 23:43:52 -0700</bug_when>
    <thetext>Created attachment 156605
Work in progress of SeccompFilters v4 - correct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710345</commentid>
    <comment_count>14</comment_count>
      <attachid>161845</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-09-02 11:22:34 -0700</bug_when>
    <thetext>Created attachment 161845
Work in progress of SeccompFilters v4 - rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710346</commentid>
    <comment_count>15</comment_count>
      <attachid>161845</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-02 11:50:13 -0700</bug_when>
    <thetext>Comment on attachment 161845
Work in progress of SeccompFilters v4 - rebased

Attachment 161845 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13717845</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739716</commentid>
    <comment_count>16</comment_count>
      <attachid>168170</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-10-11 01:48:52 -0700</bug_when>
    <thetext>Created attachment 168170
SeccompFilters on Qt (x86/64)

It works with these modifications on Qt on x86/64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760780</commentid>
    <comment_count>17</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-11-07 09:36:57 -0800</bug_when>
    <thetext>I&apos;ve measured the pageload time with Methanol using the syscall set that is enough to load pages correctly on Qt on an x86/64 machine. I ran the tests on sites that can be found on alexa top50. The goal of the measurement was that whether applying seccomp filters causes relevant slow-down on real world examples. I&apos;ve observed ~1% slow-down using these sites.
This table contains the times with and without seccomp filters. Each page was loaded 30 times, the maximal variance was 3%.

test site      w/ libseccomp	w/o libseccomp   difference

blogger.com    31,3             31               0,9%
facebook.com   53,3             52,9             0,8%
google.com     16,2             16               1,3%
live.com       18,2             17,9             1,7%
microsoft.com  120,9            119,8            0,9%
qq.com         144,2            141,7            1,8%
taobao.com     768,2            767,8            0,0%
vkontakte.ru   28,3             27,8             1,7%
wordpress.com  112,2            111,6            0,5%
yandex.ru      129,8            129,2            0,4%
conduit.com    136,1            135,6            0,3%
ebay.com       84,4             83,3             1,4%
fc2.com        145,3            142,9            1,7%
linkedin.com   80,7             80,2             0,6%
mail.ru        105,5            104,3            1,2%
msn.com        225,5            224,9            0,3%
wikipedia.org  53,6             53,6             0,0%
yahoo.com      90,2             89,4             0,9%
youtube.com    151,4            150,5            0,6%

summary        2495,3           2480,5           0,6%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760807</commentid>
    <comment_count>18</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-11-07 09:58:22 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I&apos;ve measured the pageload time with Methanol using the syscall set that is enough to load pages correctly on Qt on an x86/64 machine. I ran the tests on sites that can be found on alexa top50. The goal of the measurement was that whether applying seccomp filters causes relevant slow-down on real world examples. I&apos;ve observed ~1% slow-down using these sites.
&gt; This table contains the times with and without seccomp filters. Each page was loaded 30 times, the maximal variance was 3%.
&gt; 
&gt; test site      w/ libseccomp    w/o libseccomp   difference
&gt; 
&gt; blogger.com    31,3             31               0,9%
&gt; facebook.com   53,3             52,9             0,8%
&gt; google.com     16,2             16               1,3%
&gt; live.com       18,2             17,9             1,7%
&gt; microsoft.com  120,9            119,8            0,9%
&gt; qq.com         144,2            141,7            1,8%
&gt; taobao.com     768,2            767,8            0,0%
&gt; vkontakte.ru   28,3             27,8             1,7%
&gt; wordpress.com  112,2            111,6            0,5%
&gt; yandex.ru      129,8            129,2            0,4%
&gt; conduit.com    136,1            135,6            0,3%
&gt; ebay.com       84,4             83,3             1,4%
&gt; fc2.com        145,3            142,9            1,7%
&gt; linkedin.com   80,7             80,2             0,6%
&gt; mail.ru        105,5            104,3            1,2%
&gt; msn.com        225,5            224,9            0,3%
&gt; wikipedia.org  53,6             53,6             0,0%
&gt; yahoo.com      90,2             89,4             0,9%
&gt; youtube.com    151,4            150,5            0,6%
&gt; 
&gt; summary        2495,3           2480,5           0,6%

Thanks for doing this! It is really good to have these measurements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785008</commentid>
    <comment_count>19</comment_count>
      <attachid>178024</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-12-06 10:14:06 -0800</bug_when>
    <thetext>Created attachment 178024
Work in progress of SeccompFilters v5

I have updated the patch, now we need WebKit at hash 4a0b22f1bf4c3ea7553ab4655c4d16d0312cc683 and Qt5 r40 to build WK with it.
The system calls that are also needed for a non-minimal Qt build to run Methanol tests properly  can be found in SeccompFiltersQt.cpp.

After some attempts to limit open&apos;s parameter I see why we should do syscall hijacking in run-time and why we can&apos;t use libseccomp for it. One of the causes is threading. I will attach a file that contains the open calls by WebProcess after loading the rules. When I took limitation for the first parameter this way

  // addRule(SCMP_ACT_ALLOW, SCMP_SYS(open));
  const char* filePath = &quot;/proc/self/maps&quot;; // it is the first file that should be opened after loading the filters
  uint64t convertedFilePath = (uint64_t) filePath; // because SCMP_CMP should be used with argument type scmp_datum_t (uint64_t)
  seccomp_rule_add(m_context, SCMP_SYS_ALLOW, SCMP_SYS(open), 1, SCMP_CMP(0, SCMP_CMP_EQ, convertedFilePath, convertedFilePath)));

the WebProcess crashes when it tries to reach that file despite of it is on the whitelist. I experimented also with file descriptor argument, the same error, &quot;Bad system call&quot;. The debugging&apos;s result is that WebProcess crashes in Source/WTF/wtf/StackBounds.cpp in method WTF::StackBounds::initialize at line

  pthread_getattr_np(thread, &amp;sattr);

If I interpreted it correctly, the problem is an other thread doesn&apos;t see the rule we made in the main thread. Do you have any idea for it?

The other problem: we will only know the needed caches&apos; paths after seccomp filters are activated, but we should take limitations for them statically, so we cannot add them to the whitelist simply. What do you think, will libseccomp support some kind of wildcard/regexp in respect of parameters? So what would be the right track: waiting for libseccomp&apos;s solution, or use an own for it and make a hybrid one by using libseccomp and raw kernel headers too?

(I successfully gained the limited open&apos;s parameter in run-time with the help of http://lxr.free-electrons.com/source/samples/seccomp/bpf-direct.c but it is strongly platform-dependent because of the registers. In any case with this we can examine the file&apos;s path in run-time and make some more rule.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785011</commentid>
    <comment_count>20</comment_count>
      <attachid>178025</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-12-06 10:18:26 -0800</bug_when>
    <thetext>Created attachment 178025
Opened files by QtWebProcess

It were made with strace, shows the open calls after loading seccomp filters. These files are needed to display Google.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785018</commentid>
    <comment_count>21</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-12-06 10:30:41 -0800</bug_when>
    <thetext>I have almost forgotten, I used ifdefs to allow syscalls for 32 and 64 bit systems, e.g.

#ifdef __x86_64__
    addRule(SCMP_ACT_ALLOW, SCMP_SYS(lseek));
#else
#ifdef __i386__
    addRule(SCMP_ACT_ALLOW, SCMP_SYS(_llseek));
#endif
#endif

What do you think about it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787686</commentid>
    <comment_count>22</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-12-10 13:44:38 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; I have almost forgotten, I used ifdefs to allow syscalls for 32 and 64 bit systems, e.g.
&gt; 
&gt; #ifdef __x86_64__
&gt;     addRule(SCMP_ACT_ALLOW, SCMP_SYS(lseek));
&gt; #else
&gt; #ifdef __i386__
&gt;     addRule(SCMP_ACT_ALLOW, SCMP_SYS(_llseek));
&gt; #endif
&gt; #endif
&gt; 
&gt; What do you think about it?

Hi Nandor,

I&apos;m glad to tell you that I&apos;m back on working on this issue. I&apos;m right now implementing the syscall broker and some improvements to libseccomp itself. I&apos;m redesigning the Seccomp class on WK to make it more flexible and with less ifdef&apos;s (if any). I&apos;ll try to uploading ASAP as soon as I have something working.

Cheers,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801545</commentid>
    <comment_count>23</comment_count>
      <attachid>181544</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-07 12:30:21 -0800</bug_when>
    <thetext>Created attachment 181544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801556</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-07 12:36:30 -0800</bug_when>
    <thetext>Attachment 181544 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/As...&quot; exit_code: 1
Source/WebKit2/Shared/linux/OpenSyscall.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 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>801557</commentid>
    <comment_count>25</comment_count>
      <attachid>181545</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-07 12:38:06 -0800</bug_when>
    <thetext>Created attachment 181545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801559</commentid>
    <comment_count>26</comment_count>
      <attachid>181545</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-07 12:39:27 -0800</bug_when>
    <thetext>Comment on attachment 181545
Patch

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

&gt; Source/cmake/OptionsEfl.cmake:82
&gt; +WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SECCOMP_FILTERS ON)

In case we land this patch, this will be set to OFF. It is ON here to make it sure that the patch builds correctly on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801561</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-07 12:41:46 -0800</bug_when>
    <thetext>Attachment 181545 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Sou...&quot; exit_code: 1
Source/WebKit2/Shared/linux/OpenSyscall.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 26 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>801562</commentid>
    <comment_count>28</comment_count>
      <attachid>181545</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-07 12:44:44 -0800</bug_when>
    <thetext>Comment on attachment 181545
Patch

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

&gt;&gt; Source/WebKit2/Shared/linux/OpenSyscall.cpp:42
&gt;&gt; +COMPILE_ASSERT(O_RDONLY == 0, O_RDONLY);
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

COMPILE_ASSERT(O_RDONLY + 1 == 1, O_RDONLY); passes, but IMO is ugly.

I need these asserts to make sure the value of these flags matches my assumptions. Looks like the spec doesn&apos;t mandate a value to this constants, different libc&apos;s might give my different values (although I think this is very unlikely).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801568</commentid>
    <comment_count>29</comment_count>
      <attachid>181545</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-07 12:50:37 -0800</bug_when>
    <thetext>Comment on attachment 181545
Patch

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

&gt;&gt;&gt; Source/WebKit2/Shared/linux/OpenSyscall.cpp:42
&gt;&gt;&gt; +COMPILE_ASSERT(O_RDONLY == 0, O_RDONLY);
&gt;&gt; 
&gt;&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; 
&gt; COMPILE_ASSERT(O_RDONLY + 1 == 1, O_RDONLY); passes, but IMO is ugly.
&gt; 
&gt; I need these asserts to make sure the value of these flags matches my assumptions. Looks like the spec doesn&apos;t mandate a value to this constants, different libc&apos;s might give my different values (although I think this is very unlikely).

I think the style script expects: COMPILE_ASSERT(!O_RDONLY, O_RDONLY);

But really, I don&apos;t know if it is better in this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801571</commentid>
    <comment_count>30</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-07 12:55:17 -0800</bug_when>
    <thetext>How does this relate to bug 90005? Until there is consensus on the proper way to move forward with sandboxing, I don&apos;t think this should be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802079</commentid>
    <comment_count>31</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-07 23:36:13 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; How does this relate to bug 90005? Until there is consensus on the proper way to move forward with sandboxing, I don&apos;t think this should be landed.

This is a different approach for sandboxing the render/plugin/network process on Linux but not an competitor to the setuid sandbox. Chromium is moving towards Seccomp Filters on Linux, but not exclusively [1]. It is actually stacking seccomp-bpf (an approach similar to this patch) on top of the setuid sandbox (something like bug 90005) [2].

I would still appreciate comments to this patch from you and other reviewers even though you marked it as r-.

A good start would be having a look at the unit tests [3]. The SetUp() method is a nice example of how a port can set some filesystem policies.

[1] http://blog.cr0.org/2012/09/introducing-chromes-next-generation.html
[2] http://www.insanitybit.com/2012/08/14/chrome-seccomp-bpf-sandbox/
[3] Tools/TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802119</commentid>
    <comment_count>32</comment_count>
      <attachid>181667</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-08 00:53:58 -0800</bug_when>
    <thetext>Created attachment 181667
Patch

Call for comments, not be landed or officially reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802187</commentid>
    <comment_count>33</comment_count>
      <attachid>181667</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-08 03:17:22 -0800</bug_when>
    <thetext>Comment on attachment 181667
Patch

Attachment 181667 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15755131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802196</commentid>
    <comment_count>34</comment_count>
      <attachid>181667</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-08 03:55:46 -0800</bug_when>
    <thetext>Comment on attachment 181667
Patch

Attachment 181667 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15741999</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807377</commentid>
    <comment_count>35</comment_count>
      <attachid>182790</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-15 09:29:21 -0800</bug_when>
    <thetext>Created attachment 182790
Patch

Updated patch: add more syscalls and tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815769</commentid>
    <comment_count>36</comment_count>
      <attachid>184566</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-24 13:24:38 -0800</bug_when>
    <thetext>Created attachment 184566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815785</commentid>
    <comment_count>37</comment_count>
      <attachid>184566</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-24 13:32:41 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

This patch is now ready for review. The main change from the latest version is the addition of file policies and support for Qt.

Whitepaper with a high level overview of this implementation:
https://docs.google.com/document/d/1Fe2ZSEazdqzxBWHDjGF8WuYwsI6-C95Ljmn-QiMyl94/edit

Incremental patch set on my development branch:
http://www.tmpsantos.com.br/cgi-bin/gitweb.cgi?p=webkit.git;a=shortlog;h=refs/heads/seccomp_filters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815835</commentid>
    <comment_count>38</comment_count>
      <attachid>184566</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-24 14:31:00 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

Attachment 184566 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16110264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815910</commentid>
    <comment_count>39</comment_count>
      <attachid>184566</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-24 15:35:42 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

Attachment 184566 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16072970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815970</commentid>
    <comment_count>40</comment_count>
      <attachid>184566</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-24 16:37:49 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

Attachment 184566 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16112158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816384</commentid>
    <comment_count>41</comment_count>
      <attachid>184566</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 01:45:53 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

Attachment 184566 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16119210

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816415</commentid>
    <comment_count>42</comment_count>
      <attachid>184566</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 02:42:26 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

Attachment 184566 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16112413</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816492</commentid>
    <comment_count>43</comment_count>
      <attachid>184566</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-25 04:54:25 -0800</bug_when>
    <thetext>Comment on attachment 184566
Patch

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

In general IMHO seccomp filters are the way to go. I have a few smaller comments below.

&gt; Source/WTF/wtf/Assertions.cpp:352
&gt; +#if !ENABLE(SECCOMP_FILTERS)

Then ChangeLog explains the existance of this #ifdef, but I think it would be also very useful to have as a comment in the code here.

&gt; Source/WebKit2/WebProcess/efl/SeccompFiltersEfl.cpp:52
&gt; +void SeccompFiltersEfl::platformInitialize()

A lot of the things in SeccompFiltersEfl is duplicated in SeccompFiltersQt. Why not share more settings?

It might also be worth documenting where certain policies originate from, i.e. /run/shm (it is /dev/shm on my machine?) from shared memory for example.

Alternatively would it make sense if the policies didn&apos;t come from .cpp files but from external files that are perhaps parsed at build time, to allow for easier sharing of settings between ports _and_ allow for better granularity with regards to the enabling/disabling of features, such as GStreamer?

&gt; Source/WebKit2/WebProcess/efl/SeccompFiltersEfl.cpp:71
&gt; +    ADD_POLICY(directoryPolicy, String::fromUTF8(efreet_data_home_get()) + &quot;/WebKitEfl&quot;, ReadAndWrite);
&gt; +    ADD_POLICY(directoryPolicy, String::fromUTF8(efreet_cache_home_get()) + &quot;/WebKitEfl&quot;, ReadAndWrite);

Is this something that should come from the application layer perhaps? A setting on the API level?

&gt; Source/WebKit2/WebProcess/efl/SeccompFiltersEfl.cpp:106
&gt; +        // is not right. We need to check with these directories on gstreamer
&gt; +        // can be configured.

Should this be #ifdef&apos;ed via USE(GSTREAMER) then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826493</commentid>
    <comment_count>44</comment_count>
      <attachid>186868</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-02-06 09:09:44 -0800</bug_when>
    <thetext>Created attachment 186868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827484</commentid>
    <comment_count>45</comment_count>
      <attachid>186868</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-02-07 07:17:12 -0800</bug_when>
    <thetext>Comment on attachment 186868
Patch

Major changes from the previous patch:

- Addressed issues pointed by Simon (thanks for reviewing).
- Directories paths for databases, cache, storage, etc are now coming from the UIProcess.
- Most of the directories and policies are now shared between EFL and Qt.
- Added more tests: threaded stress test that executes 15k syscalls (hooked into policies) spread in 5 threads.
- Ready to be enabled on the EFL and Qt bots if necessary. No apparent regressions on my tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831766</commentid>
    <comment_count>46</comment_count>
      <attachid>186868</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-13 02:51:30 -0800</bug_when>
    <thetext>Comment on attachment 186868
Patch

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

&gt; Source/WTF/ChangeLog:8
&gt; +        Do no setup a handler for SIGSYS when Seccomp Filters are enabled.

do no?

&gt; Source/WebCore/ChangeLog:6
&gt; +        Make the DATA_DIR global since it is now need on WebCore and WebKit2.

needed* on -&gt; for

&gt; Source/WebKit2/ChangeLog:25
&gt; +        The broker process should be initialized as early as possible on the
&gt; +        sandboxed process main, because it only does a fork(), which is cheap

main process ?

&gt; Source/WebKit2/ChangeLog:31
&gt; +        Currently the broker supports only directory policies, but file policies
&gt; +        could be implemented in the future to make narrower the filesystem
&gt; +        exposed to the WebProcess.

only supports*

&gt; Source/WebKit2/Shared/linux/SeccompFilters/OpenSyscall.cpp:157
&gt; +    // things like the entry does not exist.

like if the ...

&gt; Source/WebKit2/Shared/linux/SeccompFilters/OpenSyscall.cpp:180
&gt; +bool OpenSyscall::decode(CoreIPC::ArgumentDecoder* decoder)
&gt; +{
&gt; +    if (!decoder-&gt;decode(m_path))
&gt; +        return false;
&gt; +    if (!decoder-&gt;decode(m_flags))
&gt; +        return false;
&gt; +
&gt; +    return decoder-&gt;decode(m_mode);
&gt; +}

you dont need to decode type()?

&gt; Source/WebKit2/Shared/linux/SeccompFilters/OpenSyscall.h:53
&gt; +    // Syscall implementation.
&gt; +    virtual void setResult(const SyscallResult*);

Any reason to not call it SystemCall ?

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp:67
&gt; +    int m_ncpus;

actual cpus or cpu threads?

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp:72
&gt; +static ssize_t sendMessage(int socket, void* data, size_t size, int fd=-1)

space around =

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp:155
&gt; +static void registerSysSignalHandler()

I would call it SystemSignalHandler...

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp:238
&gt; +    // Malloc will sometimes check the number of CPUs present on the system

will sometime*

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp:247
&gt; +bool SeccompBrokerClient::handleIfTryingToBlockSysSignal(ucontext_t* ucontext) const

handleAttempt...?

&gt; Source/WebKit2/Shared/linux/SeccompFilters/SyscallPolicy.cpp:205
&gt; +        // Mime type resolution.

MIME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832962</commentid>
    <comment_count>47</comment_count>
      <attachid>186868</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-14 04:44:14 -0800</bug_when>
    <thetext>Comment on attachment 186868
Patch

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

&gt; Source/WebKit2/WebProcess/qt/SeccompFiltersWebProcessQt.cpp:56
&gt; +    const char* path = getenv(&quot;QTDIR&quot;);
&gt; +    if (path) {
&gt; +        QFileInfo qtDir(QString::fromUtf8(path));
&gt; +        ADD_POLICY(&amp;m_policy, Directory, qtDir.canonicalFilePath(), ReadAndWrite);
&gt; +    }

QTDIR is dead :)

You could use QLibraryInfo::location(QLibraryInfo::PrefixPath) instead, but for distros that&apos;s going to be /usr, which sort of defeats the purpose :)

So I think parts of the paths of QLibraryInfo would make more sense to add, i.e. ArchData, LibrariesPath, LibrariesExecutablesPath, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832963</commentid>
    <comment_count>48</comment_count>
      <attachid>186868</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-14 04:46:03 -0800</bug_when>
    <thetext>Comment on attachment 186868
Patch

From a high-level perspective this looks good to me. I like how there&apos;s very little duplication between Efl and Qt. I think the default paths that remain can be fine-tuned in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837474</commentid>
    <comment_count>49</comment_count>
      <attachid>189320</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-02-20 08:06:02 -0800</bug_when>
    <thetext>Created attachment 189320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837662</commentid>
    <comment_count>50</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-02-20 12:46:48 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; Created an attachment (id=189320) [details]
&gt; Patch

Andersca, Kling: The patch is ready for review. It is fully functional for EFL and Qt, has unit tests for all the features and documentation [1].

The implementation for GTK is ongoing on bug 110014 and being coordinated with the GTK developers. I will propose enabling it by default on the EFL bots on bug 110365 as soon as it lands.

Thanks a lot Kenneth and Simon for pre-reviewing.

[1] https://docs.google.com/document/d/1Fe2ZSEazdqzxBWHDjGF8WuYwsI6-C95Ljmn-QiMyl94/edit?usp=sharing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846487</commentid>
    <comment_count>51</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-04 07:47:22 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; Created an attachment (id=189320) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Andersca, Kling: The patch is ready for review. It is fully functional for EFL and Qt, has unit tests for all the features and documentation [1].
&gt; 
&gt; The implementation for GTK is ongoing on bug 110014 and being coordinated with the GTK developers. I will propose enabling it by default on the EFL bots on bug 110365 as soon as it lands.
&gt; 
&gt; Thanks a lot Kenneth and Simon for pre-reviewing.
&gt; 
&gt; [1] https://docs.google.com/document/d/1Fe2ZSEazdqzxBWHDjGF8WuYwsI6-C95Ljmn-QiMyl94/edit?usp=sharing

Any chances of getting this patch reviewed this week?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849125</commentid>
    <comment_count>52</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 11:30:45 -0800</bug_when>
    <thetext>andersca, could you have a look at this one?

It has backing from EFL, Qt and GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859304</commentid>
    <comment_count>53</comment_count>
      <attachid>194031</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-20 06:07:08 -0700</bug_when>
    <thetext>Created attachment 194031
Patch

Refactoring. Made it easier to read by removing things like macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865249</commentid>
    <comment_count>54</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-28 01:34:28 -0700</bug_when>
    <thetext>Some WK2 owner could please review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869125</commentid>
    <comment_count>55</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-04-04 05:30:21 -0700</bug_when>
    <thetext>May a WebKit2 Owner please review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869581</commentid>
    <comment_count>56</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-04-04 23:33:52 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; May a WebKit2 Owner please review this patch?

Thiago - I haven&apos;t followed this, is there a pre-review from someone who understands the Linux details? I&apos;m not an expert on the low-level Linux APIs being used here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869616</commentid>
    <comment_count>57</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-04-05 01:06:37 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; &gt; May a WebKit2 Owner please review this patch?
&gt; 
&gt; Thiago - I haven&apos;t followed this, is there a pre-review from someone who understands the Linux details? I&apos;m not an expert on the low-level Linux APIs being used here.

Qt is represented here by Simon, which did a pre-review:
https://bugs.webkit.org/show_bug.cgi?id=89875#c48

EFL by Kenneth that also pre-reviewed:
https://bugs.webkit.org/show_bug.cgi?id=89875#c52

And GTK folks are following it in a different bug:
https://bugs.webkit.org/show_bug.cgi?id=110014#c5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869789</commentid>
    <comment_count>58</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-05 08:54:13 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; (In reply to comment #55)
&gt; &gt; &gt; May a WebKit2 Owner please review this patch?
&gt; &gt; 
&gt; &gt; Thiago - I haven&apos;t followed this, is there a pre-review from someone who understands the Linux details? I&apos;m not an expert on the low-level Linux APIs being used here.

I thought the idea of the owners thing was not that the owner reviewing the patch understands everything, but just checks the patch looks sane in general, relying on port reviewers for the real review. Otherwise it&apos;s impossible to land patches like this one. On the other hand I understand it&apos;s not easy for owners to know if the patch has been approved by a port reviewers, since we can&apos;t set r+ flag. Maybe we can try to find ways to make this easier. For example, allow port reviewers to set r+, but settings also cq-, then the owner can set cq+, or remove the cq flag or simply comment whether he approves the patch or not. We can also add a new bugzilla keyword, that is only added to bugs that has already been reviewed but are just waiting for an owner to approve it to make it easier to find patches blocked by webkit2 owners. 
 
&gt; Qt is represented here by Simon, which did a pre-review:
&gt; https://bugs.webkit.org/show_bug.cgi?id=89875#c48
&gt; 
&gt; EFL by Kenneth that also pre-reviewed:
&gt; https://bugs.webkit.org/show_bug.cgi?id=89875#c52
&gt; 
&gt; And GTK folks are following it in a different bug:
&gt; https://bugs.webkit.org/show_bug.cgi?id=110014#c5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869922</commentid>
    <comment_count>59</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-04-05 11:52:41 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #57)
&gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; (In reply to comment #55)
&gt; &gt; &gt; &gt; May a WebKit2 Owner please review this patch?
&gt; &gt; &gt; 
&gt; &gt; &gt; Thiago - I haven&apos;t followed this, is there a pre-review from someone who understands the Linux details? I&apos;m not an expert on the low-level Linux APIs being used here.
&gt; 
&gt; I thought the idea of the owners thing was not that the owner reviewing the patch understands everything, but just checks the patch looks sane in general, relying on port reviewers for the real review. 

Yes, that&apos;s why I asked for pointers to the pre-reviews, which were graciously provided. I&apos;ll do my best to do a quick sanity check today. I&apos;m actually really excited to see WebProcess sandboxing come to Linux.

&gt; Otherwise it&apos;s impossible to land patches like this one. On the other hand I understand it&apos;s not easy for owners to know if the patch has been approved by a port reviewers, since we can&apos;t set r+ flag. Maybe we can try to find ways to make this easier. For example, allow port reviewers to set r+, but settings also cq-, then the owner can set cq+, or remove the cq flag or simply comment whether he approves the patch or not. We can also add a new bugzilla keyword, that is only added to bugs that has already been reviewed but are just waiting for an owner to approve it to make it easier to find patches blocked by webkit2 owners. 

 I think something like that (or a new bugzilla flag) for module owner sign-off makes a lot of sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871242</commentid>
    <comment_count>60</comment_count>
      <attachid>194031</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-04-08 15:48:05 -0700</bug_when>
    <thetext>Comment on attachment 194031
Patch

This looks fine to me, given the pre-reviews from various ports and the lack of effect on cross-platform code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871536</commentid>
    <comment_count>61</comment_count>
      <attachid>194031</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-09 01:47:18 -0700</bug_when>
    <thetext>Comment on attachment 194031
Patch

Rejecting attachment 194031 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--non-interactive&apos;, 194031, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

/Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-commit-queue.appspot.com/results/17599093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871547</commentid>
    <comment_count>62</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-04-09 02:06:16 -0700</bug_when>
    <thetext>Committed r147998: &lt;http://trac.webkit.org/changeset/147998&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156368</attachid>
            <date>2012-08-03 07:14:49 -0700</date>
            <delta_ts>2012-08-03 07:20:50 -0700</delta_ts>
            <desc>Work in progress of SeccompFilters v1</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>26079</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWJjYmRiMC4uMjllM2VkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL3NlY2NvbXAvU2Fu
ZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcAorCiAg
ICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwCiAgICAgU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIApAQCAtMTE3LDYgKzEyMSw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGlj
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL3NlY2NvbXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0Mvc291cCIKQEAgLTE1Nyw2ICsxNjIsMTIgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKICAgICAke0xJQlNPVVAyNF9MSUJSQVJJRVN9CiApCiAKK0lGKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgTElTVCAoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQorCiBMSVNUIChB
UFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCiAgICAgZWZsL01haW5FZmwuY3BwCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCA2ZjhhYTc4Li40ZGM0Y2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTg0LDYgKzg0LDkg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gp
CiAgICAgICAgIEhhbmRsZSogbV9kYXRhOworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOworI2VuZGlmCiAjZWxzZQogICAgICAgICBIYW5k
bGUgbV9lbXB0eUhhbmRsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzE5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpICYmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKCkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKK30KKwordm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0Cit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFoYW5kbGUu
bV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFkb3B0UmVmKG5l
dyBTYW5kYm94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sK
K30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29u
c3QgSGFuZGxlJikKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24o
KQoreworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmludmFsaWRhdGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OkhhbmRsZUFycmF5KCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6On5IYW5kbGVBcnJheSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkKK3sKK30KKworc2l6ZV90IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7
Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KQoreworICAgIHJldHVybiBtX2VtcHR5SGFuZGxlOwor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZUFycmF5
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjljY2M5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMu
Y3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgc2VjY29tcF9ydWxlX2FkZF9v
cl9jcmFzaChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAuLi4pIFwKKyAgICBpZiAo
c2VjY29tcF9ydWxlX2FkZChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAjI19fVkFf
QVJHU19fKSAhPSAwKSBcCisgICAgICAgIENSQVNIKCk7CisKK1NlY2NvbXBGaWx0ZXJzOjpTZWNj
b21wRmlsdGVycygpCisgICAgOiBtX3NlY2NvbXBDb250ZXh0KDApCit7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fc2VjY29tcENvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfVFJBUCk7Cisj
ZWxzZQorICAgIG1fc2VjY29tcENvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfS0lMTCk7
CisjZW5kaWYKKworICAgIC8vIE5vIGJlaW5nIGFibGUgdG8gaW5pdGlhbGl6ZSBzZWNjb21wIGlz
IGNvbnNpZGVyZWQgYSBzZWN1cml0eQorICAgIC8vIGhvbGUgYW5kIHRoZSBhcHBsaWNhdGlvbiBz
aG91bGQgbm90IGdvIGJleW9uZCB0aGlzIHBvaW50LiBJbiBmYWN0LAorICAgIC8vIGV2ZXJ5IGVy
cm9yIGhlcmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZmF0YWwuCisgICAgaWYgKCFtX3NlY2NvbXBD
b250ZXh0KQorICAgICAgICBDUkFTSCgpOworCisgICAgaWYgKHNlY2NvbXBfYXR0cl9zZXQobV9z
ZWNjb21wQ29udGV4dCwgU0NNUF9GTFRBVFJfQUNUX0JBREFSQ0gsIFNDTVBfQUNUX0tJTEwpKQor
ICAgICAgICBDUkFTSCgpOworCisgICAgc2V0dXBGaWx0ZXJzKCk7Cit9CisKK1NlY2NvbXBGaWx0
ZXJzOjp+U2VjY29tcEZpbHRlcnMoKQoreworICAgIHNlY2NvbXBfcmVsZWFzZShtX3NlY2NvbXBD
b250ZXh0KTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyczo6c2V0dXBGaWx0ZXJzKCkKK3sKKyAg
ICAvLyBQcmlvcml0aXplIHRoZSBhcmUgdGhlIG1vc3QgZnJlcXVlbnQgY2FsbHMuCisgICAgc2Vj
Y29tcF9zeXNjYWxsX3ByaW9yaXR5KG1fc2VjY29tcENvbnRleHQsIFNDTVBfU1lTKGNsb2NrX2dl
dHRpbWUpLCAyMDApOworICAgIHNlY2NvbXBfc3lzY2FsbF9wcmlvcml0eShtX3NlY2NvbXBDb250
ZXh0LCBTQ01QX1NZUyh3cml0ZSksIDE5OSk7CisKKyAgICAvLyBXQVJOSU5HIQorICAgIC8vCisg
ICAgLy8gVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGFuZCBkb2Vzbid0IGFkZCBhbnkgYWRk
aXRpb25hbCBzZWN1cml0eSBhdCBhbGwKKyAgICAvLyBpbiB0aGUgd2F5IGl0IGltcGxlbWVudGVk
IG5vdy4gSXQgaXMgb25seSAgYmxvY2tpbmcgc3lzY2FsbHMgd2UgYXJlIG5vdAorICAgIC8vIHVz
aW5nLCByZWR1Y2luZyB0aGUga2VybmVsIGF0dGFjayBzdXJmYWNlLgorICAgIC8vCisgICAgLy8g
VGhlIGxpc3QgYmVsbG93IHN1bW1hcml6ZXMgdGhlIHN5c2NhbGwgd2hpdGVsaXN0IG5lZWRlZCBi
eSBhIEVGTAorICAgIC8vIG1pbmltYWwgYnVpbGQgdG8gbG9hZCBodHRwczovL2J1cy53ZWJraXQu
b3JnLiBXZSBzaG91bGQgbm93IGFuYWx5emUgb25lIGJ5CisgICAgLy8gb25lLCBhbmQgaWYgYSBz
eXNjYWxsIGlzIHJlYWxseSBuZWVkIHRvIGJlIGFsbG93ZWQsIHdlIG11c3QgcmVzdHJpY3QgdGhl
CisgICAgLy8gcGFyYW1ldGVycyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBXZSBzaG91bGQgYWxzbyBt
b3ZlIGJhY2tlbmQgZGVwZW5kZW5kCisgICAgLy8gc3lzY2FsbHMgdG8gcGxhdGZvcm1TZXR1cEZp
bHRlcnMoKS4KKyAgICAvLworICAgIC8vIGxpYnNlY2NvbXAgc3VwcG9ydHMgeDg2LTY0LCBidXQg
bXkgdGVzdHMgd2VyZSBjb25kdWN0ZWQgb24gYSB4ODYKKyAgICAvLyBtYWNoaW5lIHJ1bm5pbmcg
VWJ1bnR1IDEyLjA0LiBJdCBpcyB1bmxpa2VseSB0aGF0IGl0IHdpbGwgd29yayBvdXQgb2YgdGhl
CisgICAgLy8gYm94IGluIG90aGVyIGVudmlyb25tZW50IHNpbmNlIGRpZmZlcmVudCB2ZXJzaW9u
cyBvZiBsaWJjIG15IHVzZQorICAgIC8vIGRpZmZlcmVudCBzeXNjYWxscyBmb3IgZG9pbmcgdGhl
IHNhbWUgdGhpbmcuCisKKyAgICAvLyBDbG9jay4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2Ny
YXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhjbG9ja19nZXR0
aW1lKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0
LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0dGltZW9mZGF5KSwgMCk7CisgICAgc2VjY29t
cF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVModGltZSksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21w
Q29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHRpbWVzKSwgMCk7CisKKyAgICAvLyBU
aHJlYWQgc3luY2hyb25pemF0aW9uLCBwcm9jZXNzIG1hbmFnZW1lbnQgYW5kIHN5c3RlbSBpbmZv
cm1hdGlvbi4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQs
IFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhjbG9uZSksIDApOworICAgIHNlY2NvbXBfcnVsZV9h
ZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGV4
aXQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQs
IFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhleGl0X2dyb3VwKSwgMCk7CisgICAgc2VjY29tcF9y
dWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZnV0ZXgpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENv
bnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRldWlkMzIpLCAwKTsKKyAgICBzZWNj
b21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhnZXRybGltaXQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1f
c2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRydXNhZ2UpLCAwKTsK
KyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNU
X0FMTE9XLCBTQ01QX1NZUyhnZXR1aWQzMiksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3Jf
Y3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1sb2NrKSwg
MCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMocnRfc2lnYWN0aW9uKSwgMCk7CisgICAgc2VjY29tcF9ydWxl
X2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
cnRfc2lncHJvY21hc2spLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2Vj
Y29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzY2hlZF9nZXRhZmZpbml0eSks
IDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNldF9yb2J1c3RfbGlzdCksIDApOworICAgIHNlY2NvbXBf
cnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKHVnZXRybGltaXQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2Vj
Y29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1bmFtZSksIDApOworCisgICAg
Ly8gVXNlZCBieSBnX3N5c3RlbV90aHJlYWRfc2V0X25hbWUoKS4KKyAgICBzZWNjb21wX3J1bGVf
YWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhw
cmN0bCksIDApOworCisgICAgLy8gRmlsZSBkZXNjcmlwdG9yIG9wZXJhdGlvbnMgb24gYWxyZWFk
eSBvcGVuZWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNo
KG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhfbGxzZWVrKSwgMCk7
CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoX25ld3NlbGVjdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGFjY2Vz
cyksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwg
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb3NlKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2Fk
ZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZHVw
KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXBvbGxfY3RsKSwgMCk7CisgICAgc2VjY29tcF9ydWxl
X2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
ZXBvbGxfd2FpdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21w
Q29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZjbnRsNjQpLCAwKTsKKyAgICBzZWNj
b21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhmc3RhdDY0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnN0YXRmcyksIDApOworICAg
IHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGZzeW5jKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaCht
X3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnRydW5jYXRlKSwgMCk7
CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoZ2V0ZGVudHMpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29y
X2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50
czY0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0
LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoaW5vdGlmeV9pbml0KSwgMCk7CisgICAgc2VjY29t
cF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMoaW9jdGwpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29t
cENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtbWFwMiksIDApOworICAgIHNlY2Nv
bXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKHBpcGUpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29t
cENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhwb2xsKSwgMCk7CisgICAgc2VjY29t
cF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMocmVhZCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21w
Q29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbGVjdCksIDApOworICAgIHNlY2Nv
bXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKHdyaXRlKSwgMCk7CisKKyAgICAvLyBTb2NrZXQgb3BlcmF0aW9ucy4KKyAgICBzZWNj
b21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhjb25uZWN0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0c29ja29wdCksIDApOwor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHJlY3YpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNo
KG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzZW5kKSwgMCk7Cisg
ICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoc29ja2V0KSwgMCk7CisKKyAgICAvLyBNZW1vcnkgcmVsYXRlZCBzdHVm
Zi4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhicmspLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2Ny
YXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtYWR2aXNlKSwg
MCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMobXByb3RlY3QpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRk
X29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtdW5t
YXApLCAwKTsKKworICAgIC8vIEZJWE1FOiBOZWVkcyBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSdt
IG5vdCBzdXJlIGlmIHRoZXNlIGNhbGxzIGNhbiBiZQorICAgIC8vIGRvbmUgd2l0aG91dCBhbiBm
ZCwgdXNpbmcganVzdCBhIHBhdGggaW5zdGVhZC4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2Ny
YXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhldmVudGZkMiks
IDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKHN0YXQ2NCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHN0YXRm
cyksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwg
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHVubGluayksIDApOworCisgICAgLy8gRklYTUU6IEFs
bG93aW5nIHRoZSBXZWJQcm9jZXNzIHRvIHBlcmZvcm0gb3BlbigpIG1ha2VzIHRoaXMgZWZmb3J0
CisgICAgLy8gYmFzaWNhbGx5IHVzZWxlc3MuIEl0IGlzIHBvc3NpYmxlIHRvIGhpamFjayB0aGUg
c3lzY2FsbCBhbmQgZGVsZWdhdGUKKyAgICAvLyB0aGUgb3BlbmluZyBvZiBmaWxlcyB0byB0aGUg
VUlQcm9jZXNzIChob3BlZnVsbHkpLiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAuCisgICAgc2VjY29t
cF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMob3BlbiksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21w
Q29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG9wZW5hdCksIDApOworCisgICAgcGxh
dGZvcm1TZXR1cEZpbHRlcnMoKTsKK30KKworYm9vbCBTZWNjb21wRmlsdGVyczo6bG9hZCgpCit7
CisgICAgcmV0dXJuIHNlY2NvbXBfbG9hZChtX3NlY2NvbXBDb250ZXh0KSA9PSAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVy
cy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTBkMzJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzX2gK
KyNkZWZpbmUgU2VjY29tcEZpbHRlcnNfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2luY2x1ZGUgPHNlY2NvbXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNl
Y2NvbXBGaWx0ZXJzIHsKK3B1YmxpYzoKKyAgICBTZWNjb21wRmlsdGVycygpOworICAgIHZpcnR1
YWwgflNlY2NvbXBGaWx0ZXJzKCk7CisKKyAgICBib29sIGxvYWQoKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHNldHVwRmlsdGVycygpOworICAgIHZvaWQgcGxhdGZvcm1TZXR1cEZpbHRlcnMoKTsK
KworICAgIHNjbXBfZmlsdGVyX2N0eCBtX3NlY2NvbXBDb250ZXh0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5k
aWYgLy8gU2VjY29tcEZpbHRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzhhZTMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNl
Y2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVk
ZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBTZWNjb21wRmlsdGVy
czo6cGxhdGZvcm1TZXR1cEZpbHRlcnMoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKaW5kZXggMTYyNzhhMy4u
NTEyYWU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJv
Y2Vzc01haW5FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlBy
b2Nlc3NNYWluRWZsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPEVjb3JlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVu
TG9vcC5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dlYlByb2Nlc3MuaD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTYyLDYgKzYzLDEzIEBAIFdLX0VYUE9SVCBp
bnQgV2ViUHJvY2Vzc01haW5FZmwoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgcmV0
dXJuIDE7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAgU2VjY29t
cEZpbHRlcnMgc2VjY29tcDsKKworICAgIGlmICghc2VjY29tcC5sb2FkKCkpCisgICAgICAgIHJl
dHVybiAxOworI2VuZGlmCisKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBX
VEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9G
aW5kTGliU2VjY29tcC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmY4NjZjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAK
KyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkKKyMgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisjICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisjCisjCisKK0lOQ0xVREUoRmluZFBrZ0NvbmZpZykKKworUEtHX0NIRUNLX01PRFVMRVMoTElC
U0VDQ09NUCBSRVFVSVJFRCBsaWJzZWNjb21wPj0xLjAuMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5k
ZXggM2MyMzMxNi4uNjY3OTQxNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTg5LDYgKzg5LDcg
QEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfSU5GTyBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQUdFX1ZJU0lCSUxJ
VFlfQVBJIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lT
VEVSX1BST1RPQ09MX0hBTkRMRVIgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfU0VDQ09NUF9GSUxURVJTIE9GRikKIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFET1dfRE9NIE9OKQogV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBPTikKQEAgLTk3LDYgKzk4
LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPX1RSQUNLIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9JTlRFTlRTIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9JTlRFTlRTX1RBRyBP
TikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUFJPQ0VTU19T
QU5EQk9YIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJf
VElNSU5HIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dPUktF
UlMgT04pCiAKQEAgLTE1Niw0ICsxNTgsOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICBGSU5EX1BB
Q0tBR0UoT3BlbkdMIFJFUVVJUkVEKQogRU5ESUYgKCkKIAoraWYoRU5BQkxFX1NFQ0NPTVBfRklM
VEVSUykKKyAgICBGSU5EX1BBQ0tBR0UoTGliU2VjY29tcCBSRVFVSVJFRCkKK0VORElGKCkKKwog
U0VUKENQQUNLX1NPVVJDRV9HRU5FUkFUT1IgVEJaMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFr
ZQppbmRleCA3ZWIzMzc1Li5mMDA4YTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0
RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBA
IC05MSw2ICs5MSw3IEBAIE1BQ1JPIChXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9SRVBBSU5UX1RIUk9UVExJTkcgIlRvZ2dsZSByZXBhaW50IHRo
cm90dGxpbmcgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9S
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSAiVG9nZ2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBw
b3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVD
SCAiVG9nZ2xlIFNjcmlwdGVkIFNwZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMgIlRvZ2dsZSBMaW51eCBzZWNjb21w
IGZpbHRlcnMgZm9yIHRoZSBXZWJQcm9jZXNzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfU0hBRE9XX0RPTSAiVG9nZ2xlIFNoYWRvdyBET00gc3VwcG9ydCIg
T0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFSRURfV09SS0VSUyAiVG9n
Z2xlIFNoYXJlZFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5F
KEVOQUJMRV9TUUxfREFUQUJBU0UgIlRvZ2dsZSBTUUwgRGF0YWJhc2UgU3VwcG9ydCIgT04pCkBA
IC0xMDksNiArMTEwLDcgQEAgTUFDUk8gKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9BVURJTyAiVG9nZ2xlIFdlYiBBdWRpbyBzdXBwb3J0
IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9JTlRFTlRTICJUb2dn
bGUgV2ViIEludGVudHMgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9XRUJfSU5URU5UU19UQUcgIlRvb2dsZSBIVE1MSW50ZW50RWxlbWVudCB0YWcgc3VwcG9y
dCIgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfUFJPQ0VTU19TQU5E
Qk9YICJUb29nbGUgV2ViUHJvY2VzcyBzYW5kYm94IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfV0VCX1NPQ0tFVFMgIlRvZ2dsZSBXZWIgU29ja2V0cyBzdXBw
b3J0IiBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX1RJTUlORyAiVG9n
Z2xlIFdlYiBUaW1pbmcgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9XT1JLRVJTICJUb2dnbGUgV2ViIFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQpkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFr
ZQppbmRleCBiMjQ2MjkxLi5jYjZhOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQpAQCAtNzksNiArNzksNyBA
QAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQKICNjbWFrZWRlZmluZTAx
IEVOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUKKyNjbWFrZWRlZmluZTAxIEVOQUJMRV9TRUNDT01QX0ZJ
TFRFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFET1dfRE9NCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfU0hBUkVEX1dPUktFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TTU9PVEhfU0NST0xM
SU5HCkBAIC05OCw2ICs5OSw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX0FVRElPCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX0lOVEVOVFMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9X
RUJfSU5URU5UU19UQUcKKyNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfUFJPQ0VTU19TQU5EQk9Y
CiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX1NPQ0tFVFMKICNjbWFrZWRlZmluZTAxIEVOQUJM
RV9XRUJfVElNSU5HCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfV09SS0VSUwpkaWZmIC0tZ2l0IGEv
VG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKaW5k
ZXggYmZhOWE5YS4uYTlkYjM0NSAxMDA2NDQKLS0tIGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxl
cworKysgYi9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCkBAIC0xNyw2ICsxNyw3IEBACiAgICAg
ICA8ZGVwIHBhY2thZ2U9ImVfZGJ1cyIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJlZXplIi8+CiAg
ICAgICA8ZGVwIHBhY2thZ2U9ImVmcmVldCIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJsaWJzZWNj
b21wIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvbWV0YW1vZHVsZT4KIApAQCAtMzksNiAr
NDAsOCBAQAogICA8cmVwb3NpdG9yeSB0eXBlPSJzdm4iIG5hbWU9ImVubGlnaHRlbm1lbnQub3Jn
IgogICAgICAgaHJlZj0iaHR0cDovL3N2bi5lbmxpZ2h0ZW5tZW50Lm9yZy9zdm4vZS90cnVuay8i
CiAgICAgICB0cnVuay10ZW1wbGF0ZT0iJShtb2R1bGUpcy8iLz4KKyAgPHJlcG9zaXRvcnkgdHlw
ZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5zZi5uZXQiCisgICAgICBocmVmPSJnaXQ6Ly9naXQuY29k
ZS5zZi5uZXQvcC8iLz4KIAogICA8YXV0b3Rvb2xzIGlkPSJjYWlybyIgYXV0b2dlbi1zaD0iY29u
ZmlndXJlIj4KICAgICA8ZGVwZW5kZW5jaWVzPgpAQCAtMjM5LDQgKzI0MiwxMCBAQAogICAgIDwv
ZGVwZW5kZW5jaWVzPgogICA8L2F1dG90b29scz4KIAorICA8YXV0b3Rvb2xzIGlkPSJsaWJzZWNj
b21wIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgorICAgICAgPGJyYW5jaCBtb2R1bGU9ImxpYnNl
Y2NvbXAvbGlic2VjY29tcCIKKyAgICAgICAgICByZXBvPSJnaXQuY29kZS5zZi5uZXQiCisgICAg
ICAgICAgdGFnPSIyYzg1MjBlMjNmMzA5OTQ5N2JhZmUwYzlkZTlhOTQ1MmE4Yjc1YmI0Ii8+Cisg
IDwvYXV0b3Rvb2xzPgorCiA8L21vZHVsZXNldD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156370</attachid>
            <date>2012-08-03 07:20:50 -0700</date>
            <delta_ts>2012-08-03 09:27:39 -0700</delta_ts>
            <desc>Work in progress of SeccompFilters v2</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>26084</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWJjYmRiMC4uMjllM2VkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL3NlY2NvbXAvU2Fu
ZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcAorCiAg
ICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwCiAgICAgU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIApAQCAtMTE3LDYgKzEyMSw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGlj
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL3NlY2NvbXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0Mvc291cCIKQEAgLTE1Nyw2ICsxNjIsMTIgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKICAgICAke0xJQlNPVVAyNF9MSUJSQVJJRVN9CiApCiAKK0lGKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgTElTVCAoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQorCiBMSVNUIChB
UFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCiAgICAgZWZsL01haW5FZmwuY3BwCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCA2ZjhhYTc4Li40ZGM0Y2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTg0LDYgKzg0LDkg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gp
CiAgICAgICAgIEhhbmRsZSogbV9kYXRhOworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOworI2VuZGlmCiAjZWxzZQogICAgICAgICBIYW5k
bGUgbV9lbXB0eUhhbmRsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzE5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpICYmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKCkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKK30KKwordm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0Cit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFoYW5kbGUu
bV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFkb3B0UmVmKG5l
dyBTYW5kYm94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sK
K30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29u
c3QgSGFuZGxlJikKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24o
KQoreworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmludmFsaWRhdGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OkhhbmRsZUFycmF5KCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6On5IYW5kbGVBcnJheSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkKK3sKK30KKworc2l6ZV90IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7
Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KQoreworICAgIHJldHVybiBtX2VtcHR5SGFuZGxlOwor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZUFycmF5
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWE0OGRhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMu
Y3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgc2VjY29tcF9ydWxlX2FkZF9v
cl9jcmFzaChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAuLi4pIFwKKyAgICBpZiAo
c2VjY29tcF9ydWxlX2FkZChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAjI19fVkFf
QVJHU19fKSAhPSAwKSBcCisgICAgICAgIENSQVNIKCk7CisKK1NlY2NvbXBGaWx0ZXJzOjpTZWNj
b21wRmlsdGVycygpCisgICAgOiBtX3NlY2NvbXBDb250ZXh0KDApCit7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fc2VjY29tcENvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfVFJBUCk7Cisj
ZWxzZQorICAgIG1fc2VjY29tcENvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfS0lMTCk7
CisjZW5kaWYKKworICAgIC8vIE5vIGJlaW5nIGFibGUgdG8gaW5pdGlhbGl6ZSBzZWNjb21wIGlz
IGNvbnNpZGVyZWQgYSBzZWN1cml0eQorICAgIC8vIGhvbGUgYW5kIHRoZSBhcHBsaWNhdGlvbiBz
aG91bGQgbm90IGdvIGJleW9uZCB0aGlzIHBvaW50LiBJbiBmYWN0LAorICAgIC8vIGV2ZXJ5IGVy
cm9yIGhlcmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZmF0YWwuCisgICAgaWYgKCFtX3NlY2NvbXBD
b250ZXh0KQorICAgICAgICBDUkFTSCgpOworCisgICAgaWYgKHNlY2NvbXBfYXR0cl9zZXQobV9z
ZWNjb21wQ29udGV4dCwgU0NNUF9GTFRBVFJfQUNUX0JBREFSQ0gsIFNDTVBfQUNUX0tJTEwpKQor
ICAgICAgICBDUkFTSCgpOworCisgICAgc2V0dXBGaWx0ZXJzKCk7Cit9CisKK1NlY2NvbXBGaWx0
ZXJzOjp+U2VjY29tcEZpbHRlcnMoKQoreworICAgIHNlY2NvbXBfcmVsZWFzZShtX3NlY2NvbXBD
b250ZXh0KTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyczo6c2V0dXBGaWx0ZXJzKCkKK3sKKyAg
ICAvLyBQcmlvcml0aXplIHRoZSBhcmUgdGhlIG1vc3QgZnJlcXVlbnQgY2FsbHMuCisgICAgc2Vj
Y29tcF9zeXNjYWxsX3ByaW9yaXR5KG1fc2VjY29tcENvbnRleHQsIFNDTVBfU1lTKGNsb2NrX2dl
dHRpbWUpLCAyMDApOworICAgIHNlY2NvbXBfc3lzY2FsbF9wcmlvcml0eShtX3NlY2NvbXBDb250
ZXh0LCBTQ01QX1NZUyh3cml0ZSksIDE5OSk7CisKKyAgICAvLyBXQVJOSU5HIQorICAgIC8vCisg
ICAgLy8gVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGFuZCBkb2Vzbid0IGFkZCBhbnkgYWRk
aXRpb25hbCBzZWN1cml0eSBhdCBhbGwKKyAgICAvLyBpbiB0aGUgd2F5IGl0IGlzIGltcGxlbWVu
dGVkIG5vdy4gSXQgaXMgb25seSBibG9ja2luZyBzeXNjYWxscyB3ZSBhcmUgbm90CisgICAgLy8g
dXNpbmcsIHJlZHVjaW5nIHRoZSBrZXJuZWwgYXR0YWNrIHN1cmZhY2UuCisgICAgLy8KKyAgICAv
LyBUaGUgbGlzdCBiZWxsb3cgc3VtbWFyaXplcyB0aGUgc3lzY2FsbCB3aGl0ZWxpc3QgbmVlZGVk
IGJ5IGEgRUZMCisgICAgLy8gbWluaW1hbCBidWlsZCB0byBsb2FkIGh0dHBzOi8vYnVzLndlYmtp
dC5vcmcuIFdlIHNob3VsZCBub3cgYW5hbHl6ZSBvbmUgYnkKKyAgICAvLyBvbmUsIGFuZCBpZiBh
IHN5c2NhbGwgaXMgcmVhbGx5IG5lZWQgdG8gYmUgYWxsb3dlZCwgd2UgbXVzdCByZXN0cmljdCB0
aGUKKyAgICAvLyBwYXJhbWV0ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIHNob3VsZCBhbHNv
IG1vdmUgYmFja2VuZCBkZXBlbmRlbmQKKyAgICAvLyBzeXNjYWxscyB0byBwbGF0Zm9ybVNldHVw
RmlsdGVycygpLgorICAgIC8vCisgICAgLy8gbGlic2VjY29tcCBzdXBwb3J0cyB4ODYtNjQsIGJ1
dCBteSB0ZXN0cyB3ZXJlIGNvbmR1Y3RlZCBvbiBhIHg4NgorICAgIC8vIG1hY2hpbmUgcnVubmlu
ZyBVYnVudHUgMTIuMDQuIEl0IGlzIHVubGlrZWx5IHRoYXQgaXQgd2lsbCB3b3JrIG91dCBvZiB0
aGUKKyAgICAvLyBib3ggaW4gb3RoZXIgZW52aXJvbm1lbnQgc2luY2UgZGlmZmVyZW50IHZlcnNp
b25zIG9mIGxpYmMgbWlnaHQgdXNlCisgICAgLy8gZGlmZmVyZW50IHN5c2NhbGxzIGZvciBkb2lu
ZyB0aGUgc2FtZSB0aGluZy4KKworICAgIC8vIENsb2NrLgorICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb2Nr
X2dldHRpbWUpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENv
bnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXR0aW1lb2ZkYXkpLCAwKTsKKyAgICBz
ZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyh0aW1lKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModGltZXMpLCAwKTsKKworICAg
IC8vIFRocmVhZCBzeW5jaHJvbml6YXRpb24sIHByb2Nlc3MgbWFuYWdlbWVudCBhbmQgc3lzdGVt
IGluZm9ybWF0aW9uLgorICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29u
dGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb25lKSwgMCk7CisgICAgc2VjY29tcF9y
dWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZXhpdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29u
dGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGV4aXRfZ3JvdXApLCAwKTsKKyAgICBzZWNj
b21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhmdXRleCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNj
b21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQzMiksIDApOworICAg
IHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldHJsaW1pdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jh
c2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHJ1c2FnZSks
IDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHVpZDMyKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2Fk
ZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWxv
Y2spLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQs
IFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdhY3Rpb24pLCAwKTsKKyAgICBzZWNjb21w
X3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhydF9zaWdwcm9jbWFzayksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2go
bV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNjaGVkX2dldGFmZmlu
aXR5KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0
LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2V0X3JvYnVzdF9saXN0KSwgMCk7CisgICAgc2Vj
Y29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVModWdldHJsaW1pdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2go
bV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHVuYW1lKSwgMCk7CisK
KyAgICAvLyBVc2VkIGJ5IGdfc3lzdGVtX3RocmVhZF9zZXRfbmFtZSgpLgorICAgIHNlY2NvbXBf
cnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKHByY3RsKSwgMCk7CisKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBvbiBh
bHJlYWR5IG9wZW5lZCBmaWxlIGRlc2NyaXB0b3JzLgorICAgIHNlY2NvbXBfcnVsZV9hZGRfb3Jf
Y3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKF9sbHNlZWsp
LCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFND
TVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhfbmV3c2VsZWN0KSwgMCk7CisgICAgc2VjY29tcF9ydWxl
X2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
YWNjZXNzKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250
ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2xvc2UpLCAwKTsKKyAgICBzZWNjb21wX3J1
bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZ
UyhkdXApLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRl
eHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhlcG9sbF9jdGwpLCAwKTsKKyAgICBzZWNjb21w
X3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhlcG9sbF93YWl0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZmNudGw2NCksIDApOworICAg
IHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGZzdGF0NjQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNo
KG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3RhdGZzKSwgMCk7
CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoZnN5bmMpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2Ny
YXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1bmNhdGUp
LCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFND
TVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50cyksIDApOworICAgIHNlY2NvbXBfcnVsZV9h
ZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdl
dGRlbnRzNjQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENv
bnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpbm90aWZ5X2luaXQpLCAwKTsKKyAgICBz
ZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhpb2N0bCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9z
ZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1tYXAyKSwgMCk7CisgICAg
c2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMocGlwZSksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9z
ZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBvbGwpLCAwKTsKKyAgICBz
ZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhyZWFkKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2VsZWN0KSwgMCk7CisgICAg
c2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMod3JpdGUpLCAwKTsKKworICAgIC8vIFNvY2tldCBvcGVyYXRpb25zLgorICAg
IHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGNvbm5lY3QpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNo
KG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRzb2Nrb3B0KSwg
MCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMocmVjdiksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3Jf
Y3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbmQpLCAw
KTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhzb2NrZXQpLCAwKTsKKworICAgIC8vIE1lbW9yeSByZWxhdGVk
IHN0dWZmLgorICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwg
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGJyayksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1hZHZp
c2UpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQs
IFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtcHJvdGVjdCksIDApOworICAgIHNlY2NvbXBfcnVs
ZV9hZGRfb3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KG11bm1hcCksIDApOworCisgICAgLy8gRklYTUU6IE5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9u
LiBJJ20gbm90IHN1cmUgaWYgdGhlc2UgY2FsbHMgY2FuIGJlCisgICAgLy8gZG9uZSB3aXRob3V0
IGFuIGZkLCB1c2luZyBqdXN0IGEgcGF0aCBpbnN0ZWFkLgorICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9zZWNjb21wQ29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGV2ZW50
ZmQyKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0
LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc3RhdDY0KSwgMCk7CisgICAgc2VjY29tcF9ydWxl
X2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
c3RhdGZzKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3NlY2NvbXBDb250
ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5saW5rKSwgMCk7CisKKyAgICAvLyBGSVhN
RTogQWxsb3dpbmcgdGhlIFdlYlByb2Nlc3MgdG8gcGVyZm9ybSBvcGVuKCkgbWFrZXMgdGhpcyBl
ZmZvcnQKKyAgICAvLyBiYXNpY2FsbHkgdXNlbGVzcy4gSXQgaXMgcG9zc2libGUgdG8gaGlqYWNr
IHRoZSBzeXNjYWxsIGFuZCBkZWxlZ2F0ZQorICAgIC8vIHRoZSBvcGVuaW5nIG9mIGZpbGVzIHRv
IHRoZSBVSVByb2Nlc3MgKGhvcGVmdWxseSkuIFRoaXMgaXMgdGhlIG5leHQgc3RlcC4KKyAgICBz
ZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fc2VjY29tcENvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhvcGVuKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX3Nl
Y2NvbXBDb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMob3BlbmF0KSwgMCk7CisKKyAg
ICBwbGF0Zm9ybVNldHVwRmlsdGVycygpOworfQorCitib29sIFNlY2NvbXBGaWx0ZXJzOjpsb2Fk
KCkKK3sKKyAgICByZXR1cm4gc2VjY29tcF9sb2FkKG1fc2VjY29tcENvbnRleHQpID09IDA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MGQzMmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5oCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjY29tcEZpbHRl
cnNfaAorI2RlZmluZSBTZWNjb21wRmlsdGVyc19oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQorCisjaW5jbHVkZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgU2VjY29tcEZpbHRlcnMgeworcHVibGljOgorICAgIFNlY2NvbXBGaWx0ZXJzKCk7CisgICAg
dmlydHVhbCB+U2VjY29tcEZpbHRlcnMoKTsKKworICAgIGJvb2wgbG9hZCgpOworCitwcml2YXRl
OgorICAgIHZvaWQgc2V0dXBGaWx0ZXJzKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldHVwRmlsdGVy
cygpOworCisgICAgc2NtcF9maWx0ZXJfY3R4IG1fc2VjY29tcENvbnRleHQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisK
KyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvc2VjY29tcC9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43OGFlMzFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNp
bmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFNlY2NvbXBG
aWx0ZXJzOjpwbGF0Zm9ybVNldHVwRmlsdGVycygpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAppbmRleCAxNjI3
OGEzLi41MTJhZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9X
ZWJQcm9jZXNzTWFpbkVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwv
V2ViUHJvY2Vzc01haW5FZmwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8RWNvcmUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgogI2luY2x1
ZGUgPFdlYktpdDIvV2ViUHJvY2Vzcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNjIsNiArNjMsMTMgQEAgV0tfRVhQ
T1JUIGludCBXZWJQcm9jZXNzTWFpbkVmbChpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAg
ICByZXR1cm4gMTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICBT
ZWNjb21wRmlsdGVycyBzZWNjb21wOworCisgICAgaWYgKCFzZWNjb21wLmxvYWQoKSkKKyAgICAg
ICAgcmV0dXJuIDE7CisjZW5kaWYKKwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwog
ICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNt
YWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjg2NmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UKQEAgLTAsMCArMSwz
MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyMg
ICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzIG1heQorIyAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyMgICBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyMKKyMKKworSU5DTFVERShGaW5kUGtnQ29uZmlnKQorCitQS0dfQ0hFQ0tfTU9EVUxF
UyhMSUJTRUNDT01QIFJFUVVJUkVEIGxpYnNlY2NvbXA+PTEuMC4wKQpkaWZmIC0tZ2l0IGEvU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFr
ZQppbmRleCAzYzIzMzE2Li42Njc5NDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtODksNiAr
ODksNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19J
TkZPIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BBR0VfVklT
SUJJTElUWV9BUEkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
UkVHSVNURVJfUFJPVE9DT0xfSEFORExFUiBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSBPTikKK1dFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMgT0ZGKQogV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQURPV19ET00gT04pCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBUkVEX1dPUktFUlMgT04pCiBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfRVZFTlRTIE9OKQpAQCAtOTcs
NiArOTgsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU8g
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU9fVFJBQ0sg
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0lOVEVOVFMg
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0lOVEVOVFNf
VEFHIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9QUk9D
RVNTX1NBTkRCT1ggT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1dFQl9USU1JTkcgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
V09SS0VSUyBPTikKIApAQCAtMTU2LDQgKzE1OCw4IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgIEZJ
TkRfUEFDS0FHRShPcGVuR0wgUkVRVUlSRUQpCiBFTkRJRiAoKQogCitpZihFTkFCTEVfU0VDQ09N
UF9GSUxURVJTKQorICAgIEZJTkRfUEFDS0FHRShMaWJTZWNjb21wIFJFUVVJUkVEKQorRU5ESUYo
KQorCiBTRVQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUiBUQloyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVz
LmNtYWtlCmluZGV4IDdlYjMzNzUuLmYwMDhhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9X
ZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21h
a2UKQEAgLTkxLDYgKzkxLDcgQEAgTUFDUk8gKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFUEFJTlRfVEhST1RUTElORyAiVG9nZ2xlIHJlcGFp
bnQgdGhyb3R0bGluZyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FICJUb2dnbGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1l
IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0NSSVBURURf
U1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBzdXBwb3J0IiBPRkYpCisgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyAiVG9nZ2xlIExpbnV4IHNl
Y2NvbXAgZmlsdGVycyBmb3IgdGhlIFdlYlByb2Nlc3Mgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBzdXBw
b3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JLRVJT
ICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9E
RUZJTkUoRU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNRTCBEYXRhYmFzZSBTdXBwb3J0IiBP
TikKQEAgLTEwOSw2ICsxMTAsNyBAQCBNQUNSTyAoV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX0FVRElPICJUb2dnbGUgV2ViIEF1ZGlvIHN1
cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX0lOVEVOVFMg
IlRvZ2dsZSBXZWIgSW50ZW50cyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX1dFQl9JTlRFTlRTX1RBRyAiVG9vZ2xlIEhUTUxJbnRlbnRFbGVtZW50IHRhZyBz
dXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9QUk9DRVNT
X1NBTkRCT1ggIlRvb2dsZSBXZWJQcm9jZXNzIHNhbmRib3ggc3VwcG9ydCIgT0ZGKQogICAgIFdF
QktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfU09DS0VUUyAiVG9nZ2xlIFdlYiBTb2NrZXRz
IHN1cHBvcnQiIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfVElNSU5H
ICJUb2dnbGUgV2ViIFRpbWluZyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX1dPUktFUlMgIlRvZ2dsZSBXZWIgV29ya2VycyBzdXBwb3J0IiBPRkYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5o
LmNtYWtlCmluZGV4IGIyNDYyOTEuLmNiNmE5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNv
bmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC03OSw2ICs3
OSw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVAogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRQorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NFQ0NP
TVBfRklMVEVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQURPV19ET00KICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NNT09USF9T
Q1JPTExJTkcKQEAgLTk4LDYgKzk5LDcgQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfQVVE
SU8KICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfSU5URU5UUwogI2NtYWtlZGVmaW5lMDEgRU5B
QkxFX1dFQl9JTlRFTlRTX1RBRworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9QUk9DRVNTX1NB
TkRCT1gKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfU09DS0VUUwogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1dFQl9USU1JTkcKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XT1JLRVJTCmRpZmYgLS1n
aXQgYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxl
cwppbmRleCBiZmE5YTlhLi5hOWRiMzQ1IDEwMDY0NAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5t
b2R1bGVzCisrKyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKQEAgLTE3LDYgKzE3LDcgQEAK
ICAgICAgIDxkZXAgcGFja2FnZT0iZV9kYnVzIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImVlemUi
Lz4KICAgICAgIDxkZXAgcGFja2FnZT0iZWZyZWV0Ii8+CisgICAgICA8ZGVwIHBhY2thZ2U9Imxp
YnNlY2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxlPgogCkBAIC0z
OSw2ICs0MCw4IEBACiAgIDxyZXBvc2l0b3J5IHR5cGU9InN2biIgbmFtZT0iZW5saWdodGVubWVu
dC5vcmciCiAgICAgICBocmVmPSJodHRwOi8vc3ZuLmVubGlnaHRlbm1lbnQub3JnL3N2bi9lL3Ry
dW5rLyIKICAgICAgIHRydW5rLXRlbXBsYXRlPSIlKG1vZHVsZSlzLyIvPgorICA8cmVwb3NpdG9y
eSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAgIGhyZWY9ImdpdDovL2dp
dC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImNhaXJvIiBhdXRvZ2VuLXNo
PSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0yMzksNCArMjQyLDEwIEBACiAg
ICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvYXV0b3Rvb2xzPgogCisgIDxhdXRvdG9vbHMgaWQ9Imxp
YnNlY2NvbXAiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CisgICAgICA8YnJhbmNoIG1vZHVsZT0i
bGlic2VjY29tcC9saWJzZWNjb21wIgorICAgICAgICAgIHJlcG89ImdpdC5jb2RlLnNmLm5ldCIK
KyAgICAgICAgICB0YWc9IjJjODUyMGUyM2YzMDk5NDk3YmFmZTBjOWRlOWE5NDUyYThiNzViYjQi
Lz4KKyAgPC9hdXRvdG9vbHM+CisKIDwvbW9kdWxlc2V0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156397</attachid>
            <date>2012-08-03 09:27:39 -0700</date>
            <delta_ts>2012-08-05 23:41:16 -0700</delta_ts>
            <desc>Work in progress of SeccompFilters v3</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>25585</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWJjYmRiMC4uMjllM2VkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL3NlY2NvbXAvU2Fu
ZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcAorCiAg
ICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwCiAgICAgU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIApAQCAtMTE3LDYgKzEyMSw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGlj
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL3NlY2NvbXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0Mvc291cCIKQEAgLTE1Nyw2ICsxNjIsMTIgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKICAgICAke0xJQlNPVVAyNF9MSUJSQVJJRVN9CiApCiAKK0lGKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgTElTVCAoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQorCiBMSVNUIChB
UFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCiAgICAgZWZsL01haW5FZmwuY3BwCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCA2ZjhhYTc4Li40ZGM0Y2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTg0LDYgKzg0LDkg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gp
CiAgICAgICAgIEhhbmRsZSogbV9kYXRhOworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOworI2VuZGlmCiAjZWxzZQogICAgICAgICBIYW5k
bGUgbV9lbXB0eUhhbmRsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzE5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpICYmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKCkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKK30KKwordm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0Cit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFoYW5kbGUu
bV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFkb3B0UmVmKG5l
dyBTYW5kYm94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sK
K30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29u
c3QgSGFuZGxlJikKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24o
KQoreworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmludmFsaWRhdGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OkhhbmRsZUFycmF5KCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6On5IYW5kbGVBcnJheSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkKK3sKK30KKworc2l6ZV90IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7
Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KQoreworICAgIHJldHVybiBtX2VtcHR5SGFuZGxlOwor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZUFycmF5
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGEzODliCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMu
Y3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgc2VjY29tcF9ydWxlX2FkZF9v
cl9jcmFzaChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAuLi4pIFwKKyAgICBpZiAo
c2VjY29tcF9ydWxlX2FkZChjb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIGNvdW50LCAjI19fVkFf
QVJHU19fKSkgXAorICAgICAgICBDUkFTSCgpOworCitTZWNjb21wRmlsdGVyczo6U2VjY29tcEZp
bHRlcnMoKQorICAgIDogbV9jb250ZXh0KDApCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fY29u
dGV4dCA9IHNlY2NvbXBfaW5pdChTQ01QX0FDVF9UUkFQKTsKKyNlbHNlCisgICAgbV9jb250ZXh0
ID0gc2VjY29tcF9pbml0KFNDTVBfQUNUX0tJTEwpOworI2VuZGlmCisKKyAgICAvLyBObyBiZWlu
ZyBhYmxlIHRvIGluaXRpYWxpemUgc2VjY29tcCBpcyBjb25zaWRlcmVkIGEgc2VjdXJpdHkKKyAg
ICAvLyBicmVhY2ggYW5kIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGdvIGJleW9uZCB0aGlz
IHBvaW50LiBJbiBmYWN0LAorICAgIC8vIGV2ZXJ5IGVycm9yIGhlcmUgc2hvdWxkIGJlIGNvbnNp
ZGVyZWQgZmF0YWwuCisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIENSQVNIKCk7CisKKyAg
ICBpZiAoc2VjY29tcF9hdHRyX3NldChtX2NvbnRleHQsIFNDTVBfRkxUQVRSX0FDVF9CQURBUkNI
LCBTQ01QX0FDVF9LSUxMKSkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGluaXRpYWxpemUoKTsK
K30KKworU2VjY29tcEZpbHRlcnM6On5TZWNjb21wRmlsdGVycygpCit7CisgICAgc2VjY29tcF9y
ZWxlYXNlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OmluaXRpYWxpemUo
KQoreworICAgIC8vIFByaW9yaXRpemUgdGhlIG1vc3QgZnJlcXVlbnQgY2FsbHMuCisgICAgc2Vj
Y29tcF9zeXNjYWxsX3ByaW9yaXR5KG1fY29udGV4dCwgU0NNUF9TWVMoY2xvY2tfZ2V0dGltZSks
IDIwMCk7CisgICAgc2VjY29tcF9zeXNjYWxsX3ByaW9yaXR5KG1fY29udGV4dCwgU0NNUF9TWVMo
d3JpdGUpLCAxOTkpOworCisgICAgLy8gV0FSTklORyEKKyAgICAvLworICAgIC8vIFRoaXMgaXMg
aGlnaGx5IGV4cGVyaW1lbnRhbCBhbmQgZG9lc24ndCBhZGQgYW55IGFkZGl0aW9uYWwgc2VjdXJp
dHkgYXQgYWxsCisgICAgLy8gaW4gdGhlIHdheSBpdCBpcyBpbXBsZW1lbnRlZCByaWdodCBub3cu
IEl0IGlzIG9ubHkgYmxvY2tpbmcgc3lzY2FsbHMgd2UgYXJlCisgICAgLy8gbm90IHVzaW5nLCBy
ZWR1Y2luZyB0aGUga2VybmVsIGF0dGFjayBzdXJmYWNlLgorICAgIC8vCisgICAgLy8gVGhlIGxp
c3QgYmVsb3cgc3VtbWFyaXplcyB0aGUgc3lzY2FsbCB3aGl0ZWxpc3QgbmVlZGVkIGJ5IGEgRUZM
CisgICAgLy8gbWluaW1hbCBidWlsZCB0byBsb2FkIGh0dHBzOi8vYnVzLndlYmtpdC5vcmcuIFdl
IHNob3VsZCBub3cgYW5hbHl6ZSBvbmUgYnkKKyAgICAvLyBvbmUsIGFuZCBpZiBhIHN5c2NhbGwg
aXMgcmVhbGx5IG5lZWQgdG8gYmUgYWxsb3dlZCwgd2UgbXVzdCByZXN0cmljdCB0aGUKKyAgICAv
LyBwYXJhbWV0ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIHNob3VsZCBhbHNvIG1vdmUgYmFj
a2VuZCBkZXBlbmRlbmQKKyAgICAvLyBzeXNjYWxscyB0byBwbGF0Zm9ybVNldHVwRmlsdGVycygp
LgorICAgIC8vCisgICAgLy8gbGlic2VjY29tcCBzdXBwb3J0cyB4ODYtNjQsIGJ1dCBteSB0ZXN0
cyB3ZXJlIGNvbmR1Y3RlZCBvbiBhIHg4NgorICAgIC8vIG1hY2hpbmUgcnVubmluZyBVYnVudHUg
MTIuMDQuIEl0IGlzIHVubGlrZWx5IHRoYXQgaXQgd2lsbCB3b3JrIG91dCBvZiB0aGUKKyAgICAv
LyBib3ggaW4gb3RoZXIgZW52aXJvbm1lbnQgc2luY2UgZGlmZmVyZW50IHZlcnNpb25zIG9mIGxp
YmMgbWlnaHQgdXNlCisgICAgLy8gZGlmZmVyZW50IHN5c2NhbGxzIGZvciBkb2luZyB0aGUgc2Ft
ZSB0aGluZy4KKworICAgIC8vIENsb2NrLgorICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2go
bV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2xvY2tfZ2V0dGltZSksIDApOwor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZ2V0dGltZW9mZGF5KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFz
aChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh0aW1lKSwgMCk7CisgICAgc2Vj
Y29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZ
Uyh0aW1lcyksIDApOworCisgICAgLy8gVGhyZWFkIHN5bmNocm9uaXphdGlvbiwgcHJvY2VzcyBt
YW5hZ2VtZW50IGFuZCBzeXN0ZW0gaW5mb3JtYXRpb24uCisgICAgc2VjY29tcF9ydWxlX2FkZF9v
cl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhjbG9uZSksIDApOwor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZXhpdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250
ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXhpdF9ncm91cCksIDApOworICAgIHNlY2Nv
bXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
ZnV0ZXgpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQzMiksIDApOworICAgIHNlY2NvbXBfcnVsZV9h
ZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0cmxpbWl0
KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNU
X0FMTE9XLCBTQ01QX1NZUyhnZXRydXNhZ2UpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29y
X2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHVpZDMyKSwgMCk7
CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhtbG9jayksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9j
b250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocnRfc2lnYWN0aW9uKSwgMCk7CisgICAg
c2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhydF9zaWdwcm9jbWFzayksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2go
bV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2NoZWRfZ2V0YWZmaW5pdHkpLCAw
KTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKHNldF9yb2J1c3RfbGlzdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModWdldHJsaW1pdCks
IDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVModW5hbWUpLCAwKTsKKworICAgIC8vIFVzZWQgYnkgZ19zeXN0ZW1fdGhy
ZWFkX3NldF9uYW1lKCkuCisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQs
IFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhwcmN0bCksIDApOworCisgICAgLy8gRmlsZSBkZXNj
cmlwdG9yIG9wZXJhdGlvbnMgb24gYWxyZWFkeSBvcGVuZWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAg
ICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKF9sbHNlZWspLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29u
dGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKF9uZXdzZWxlY3QpLCAwKTsKKyAgICBzZWNj
b21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGFjY2VzcyksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2xvc2UpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRk
X29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGR1cCksIDApOwor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZXBvbGxfY3RsKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaCht
X2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhlcG9sbF93YWl0KSwgMCk7CisgICAg
c2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhmY250bDY0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRl
eHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3RhdDY0KSwgMCk7CisgICAgc2VjY29tcF9y
dWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3Rh
dGZzKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhmc3luYyksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3Jf
Y3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnRydW5jYXRlKSwgMCk7
CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaChtX2NvbnRleHQsIFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhnZXRkZW50cyksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2go
bV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0ZGVudHM2NCksIDApOworICAg
IHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMoaW5vdGlmeV9pbml0KSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaCht
X2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpb2N0bCksIDApOworICAgIHNlY2Nv
bXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
bW1hcDIpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBpcGUpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29y
X2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBvbGwpLCAwKTsKKyAg
ICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKHJlYWQpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4
dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbGVjdCksIDApOworICAgIHNlY2NvbXBfcnVs
ZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMod3JpdGUp
LCAwKTsKKworICAgIC8vIFNvY2tldCBvcGVyYXRpb25zLgorICAgIHNlY2NvbXBfcnVsZV9hZGRf
b3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY29ubmVjdCksIDAp
OworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMoZ2V0c29ja29wdCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jh
c2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocmVjdiksIDApOworICAgIHNl
Y2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoc2VuZCksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMoc29ja2V0KSwgMCk7CisKKyAgICAvLyBNZW1vcnkgcmVs
YXRlZCBzdHVmZi4KKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1fY29udGV4dCwgU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKGJyayksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3Jf
Y3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWFkdmlzZSksIDApOwor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMobXByb3RlY3QpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRkX29yX2NyYXNoKG1f
Y29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG11bm1hcCksIDApOworCisgICAgLy8g
RklYTUU6IE5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBJJ20gbm90IHN1cmUgaWYgdGhlc2Ug
Y2FsbHMgY2FuIGJlCisgICAgLy8gZG9uZSB3aXRob3V0IGFuIGZkLCB1c2luZyBqdXN0IGEgcGF0
aCBpbnN0ZWFkLgorICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoZXZlbnRmZDIpLCAwKTsKKyAgICBzZWNjb21wX3J1bGVfYWRk
X29yX2NyYXNoKG1fY29udGV4dCwgU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHN0YXQ2NCksIDAp
OworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMoc3RhdGZzKSwgMCk7CisgICAgc2VjY29tcF9ydWxlX2FkZF9vcl9jcmFzaCht
X2NvbnRleHQsIFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1bmxpbmspLCAwKTsKKworICAgIC8v
IEZJWE1FOiBBbGxvd2luZyB0aGUgV2ViUHJvY2VzcyB0byBwZXJmb3JtIG9wZW4oKSBtYWtlcyB0
aGlzIGVmZm9ydAorICAgIC8vIGJhc2ljYWxseSB1c2VsZXNzLiBJdCBpcyBwb3NzaWJsZSB0byBo
aWphY2sgdGhlIHN5c2NhbGwgYW5kIGRlbGVnYXRlCisgICAgLy8gdGhlIG9wZW5pbmcgb2YgZmls
ZXMgdG8gdGhlIFVJUHJvY2VzcyAoaG9wZWZ1bGx5KS4gVGhpcyBpcyB0aGUgbmV4dCBzdGVwLgor
ICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250ZXh0LCBTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMob3BlbiksIDApOworICAgIHNlY2NvbXBfcnVsZV9hZGRfb3JfY3Jhc2gobV9jb250
ZXh0LCBTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMob3BlbmF0KSwgMCk7CisKKyAgICBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKK30KKworYm9vbCBTZWNjb21wRmlsdGVyczo6bG9hZCgpCit7CisgICAg
cmV0dXJuICFzZWNjb21wX2xvYWQobV9jb250ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWE4MjhlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBG
aWx0ZXJzX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNj
b21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21wRmlsdGVycyB7Citw
dWJsaWM6CisgICAgU2VjY29tcEZpbHRlcnMoKTsKKyAgICB+U2VjY29tcEZpbHRlcnMoKTsKKwor
ICAgIGJvb2wgbG9hZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CisKKyAgICBzY21wX2ZpbHRlcl9jdHggbV9jb250
ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjOWZkMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0Vm
bC5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjaW5jbHVkZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kwordm9pZCBTZWNjb21wRmlsdGVyczo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5F
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwu
Y3BwCmluZGV4IDE2Mjc4YTMuLjUxMmFlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlIDxFY29yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBGaWx0
ZXJzLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcm9jZXNzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC02Miw2ICs2
MywxMyBAQCBXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluRWZsKGludCBhcmdjLCBjaGFyKiBh
cmd2W10pCiAgICAgICAgIHJldHVybiAxOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0VDQ09NUF9G
SUxURVJTKQorICAgIFNlY2NvbXBGaWx0ZXJzIHNlY2NvbXA7CisKKyAgICBpZiAoIXNlY2NvbXAu
bG9hZCgpKQorICAgICAgICByZXR1cm4gMTsKKyNlbmRpZgorCiAgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UgYi9Tb3VyY2UvY21ha2UvRmlu
ZExpYlNlY2NvbXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJm
ODY2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFr
ZQpAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRp
b24KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwgdGhpcworIyAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAg
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMgbWF5CisjICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgIHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisj
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorIworIworCitJTkNMVURFKEZpbmRQa2dDb25maWcpCisKK1BL
R19DSEVDS19NT0RVTEVTKExJQlNFQ0NPTVAgUkVRVUlSRUQgbGlic2VjY29tcD49MS4wLjApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlCmluZGV4IGNkNmIyMmIyLi4yZTFmM2VkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5j
bWFrZQpAQCAtOTAsNiArOTAsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTkVUV09SS19JTkZPIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUiBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSBPTikK
K1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMg
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VS
UyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVO
VFMgT04pCkBAIC05OCw2ICs5OSw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9WSURFTyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9WSURFT19UUkFDSyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfSU5URU5UUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfSU5URU5UU19UQUcgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfV0VCX1BST0NFU1NfU0FOREJPWCBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfV0VCX1RJTUlORyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9XT1JLRVJTIE9OKQogCkBAIC0xNTcsNCArMTU5LDggQEAgSUYgKEVOQUJM
RV9XRUJHTCkKICAgRklORF9QQUNLQUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGICgpCiAKK2lm
KEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgRklORF9QQUNLQUdFKExpYlNlY2NvbXAgUkVR
VUlSRUQpCitFTkRJRigpCisKIFNFVChDUEFDS19TT1VSQ0VfR0VORVJBVE9SIFRCWjIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
V2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXggN2ViMzM3NS4uZjAwOGExNSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQpAQCAtOTEsNiArOTEsNyBAQCBNQUNSTyAoV0VCS0lUX09QVElPTl9C
RUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUkVQQUlOVF9USFJPVFRMSU5H
ICJUb2dnbGUgcmVwYWludCB0aHJvdHRsaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgIlRvZ2dsZSByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9TQ1JJUFRFRF9TUEVFQ0ggIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQi
IE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0VDQ09NUF9GSUxURVJTICJU
b2dnbGUgTGludXggc2VjY29tcCBmaWx0ZXJzIGZvciB0aGUgV2ViUHJvY2VzcyBzdXBwb3J0IiBP
RkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBT
aGFkb3cgRE9NIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
U0hBUkVEX1dPUktFUlMgIlRvZ2dsZSBTaGFyZWRXb3JrZXJzIHN1cHBvcnQiIE9GRikKICAgICBX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1FMX0RBVEFCQVNFICJUb2dnbGUgU1FMIERhdGFi
YXNlIFN1cHBvcnQiIE9OKQpAQCAtMTA5LDYgKzExMCw3IEBAIE1BQ1JPIChXRUJLSVRfT1BUSU9O
X0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfQVVESU8gIlRvZ2ds
ZSBXZWIgQXVkaW8gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJM
RV9XRUJfSU5URU5UUyAiVG9nZ2xlIFdlYiBJbnRlbnRzIHN1cHBvcnQiIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX0lOVEVOVFNfVEFHICJUb29nbGUgSFRNTEludGVu
dEVsZW1lbnQgdGFnIHN1cHBvcnQiIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFC
TEVfV0VCX1BST0NFU1NfU0FOREJPWCAiVG9vZ2xlIFdlYlByb2Nlc3Mgc2FuZGJveCBzdXBwb3J0
IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9TT0NLRVRTICJUb2dn
bGUgV2ViIFNvY2tldHMgc3VwcG9ydCIgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX1dFQl9USU1JTkcgIlRvZ2dsZSBXZWIgVGltaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfV09SS0VSUyAiVG9nZ2xlIFdlYiBXb3JrZXJzIHN1cHBv
cnQiIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291cmNl
L2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggZGY4Y2IxNy4uMjBiZmUyNSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2UKQEAgLTc5LDYgKzc5LDcgQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9QUk9HUkVTU19FTEVN
RU5UCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUgogI2Nt
YWtlZGVmaW5lMDEgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FCisjY21ha2VkZWZpbmUw
MSBFTkFCTEVfU0VDQ09NUF9GSUxURVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RP
TQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfU01PT1RIX1NDUk9MTElORwpAQCAtOTgsNiArOTksNyBAQAogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1dFQl9BVURJTwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9JTlRFTlRTCiAjY21h
a2VkZWZpbmUwMSBFTkFCTEVfV0VCX0lOVEVOVFNfVEFHCisjY21ha2VkZWZpbmUwMSBFTkFCTEVf
V0VCX1BST0NFU1NfU0FOREJPWAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9TT0NLRVRTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX1RJTUlORwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dP
UktFUlMKZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9lZmwv
amhidWlsZC5tb2R1bGVzCmluZGV4IGJmYTlhOWEuLmE5ZGIzNDUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L2VmbC9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwpAQCAt
MTcsNiArMTcsNyBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJlX2RidXMiLz4KICAgICAgIDxkZXAg
cGFja2FnZT0iZWV6ZSIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJlZnJlZXQiLz4KKyAgICAgIDxk
ZXAgcGFja2FnZT0ibGlic2VjY29tcCIvPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21ldGFt
b2R1bGU+CiAKQEAgLTM5LDYgKzQwLDggQEAKICAgPHJlcG9zaXRvcnkgdHlwZT0ic3ZuIiBuYW1l
PSJlbmxpZ2h0ZW5tZW50Lm9yZyIKICAgICAgIGhyZWY9Imh0dHA6Ly9zdm4uZW5saWdodGVubWVu
dC5vcmcvc3ZuL2UvdHJ1bmsvIgogICAgICAgdHJ1bmstdGVtcGxhdGU9IiUobW9kdWxlKXMvIi8+
CisgIDxyZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0LmNvZGUuc2YubmV0IgorICAgICAg
aHJlZj0iZ2l0Oi8vZ2l0LmNvZGUuc2YubmV0L3AvIi8+CiAKICAgPGF1dG90b29scyBpZD0iY2Fp
cm8iIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CiAgICAgPGRlcGVuZGVuY2llcz4KQEAgLTIzOSw0
ICsyNDIsMTAgQEAKICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9hdXRvdG9vbHM+CiAKKyAgPGF1
dG90b29scyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAgIDxi
cmFuY2ggbW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0iZ2l0
LmNvZGUuc2YubmV0IgorICAgICAgICAgIHRhZz0iMmM4NTIwZTIzZjMwOTk0OTdiYWZlMGM5ZGU5
YTk0NTJhOGI3NWJiNCIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+Cg==
</data>
<flag name="commit-queue"
          id="166117"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156604</attachid>
            <date>2012-08-05 23:41:16 -0700</date>
            <delta_ts>2012-08-05 23:43:52 -0700</delta_ts>
            <desc>Work in progress of SeccompFilters v4</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>23983</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWJjYmRiMC4uMjllM2VkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL3NlY2NvbXAvU2Fu
ZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcAorCiAg
ICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwCiAgICAgU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIApAQCAtMTE3LDYgKzEyMSw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGlj
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL3NlY2NvbXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0Mvc291cCIKQEAgLTE1Nyw2ICsxNjIsMTIgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKICAgICAke0xJQlNPVVAyNF9MSUJSQVJJRVN9CiApCiAKK0lGKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgTElTVCAoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQorCiBMSVNUIChB
UFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCiAgICAgZWZsL01haW5FZmwuY3BwCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCA2ZjhhYTc4Li40ZGM0Y2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTg0LDYgKzg0LDkg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gp
CiAgICAgICAgIEhhbmRsZSogbV9kYXRhOworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOworI2VuZGlmCiAjZWxzZQogICAgICAgICBIYW5k
bGUgbV9lbXB0eUhhbmRsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzE5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpICYmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKCkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKK30KKwordm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0Cit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFoYW5kbGUu
bV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFkb3B0UmVmKG5l
dyBTYW5kYm94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sK
K30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29u
c3QgSGFuZGxlJikKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24o
KQoreworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmludmFsaWRhdGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OkhhbmRsZUFycmF5KCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6On5IYW5kbGVBcnJheSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkKK3sKK30KKworc2l6ZV90IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7
Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KQoreworICAgIHJldHVybiBtX2VtcHR5SGFuZGxlOwor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZUFycmF5
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYzY2MxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMu
Y3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJzOjpTZWNjb21wRmls
dGVycygpCisgICAgOiBtX2NvbnRleHQoMCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb250
ZXh0ID0gc2VjY29tcF9pbml0KFNDTVBfQUNUX1RSQVApOworI2Vsc2UKKyAgICBtX2NvbnRleHQg
PSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfS0lMTCk7CisjZW5kaWYKKworICAgIC8vIE5vIGJlaW5n
IGFibGUgdG8gaW5pdGlhbGl6ZSBzZWNjb21wIGlzIGNvbnNpZGVyZWQgYSBzZWN1cml0eQorICAg
IC8vIGJyZWFjaCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgZ28gYmV5b25kIHRoaXMg
cG9pbnQuIEluIGZhY3QsCisgICAgLy8gZXZlcnkgZXJyb3IgaGVyZSBzaG91bGQgYmUgY29uc2lk
ZXJlZCBmYXRhbC4KKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKKworICAg
IGlmIChzZWNjb21wX2F0dHJfc2V0KG1fY29udGV4dCwgU0NNUF9GTFRBVFJfQUNUX0JBREFSQ0gs
IFNDTVBfQUNUX0tJTEwpKQorICAgICAgICBDUkFTSCgpOworCisgICAgaW5pdGlhbGl6ZSgpOwor
fQorCitTZWNjb21wRmlsdGVyczo6flNlY2NvbXBGaWx0ZXJzKCkKK3sKKyAgICBzZWNjb21wX3Jl
bGVhc2UobV9jb250ZXh0KTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyczo6YWRkUnVsZSh1aW50
MzJfdCBhY3Rpb24sIGludCBzeXNjYWxsKQoreworICAgIGlmIChzZWNjb21wX3J1bGVfYWRkKG1f
Y29udGV4dCwgYWN0aW9uLCBzeXNjYWxsLCAwKSkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordm9p
ZCBTZWNjb21wRmlsdGVyczo6aW5pdGlhbGl6ZSgpCit7CisgICAgLy8gUHJpb3JpdGl6ZSB0aGUg
bW9zdCBmcmVxdWVudCBjYWxscy4KKyAgICBzZWNjb21wX3N5c2NhbGxfcHJpb3JpdHkobV9jb250
ZXh0LCBTQ01QX1NZUyhjbG9ja19nZXR0aW1lKSwgMjAwKTsKKyAgICBzZWNjb21wX3N5c2NhbGxf
cHJpb3JpdHkobV9jb250ZXh0LCBTQ01QX1NZUyh3cml0ZSksIDE5OSk7CisKKyAgICAvLyBXQVJO
SU5HIQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGFuZCBkb2Vz
bid0IGFkZCBhbnkgYWRkaXRpb25hbCBzZWN1cml0eSBhdCBhbGwKKyAgICAvLyBpbiB0aGUgd2F5
IGl0IGlzIGltcGxlbWVudGVkIHJpZ2h0IG5vdy4gSXQgaXMgb25seSBibG9ja2luZyBzeXNjYWxs
cyB3ZSBhcmUKKyAgICAvLyBub3QgdXNpbmcsIHJlZHVjaW5nIHRoZSBrZXJuZWwgYXR0YWNrIHN1
cmZhY2UuCisgICAgLy8KKyAgICAvLyBUaGUgbGlzdCBiZWxvdyBzdW1tYXJpemVzIHRoZSBzeXNj
YWxsIHdoaXRlbGlzdCBuZWVkZWQgYnkgYSBFRkwgYW5kIFF0CisgICAgLy8gbWluaW1hbCBidWls
ZCB0byBsb2FkIGh0dHBzOi8vYnVzLndlYmtpdC5vcmcuIFdlIHNob3VsZCBub3cgYW5hbHl6ZSBv
bmUgYnkKKyAgICAvLyBvbmUsIGFuZCBpZiBhIHN5c2NhbGwgaXMgcmVhbGx5IG5lZWQgdG8gYmUg
YWxsb3dlZCwgd2UgbXVzdCByZXN0cmljdCB0aGUKKyAgICAvLyBwYXJhbWV0ZXJzIGFzIG11Y2gg
YXMgcG9zc2libGUuIFdlIHNob3VsZCBhbHNvIG1vdmUgYmFja2VuZCBkZXBlbmRlbmQKKyAgICAv
LyBzeXNjYWxscyB0byBwbGF0Zm9ybVNldHVwRmlsdGVycygpLgorICAgIC8vCisgICAgLy8gbGli
c2VjY29tcCBzdXBwb3J0cyB4ODYtNjQsIGJ1dCBteSB0ZXN0cyB3ZXJlIGNvbmR1Y3RlZCBvbiBh
IHg4NgorICAgIC8vIG1hY2hpbmUgcnVubmluZyBVYnVudHUgMTIuMDQuIEl0IGlzIHVubGlrZWx5
IHRoYXQgaXQgd2lsbCB3b3JrIG91dCBvZiB0aGUKKyAgICAvLyBib3ggaW4gb3RoZXIgZW52aXJv
bm1lbnQgc2luY2UgZGlmZmVyZW50IHZlcnNpb25zIG9mIGxpYmMgbWlnaHQgdXNlCisgICAgLy8g
ZGlmZmVyZW50IHN5c2NhbGxzIGZvciBkb2luZyB0aGUgc2FtZSB0aGluZy4KKworICAgIC8vIENs
b2NrLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb2NrX2dldHRpbWUp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXR0aW1lb2ZkYXkpKTsK
KyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh0aW1lKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModGltZXMpKTsKKworICAgIC8vIFRocmVhZCBzeW5j
aHJvbml6YXRpb24sIHByb2Nlc3MgbWFuYWdlbWVudCBhbmQgc3lzdGVtIGluZm9ybWF0aW9uLgor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb25lKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXhpdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKGV4aXRfZ3JvdXApKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhmdXRleCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGdldGV1aWQzMikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHJs
aW1pdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHJ1c2FnZSkp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHVpZDMyKSk7CisgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWxvY2spKTsKKyAgICBhZGRSdWxlKFND
TVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdhY3Rpb24pKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdwcm9jbWFzaykpOworICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKHNjaGVkX2dldGFmZmluaXR5KSk7CisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoc2V0X3JvYnVzdF9saXN0KSk7CisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVModWdldHJsaW1pdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHVuYW1lKSk7CisKKyAgICAvLyBVc2VkIGJ5IGdfc3lzdGVtX3RocmVh
ZF9zZXRfbmFtZSgpLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHByY3Rs
KSk7CisKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBvbiBhbHJlYWR5IG9wZW5l
ZCBmaWxlIGRlc2NyaXB0b3JzLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KF9sbHNlZWspKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhfbmV3c2Vs
ZWN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoYWNjZXNzKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2xvc2UpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhkdXApKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhlcG9sbF9jdGwpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhlcG9sbF93YWl0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZmNudGw2NCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZzdGF0
NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3RhdGZzKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnN5bmMpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1bmNhdGUpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50cykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldGRlbnRzNjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhpbm90aWZ5X2luaXQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhpb2N0bCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1tYXAy
KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocGlwZSkpOworICAgIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBvbGwpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhyZWFkKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoc2VsZWN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
d3JpdGUpKTsKKworICAgIC8vIFNvY2tldCBvcGVyYXRpb25zLgorICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKGNvbm5lY3QpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhnZXRzb2Nrb3B0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMocmVjdikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbmQp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzb2NrZXQpKTsKKworICAg
IC8vIE1lbW9yeSByZWxhdGVkIHN0dWZmLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKGJyaykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1hZHZp
c2UpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtcHJvdGVjdCkpOwor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG11bm1hcCkpOworCisgICAgLy8g
RklYTUU6IE5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBJJ20gbm90IHN1cmUgaWYgdGhlc2Ug
Y2FsbHMgY2FuIGJlCisgICAgLy8gZG9uZSB3aXRob3V0IGFuIGZkLCB1c2luZyBqdXN0IGEgcGF0
aCBpbnN0ZWFkLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNobW9kKSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXZlbnRmZDIpKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhsc3RhdDY0KSk7CisgICAgYWRkUnVsZShT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMobWtkaXIpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhyZW5hbWUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhzdGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzdGF0
ZnMpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1bmxpbmspKTsKKwor
ICAgIC8vIEZJWE1FOiBBbGxvd2luZyB0aGUgV2ViUHJvY2VzcyB0byBwZXJmb3JtIG9wZW4oKSBt
YWtlcyB0aGlzIGVmZm9ydAorICAgIC8vIGJhc2ljYWxseSB1c2VsZXNzLiBJdCBpcyBwb3NzaWJs
ZSB0byBoaWphY2sgdGhlIHN5c2NhbGwgYW5kIGRlbGVnYXRlCisgICAgLy8gdGhlIG9wZW5pbmcg
b2YgZmlsZXMgdG8gdGhlIFVJUHJvY2VzcyAoaG9wZWZ1bGx5KS4gVGhpcyBpcyB0aGUgbmV4dCBz
dGVwLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG9wZW4pKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhvcGVuYXQpKTsKKworICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOworfQorCitib29sIFNlY2NvbXBGaWx0ZXJzOjpsb2FkKCkKK3sKKyAgICBy
ZXR1cm4gIXNlY2NvbXBfbG9hZChtX2NvbnRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kMTdlMGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzX2gKKyNkZWZpbmUgU2VjY29tcEZp
bHRlcnNfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2Nv
bXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzIHsKK3B1
YmxpYzoKKyAgICBTZWNjb21wRmlsdGVycygpOworICAgIH5TZWNjb21wRmlsdGVycygpOworCisg
ICAgYm9vbCBsb2FkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRSdWxlKHVpbnQzMl90IGFj
dGlvbiwgaW50IHN5c2NhbGwpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAgIHNjbXBfZmlsdGVyX2N0eCBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKaW5k
ZXggMTYyNzhhMy4uNTEyYWU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
PEVjb3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByb2Nlc3MuaD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTYyLDYgKzYzLDEzIEBA
IFdLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5FZmwoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
ICAgICAgICAgcmV0dXJuIDE7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMp
CisgICAgU2VjY29tcEZpbHRlcnMgc2VjY29tcDsKKworICAgIGlmICghc2VjY29tcC5sb2FkKCkp
CisgICAgICAgIHJldHVybiAxOworI2VuZGlmCisKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kTGliU2Vj
Y29tcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmY4NjZjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCkBAIC0w
LDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzCisjICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkKKyMgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisjICAgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisjCisjCisKK0lOQ0xVREUoRmluZFBrZ0NvbmZpZykKKworUEtHX0NIRUNL
X01PRFVMRVMoTElCU0VDQ09NUCBSRVFVSVJFRCBsaWJzZWNjb21wPj0xLjAuMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2UKaW5kZXggY2Q2YjIyYjIuLjJlMWYzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBA
IC05MCw2ICs5MCw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9O
RVRXT1JLX0lORk8gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQSSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSIE9OKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FIE9OKQorV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyBPRkYpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgT04p
CkBAIC05OCw2ICs5OSw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9WSURFTyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURF
T19UUkFDSyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJf
SU5URU5UUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJf
SU5URU5UU19UQUcgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
V0VCX1BST0NFU1NfU0FOREJPWCBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfV0VCX1RJTUlORyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9XT1JLRVJTIE9OKQogCkBAIC0xNTcsNCArMTU5LDggQEAgSUYgKEVOQUJMRV9XRUJH
TCkKICAgRklORF9QQUNLQUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGICgpCiAKK2lmKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgRklORF9QQUNLQUdFKExpYlNlY2NvbXAgUkVRVUlSRUQp
CitFTkRJRigpCisKIFNFVChDUEFDS19TT1VSQ0VfR0VORVJBVE9SIFRCWjIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0
RmVhdHVyZXMuY21ha2UKaW5kZXggN2ViMzM3NS4uZjAwOGExNSAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0
dXJlcy5jbWFrZQpAQCAtOTEsNiArOTEsNyBAQCBNQUNSTyAoV0VCS0lUX09QVElPTl9CRUdJTikK
ICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUkVQQUlOVF9USFJPVFRMSU5HICJUb2dn
bGUgcmVwYWludCB0aHJvdHRsaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgIlRvZ2dsZSByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
Q1JJUFRFRF9TUEVFQ0ggIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQiIE9GRikK
KyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0VDQ09NUF9GSUxURVJTICJUb2dnbGUg
TGludXggc2VjY29tcCBmaWx0ZXJzIGZvciB0aGUgV2ViUHJvY2VzcyBzdXBwb3J0IiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBTaGFkb3cg
RE9NIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBUkVE
X1dPUktFUlMgIlRvZ2dsZSBTaGFyZWRXb3JrZXJzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfU1FMX0RBVEFCQVNFICJUb2dnbGUgU1FMIERhdGFiYXNlIFN1
cHBvcnQiIE9OKQpAQCAtMTA5LDYgKzExMCw3IEBAIE1BQ1JPIChXRUJLSVRfT1BUSU9OX0JFR0lO
KQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfQVVESU8gIlRvZ2dsZSBXZWIg
QXVkaW8gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJf
SU5URU5UUyAiVG9nZ2xlIFdlYiBJbnRlbnRzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfV0VCX0lOVEVOVFNfVEFHICJUb29nbGUgSFRNTEludGVudEVsZW1l
bnQgdGFnIHN1cHBvcnQiIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VC
X1BST0NFU1NfU0FOREJPWCAiVG9vZ2xlIFdlYlByb2Nlc3Mgc2FuZGJveCBzdXBwb3J0IiBPRkYp
CiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9TT0NLRVRTICJUb2dnbGUgV2Vi
IFNvY2tldHMgc3VwcG9ydCIgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dF
Ql9USU1JTkcgIlRvZ2dsZSBXZWIgVGltaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfV09SS0VSUyAiVG9nZ2xlIFdlYiBXb3JrZXJzIHN1cHBvcnQiIE9G
RikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtl
Y29uZmlnLmguY21ha2UKaW5kZXggZGY4Y2IxNy4uMjBiZmUyNSAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAg
LTc5LDYgKzc5LDcgQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUgogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FCisjY21ha2VkZWZpbmUwMSBFTkFC
TEVfU0VDQ09NUF9GSUxURVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2Nt
YWtlZGVmaW5lMDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
U01PT1RIX1NDUk9MTElORwpAQCAtOTgsNiArOTksNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X1dFQl9BVURJTwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9JTlRFTlRTCiAjY21ha2VkZWZp
bmUwMSBFTkFCTEVfV0VCX0lOVEVOVFNfVEFHCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX1BS
T0NFU1NfU0FOREJPWAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9TT0NLRVRTCiAjY21ha2Vk
ZWZpbmUwMSBFTkFCTEVfV0VCX1RJTUlORwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dPUktFUlMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9lZmwvamhidWls
ZC5tb2R1bGVzCmluZGV4IGJmYTlhOWEuLmE5ZGIzNDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2VmbC9q
aGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwpAQCAtMTcsNiAr
MTcsNyBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJlX2RidXMiLz4KICAgICAgIDxkZXAgcGFja2Fn
ZT0iZWV6ZSIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJlZnJlZXQiLz4KKyAgICAgIDxkZXAgcGFj
a2FnZT0ibGlic2VjY29tcCIvPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21ldGFtb2R1bGU+
CiAKQEAgLTM5LDYgKzQwLDggQEAKICAgPHJlcG9zaXRvcnkgdHlwZT0ic3ZuIiBuYW1lPSJlbmxp
Z2h0ZW5tZW50Lm9yZyIKICAgICAgIGhyZWY9Imh0dHA6Ly9zdm4uZW5saWdodGVubWVudC5vcmcv
c3ZuL2UvdHJ1bmsvIgogICAgICAgdHJ1bmstdGVtcGxhdGU9IiUobW9kdWxlKXMvIi8+CisgIDxy
ZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0LmNvZGUuc2YubmV0IgorICAgICAgaHJlZj0i
Z2l0Oi8vZ2l0LmNvZGUuc2YubmV0L3AvIi8+CiAKICAgPGF1dG90b29scyBpZD0iY2Fpcm8iIGF1
dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CiAgICAgPGRlcGVuZGVuY2llcz4KQEAgLTIzOSw0ICsyNDIs
MTAgQEAKICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9hdXRvdG9vbHM+CiAKKyAgPGF1dG90b29s
cyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAgIDxicmFuY2gg
bW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0iZ2l0LmNvZGUu
c2YubmV0IgorICAgICAgICAgIHRhZz0iMmM4NTIwZTIzZjMwOTk0OTdiYWZlMGM5ZGU5YTk0NTJh
OGI3NWJiNCIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156605</attachid>
            <date>2012-08-05 23:43:52 -0700</date>
            <delta_ts>2012-09-02 11:22:34 -0700</delta_ts>
            <desc>Work in progress of SeccompFilters v4 - correct</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>28221</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWJjYmRiMC4uMjllM2VkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL3NlY2NvbXAvU2Fu
ZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcAorCiAg
ICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3BwCiAgICAgU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIApAQCAtMTE3LDYgKzEyMSw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGlj
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL3NlY2NvbXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0Mvc291cCIKQEAgLTE1Nyw2ICsxNjIsMTIgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKICAgICAke0xJQlNPVVAyNF9MSUJSQVJJRVN9CiApCiAKK0lGKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCisgICAgTElTVCAoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQorCiBMSVNUIChB
UFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCiAgICAgZWZsL01haW5FZmwuY3BwCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCA2ZjhhYTc4Li40ZGM0Y2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTg0LDYgKzg0LDkg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gp
CiAgICAgICAgIEhhbmRsZSogbV9kYXRhOworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOworI2VuZGlmCiAjZWxzZQogICAgICAgICBIYW5k
bGUgbV9lbXB0eUhhbmRsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzE5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpICYmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKCkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKK30KKwordm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0Cit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFoYW5kbGUu
bV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFkb3B0UmVmKG5l
dyBTYW5kYm94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sK
K30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJikKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29u
c3QgSGFuZGxlJikKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24o
KQoreworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmludmFsaWRhdGUoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OkhhbmRsZUFycmF5KCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6On5IYW5kbGVBcnJheSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkKK3sKK30KKworc2l6ZV90IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7
Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KQoreworICAgIHJldHVybiBtX2VtcHR5SGFuZGxlOwor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZUFycmF5
JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYzY2MxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMu
Y3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJzOjpTZWNjb21wRmls
dGVycygpCisgICAgOiBtX2NvbnRleHQoMCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb250
ZXh0ID0gc2VjY29tcF9pbml0KFNDTVBfQUNUX1RSQVApOworI2Vsc2UKKyAgICBtX2NvbnRleHQg
PSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfS0lMTCk7CisjZW5kaWYKKworICAgIC8vIE5vIGJlaW5n
IGFibGUgdG8gaW5pdGlhbGl6ZSBzZWNjb21wIGlzIGNvbnNpZGVyZWQgYSBzZWN1cml0eQorICAg
IC8vIGJyZWFjaCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgZ28gYmV5b25kIHRoaXMg
cG9pbnQuIEluIGZhY3QsCisgICAgLy8gZXZlcnkgZXJyb3IgaGVyZSBzaG91bGQgYmUgY29uc2lk
ZXJlZCBmYXRhbC4KKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKKworICAg
IGlmIChzZWNjb21wX2F0dHJfc2V0KG1fY29udGV4dCwgU0NNUF9GTFRBVFJfQUNUX0JBREFSQ0gs
IFNDTVBfQUNUX0tJTEwpKQorICAgICAgICBDUkFTSCgpOworCisgICAgaW5pdGlhbGl6ZSgpOwor
fQorCitTZWNjb21wRmlsdGVyczo6flNlY2NvbXBGaWx0ZXJzKCkKK3sKKyAgICBzZWNjb21wX3Jl
bGVhc2UobV9jb250ZXh0KTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyczo6YWRkUnVsZSh1aW50
MzJfdCBhY3Rpb24sIGludCBzeXNjYWxsKQoreworICAgIGlmIChzZWNjb21wX3J1bGVfYWRkKG1f
Y29udGV4dCwgYWN0aW9uLCBzeXNjYWxsLCAwKSkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordm9p
ZCBTZWNjb21wRmlsdGVyczo6aW5pdGlhbGl6ZSgpCit7CisgICAgLy8gUHJpb3JpdGl6ZSB0aGUg
bW9zdCBmcmVxdWVudCBjYWxscy4KKyAgICBzZWNjb21wX3N5c2NhbGxfcHJpb3JpdHkobV9jb250
ZXh0LCBTQ01QX1NZUyhjbG9ja19nZXR0aW1lKSwgMjAwKTsKKyAgICBzZWNjb21wX3N5c2NhbGxf
cHJpb3JpdHkobV9jb250ZXh0LCBTQ01QX1NZUyh3cml0ZSksIDE5OSk7CisKKyAgICAvLyBXQVJO
SU5HIQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGFuZCBkb2Vz
bid0IGFkZCBhbnkgYWRkaXRpb25hbCBzZWN1cml0eSBhdCBhbGwKKyAgICAvLyBpbiB0aGUgd2F5
IGl0IGlzIGltcGxlbWVudGVkIHJpZ2h0IG5vdy4gSXQgaXMgb25seSBibG9ja2luZyBzeXNjYWxs
cyB3ZSBhcmUKKyAgICAvLyBub3QgdXNpbmcsIHJlZHVjaW5nIHRoZSBrZXJuZWwgYXR0YWNrIHN1
cmZhY2UuCisgICAgLy8KKyAgICAvLyBUaGUgbGlzdCBiZWxvdyBzdW1tYXJpemVzIHRoZSBzeXNj
YWxsIHdoaXRlbGlzdCBuZWVkZWQgYnkgYSBFRkwgYW5kIFF0CisgICAgLy8gbWluaW1hbCBidWls
ZCB0byBsb2FkIGh0dHBzOi8vYnVzLndlYmtpdC5vcmcuIFdlIHNob3VsZCBub3cgYW5hbHl6ZSBv
bmUgYnkKKyAgICAvLyBvbmUsIGFuZCBpZiBhIHN5c2NhbGwgaXMgcmVhbGx5IG5lZWQgdG8gYmUg
YWxsb3dlZCwgd2UgbXVzdCByZXN0cmljdCB0aGUKKyAgICAvLyBwYXJhbWV0ZXJzIGFzIG11Y2gg
YXMgcG9zc2libGUuIFdlIHNob3VsZCBhbHNvIG1vdmUgYmFja2VuZCBkZXBlbmRlbmQKKyAgICAv
LyBzeXNjYWxscyB0byBwbGF0Zm9ybVNldHVwRmlsdGVycygpLgorICAgIC8vCisgICAgLy8gbGli
c2VjY29tcCBzdXBwb3J0cyB4ODYtNjQsIGJ1dCBteSB0ZXN0cyB3ZXJlIGNvbmR1Y3RlZCBvbiBh
IHg4NgorICAgIC8vIG1hY2hpbmUgcnVubmluZyBVYnVudHUgMTIuMDQuIEl0IGlzIHVubGlrZWx5
IHRoYXQgaXQgd2lsbCB3b3JrIG91dCBvZiB0aGUKKyAgICAvLyBib3ggaW4gb3RoZXIgZW52aXJv
bm1lbnQgc2luY2UgZGlmZmVyZW50IHZlcnNpb25zIG9mIGxpYmMgbWlnaHQgdXNlCisgICAgLy8g
ZGlmZmVyZW50IHN5c2NhbGxzIGZvciBkb2luZyB0aGUgc2FtZSB0aGluZy4KKworICAgIC8vIENs
b2NrLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb2NrX2dldHRpbWUp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXR0aW1lb2ZkYXkpKTsK
KyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh0aW1lKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModGltZXMpKTsKKworICAgIC8vIFRocmVhZCBzeW5j
aHJvbml6YXRpb24sIHByb2Nlc3MgbWFuYWdlbWVudCBhbmQgc3lzdGVtIGluZm9ybWF0aW9uLgor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb25lKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXhpdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKGV4aXRfZ3JvdXApKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhmdXRleCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGdldGV1aWQzMikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHJs
aW1pdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHJ1c2FnZSkp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHVpZDMyKSk7CisgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWxvY2spKTsKKyAgICBhZGRSdWxlKFND
TVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdhY3Rpb24pKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdwcm9jbWFzaykpOworICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKHNjaGVkX2dldGFmZmluaXR5KSk7CisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoc2V0X3JvYnVzdF9saXN0KSk7CisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVModWdldHJsaW1pdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHVuYW1lKSk7CisKKyAgICAvLyBVc2VkIGJ5IGdfc3lzdGVtX3RocmVh
ZF9zZXRfbmFtZSgpLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHByY3Rs
KSk7CisKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBvbiBhbHJlYWR5IG9wZW5l
ZCBmaWxlIGRlc2NyaXB0b3JzLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KF9sbHNlZWspKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhfbmV3c2Vs
ZWN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoYWNjZXNzKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2xvc2UpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhkdXApKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhlcG9sbF9jdGwpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhlcG9sbF93YWl0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZmNudGw2NCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZzdGF0
NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3RhdGZzKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnN5bmMpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1bmNhdGUpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50cykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldGRlbnRzNjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhpbm90aWZ5X2luaXQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhpb2N0bCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1tYXAy
KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocGlwZSkpOworICAgIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBvbGwpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhyZWFkKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoc2VsZWN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
d3JpdGUpKTsKKworICAgIC8vIFNvY2tldCBvcGVyYXRpb25zLgorICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKGNvbm5lY3QpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhnZXRzb2Nrb3B0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMocmVjdikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbmQp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzb2NrZXQpKTsKKworICAg
IC8vIE1lbW9yeSByZWxhdGVkIHN0dWZmLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKGJyaykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1hZHZp
c2UpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtcHJvdGVjdCkpOwor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG11bm1hcCkpOworCisgICAgLy8g
RklYTUU6IE5lZWRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBJJ20gbm90IHN1cmUgaWYgdGhlc2Ug
Y2FsbHMgY2FuIGJlCisgICAgLy8gZG9uZSB3aXRob3V0IGFuIGZkLCB1c2luZyBqdXN0IGEgcGF0
aCBpbnN0ZWFkLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNobW9kKSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXZlbnRmZDIpKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhsc3RhdDY0KSk7CisgICAgYWRkUnVsZShT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMobWtkaXIpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhyZW5hbWUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhzdGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzdGF0
ZnMpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1bmxpbmspKTsKKwor
ICAgIC8vIEZJWE1FOiBBbGxvd2luZyB0aGUgV2ViUHJvY2VzcyB0byBwZXJmb3JtIG9wZW4oKSBt
YWtlcyB0aGlzIGVmZm9ydAorICAgIC8vIGJhc2ljYWxseSB1c2VsZXNzLiBJdCBpcyBwb3NzaWJs
ZSB0byBoaWphY2sgdGhlIHN5c2NhbGwgYW5kIGRlbGVnYXRlCisgICAgLy8gdGhlIG9wZW5pbmcg
b2YgZmlsZXMgdG8gdGhlIFVJUHJvY2VzcyAoaG9wZWZ1bGx5KS4gVGhpcyBpcyB0aGUgbmV4dCBz
dGVwLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG9wZW4pKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhvcGVuYXQpKTsKKworICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOworfQorCitib29sIFNlY2NvbXBGaWx0ZXJzOjpsb2FkKCkKK3sKKyAgICBy
ZXR1cm4gIXNlY2NvbXBfbG9hZChtX2NvbnRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kMTdlMGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzX2gKKyNkZWZpbmUgU2VjY29tcEZp
bHRlcnNfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2Nv
bXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzIHsKK3B1
YmxpYzoKKyAgICBTZWNjb21wRmlsdGVycygpOworICAgIH5TZWNjb21wRmlsdGVycygpOworCisg
ICAgYm9vbCBsb2FkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRSdWxlKHVpbnQzMl90IGFj
dGlvbiwgaW50IHN5c2NhbGwpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAgIHNjbXBfZmlsdGVyX2N0eCBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9xdC9TZWNjb21wRmlsdGVyc1F0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL3F0L1NlY2NvbXBGaWx0ZXJzUXQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzlmZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9xdC9TZWNjb21wRmlsdGVyc1F0
LmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQppbmRleCBlZGVhOWM1Li44ZmMyYmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTE0Myw2ICsx
NDMsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvcXQvUXREZWZhdWx0RGF0YUxvY2F0aW9u
LmggXAogICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaCBcCiAgICAgU2hhcmVkL3F0
L1F0TmV0d29ya1JlcXVlc3REYXRhLmggXAorICAgIFNoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0
ZXJzLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaCBcCiAgICAgVUlQcm9jZXNz
L0FQSS9DL1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9D
L1dLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggXApAQCAtNTI3LDYgKzUyOCw5IEBA
IFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAgXAog
ICAgIFNoYXJlZC9xdC9XZWJVUkxSZXF1ZXN0UXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViVVJM
UmVzcG9uc2VRdC5jcHAgXAorICAgIFNoYXJlZC9zZWNjb21wL1NhbmRib3hFeHRlbnNpb25TZWNj
b21wLmNwcCBcCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwIFwKKyAgICBT
aGFyZWQvc2VjY29tcC9xdC9TZWNjb21wRmlsdGVyc1F0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQ
SS9DL1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL0Mv
V0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJ
L0MvV0tCYWNrRm9yd2FyZExpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggMTdkNTQ5My4uZWRj
ZjJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTIwLDYgKzIwLDcgQEAgSU5DTFVERVBBVEggKz0gXAog
ICAgICQkU09VUkNFX0RJUi9TaGFyZWQvUGx1Z2lucyBcCiAgICAgJCRTT1VSQ0VfRElSL1NoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL3F0IFwKKyAgICAk
JFNPVVJDRV9ESVIvU2hhcmVkL3NlY2NvbXAgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3Mg
XAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQVBJL0MgXAogICAgICQkU09VUkNFX0RJUi9V
SVByb2Nlc3MvQVBJL2NwcCBcCkBAIC03NCw2ICs3NSwxMCBAQCBsaW51eC0qOiB7CiAgICAgTElC
UyArPSAtbHJ0CiB9CiAKK2xpbnV4LSo6Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NFQ0NPTVBf
RklMVEVSUz0xKSB7CisgICAgUEtHQ09ORklHICs9IGxpYnNlY2NvbXAKK30KKwogUVQgKz0gcW1s
IHF1aWNrCiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9HRU9MT0NBVElPTj0xKTpoYXZlUXQo
NSk6IFFUICs9IGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Vm
bC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKaW5kZXggMTYyNzhhMy4uNTEyYWU4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUg
PFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByb2Nlc3Mu
aD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx1
bmlzdGQuaD4KQEAgLTYyLDYgKzYzLDEzIEBAIFdLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5F
ZmwoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgcmV0dXJuIDE7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAgU2VjY29tcEZpbHRlcnMgc2VjY29tcDsK
KworICAgIGlmICghc2VjY29tcC5sb2FkKCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmCisK
ICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nl
c3NNYWluUXQuY3BwCmluZGV4IGNiNzJjYjkuLmRmYTY2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFVcmw+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAKQEAgLTE0NCw2ICsxNDUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBy
b3h5KCkKIAogUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChRR3VpQXBwbGljYXRp
b24qIGFwcCkKIHsKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorICAgIFNlY2NvbXBGaWx0
ZXJzIHNlY2NvbXA7CisKKyAgICBpZiAoIXNlY2NvbXAubG9hZCgpKQorICAgICAgICByZXR1cm4g
MTsKKyNlbmRpZgorCiAgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAKICAgICBzcmFuZG9tKHRpbWUo
MCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlIGIvU291
cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFiZjg2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExp
YlNlY2NvbXAuY21ha2UKQEAgLTAsMCArMSwzMSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTIsIElu
dGVsIENvcnBvcmF0aW9uCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMK
KyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyMgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorIyAgIGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK
KyMgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMKKworSU5DTFVERShGaW5kUGtn
Q29uZmlnKQorCitQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJTRUNDT01QIFJFUVVJUkVEIGxpYnNlY2Nv
bXA+PTEuMC4wKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCBjZDZiMjJiMi4uMmUxZjNlZCAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNFZmwuY21ha2UKQEAgLTkwLDYgKzkwLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfSU5GTyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VD
Q09NUF9GSUxURVJTIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9TSEFET1dfRE9NIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1NIQVJFRF9XT1JLRVJTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1RPVUNIX0VWRU5UUyBPTikKQEAgLTk4LDYgKzk5LDcgQEAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1ZJREVPX1RSQUNLIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1dFQl9JTlRFTlRTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1dFQl9JTlRFTlRTX1RBRyBPTikKK1dFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUFJPQ0VTU19TQU5EQk9YIE9GRikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfVElNSU5HIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dPUktFUlMgT04pCiAKQEAgLTE1Nyw0ICsxNTks
OCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJUkVEKQog
RU5ESUYgKCkKIAoraWYoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBGSU5EX1BBQ0tBR0Uo
TGliU2VjY29tcCBSRVFVSVJFRCkKK0VORElGKCkKKwogU0VUKENQQUNLX1NPVVJDRV9HRU5FUkFU
T1IgVEJaMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCA3ZWIzMzc1Li5mMDA4YTE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC05MSw2ICs5MSw3IEBAIE1BQ1JPIChX
RUJLSVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9SRVBB
SU5UX1RIUk9UVExJTkcgIlRvZ2dsZSByZXBhaW50IHRocm90dGxpbmcgc3VwcG9ydCIgT0ZGKQog
ICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSAi
VG9nZ2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVkIFNwZWVj
aCBBUEkgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TRUND
T01QX0ZJTFRFUlMgIlRvZ2dsZSBMaW51eCBzZWNjb21wIGZpbHRlcnMgZm9yIHRoZSBXZWJQcm9j
ZXNzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBRE9X
X0RPTSAiVG9nZ2xlIFNoYWRvdyBET00gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05f
REVGSU5FKEVOQUJMRV9TSEFSRURfV09SS0VSUyAiVG9nZ2xlIFNoYXJlZFdvcmtlcnMgc3VwcG9y
dCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TUUxfREFUQUJBU0UgIlRv
Z2dsZSBTUUwgRGF0YWJhc2UgU3VwcG9ydCIgT04pCkBAIC0xMDksNiArMTEwLDcgQEAgTUFDUk8g
KFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dF
Ql9BVURJTyAiVG9nZ2xlIFdlYiBBdWRpbyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX1dFQl9JTlRFTlRTICJUb2dnbGUgV2ViIEludGVudHMgc3VwcG9ydCIg
T0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfSU5URU5UU19UQUcgIlRv
b2dsZSBIVE1MSW50ZW50RWxlbWVudCB0YWcgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9XRUJfUFJPQ0VTU19TQU5EQk9YICJUb29nbGUgV2ViUHJvY2VzcyBz
YW5kYm94IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VC
X1NPQ0tFVFMgIlRvZ2dsZSBXZWIgU29ja2V0cyBzdXBwb3J0IiBPTikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfV0VCX1RJTUlORyAiVG9nZ2xlIFdlYiBUaW1pbmcgc3VwcG9ydCIg
T0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XT1JLRVJTICJUb2dnbGUgV2Vi
IFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmgu
Y21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQppbmRleCBkZjhjYjE3Li4yMGJmZTI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2Vjb25maWcuaC5jbWFrZQpAQCAtNzksNiArNzksNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X1BST0dSRVNTX0VMRU1FTlQKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9SRUdJU1RFUl9QUk9UT0NP
TF9IQU5ETEVSCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUK
KyNjbWFrZWRlZmluZTAxIEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9TSEFET1dfRE9NCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBUkVEX1dPUktFUlMKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HCkBAIC05OCw2ICs5OSw3IEBACiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX0FVRElPCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfV0VC
X0lOVEVOVFMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfSU5URU5UU19UQUcKKyNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9XRUJfUFJPQ0VTU19TQU5EQk9YCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
V0VCX1NPQ0tFVFMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfVElNSU5HCiAjY21ha2VkZWZp
bmUwMSBFTkFCTEVfV09SS0VSUwpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxl
cyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggYmZhOWE5YS4uYTlkYjM0NSAxMDA2
NDQKLS0tIGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9lZmwvamhidWls
ZC5tb2R1bGVzCkBAIC0xNyw2ICsxNyw3IEBACiAgICAgICA8ZGVwIHBhY2thZ2U9ImVfZGJ1cyIv
PgogICAgICAgPGRlcCBwYWNrYWdlPSJlZXplIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImVmcmVl
dCIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJsaWJzZWNjb21wIi8+CiAgICAgPC9kZXBlbmRlbmNp
ZXM+CiAgIDwvbWV0YW1vZHVsZT4KIApAQCAtMzksNiArNDAsOCBAQAogICA8cmVwb3NpdG9yeSB0
eXBlPSJzdm4iIG5hbWU9ImVubGlnaHRlbm1lbnQub3JnIgogICAgICAgaHJlZj0iaHR0cDovL3N2
bi5lbmxpZ2h0ZW5tZW50Lm9yZy9zdm4vZS90cnVuay8iCiAgICAgICB0cnVuay10ZW1wbGF0ZT0i
JShtb2R1bGUpcy8iLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5z
Zi5uZXQiCisgICAgICBocmVmPSJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC8iLz4KIAogICA8YXV0
b3Rvb2xzIGlkPSJjYWlybyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KICAgICA8ZGVwZW5kZW5j
aWVzPgpAQCAtMjM5LDQgKzI0MiwxMCBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L2F1dG90
b29scz4KIAorICA8YXV0b3Rvb2xzIGlkPSJsaWJzZWNjb21wIiBhdXRvZ2VuLXNoPSJjb25maWd1
cmUiPgorICAgICAgPGJyYW5jaCBtb2R1bGU9ImxpYnNlY2NvbXAvbGlic2VjY29tcCIKKyAgICAg
ICAgICByZXBvPSJnaXQuY29kZS5zZi5uZXQiCisgICAgICAgICAgdGFnPSIyYzg1MjBlMjNmMzA5
OTQ5N2JhZmUwYzlkZTlhOTQ1MmE4Yjc1YmI0Ii8+CisgIDwvYXV0b3Rvb2xzPgorCiA8L21vZHVs
ZXNldD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161845</attachid>
            <date>2012-09-02 11:22:34 -0700</date>
            <delta_ts>2013-01-07 12:30:05 -0800</delta_ts>
            <desc>Work in progress of SeccompFilters v4 - rebased</desc>
            <filename>seccomp.patch</filename>
            <type>text/plain</type>
            <size>28448</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTZjYTBjMS4uZGNkODBjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTMyLDYgKzMyLDEwIEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIAor
ICAgIFNoYXJlZC9zZWNjb21wL1NhbmRib3hFeHRlbnNpb25TZWNjb21wLmNwcAorICAgIFNoYXJl
ZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmNwcAorICAgIFNoYXJlZC9zZWNjb21wL2VmbC9TZWNj
b21wRmlsdGVyc0VmbC5jcHAKKwogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJ
bmZvLmNwcAogICAgIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCiAK
QEAgLTEyNyw2ICsxMzEsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgogICAgICIke1dF
QkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwi
CisgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zZWNjb21wIgogICAgICIke1dFQktJVDJfRElS
fS9TaGFyZWQvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2VmbCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL3NvdXAiCkBAIC0xNzIsNiArMTc3
LDEyIEBAIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCiAgICAgJHtMSUJTT1VQX0xJQlJB
UklFU30KICkKIAorSUYoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBMSVNUIChBUFBFTkQg
V2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30KKyAgICAp
CitFTkRJRigpCisKIExJU1QgKEFQUEVORCBXZWJQcm9jZXNzX1NPVVJDRVMKICAgICBlZmwvTWFp
bkVmbC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0
ZW5zaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCmluZGV4
IDZmOGFhNzguLjRkYzRjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5k
Ym94RXh0ZW5zaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNp
b24uaApAQCAtODQsNiArODQsOSBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
V0VCX1BST0NFU1NfU0FOREJPWCkKICAgICAgICAgSGFuZGxlKiBtX2RhdGE7CisjaWYgRU5BQkxF
KFNFQ0NPTVBfRklMVEVSUykKKyAgICAgICAgSGFuZGxlIG1fZW1wdHlIYW5kbGU7CisjZW5kaWYK
ICNlbHNlCiAgICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29t
cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMTk5ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NhbmRib3hFeHRlbnNp
b25TZWNjb21wLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCisKKyNpZiBFTkFC
TEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2lu
Y2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgor
I2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpI
YW5kbGUoKQoreworfQorCitTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU6On5IYW5kbGUoKQorewor
fQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRs
ZSYgcmVzdWx0KQoreworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSkK
K3sKKyAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCisgICAgICAgIHJldHVybiAw
OworCisgICAgYWRvcHRSZWYobmV3IFNhbmRib3hFeHRlbnNpb24oaGFuZGxlKSk7Cit9CisKK3Zv
aWQgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgVHlw
ZSB0eXBlLCBIYW5kbGUmKQoreworfQorCitTdHJpbmcgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgVHlwZSB0eXBlLCBI
YW5kbGUmKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6
U2FuZGJveEV4dGVuc2lvbihjb25zdCBIYW5kbGUmKQoreworfQorCitTYW5kYm94RXh0ZW5zaW9u
Ojp+U2FuZGJveEV4dGVuc2lvbigpCit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6aW52
YWxpZGF0ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6SGFuZGxlQXJyYXkoKQoreworfQorCitTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6fkhhbmRsZUFycmF5KCkKK3sKK30KKwordm9pZCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YWxsb2NhdGUoc2l6ZV90KQoreworfQorCitz
aXplX3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OnNpemUoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCitjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9lbXB0eUhhbmRsZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6b3BlcmF0b3JbXShzaXplX3QpCit7CisgICAgcmV0
dXJuIG1fZW1wdHlIYW5kbGU7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXk6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAoreworfQorCitib29s
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiwgSGFuZGxlQXJyYXkmKQoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUFJPQ0VTU19TQU5EQk9YKSAm
JiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3Nl
Y2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZhNjIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2Vj
Y29tcC9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVycy5oIgor
CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2VjY29t
cEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKCkKKyAgICA6IG1fY29udGV4dCgwKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBtX2NvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1RfVFJBUCk7Cisj
ZWxzZQorICAgIG1fY29udGV4dCA9IHNlY2NvbXBfaW5pdChTQ01QX0FDVF9LSUxMKTsKKyNlbmRp
ZgorCisgICAgLy8gTm8gYmVpbmcgYWJsZSB0byBpbml0aWFsaXplIHNlY2NvbXAgaXMgY29uc2lk
ZXJlZCBhIHNlY3VyaXR5CisgICAgLy8gYnJlYWNoIGFuZCB0aGUgYXBwbGljYXRpb24gc2hvdWxk
IG5vdCBnbyBiZXlvbmQgdGhpcyBwb2ludC4gSW4gZmFjdCwKKyAgICAvLyBldmVyeSBlcnJvciBo
ZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZhdGFsLgorICAgIGlmICghbV9jb250ZXh0KQorICAg
ICAgICBDUkFTSCgpOworCisgICAgaWYgKHNlY2NvbXBfYXR0cl9zZXQobV9jb250ZXh0LCBTQ01Q
X0ZMVEFUUl9BQ1RfQkFEQVJDSCwgU0NNUF9BQ1RfS0lMTCkpCisgICAgICAgIENSQVNIKCk7CisK
KyAgICBpbml0aWFsaXplKCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRlcnMo
KQoreworICAgIHNlY2NvbXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lkIFNlY2NvbXBG
aWx0ZXJzOjphZGRSdWxlKHVpbnQzMl90IGFjdGlvbiwgaW50IHN5c2NhbGwpCit7CisgICAgaWYg
KHNlY2NvbXBfcnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDApKQorICAgICAg
ICBDUkFTSCgpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAg
ICAvLyBQcmlvcml0aXplIHRoZSBtb3N0IGZyZXF1ZW50IGNhbGxzLgorICAgIHNlY2NvbXBfc3lz
Y2FsbF9wcmlvcml0eShtX2NvbnRleHQsIFNDTVBfU1lTKGNsb2NrX2dldHRpbWUpLCAyMDApOwor
ICAgIHNlY2NvbXBfc3lzY2FsbF9wcmlvcml0eShtX2NvbnRleHQsIFNDTVBfU1lTKHdyaXRlKSwg
MTk5KTsKKworICAgIC8vIFdBUk5JTkchCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGhpZ2hseSBl
eHBlcmltZW50YWwgYW5kIGRvZXNuJ3QgYWRkIGFueSBhZGRpdGlvbmFsIHNlY3VyaXR5IGF0IGFs
bAorICAgIC8vIGluIHRoZSB3YXkgaXQgaXMgaW1wbGVtZW50ZWQgcmlnaHQgbm93LiBJdCBpcyBv
bmx5IGJsb2NraW5nIHN5c2NhbGxzIHdlIGFyZQorICAgIC8vIG5vdCB1c2luZywgcmVkdWNpbmcg
dGhlIGtlcm5lbCBhdHRhY2sgc3VyZmFjZS4KKyAgICAvLworICAgIC8vIFRoZSBsaXN0IGJlbG93
IHN1bW1hcml6ZXMgdGhlIHN5c2NhbGwgd2hpdGVsaXN0IG5lZWRlZCBieSBhIEVGTCBhbmQgUXQK
KyAgICAvLyBtaW5pbWFsIGJ1aWxkIHRvIGxvYWQgaHR0cHM6Ly9idXMud2Via2l0Lm9yZy4gV2Ug
c2hvdWxkIG5vdyBhbmFseXplIG9uZSBieQorICAgIC8vIG9uZSwgYW5kIGlmIGEgc3lzY2FsbCBp
cyByZWFsbHkgbmVlZCB0byBiZSBhbGxvd2VkLCB3ZSBtdXN0IHJlc3RyaWN0IHRoZQorICAgIC8v
IHBhcmFtZXRlcnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gV2Ugc2hvdWxkIGFsc28gbW92ZSBiYWNr
ZW5kIGRlcGVuZGVuZAorICAgIC8vIHN5c2NhbGxzIHRvIHBsYXRmb3JtU2V0dXBGaWx0ZXJzKCku
CisgICAgLy8KKyAgICAvLyBsaWJzZWNjb21wIHN1cHBvcnRzIHg4Ni02NCwgYnV0IG15IHRlc3Rz
IHdlcmUgY29uZHVjdGVkIG9uIGEgeDg2CisgICAgLy8gbWFjaGluZSBydW5uaW5nIFVidW50dSAx
Mi4wNC4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIHdvcmsgb3V0IG9mIHRoZQorICAgIC8v
IGJveCBpbiBvdGhlciBlbnZpcm9ubWVudCBzaW5jZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgbGli
YyBtaWdodCB1c2UKKyAgICAvLyBkaWZmZXJlbnQgc3lzY2FsbHMgZm9yIGRvaW5nIHRoZSBzYW1l
IHRoaW5nLgorCisgICAgLy8gQ2xvY2suCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMoY2xvY2tfZ2V0dGltZSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKGdldHRpbWVvZmRheSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KHRpbWUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh0aW1lcykpOwor
CisgICAgLy8gVGhyZWFkIHN5bmNocm9uaXphdGlvbiwgcHJvY2VzcyBtYW5hZ2VtZW50IGFuZCBz
eXN0ZW0gaW5mb3JtYXRpb24uCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
Y2xvbmUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhleGl0KSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXhpdF9ncm91cCkpOworICAgIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZ1dGV4KSk7CisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0ZXVpZDMyKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoZ2V0cmxpbWl0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZ2V0cnVzYWdlKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZ2V0dWlkMzIpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtbG9j
aykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJ0X3NpZ2FjdGlvbikp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJ0X3NpZ3Byb2NtYXNrKSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocnRfc2lncmV0dXJuKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2NoZWRfZ2V0YWZmaW5pdHkpKTsK
KyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzZXRfcm9idXN0X2xpc3QpKTsK
KyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1Z2V0cmxpbWl0KSk7CisgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5hbWUpKTsKKworICAgIC8vIFVzZWQg
YnkgZ19zeXN0ZW1fdGhyZWFkX3NldF9uYW1lKCkuCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMocHJjdGwpKTsKKworICAgIC8vIEZpbGUgZGVzY3JpcHRvciBvcGVyYXRpb25z
IG9uIGFscmVhZHkgb3BlbmVkIGZpbGUgZGVzY3JpcHRvcnMuCisgICAgYWRkUnVsZShTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoX2xsc2VlaykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKF9uZXdzZWxlY3QpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhhY2Nlc3MpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhjbG9z
ZSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGR1cCkpOworICAgIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGR1cDIpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhlcG9sbF9jdGwpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhlcG9sbF93YWl0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZmNudGw2NCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGZzdGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmc3RhdGZz
KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnN5bmMpKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1bmNhdGUpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1bmNhdGU2NCkpOworICAgIGFkZFJ1bGUoU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGRlbnRzKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoZ2V0ZGVudHM2NCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKGlub3RpZnlfaW5pdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFND
TVBfU1lTKGlvY3RsKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobW1h
cDIpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhwaXBlKSk7CisgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocG9sbCkpOworICAgIGFkZFJ1bGUoU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJlYWQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhzZWxlY3QpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZ
Uyh3cml0ZSkpOworCisgICAgLy8gU29ja2V0IG9wZXJhdGlvbnMuCisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoY29ubmVjdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldHNvY2tvcHQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhyZWN2KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2Vu
ZCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNvY2tldCkpOworCisg
ICAgLy8gTWVtb3J5IHJlbGF0ZWQgc3R1ZmYuCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoYnJrKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWFk
dmlzZSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1wcm90ZWN0KSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobXVubWFwKSk7CisKKyAgICAv
LyBGSVhNRTogTmVlZHMgZGVlcGVyIGludmVzdGlnYXRpb24uIEknbSBub3Qgc3VyZSBpZiB0aGVz
ZSBjYWxscyBjYW4gYmUKKyAgICAvLyBkb25lIHdpdGhvdXQgYW4gZmQsIHVzaW5nIGp1c3QgYSBw
YXRoIGluc3RlYWQuCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoY2htb2Qp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhldmVudGZkMikpOworICAg
IGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGxzdGF0NjQpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhta2RpcikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHJlYWRsaW5rKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMocmVuYW1lKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
c3RhdDY0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc3RhdGZzKSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5saW5rKSk7CisKKyAgICAv
LyBGSVhNRTogQWxsb3dpbmcgdGhlIFdlYlByb2Nlc3MgdG8gcGVyZm9ybSBvcGVuKCkgbWFrZXMg
dGhpcyBlZmZvcnQKKyAgICAvLyBiYXNpY2FsbHkgdXNlbGVzcy4gSXQgaXMgcG9zc2libGUgdG8g
aGlqYWNrIHRoZSBzeXNjYWxsIGFuZCBkZWxlZ2F0ZQorICAgIC8vIHRoZSBvcGVuaW5nIG9mIGZp
bGVzIHRvIHRoZSBVSVByb2Nlc3MgKGhvcGVmdWxseSkuIFRoaXMgaXMgdGhlIG5leHQgc3RlcC4K
KyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhvcGVuKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMob3BlbmF0KSk7CisKKyAgICBwbGF0Zm9ybUluaXRp
YWxpemUoKTsKK30KKworYm9vbCBTZWNjb21wRmlsdGVyczo6bG9hZCgpCit7CisgICAgcmV0dXJu
ICFzZWNjb21wX2xvYWQobV9jb250ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDE3ZTBlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJz
X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzZWNjb21wLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21wRmlsdGVycyB7CitwdWJsaWM6
CisgICAgU2VjY29tcEZpbHRlcnMoKTsKKyAgICB+U2VjY29tcEZpbHRlcnMoKTsKKworICAgIGJv
b2wgbG9hZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkUnVsZSh1aW50MzJfdCBhY3Rpb24s
IGludCBzeXNjYWxsKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplKCk7CisKKyAgICBzY21wX2ZpbHRlcl9jdHggbV9jb250ZXh0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQorCisjZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL3NlY2NvbXAvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjOWZkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQor
CisjaW5jbHVkZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBTZWNj
b21wRmlsdGVyczo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9xdC9TZWNjb21wRmlsdGVyc1F0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZmQxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQorCisjaW5jbHVkZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBTZWNjb21wRmlsdGVyczo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKaW5kZXggMjFlMmRjMS4uYmY4ZmQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0xNDMsNiArMTQzLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL3F0L1F0RGVmYXVsdERhdGFMb2NhdGlvbi5oIFwK
ICAgICBTaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmggXAogICAgIFNoYXJlZC9xdC9RdE5l
dHdvcmtSZXF1ZXN0RGF0YS5oIFwKKyAgICBTaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5o
IFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmggXAogICAgIFVJUHJvY2Vzcy9BUEkv
Qy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0F1
dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIFwKQEAgLTQ5Myw2ICs0OTQsOSBAQCBTT1VS
Q0VTICs9IFwKICAgICBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwIFwKICAgICBT
aGFyZWQvcXQvV2ViVVJMUmVxdWVzdFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYlVSTFJlc3Bv
bnNlUXQuY3BwIFwKKyAgICBTaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9uU2VjY29tcC5j
cHAgXAorICAgIFNoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmNwcCBcCisgICAgU2hhcmVk
L3NlY2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9X
S0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXV0
aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dL
QmFja0ZvcndhcmRMaXN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDkxNjY4NzQuLjljZTBlYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJpCkBAIC0yMCw2ICsyMCw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAk
JFNPVVJDRV9ESVIvU2hhcmVkL1BsdWdpbnMgXAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZSBcCiAgICAgJCRTT1VSQ0VfRElSL1NoYXJlZC9xdCBcCisgICAgJCRTT1VS
Q0VfRElSL1NoYXJlZC9zZWNjb21wIFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzIFwKICAg
ICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0FQSS9DIFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9j
ZXNzL0FQSS9jcHAgXApAQCAtNzUsNiArNzYsMTAgQEAgbGludXgtKjogewogICAgIExJQlMgKz0g
LWxydAogfQogCitsaW51eC0qOmNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TRUNDT01QX0ZJTFRF
UlM9MSkgeworICAgIFBLR0NPTkZJRyArPSBsaWJzZWNjb21wCit9CisKIGNvbnRhaW5zKERFRklO
RVMsIEhBVkVfUVRRVUlDSz0xKTogUVQgKz0gcW1sIHF1aWNrCiAKIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9HRU9MT0NBVElPTj0xKTogUVQgKz0gbG9jYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAppbmRleCBkMDNhY2Y5
Li5lNWZhZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQ
cm9jZXNzTWFpbkVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2Vi
UHJvY2Vzc01haW5FZmwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8RWNvcmUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV2ViUHJvY2Vzcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNjYsNiArNjcsMTMgQEAgV0tfRVhQT1JU
IGludCBXZWJQcm9jZXNzTWFpbkVmbChpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBy
ZXR1cm4gMTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICBTZWNj
b21wRmlsdGVycyBzZWNjb21wOworCisgICAgaWYgKCFzZWNjb21wLmxvYWQoKSkKKyAgICAgICAg
cmV0dXJuIDE7CisjZW5kaWYKKwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKaW5kZXggMjhiMjAwZC4uM2Y2ZDhiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAjaW5jbHVkZSA8
UVVybD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1Nl
Y2NvbXBGaWx0ZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtMTQ0LDYgKzE0NSwxMyBAQCBzdGF0
aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQogCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNz
TWFpblF0KFFHdWlBcHBsaWNhdGlvbiogYXBwKQogeworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisgICAgU2VjY29tcEZpbHRlcnMgc2VjY29tcDsKKworICAgIGlmICghc2VjY29tcC5sb2Fk
KCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmCisKICAgICBpbml0aWFsaXplUHJveHkoKTsK
IAogICAgIHNyYW5kb20odGltZSgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZExp
YlNlY2NvbXAuY21ha2UgYi9Tb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmODY2YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpAQCAtMCwwICsxLDMxIEBACisjIENv
cHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworIyAgIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICogTmVpdGhlciB0aGUgbmFtZSBvZiBJ
bnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5Cisj
ICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dAorIyAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIwor
IworCitJTkNMVURFKEZpbmRQa2dDb25maWcpCisKK1BLR19DSEVDS19NT0RVTEVTKExJQlNFQ0NP
TVAgUkVRVUlSRUQgbGlic2VjY29tcD49MS4wLjApCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDg2
NzViZTguLmIyMjk5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC04NSw2ICs4NSw3IEBAIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJ
IE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0lO
Rk8gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9S
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgT04pCkBAIC05Myw2ICs5NCw3IEBAIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFTyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFT19UUkFDSyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfSU5URU5UUyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfSU5URU5UU19UQUcgT04pCitXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX1BST0NFU1NfU0FOREJPWCBPRkYp
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX1RJTUlORyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XT1JLRVJTIE9OKQogCkBA
IC0xNTAsNiArMTUyLDEwIEBAIElGIChFTkFCTEVfV0VCR0wpCiAgIEZJTkRfUEFDS0FHRShPcGVu
R0wgUkVRVUlSRUQpCiBFTkRJRiAoKQogCitpZihFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAg
IEZJTkRfUEFDS0FHRShMaWJTZWNjb21wIFJFUVVJUkVEKQorRU5ESUYoKQorCiBTRVQoQ1BBQ0tf
U09VUkNFX0dFTkVSQVRPUiBUQloyKQogCiBJRiAoV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IGU0MzA5NmEuLjU4ZDBiODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKQEAgLTk0LDYgKzk0LDcgQEAgTUFDUk8gKFdFQktJVF9P
UFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFUEFJTlRfVEhS
T1RUTElORyAiVG9nZ2xlIHJlcGFpbnQgdGhyb3R0bGluZyBzdXBwb3J0IiBPRkYpCiAgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FICJUb2dnbGUg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfU0NSSVBURURfU1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBz
dXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NFQ0NPTVBfRklM
VEVSUyAiVG9nZ2xlIExpbnV4IHNlY2NvbXAgZmlsdGVycyBmb3IgdGhlIFdlYlByb2Nlc3Mgc3Vw
cG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJU
b2dnbGUgU2hhZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1NIQVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYp
CiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNR
TCBEYXRhYmFzZSBTdXBwb3J0IiBPTikKQEAgLTExMiw2ICsxMTMsNyBAQCBNQUNSTyAoV0VCS0lU
X09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX0FVRElP
ICJUb2dnbGUgV2ViIEF1ZGlvIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklO
RShFTkFCTEVfV0VCX0lOVEVOVFMgIlRvZ2dsZSBXZWIgSW50ZW50cyBzdXBwb3J0IiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9JTlRFTlRTX1RBRyAiVG9vZ2xlIEhU
TUxJbnRlbnRFbGVtZW50IHRhZyBzdXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX1dFQl9QUk9DRVNTX1NBTkRCT1ggIlRvb2dsZSBXZWJQcm9jZXNzIHNhbmRib3gg
c3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfU09DS0VU
UyAiVG9nZ2xlIFdlYiBTb2NrZXRzIHN1cHBvcnQiIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVG
SU5FKEVOQUJMRV9XRUJfVElNSU5HICJUb2dnbGUgV2ViIFRpbWluZyBzdXBwb3J0IiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dPUktFUlMgIlRvZ2dsZSBXZWIgV29ya2Vy
cyBzdXBwb3J0IiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBi
L1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IDAxYzE5NGYuLjk3NGM5MzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZp
Zy5oLmNtYWtlCkBAIC04MSw2ICs4MSw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUEFHRV9W
SVNJQklMSVRZX0FQSQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRQorI2NtYWtlZGVmaW5l
MDEgRU5BQkxFX1NFQ0NPTVBfRklMVEVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQURPV19E
T00KICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1NNT09USF9TQ1JPTExJTkcKQEAgLTEwMCw2ICsxMDEsNyBAQAogI2NtYWtlZGVmaW5l
MDEgRU5BQkxFX1dFQl9BVURJTwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9JTlRFTlRTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX0lOVEVOVFNfVEFHCisjY21ha2VkZWZpbmUwMSBFTkFC
TEVfV0VCX1BST0NFU1NfU0FOREJPWAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9TT0NLRVRT
CiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfV0VCX1RJTUlORwogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X1dPUktFUlMKZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9l
ZmwvamhidWlsZC5tb2R1bGVzCmluZGV4IGQxZjA1ZTMuLmRhYmRmZWEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwpA
QCAtMTcsNiArMTcsNyBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJlX2RidXMiLz4KICAgICAgIDxk
ZXAgcGFja2FnZT0iZWV6ZSIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJlZnJlZXQiLz4KKyAgICAg
IDxkZXAgcGFja2FnZT0ibGlic2VjY29tcCIvPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21l
dGFtb2R1bGU+CiAKQEAgLTM4LDYgKzM5LDggQEAKICAgICAgIGhyZWY9Imh0dHA6Ly93d3cuZnJl
ZWRlc2t0b3Aub3JnIi8+CiAgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9ImVubGln
aHRlbm1lbnQuZnIiCiAgICAgICBocmVmPSJodHRwOi8vZ2l0LmVubGlnaHRlbm1lbnQuZnIvY2dp
dC5jZ2kvc3ZuLyIvPgorICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNm
Lm5ldCIKKyAgICAgIGhyZWY9ImdpdDovL2dpdC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRv
dG9vbHMgaWQ9ImNhaXJvIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNp
ZXM+CkBAIC0yNjUsNCArMjY4LDEwIEBACiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvYXV0b3Rv
b2xzPgogCisgIDxhdXRvdG9vbHMgaWQ9ImxpYnNlY2NvbXAiIGF1dG9nZW4tc2g9ImNvbmZpZ3Vy
ZSI+CisgICAgICA8YnJhbmNoIG1vZHVsZT0ibGlic2VjY29tcC9saWJzZWNjb21wIgorICAgICAg
ICAgIHJlcG89ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAgICAgICB0YWc9IjJjODUyMGUyM2YzMDk5
NDk3YmFmZTBjOWRlOWE5NDUyYThiNzViYjQiLz4KKyAgPC9hdXRvdG9vbHM+CisKIDwvbW9kdWxl
c2V0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168170</attachid>
            <date>2012-10-11 01:48:52 -0700</date>
            <delta_ts>2012-12-06 10:14:06 -0800</delta_ts>
            <desc>SeccompFilters on Qt (x86/64)</desc>
            <filename>libseccomp-qt.diff</filename>
            <type>text/plain</type>
            <size>5603</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmNwcApp
bmRleCBmYTYyMGFlLi4zODY0YmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
c2VjY29tcC9TZWNjb21wRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3Nl
Y2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwCkBAIC05OSw0MyArOTksNTMgQEAgdm9pZCBTZWNjb21w
RmlsdGVyczo6aW5pdGlhbGl6ZSgpCiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoZXhpdCkpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGV4aXRfZ3Jv
dXApKTsKICAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdXRleCkpOwotICAg
IGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQzMikpOworICAgIC8vIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQzMikpOworICAgIGFkZFJ1bGUo
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQpKTsKICAgICBhZGRSdWxlKFNDTVBfQUNU
X0FMTE9XLCBTQ01QX1NZUyhnZXRybGltaXQpKTsKICAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhnZXRydXNhZ2UpKTsKLSAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhnZXR1aWQzMikpOworICAgIC8vIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGdldHVpZDMyKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0dWlk
KSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobWxvY2spKTsKICAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdhY3Rpb24pKTsKICAgICBhZGRS
dWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhydF9zaWdwcm9jbWFzaykpOwogICAgIGFkZFJ1
bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJ0X3NpZ3JldHVybikpOwogICAgIGFkZFJ1bGUo
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNjaGVkX2dldGFmZmluaXR5KSk7CiAgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2V0X3JvYnVzdF9saXN0KSk7Ci0gICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModWdldHJsaW1pdCkpOworICAgIC8vIGRvZXNuJ3Qg
ZXhpc3Qgb24gNjQgYml0IGFuZCBoYXNuJ3QgZXF1aXZhbGVudCAobWF5YmUgZ2V0cmxpbWl0PykK
KyAgICAvLyBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh1Z2V0cmxpbWl0KSk7CiAg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5hbWUpKTsKIAogICAgIC8vIFVz
ZWQgYnkgZ19zeXN0ZW1fdGhyZWFkX3NldF9uYW1lKCkuCiAgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMocHJjdGwpKTsKIAogICAgIC8vIEZpbGUgZGVzY3JpcHRvciBvcGVyYXRp
b25zIG9uIGFscmVhZHkgb3BlbmVkIGZpbGUgZGVzY3JpcHRvcnMuCi0gICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoX2xsc2VlaykpOwotICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKF9uZXdzZWxlY3QpKTsKKyAgICAvLyBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhfbGxzZWVrKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMobHNlZWspKTsKKyAgICAvLyBkb2Vzbid0IGV4aXN0IG9uIDY0IGJpdCBhbmQgaGFzbid0IGVx
dWl2YWxlbnQgKG1heWJlIHNlbGVjdD8pCisgICAgLy8gYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoX25ld3NlbGVjdCkpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKGFjY2VzcykpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNsb3Nl
KSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZHVwKSk7CiAgICAgYWRk
UnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZHVwMikpOwogICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKGVwb2xsX2N0bCkpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGVwb2xsX3dhaXQpKTsKLSAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhmY250bDY0KSk7Ci0gICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
ZnN0YXQ2NCkpOworICAgIC8vIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZjbnRs
NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmY250bCkpOworICAg
IC8vYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnN0YXQ2NCkpOworICAgIGFkZFJ1
bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZzdGF0KSk7CiAgICAgYWRkUnVsZShTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoZnN0YXRmcykpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKGZzeW5jKSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
ZnRydW5jYXRlKSk7Ci0gICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnRydW5j
YXRlNjQpKTsKKyAgICAvLyBkb2Vzbid0IGV4aXN0IG9uIDY0IGJpdCwgYnV0IGZ0cnVuY2F0ZSBk
b2VzCisgICAgLy8gYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZnRydW5jYXRlNjQp
KTsKICAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50cykpOwogICAg
IGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGRlbnRzNjQpKTsKICAgICBhZGRS
dWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpbm90aWZ5X2luaXQpKTsKICAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpb2N0bCkpOwotICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKG1tYXAyKSk7Ci0gICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMocGlwZSkpOworICAgIC8vIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1t
YXAyKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobW1hcCkpOworICAg
IC8vIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBpcGUpKTsKKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhwaXBlMikpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHBvbGwpKTsKICAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhyZWFkKSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2VsZWN0
KSk7CkBAIC0xNDQsOCArMTU0LDEwIEBAIHZvaWQgU2VjY29tcEZpbHRlcnM6OmluaXRpYWxpemUo
KQogICAgIC8vIFNvY2tldCBvcGVyYXRpb25zLgogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKGNvbm5lY3QpKTsKICAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZ
UyhnZXRzb2Nrb3B0KSk7Ci0gICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocmVj
dikpOwotICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHNlbmQpKTsKKyAgICAv
LyBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhyZWN2KSk7CisgICAgYWRkUnVsZShT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMocmVjdm1zZykpOworICAgIC8vIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKHNlbmQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhzZW5kbXNnKSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
c29ja2V0KSk7CiAKICAgICAvLyBNZW1vcnkgcmVsYXRlZCBzdHVmZi4KQEAgLTE1OCwxMSArMTcw
LDEzIEBAIHZvaWQgU2VjY29tcEZpbHRlcnM6OmluaXRpYWxpemUoKQogICAgIC8vIGRvbmUgd2l0
aG91dCBhbiBmZCwgdXNpbmcganVzdCBhIHBhdGggaW5zdGVhZC4KICAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhjaG1vZCkpOwogICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKGV2ZW50ZmQyKSk7Ci0gICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMobHN0YXQ2NCkpOworICAgIC8vIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGxz
dGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhsc3RhdCkpOwog
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1rZGlyKSk7CiAgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMocmVhZGxpbmspKTsKICAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhyZW5hbWUpKTsKLSAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhzdGF0NjQpKTsKKyAgICAvLyBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhzdGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzdGF0
KSk7CiAgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc3RhdGZzKSk7CiAgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5saW5rKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL3F0L1NlY2NvbXBGaWx0ZXJzUXQuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAKaW5k
ZXggODFjOWZkMS4uOTA4ZWJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3Nl
Y2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3NlY2NvbXAvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAKQEAgLTM0LDYgKzM0LDE2IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUo
KQogeworICAgIC8vIG5ldyBzeXNjYWxscyB0aGF0IGFyZSBuZWVkZWQgb24geDg2LzY0CisgICAg
YWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoYmluZCkpOworICAgIGFkZFJ1bGUoU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldHBlZXJuYW1lKSk7CisgICAgYWRkUnVsZShTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMoZ2V0c29ja25hbWUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhtcmVtYXApKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhtc3luYykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJlY3Zm
cm9tKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2NoZWRfeWllbGQp
KTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzZW5kdG8pKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzZXRzb2Nrb3B0KSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178024</attachid>
            <date>2012-12-06 10:14:06 -0800</date>
            <delta_ts>2013-01-07 12:30:11 -0800</delta_ts>
            <desc>Work in progress of SeccompFilters v5</desc>
            <filename>libseccomp-dec6-4a0b22f1bf4c3ea7553ab4655c4d16d0312cc683.diff</filename>
            <type>text/plain</type>
            <size>30189</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTYwMTliNi4uN2U0ODcwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI3LDYgKzI3LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIAor
ICAgIFNoYXJlZC9zZWNjb21wL1NhbmRib3hFeHRlbnNpb25TZWNjb21wLmNwcAorICAgIFNoYXJl
ZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJzLmNwcAorICAgIFNoYXJlZC9zZWNjb21wL2VmbC9TZWNj
b21wRmlsdGVyc0VmbC5jcHAKKwogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJ
bmZvLmNwcAogICAgIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCiAK
QEAgLTE2MCw2ICsxNjQsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgogICAgICIke1dF
QkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwi
CisgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zZWNjb21wIgogICAgICIke1dFQktJVDJfRElS
fS9TaGFyZWQvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2VmbCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL3NvdXAiCkBAIC0yMjAsNiArMjI1
LDEyIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCiAgICAgJHtMSUJTT1VQX0xJQlJB
UklFU30KICkKIAorSUYoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBMSVNUIChBUFBFTkQg
V2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30KKyAgICAp
CitFTkRJRigpCisKIGxpc3QoQVBQRU5EIFdlYlByb2Nlc3NfU09VUkNFUwogICAgIGVmbC9NYWlu
RWZsLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRl
bnNpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKaW5kZXgg
ZTFhOTA0YS4uNzQyNTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NhbmRi
b3hFeHRlbnNpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lv
bi5oCkBAIC04NSw2ICs4NSw5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FO
REJPWCkKICAgICAgICAgSGFuZGxlKiBtX2RhdGE7CiAgICAgICAgIHNpemVfdCBtX3NpemU7Cisj
aWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICAgICAgSGFuZGxlIG1fZW1wdHlIYW5kbGU7
CisjZW5kaWYKICNlbHNlCiAgICAgICAgIEhhbmRsZSBtX2VtcHR5SGFuZGxlOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5zaW9u
U2VjY29tcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TYW5kYm94RXh0ZW5z
aW9uU2VjY29tcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMTk5
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NhbmRi
b3hFeHRlbnNpb25TZWNjb21wLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkgJiYgRU5BQkxFKFNFQ0NPTVBfRklMVEVS
UykKKworI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5j
b2Rlci5oIgorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlOjpIYW5kbGUoKQoreworfQorCitTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU6On5IYW5k
bGUoKQoreworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6ZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKK30KKworYm9vbCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIEhhbmRsZSYgcmVzdWx0KQoreworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShjb25zdCBIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCisgICAgICAg
IHJldHVybiAwOworCisgICAgYWRvcHRSZWYobmV3IFNhbmRib3hFeHRlbnNpb24oaGFuZGxlKSk7
Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYg
cGF0aCwgVHlwZSB0eXBlLCBIYW5kbGUmKQoreworfQorCitTdHJpbmcgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgVHlw
ZSB0eXBlLCBIYW5kbGUmKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU2FuZGJveEV4
dGVuc2lvbjo6U2FuZGJveEV4dGVuc2lvbihjb25zdCBIYW5kbGUmKQoreworfQorCitTYW5kYm94
RXh0ZW5zaW9uOjp+U2FuZGJveEV4dGVuc2lvbigpCit7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVu
c2lvbjo6aW52YWxpZGF0ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6SGFuZGxlQXJyYXkoKQorewor
fQorCitTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6fkhhbmRsZUFycmF5KCkKK3sKK30K
Kwordm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YWxsb2NhdGUoc2l6ZV90KQor
eworfQorCitzaXplX3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiAwOworfQorCitjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9lbXB0eUhhbmRsZTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6b3BlcmF0b3JbXShzaXplX3QpCit7
CisgICAgcmV0dXJuIG1fZW1wdHlIYW5kbGU7Cit9CisKK3ZvaWQgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXk6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAorewor
fQorCitib29sIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlQXJyYXkmKQoreworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUFJPQ0VTU19T
QU5EQk9YKSAmJiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjIzZWY0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmls
dGVycy5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2Nv
bXAuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworU2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKCkKKyAgICA6IG1fY29udGV4dCgwKQor
eworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbnRleHQgPSBzZWNjb21wX2luaXQoU0NNUF9BQ1Rf
VFJBUCk7CisjZWxzZQorICAgIG1fY29udGV4dCA9IHNlY2NvbXBfaW5pdChTQ01QX0FDVF9LSUxM
KTsKKyNlbmRpZgorCisgICAgLy8gTm8gYmVpbmcgYWJsZSB0byBpbml0aWFsaXplIHNlY2NvbXAg
aXMgY29uc2lkZXJlZCBhIHNlY3VyaXR5CisgICAgLy8gYnJlYWNoIGFuZCB0aGUgYXBwbGljYXRp
b24gc2hvdWxkIG5vdCBnbyBiZXlvbmQgdGhpcyBwb2ludC4gSW4gZmFjdCwKKyAgICAvLyBldmVy
eSBlcnJvciBoZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZhdGFsLgorICAgIGlmICghbV9jb250
ZXh0KQorICAgICAgICBDUkFTSCgpOworCisgICAgaWYgKHNlY2NvbXBfYXR0cl9zZXQobV9jb250
ZXh0LCBTQ01QX0ZMVEFUUl9BQ1RfQkFEQVJDSCwgU0NNUF9BQ1RfS0lMTCkpCisgICAgICAgIENS
QVNIKCk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29t
cEZpbHRlcnMoKQoreworICAgIHNlY2NvbXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lk
IFNlY2NvbXBGaWx0ZXJzOjphZGRSdWxlKHVpbnQzMl90IGFjdGlvbiwgaW50IHN5c2NhbGwpCit7
CisgICAgaWYgKHNlY2NvbXBfcnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDAp
KQorICAgICAgICBDUkFTSCgpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXpl
KCkKK3sKKyAgICAvLyBQcmlvcml0aXplIHRoZSBtb3N0IGZyZXF1ZW50IGNhbGxzLgorICAgIHNl
Y2NvbXBfc3lzY2FsbF9wcmlvcml0eShtX2NvbnRleHQsIFNDTVBfU1lTKGNsb2NrX2dldHRpbWUp
LCAyMDApOworICAgIHNlY2NvbXBfc3lzY2FsbF9wcmlvcml0eShtX2NvbnRleHQsIFNDTVBfU1lT
KHdyaXRlKSwgMTk5KTsKKworICAgIC8vIFdBUk5JTkchCisgICAgLy8KKyAgICAvLyBUaGlzIGlz
IGhpZ2hseSBleHBlcmltZW50YWwgYW5kIGRvZXNuJ3QgYWRkIGFueSBhZGRpdGlvbmFsIHNlY3Vy
aXR5IGF0IGFsbAorICAgIC8vIGluIHRoZSB3YXkgaXQgaXMgaW1wbGVtZW50ZWQgcmlnaHQgbm93
LiBJdCBpcyBvbmx5IGJsb2NraW5nIHN5c2NhbGxzIHdlIGFyZQorICAgIC8vIG5vdCB1c2luZywg
cmVkdWNpbmcgdGhlIGtlcm5lbCBhdHRhY2sgc3VyZmFjZS4KKyAgICAvLworICAgIC8vIFRoZSBs
aXN0IGJlbG93IHN1bW1hcml6ZXMgdGhlIHN5c2NhbGwgd2hpdGVsaXN0IG5lZWRlZCBieSBhIEVG
TCBhbmQgUXQKKyAgICAvLyBtaW5pbWFsIGJ1aWxkIHRvIGxvYWQgaHR0cHM6Ly9idXMud2Via2l0
Lm9yZy4gV2Ugc2hvdWxkIG5vdyBhbmFseXplIG9uZSBieQorICAgIC8vIG9uZSwgYW5kIGlmIGEg
c3lzY2FsbCBpcyByZWFsbHkgbmVlZCB0byBiZSBhbGxvd2VkLCB3ZSBtdXN0IHJlc3RyaWN0IHRo
ZQorICAgIC8vIHBhcmFtZXRlcnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gV2Ugc2hvdWxkIGFsc28g
bW92ZSBiYWNrZW5kIGRlcGVuZGVuZAorICAgIC8vIHN5c2NhbGxzIHRvIHBsYXRmb3JtU2V0dXBG
aWx0ZXJzKCkuCisgICAgLy8KKyAgICAvLyBsaWJzZWNjb21wIHN1cHBvcnRzIHg4Ni02NCwgYnV0
IG15IHRlc3RzIHdlcmUgY29uZHVjdGVkIG9uIGEgeDg2CisgICAgLy8gbWFjaGluZSBydW5uaW5n
IFVidW50dSAxMi4wNC4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIHdvcmsgb3V0IG9mIHRo
ZQorICAgIC8vIGJveCBpbiBvdGhlciBlbnZpcm9ubWVudCBzaW5jZSBkaWZmZXJlbnQgdmVyc2lv
bnMgb2YgbGliYyBtaWdodCB1c2UKKyAgICAvLyBkaWZmZXJlbnQgc3lzY2FsbHMgZm9yIGRvaW5n
IHRoZSBzYW1lIHRoaW5nLgorCisgICAgLy8gQ2xvY2suCisgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoY2xvY2tfZ2V0dGltZSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldHRpbWVvZmRheSkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKHRpbWUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyh0
aW1lcykpOworCisgICAgLy8gVGhyZWFkIHN5bmNocm9uaXphdGlvbiwgcHJvY2VzcyBtYW5hZ2Vt
ZW50IGFuZCBzeXN0ZW0gaW5mb3JtYXRpb24uCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoY2xvbmUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhl
eGl0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXhpdF9ncm91cCkp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZ1dGV4KSk7CisgICAgYWRk
UnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0cmxpbWl0KSk7CisgICAgYWRkUnVsZShT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0cnVzYWdlKSk7CisgICAgYWRkUnVsZShTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMobWxvY2spKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhydF9zaWdhY3Rpb24pKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhydF9zaWdwcm9jbWFzaykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKHJ0X3NpZ3JldHVybikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KHNjaGVkX2dldGFmZmluaXR5KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMoc2V0X3JvYnVzdF9saXN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVModW5hbWUpKTsKKyNpZmRlZiBfX3g4Nl82NF9fCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExP
VywgU0NNUF9TWVMoZ2V0ZXVpZCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBf
U1lTKGdldHVpZCkpOworI2Vsc2UKKyNpZmRlZiBfX2kzODZfXworICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKGdldGV1aWQzMikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldHVpZDMyKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVModWdldHJsaW1pdCkpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8vIFVzZWQgYnkgZ19z
eXN0ZW1fdGhyZWFkX3NldF9uYW1lKCkuCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMocHJjdGwpKTsKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBvbiBhbHJl
YWR5IG9wZW5lZCBmaWxlIGRlc2NyaXB0b3JzLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKGFjY2VzcykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGNsb3NlKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZHVwKSk7Cisg
ICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZHVwMikpOworICAgIGFkZFJ1bGUo
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGVwb2xsX2N0bCkpOworICAgIGFkZFJ1bGUoU0NNUF9B
Q1RfQUxMT1csIFNDTVBfU1lTKGVwb2xsX3dhaXQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FM
TE9XLCBTQ01QX1NZUyhmc3RhdGZzKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NN
UF9TWVMoZnN5bmMpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmdHJ1
bmNhdGUpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRkZW50cykp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGdldGRlbnRzNjQpKTsKKyAg
ICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpbm90aWZ5X2luaXQpKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhpb2N0bCkpOworICAgIGFkZFJ1bGUoU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKHBvbGwpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9X
LCBTQ01QX1NZUyhyZWFkKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
c2VsZWN0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMod3JpdGUpKTsK
KyNpZmRlZiBfX3g4Nl82NF9fCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMo
bHNlZWspKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhmY250bCkpOwor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGZzdGF0KSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobW1hcCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1Rf
QUxMT1csIFNDTVBfU1lTKHBpcGUyKSk7CisjZWxzZQorI2lmZGVmIF9faTM4Nl9fCisgICAgYWRk
UnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoX2xsc2VlaykpOworICAgIGFkZFJ1bGUoU0NN
UF9BQ1RfQUxMT1csIFNDTVBfU1lTKF9uZXdzZWxlY3QpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNU
X0FMTE9XLCBTQ01QX1NZUyhmY250bDY0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywg
U0NNUF9TWVMoZnN0YXQ2NCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lT
KGZ0cnVuY2F0ZTY0KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobW1h
cDIpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhwaXBlKSk7CisjZW5k
aWYKKyNlbmRpZgorCisgICAgLy8gU29ja2V0IG9wZXJhdGlvbnMuCisgICAgYWRkUnVsZShTQ01Q
X0FDVF9BTExPVywgU0NNUF9TWVMoY29ubmVjdCkpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxM
T1csIFNDTVBfU1lTKGdldHNvY2tvcHQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBT
Q01QX1NZUyhzb2NrZXQpKTsKKyNpZmRlZiBfX3g4Nl82NF9fCisgICAgYWRkUnVsZShTQ01QX0FD
VF9BTExPVywgU0NNUF9TWVMocmVjdm1zZykpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKHNlbmRtc2cpKTsKKyNlbHNlCisjaWZkZWYgX19pMzg2X18KKyAgICBhZGRSdWxl
KFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhyZWN2KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoc2VuZCkpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8vIE1lbW9yeSBy
ZWxhdGVkIHN0dWZmLgorICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGJyaykp
OworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG1hZHZpc2UpKTsKKyAgICBh
ZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhtcHJvdGVjdCkpOworICAgIGFkZFJ1bGUo
U0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKG11bm1hcCkpOworCisgICAgLy8gRklYTUU6IE5lZWRz
IGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBJJ20gbm90IHN1cmUgaWYgdGhlc2UgY2FsbHMgY2FuIGJl
CisgICAgLy8gZG9uZSB3aXRob3V0IGFuIGZkLCB1c2luZyBqdXN0IGEgcGF0aCBpbnN0ZWFkLgor
ICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGNobW9kKSk7CisgICAgYWRkUnVs
ZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZXZlbnRmZDIpKTsKKyAgICBhZGRSdWxlKFNDTVBf
QUNUX0FMTE9XLCBTQ01QX1NZUyhta2RpcikpOworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1cs
IFNDTVBfU1lTKHJlYWRsaW5rKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9T
WVMocmVuYW1lKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc3RhdGZz
KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVModW5saW5rKSk7CisjaWZk
ZWYgX194ODZfNjRfXworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGxzdGF0
KSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoc3RhdCkpOworI2Vsc2UK
KyNpZmRlZiBfX2kzODZfXworICAgIGFkZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKGxz
dGF0NjQpKTsKKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzdGF0NjQpKTsK
KyNlbmRpZgorI2VuZGlmCisKKyAgICAvLyBGSVhNRTogQWxsb3dpbmcgdGhlIFdlYlByb2Nlc3Mg
dG8gcGVyZm9ybSBvcGVuKCkgbWFrZXMgdGhpcyBlZmZvcnQKKyAgICAvLyBiYXNpY2FsbHkgdXNl
bGVzcy4gSXQgaXMgcG9zc2libGUgdG8gaGlqYWNrIHRoZSBzeXNjYWxsIGFuZCBkZWxlZ2F0ZQor
ICAgIC8vIHRoZSBvcGVuaW5nIG9mIGZpbGVzIHRvIHRoZSBVSVByb2Nlc3MgKGhvcGVmdWxseSku
IFRoaXMgaXMgdGhlIG5leHQgc3RlcC4KKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01Q
X1NZUyhvcGVuKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMob3BlbmF0
KSk7CisgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7Cit9CisKK2Jvb2wgU2VjY29tcEZpbHRlcnM6
OmxvYWQoKQoreworICAgIHJldHVybiAhc2VjY29tcF9sb2FkKG1fY29udGV4dCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL1NlY2NvbXBGaWx0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxN2UwZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5oCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjY29tcEZpbHRlcnNfaAor
I2RlZmluZSBTZWNjb21wRmlsdGVyc19oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQor
CisjaW5jbHVkZSA8c2VjY29tcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2Vj
Y29tcEZpbHRlcnMgeworcHVibGljOgorICAgIFNlY2NvbXBGaWx0ZXJzKCk7CisgICAgflNlY2Nv
bXBGaWx0ZXJzKCk7CisKKyAgICBib29sIGxvYWQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFk
ZFJ1bGUodWludDMyX3QgYWN0aW9uLCBpbnQgc3lzY2FsbCk7CisKKyAgICB2b2lkIGluaXRpYWxp
emUoKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgc2NtcF9maWx0ZXJf
Y3R4IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL2VmbC9TZWNjb21wRmlsdGVy
c0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9lZmwvU2VjY29tcEZpbHRl
cnNFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzlmZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc2VjY29tcC9lZmwvU2VjY29t
cEZpbHRlcnNFZmwuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVycy5oIgorCisjaWYgRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2NvbXAuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBf
RklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL3F0L1Nl
Y2NvbXBGaWx0ZXJzUXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3NlY2NvbXAvcXQvU2Vj
Y29tcEZpbHRlcnNRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3
NjAxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zZWNjb21wL3F0
L1NlY2NvbXBGaWx0ZXJzUXQuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVycy5oIgorCisj
aWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHNlY2NvbXAuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OnBsYXRmb3JtSW5pdGlhbGl6
ZSgpCit7CisgICAgLy8gbm9uLW1pbmltYWwgYnVpbGQgbmVlZHMgaGVzZSBzeXNjYWxscyB0byBk
aXNwbGF5IHdlYnBhZ2VzCisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobXJl
bWFwKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMobXN5bmMpKTsKKyAg
ICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhzY2hlZF95aWVsZCkpOworI2lmZGVm
IF9feDg2XzY0X18KKyAgICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhiaW5kKSk7
CisgICAgYWRkUnVsZShTQ01QX0FDVF9BTExPVywgU0NNUF9TWVMoZ2V0cGVlcm5hbWUpKTsKKyAg
ICBhZGRSdWxlKFNDTVBfQUNUX0FMTE9XLCBTQ01QX1NZUyhnZXRzb2NrbmFtZSkpOworICAgIGFk
ZFJ1bGUoU0NNUF9BQ1RfQUxMT1csIFNDTVBfU1lTKHJlY3Zmcm9tKSk7CisgICAgYWRkUnVsZShT
Q01QX0FDVF9BTExPVywgU0NNUF9TWVMoc2VuZHRvKSk7CisgICAgYWRkUnVsZShTQ01QX0FDVF9B
TExPVywgU0NNUF9TWVMoc2V0c29ja29wdCkpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmlu
ZGV4IDAyM2Q3NDUuLjFmYTQwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMTUyLDYgKzE1Miw3IEBAIEhF
QURFUlMgKz0gXAogICAgIFNoYXJlZC9xdC9RdERlZmF1bHREYXRhTG9jYXRpb24uaCBcCiAgICAg
U2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oIFwKICAgICBTaGFyZWQvcXQvUXROZXR3b3Jr
UmVxdWVzdERhdGEuaCBcCisgICAgU2hhcmVkL3NlY2NvbXAvU2VjY29tcEZpbHRlcnMuaCBcCiAg
ICAgVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50
aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCBcCkBAIC01MjAsNiArNTIxLDkgQEAgU09VUkNFUyAr
PSBcCiAgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmNwcCBcCiAgICAgU2hhcmVk
L3F0L1dlYlVSTFJlcXVlc3RRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJVUkxSZXNwb25zZVF0
LmNwcCBcCisgICAgU2hhcmVkL3NlY2NvbXAvU2FuZGJveEV4dGVuc2lvblNlY2NvbXAuY3BwIFwK
KyAgICBTaGFyZWQvc2VjY29tcC9TZWNjb21wRmlsdGVycy5jcHAgXAorICAgIFNoYXJlZC9zZWNj
b21wL3F0L1NlY2NvbXBGaWx0ZXJzUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0F1dGhlbnRp
Y2F0aW9uRGVjaXNpb25MaXN0ZW5lci5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0JhY2tG
b3J3YXJkTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQppbmRleCA4MGNiMmZiLi4yYWNlY2RhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnByaQpAQCAtMjEsNiArMjEsNyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VS
Q0VfRElSL1NoYXJlZC9QbHVnaW5zIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUgXAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvcXQgXAorICAgICQkU09VUkNFX0RJ
Ui9TaGFyZWQvc2VjY29tcCBcCiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2VzcyBcCiAgICAgJCRT
T1VSQ0VfRElSL1VJUHJvY2Vzcy9BUEkvQyBcCiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9B
UEkvY3BwIFwKQEAgLTc2LDYgKzc3LDEwIEBAIGxpbnV4LSo6IHsKICAgICBMSUJTICs9IC1scnQK
IH0KIAorbGludXgtKjpjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0VDQ09NUF9GSUxURVJTPTEp
IHsKKyAgICBQS0dDT05GSUcgKz0gbGlic2VjY29tcAorfQorCiBoYXZlPyhRVFFVSUNLKTogUVQg
Kz0gcW1sIHF1aWNrCiAKIGVuYWJsZT8oR0VPTE9DQVRJT04pOiBRVCArPSBsb2NhdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3Bw
CmluZGV4IGU0YTgwN2IuLmJiNjEwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlIDxFZnJlZXQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVy
cy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViUHJvY2Vzcy5oPgogI2luY2x1ZGUgPGxpYnNvdXAv
c291cC1jYWNoZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgpA
QCAtOTUsNiArOTYsMTMgQEAgV0tfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpbkVmbChpbnQgYXJn
YywgY2hhciogYXJndltdKQogICAgICAgICByZXR1cm4gMTsKICNlbmRpZgogCisjaWYgRU5BQkxF
KFNFQ0NPTVBfRklMVEVSUykKKyAgICBTZWNjb21wRmlsdGVycyBzZWNjb21wOworCisgICAgaWYg
KCFzZWNjb21wLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZW5kaWYKKwogICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFp
blF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAKaW5kZXggMThmMzAzOTQuLjBlYTllMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgPFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFVcmw+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5M
b29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKQEAgLTE0NCw2ICsxNDUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKIAog
UV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChRR3VpQXBwbGljYXRpb24qIGFwcCkK
IHsKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorICAgIFNlY2NvbXBGaWx0ZXJzIHNlY2Nv
bXA7CisKKyAgICBpZiAoIXNlY2NvbXAubG9hZCgpKQorICAgICAgICByZXR1cm4gMTsKKyNlbmRp
ZgorCiAgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZSBiL1Nv
dXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xYmY4NjZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRM
aWJTZWNjb21wLmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJ
bnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cisj
CisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyMgICBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
CisjICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjCisKK0lOQ0xVREUoRmluZFBr
Z0NvbmZpZykKKworUEtHX0NIRUNLX01PRFVMRVMoTElCU0VDQ09NUCBSRVFVSVJFRCBsaWJzZWNj
b21wPj0xLjAuMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggM2JiYWJiNi4uMzQ1MjQ0NSAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNFZmwuY21ha2UKQEAgLTc3LDYgKzc3LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkgT04pCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRUdJT05TIE9OKQogV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
IE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFQ0NPTVBfRklM
VEVSUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFET1df
RE9NIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFRF9X
T1JLRVJTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NQRUxM
Q0hFQ0sgT04pCkBAIC04Niw2ICs4Nyw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9WSURFTyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9WSURFT19UUkFDSyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9XRUJfSU5URU5UUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9XRUJfSU5URU5UU19UQUcgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfV0VCX1BST0NFU1NfU0FOREJPWCBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfV0VCX1RJTUlORyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XRUJHTCBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9XT1JLRVJTIE9OKQpAQCAtMTY5LDYgKzE3MSwxMCBAQCBpZiAoRU5BQkxFX1dF
QkdMIE9SIFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBlbmRpZiAoKQogZW5kaWYg
KCkKIAoraWYoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBGSU5EX1BBQ0tBR0UoTGliU2Vj
Y29tcCBSRVFVSVJFRCkKK0VORElGKCkKKwogaWYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAgc2V0
KFdFQl9JTlNQRUNUT1JfRElSICIke0RBVEFfSU5TVEFMTF9ESVJ9L2luc3BlY3RvciIpCiAgICAg
YWRkX2RlZmluaXRpb25zKC1EV0VCX0lOU1BFQ1RPUl9ESVI9XCIke0NNQUtFX0JJTkFSWV9ESVJ9
LyR7V0VCX0lOU1BFQ1RPUl9ESVJ9XCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0
RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXgg
ZjlmNTRmZS4uZDQ1NTQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVz
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMTAwLDYg
KzEwMCw3IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9E
RUZJTkUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FICJUb2dnbGUgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
UkVTT0xVVElPTl9NRURJQV9RVUVSWSAiVG9nZ2xlIHJlc29sdXRpb24gbWVkaWEgcXVlcnkgc3Vw
cG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TQ1JJUFRFRF9TUEVF
Q0ggIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQiIE9GRikKKyAgICBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfU0VDQ09NUF9GSUxURVJTICJUb2dnbGUgTGludXggc2VjY29t
cCBmaWx0ZXJzIGZvciB0aGUgV2ViUHJvY2VzcyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBTaGFkb3cgRE9NIHN1cHBvcnQi
IE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBUkVEX1dPUktFUlMgIlRv
Z2dsZSBTaGFyZWRXb3JrZXJzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklO
RShFTkFCTEVfU1BFTExDSEVDSyAiVG9nZ2xlIFNwZWxsY2hlY2tpbmcgc3VwcG9ydCAocmVxdWly
ZXMgRW5jaGFudCkiIE9GRikKQEAgLTExOSw2ICsxMjAsNyBAQCBtYWNybyhXRUJLSVRfT1BUSU9O
X0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XRUJfQVVESU8gIlRvZ2ds
ZSBXZWIgQXVkaW8gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJM
RV9XRUJfSU5URU5UUyAiVG9nZ2xlIFdlYiBJbnRlbnRzIHN1cHBvcnQiIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCX0lOVEVOVFNfVEFHICJUb29nbGUgSFRNTEludGVu
dEVsZW1lbnQgdGFnIHN1cHBvcnQiIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFC
TEVfV0VCX1BST0NFU1NfU0FOREJPWCAiVG9vZ2xlIFdlYlByb2Nlc3Mgc2FuZGJveCBzdXBwb3J0
IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dFQl9TT0NLRVRTICJUb2dn
bGUgV2ViIFNvY2tldHMgc3VwcG9ydCIgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX1dFQl9USU1JTkcgIlRvZ2dsZSBXZWIgVGltaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0VCR0wgIlRvZ2dsZSAzRCBjYW52YXMgKFdlYkdMKSBz
dXBwb3J0IiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1Nv
dXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IDA1ZjI1NTguLmMwMDBhNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5o
LmNtYWtlCkBAIC05Myw2ICs5Myw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUVVPVEEKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9SRVBBSU5UX1RIUk9UVExJTkcKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRQorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NFQ0NP
TVBfRklMVEVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkK
ICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9TSEFET1dfRE9NCkBAIC0xMTcsNiArMTE4LDcgQEAKICNjbWFrZWRlZmluZTAxIEVOQUJM
RV9XRUJfQVVESU8KICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfSU5URU5UUwogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX1dFQl9JTlRFTlRTX1RBRworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1dFQl9Q
Uk9DRVNTX1NBTkRCT1gKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XRUJfU09DS0VUUwogI2NtYWtl
ZGVmaW5lMDEgRU5BQkxFX1dFQl9USU1JTkcKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9XT1JLRVJT
CmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZWZsL2poYnVp
bGQubW9kdWxlcwppbmRleCAwN2EyNDhlLi43NzU0ZjdhIDEwMDY0NAotLS0gYS9Ub29scy9lZmwv
amhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKQEAgLTE3LDYg
KzE3LDcgQEAKICAgICAgIDxkZXAgcGFja2FnZT0iZV9kYnVzIi8+CiAgICAgICA8ZGVwIHBhY2th
Z2U9ImVlemUiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZWZyZWV0Ii8+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImxpYnNlY2NvbXAiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZWxlbWVudGFyeSIvPgog
ICAgICAgPGRlcCBwYWNrYWdlPSJsaWJ4bWwyIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CkBAIC00
MCw2ICs0MSw4IEBACiAgICAgICBocmVmPSJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZyIvPgog
ICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJlbmxpZ2h0ZW5tZW50LmZyIgogICAg
ICAgaHJlZj0iaHR0cDovL2dpdC5lbmxpZ2h0ZW5tZW50LmZyL2NnaXQuY2dpL3N2bi8iLz4KKyAg
PHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5zZi5uZXQiCisgICAgICBocmVm
PSJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFs
bCIgbmFtZT0ieG1sc29mdC5vcmciCiAgICAgICBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZyIvPiAK
ICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZG93bmxvYWQuZW5saWdodGVubWVu
dC5vcmciCkBAIC0yNzIsNiArMjc1LDEyIEBACiAgICAgICAgIDxkZWIgcGFja2FnZT0iZWV0Ii8+
CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvYXV0b3Rvb2xzPgorICAKKyAgPGF1dG90b29scyBp
ZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAgIDxicmFuY2ggbW9k
dWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0iZ2l0LmNvZGUuc2Yu
bmV0IgorICAgICAgICAgIHRhZz0iMmM4NTIwZTIzZjMwOTk0OTdiYWZlMGM5ZGU5YTk0NTJhOGI3
NWJiNCIvPgorICA8L2F1dG90b29scz4KIAogICA8YXV0b3Rvb2xzIGlkPSJlbGVtZW50YXJ5Igog
ICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtZW1hcCAtLWRpc2FibGUtZXRodW1i
IC0tZGlzYWJsZS1ld2VhdGhlciAtLWRpc2FibGUtd2ViIj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>178025</attachid>
            <date>2012-12-06 10:18:26 -0800</date>
            <delta_ts>2012-12-06 10:18:26 -0800</delta_ts>
            <desc>Opened files by QtWebProcess</desc>
            <filename>openedfiles</filename>
            <type>application/octet-stream</type>
            <size>12109</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">b3BlbigiL3Byb2Mvc2VsZi9tYXBzIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDEyCm9wZW4oIi9o
b21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIvLlF0V2ViS2l0Ly9j
b29raWVzLmRiIiwgT19SRFdSfE9fQ1JFQVQsIDA2NDQpID0gMTQKb3BlbigiL3Vzci9zaGFyZS96
b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDE2Cm9w
ZW4oIi9wcm9jL21lbWluZm8iLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMTYKb3BlbigiL3Vzci9s
b2NhbC9Ucm9sbHRlY2gvUXQ1L1F0LTUuMC4wLXI0MC9wbHVnaW5zL3NlbnNvcnMvbGlicXRzZW5z
b3JzX2R1bW15LnNvIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDE2Cm9wZW4oIi91c3IvbG9jYWwv
VHJvbGx0ZWNoL1F0NS9RdC01LjAuMC1yNDAvcGx1Z2lucy9zZW5zb3JzL2xpYnF0c2Vuc29yc19n
ZW5lcmljLnNvIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDE2Cm9wZW4oIi91c3IvbG9jYWwvVHJv
bGx0ZWNoL1F0NS9RdC01LjAuMC1yNDAvcGx1Z2lucy9zZW5zb3JzL2xpYnF0c2Vuc29yc19saW51
eHN5cy5zbyIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAxNgpvcGVuKCIvdXNyL2xvY2FsL1Ryb2xs
dGVjaC9RdDUvUXQtNS4wLjAtcjQwL3BsdWdpbnMvYmVhcmVyL2xpYnFnZW5lcmljYmVhcmVyLnNv
IiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDE4Cm9wZW4oIi91c3IvbG9jYWwvVHJvbGx0ZWNoL1F0
NS9RdC01LjAuMC1yNDAvcGx1Z2lucy9iZWFyZXIvbGlicWdlbmVyaWNiZWFyZXIuc28iLCBPX1JE
T05MWXxPX0NMT0VYRUMpID0gMTgKb3BlbigiL2hvbWUvaG5hbmRvci8ubG9jYWwvc2hhcmUvTm9r
aWEvUXRNaW5pQnJvd3Nlci8uUXRXZWJLaXQvY2FjaGUvZGF0YTcvYi8zcG10cDRlay5kIiwgT19S
RE9OTFl8T19DTE9FWEVDKSA9IDE4Cm9wZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL21p
bWUvbWltZS5jYWNoZSIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyMwpvcGVuKCIvdXNyL3NoYXJl
Ly9taW1lL21pbWUuY2FjaGUiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjQKb3BlbigiL2hvbWUv
aG5hbmRvci8ubG9jYWwvc2hhcmUvbWltZS90eXBlcyIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAy
NQpvcGVuKCIvdXNyL3NoYXJlLy9taW1lL3R5cGVzIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI1
Cm9wZW4oIi91c3Ivc2hhcmUvL21pbWUvdGV4dC9odG1sLnhtbCIsIE9fUkRPTkxZfE9fQ0xPRVhF
QykgPSAyNQpvcGVuKCIvdXNyL3NoYXJlLy9taW1lL3RleHQvaHRtbC54bWwiLCBPX1JET05MWXxP
X0NMT0VYRUMpID0gMjUKb3BlbigiL2hvbWUvaG5hbmRvci8ubG9jYWwvc2hhcmUvTm9raWEvUXRN
aW5pQnJvd3Nlci8uUXRXZWJLaXQvY2FjaGUvZGF0YTcvMy93OTBsbzJ5My5kIiwgT19SRE9OTFl8
T19DTE9FWEVDKSA9IDI1Cm9wZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0
TWluaUJyb3dzZXIvLlF0V2ViS2l0L2NhY2hlL3ByZXBhcmVkL1RKNzU0My5kIiwgT19SRFdSfE9f
Q1JFQVR8T19FWENMfE9fQ0xPRVhFQywgMDYwMCkgPSAyNQpvcGVuKCIvaG9tZS9obmFuZG9yLy5s
b2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2VyLy5RdFdlYktpdC9jYWNoZS9wcmVwYXJlZC9Y
TTc1NDMuZCIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0NMT0VYRUMsIDA2MDApID0gMjUKb3Bl
bigiL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQ1L1F0LTUuMC4wLXI0MC9wbHVnaW5zL2ltYWdlZm9y
bWF0cy9saWJxZ2lmLnNvIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI4Cm9wZW4oIi91c3IvbG9j
YWwvVHJvbGx0ZWNoL1F0NS9RdC01LjAuMC1yNDAvcGx1Z2lucy9pbWFnZWZvcm1hdHMvbGlicWlj
by5zbyIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyOApvcGVuKCIvdXNyL2xvY2FsL1Ryb2xsdGVj
aC9RdDUvUXQtNS4wLjAtcjQwL3BsdWdpbnMvaW1hZ2Vmb3JtYXRzL2xpYnFqcGVnLnNvIiwgT19S
RE9OTFl8T19DTE9FWEVDKSA9IDI4Cm9wZW4oIi91c3IvbG9jYWwvVHJvbGx0ZWNoL1F0NS9RdC01
LjAuMC1yNDAvcGx1Z2lucy9pbWFnZWZvcm1hdHMvbGlicWdpZi5zbyIsIE9fUkRPTkxZfE9fQ0xP
RVhFQykgPSAyOApvcGVuKCIvdXNyL2xvY2FsL1Ryb2xsdGVjaC9RdDUvUXQtNS4wLjAtcjQwL3Bs
dWdpbnMvaW1hZ2Vmb3JtYXRzL2xpYnFpY28uc28iLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjgK
b3BlbigiL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQ1L1F0LTUuMC4wLXI0MC9wbHVnaW5zL2ltYWdl
Zm9ybWF0cy9saWJxanBlZy5zbyIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyOApvcGVuKCIvdXNy
L3NoYXJlLy9taW1lL3RleHQvaHRtbC54bWwiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjgKb3Bl
bigiL3Vzci9zaGFyZS8vbWltZS90ZXh0L2h0bWwueG1sIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9
IDI4Cm9wZW4oIi9wcm9jL21lbWluZm8iLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjgKb3Blbigi
L2Rldi91cmFuZG9tIiwgT19SRE9OTFkpICAgICAgICAgID0gMjgKb3BlbigiL2hvbWUvaG5hbmRv
ci8ubG9jYWwvc2hhcmUvTm9raWEvUXRNaW5pQnJvd3Nlci8uUXRXZWJLaXQvY2FjaGUvZGF0YTcv
NC8zbmtoYXdnNC5kIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI4Cm9wZW4oIi9ob21lL2huYW5k
b3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIvLlF0V2ViS2l0L2NhY2hlL2RhdGE3
LzQvM25raGF3ZzQuZCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyOApvcGVuKCIvZXRjL2ZvbnRz
L2ZvbnRzLmNvbmYiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC8xMC1h
bnRpYWxpYXMuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzEw
LWhpbnRpbmctc2xpZ2h0LmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2Nv
bmYuZC8xMC1oaW50aW5nLmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2Nv
bmYuZC8xMS1sY2QtZmlsdGVyLWxjZGRlZmF1bHQuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4o
Ii9ldGMvZm9udHMvY29uZi5kLzIwLWZpeC1nbG9iYWxhZHZhbmNlLmNvbmYiLCBPX1JET05MWSkg
PSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC8yMC11bmhpbnQtc21hbGwtdmVyYS5jb25mIiwg
T19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvMzAtbWV0cmljLWFsaWFzZXMu
Y29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzMwLXVydy1hbGlh
c2VzLmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC80MC1ub25s
YXRpbi5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNDUtbGF0
aW4uY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzQ5LXNhbnNz
ZXJpZi5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNTAtdXNl
ci5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNTEtbG9jYWwu
Y29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzUzLW1vbm9zcGFj
ZS1sY2QtZmlsdGVyLmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYu
ZC81OS1kcm9pZC1zZXJpZi1mb250cy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9m
b250cy9jb25mLmQvNjAtZHJvaWQtc2Fucy1tb25vLWZvbnRzLmNvbmYiLCBPX1JET05MWSkgPSAz
MQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC82MC1sYXRpbi5jb25mIiwgT19SRE9OTFkpID0gMzEK
b3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjQtMDEtdGx3Zy1raW5uYXJpLmNvbmYiLCBPX1JET05M
WSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC82NC0wMi10bHdnLW5vcmFzaS5jb25mIiwg
T19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjQtMTEtdGx3Zy13YXJlZS5j
b25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjQtMTItdGx3Zy1s
b21hLmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC82NC0xMy10
bHdnLWdhcnVkYS5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQv
NjQtMTQtdGx3Zy11bXB1c2guY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMv
Y29uZi5kLzY0LTIxLXRsd2ctdHlwby5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9m
b250cy9jb25mLmQvNjQtMjItdGx3Zy10eXBpc3QuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4o
Ii9ldGMvZm9udHMvY29uZi5kLzY0LTIzLXRsd2ctbW9uby5jb25mIiwgT19SRE9OTFkpID0gMzEK
b3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjUtZHJvaWQtc2Fucy1mb250cy5jb25mIiwgT19SRE9O
TFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjUtZm9udHMtcGVyc2lhbi5jb25mIiwg
T19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvNjUta2htZXIuY29uZiIsIE9f
UkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzY1LW5vbmxhdGluLmNvbmYiLCBP
X1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC82OS11bmlmb250LmNvbmYiLCBP
X1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC83MC1uby1iaXRtYXBzLmNvbmYi
LCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC84MC1kZWxpY2lvdXMuY29u
ZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzg5LXRsd2ctZ2FydWRh
LXN5bnRoZXRpYy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQv
ODktdGx3Zy1raW5uYXJpLXN5bnRoZXRpYy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0
Yy9mb250cy9jb25mLmQvODktdGx3Zy1sb21hLXN5bnRoZXRpYy5jb25mIiwgT19SRE9OTFkpID0g
MzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvODktdGx3Zy11bXB1c2gtc3ludGhldGljLmNvbmYi
LCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRjL2ZvbnRzL2NvbmYuZC84OS10bHdnLXdhcmVlLXN5
bnRoZXRpYy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvOTAt
Zm9udHMtbmFudW0uY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5k
LzkwLWZvbnRzLXVuZm9udHMtY29yZS5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9m
b250cy9jb25mLmQvOTAtc3ludGhldGljLmNvbmYiLCBPX1JET05MWSkgPSAzMQpvcGVuKCIvZXRj
L2ZvbnRzL2NvbmYuZC85MC10dGYtYmVuZ2FsaS1mb250cy5jb25mIiwgT19SRE9OTFkpID0gMzEK
b3BlbigiL2V0Yy9mb250cy9jb25mLmQvOTAtdHRmLWRldmFuYWdhcmktZm9udHMuY29uZiIsIE9f
UkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzkwLXR0Zi1ndWphcmF0aS1mb250
cy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvOTAtdHRmLWth
bm5hZGEtZm9udHMuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5k
LzkwLXR0Zi1tYWxheWFsYW0tZm9udHMuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi9ldGMv
Zm9udHMvY29uZi5kLzkwLXR0Zi1vcml5YS1mb250cy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3Bl
bigiL2V0Yy9mb250cy9jb25mLmQvOTAtdHRmLXB1bmphYmktZm9udHMuY29uZiIsIE9fUkRPTkxZ
KSA9IDMxCm9wZW4oIi9ldGMvZm9udHMvY29uZi5kLzkwLXR0Zi10YW1pbC1mb250cy5jb25mIiwg
T19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvOTAtdHRmLXRlbHVndS1mb250
cy5jb25mIiwgT19SRE9OTFkpID0gMzEKb3BlbigiL2V0Yy9mb250cy9jb25mLmQvOTlwZGZ0b29w
dnAuY29uZiIsIE9fUkRPTkxZKSA9IDMxCm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy8zODMw
ZDVjM2RkZmQ1Y2QzOGEwNDliNzU5Mzk2ZTcyZS1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAy
OQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvNGM1OTljMjAyYmM1YzA4ZTJkMzQ1NjVhNDBl
YWMzYjItbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250
Y29uZmlnL2M4NTU0NjNmNjk5MzUyYzM2NzgxM2UzN2YzZjcwZWE3LWxlNjQuY2FjaGUtMyIsIE9f
UkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy81N2U0MjNlMjZiMjBhYjIx
ZDBmMmYyOWMxNDUxNzRjMy1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFy
L2NhY2hlL2ZvbnRjb25maWcvNTczZWM4MDM2NjRlZDE2ODU1NWUwZThiNmQwZjBjN2YtbGU2NC5j
YWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzdlZjIy
OThmZGU0MWNjNmVlYjdhZjQyZTQ4YjdkMjkzLWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5
Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy9kODJlYjRmZDk2M2Q0NDhlMmZjYjdkN2I3OTNi
NWRmMy1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRj
b25maWcvZTEzYjIwZmRiMDgzNDRlMGU2NjQ4NjRjYzJlZGU1M2QtbGU2NC5jYWNoZS0zIiwgT19S
RE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzcwNzk3MWUwMDNiNGFlNmM4
MTIxYzNhOTIwZTUwN2Y1LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIv
Y2FjaGUvZm9udGNvbmZpZy9jYWJiZDE0NTExYjllOGE1NWU5MmFmOTdmYjNhMDQ2MS1sZTY0LmNh
Y2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvZmU1NDdm
ZWEzYTQxYjQzYTM4OTc1ZDI5MmEyYjE5YzctbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkK
b3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnL2QzZTVjNGVlMmNlYjFmYzM0N2Y5MWQ0Y2VmYzUz
YmMwLWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNv
bmZpZy9lNTJhNDVhMWM4YzhmZTg5NWZjMGZjOGM0ZTY5OTliOC1sZTY0LmNhY2hlLTMiLCBPX1JE
T05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvMTVkZDljZDNkMTI0ZDNkZTJk
NDExMGY2ZGRlOTdjMjMtbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9j
YWNoZS9mb250Y29uZmlnLzYyZjkxNDE5YjllYmRiNjk3NWU3ZTQxYWI2NDEyMzU3LWxlNjQuY2Fj
aGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy8zZjczMjlj
NTI5M2ZmZDUxMGVkZWY3OGY3Mzg3NGNmZC1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpv
cGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvZDUyYTg2NDQwNzNkNTRjMTM2NzkzMDJjYTExODA2
OTUtbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29u
ZmlnLzRiMTRiMDkzYWViYzc5YzMyMGRlNWU4NmFlMWQzMzE0LWxlNjQuY2FjaGUtMyIsIE9fUkRP
TkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy9lNDllODkwMzRkMzcxZjBmOWRl
MTdhYWIwMjEzNjQ4Ni1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2Nh
Y2hlL2ZvbnRjb25maWcvNTJmN2JkYjdjZTc0NmJmZDdlYWExOTg1YmQ5Y2ZhOTMtbGU2NC5jYWNo
ZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnL2I0N2M0ZTFl
Y2QwNzA5Mjc4ZjQ5MTBjMTg3NzdhNTA0LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9w
ZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy9iOWQ1MDZjOWFjMDZjMjBiNDMzMzU0ZmE2N2E3Mjk5
My1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25m
aWcvNTZjZjRmNDc2OWQwZjRhYmM4OWE0ODk1ZDdiZDNhZTEtbGU2NC5jYWNoZS0zIiwgT19SRE9O
TFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzMwNDc4MTRkZjlhMmYwNjdiZDJk
OTZhMmI5YzM2ZTVhLWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2Fj
aGUvZm9udGNvbmZpZy8zNjViNTVmMjEwYzBhMjJlOWExOWUzNTE5MTI0MGYzMi1sZTY0LmNhY2hl
LTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvODgwMTQ5Nzk1
ODYzMGE4MWI3MWFjZTdjNWY5YjMyYTgtbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3Bl
bigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzQ3OTRhMDgyMTY2NmQ3OTE5MGQ1OWEzNmNiNGY0NGI1
LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZp
Zy8zODVjMDYwNGExODgxOThmMDRkMTMzZTU0YWJhN2ZlNy1sZTY0LmNhY2hlLTMiLCBPX1JET05M
WSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvMDRhYWJjMGE3OGFjMDE5Y2Y5NDU0
Mzg5OTc3MTE2ZDItbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNo
ZS9mb250Y29uZmlnLzZkNDEyODhmZDcwYjBiZTIyZThjM2E5MWUwMzJlZWMwLWxlNjQuY2FjaGUt
MyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy9hNzU1YWZlNGEw
OGJmNWI5Nzg1MmNlYjc0MDBiNDdiYy1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVu
KCIvdmFyL2NhY2hlL2ZvbnRjb25maWcvMGQ4YzNiMmFjMDkwNGNiOGE1N2E3NTdhZDExYTRhMDgt
bGU2NC5jYWNoZS0zIiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmln
L2U3MDcxZjRhMjlmYTg3MGY0MzIzMzIxYzE1NGViYTA0LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZ
KSA9IDI5Cm9wZW4oIi92YXIvY2FjaGUvZm9udGNvbmZpZy8yY2QxNzYxNWNhNTk0ZmEyOTU5YWUx
NzMyOTJlNTA0Yy1sZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hl
L2ZvbnRjb25maWcvYTZkOGNmOGU0ZWMwOWNkYmM4NjMzYzMxNzQ1YTA3ZGQtbGU2NC5jYWNoZS0z
IiwgT19SRE9OTFkpID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzk5ZThlZDBlNTM4
Zjg0MGM1NjViNmVkNWRhZDYwZDU2LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4o
Ii92YXIvY2FjaGUvZm9udGNvbmZpZy85NDU2NzdlYjdhZWFmNjJmMWQ1MGVmYzNmYjNlYzdkOC1s
ZTY0LmNhY2hlLTMiLCBPX1JET05MWSkgPSAyOQpvcGVuKCIvdmFyL2NhY2hlL2ZvbnRjb25maWcv
YzA1ODgwZGU1N2QxZjVlOTQ4ZmRmYWNjMTM4Nzc1ZDktbGU2NC5jYWNoZS0zIiwgT19SRE9OTFkp
ID0gMjkKb3BlbigiL3Zhci9jYWNoZS9mb250Y29uZmlnLzYzMzNmMzg3NzY3NDJkMThlMjE0Njcz
Y2QyYzI0ZTM0LWxlNjQuY2FjaGUtMyIsIE9fUkRPTkxZKSA9IDI5Cm9wZW4oIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYiLCBPX1JET05MWSkgPSAyOQpv
cGVuKCIvcHJvYy9tZW1pbmZvIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI5Cm9wZW4oIi91c3Iv
c2hhcmUvL21pbWUvaW1hZ2UvcG5nLnhtbCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyNQpvcGVu
KCIvaG9tZS9obmFuZG9yLy5sb2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2VyLy5RdFdlYktp
dC9jYWNoZS9kYXRhNy81LzNlamljNG91LmQiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjUKb3Bl
bigiL2hvbWUvaG5hbmRvci8ubG9jYWwvc2hhcmUvTm9raWEvUXRNaW5pQnJvd3Nlci8uUXRXZWJL
aXQvY2FjaGUvZGF0YTcvNS8zZWppYzRvdS5kIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI1Cm9w
ZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIvLlF0V2Vi
S2l0L2NhY2hlL2RhdGE3L2UvdHk1ZHlycW4uZCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAyOQpv
cGVuKCIvaG9tZS9obmFuZG9yLy5sb2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2VyLy5RdFdl
YktpdC9jYWNoZS9kYXRhNy9lL3R5NWR5cnFuLmQiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjkK
b3BlbigiL2hvbWUvaG5hbmRvci8ubG9jYWwvc2hhcmUvTm9raWEvUXRNaW5pQnJvd3Nlci8uUXRX
ZWJLaXQvY2FjaGUvZGF0YTcvMi8xZzM4cnhqYi5kIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDMw
Cm9wZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIvLlF0
V2ViS2l0L2NhY2hlL2RhdGE3LzIvMWczOHJ4amIuZCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAz
MApvcGVuKCIvaG9tZS9obmFuZG9yLy5sb2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2VyLy5R
dFdlYktpdC9jYWNoZS9kYXRhNy83LzNqanU3cDA3LmQiLCBPX1JET05MWXxPX0NMT0VYRUMpID0g
MzEKb3BlbigiL2hvbWUvaG5hbmRvci8ubG9jYWwvc2hhcmUvTm9raWEvUXRNaW5pQnJvd3Nlci8u
UXRXZWJLaXQvY2FjaGUvZGF0YTcvNy8zamp1N3AwNy5kIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9
IDMxCm9wZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIv
LlF0V2ViS2l0L2NhY2hlL2RhdGE3LzgvOWs4ejEyODguZCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykg
PSAzMgpvcGVuKCIvaG9tZS9obmFuZG9yLy5sb2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2Vy
Ly5RdFdlYktpdC9jYWNoZS9kYXRhNy84LzlrOHoxMjg4LmQiLCBPX1JET05MWXxPX0NMT0VYRUMp
ID0gMzIKb3BlbigiL3Vzci9zaGFyZS8vbWltZS9pbWFnZS9wbmcueG1sIiwgT19SRE9OTFl8T19D
TE9FWEVDKSA9IDI4Cm9wZW4oIi91c3Ivc2hhcmUvL21pbWUvaW1hZ2UvcG5nLnhtbCIsIE9fUkRP
TkxZfE9fQ0xPRVhFQykgPSAyOApvcGVuKCIvdXNyL3NoYXJlLy9taW1lL2ltYWdlL3BuZy54bWwi
LCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjgKb3BlbigiL3Vzci9zaGFyZS8vbWltZS9pbWFnZS9w
bmcueG1sIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9IDI4Cm9wZW4oIi91c3Ivc2hhcmUvL21pbWUv
YXBwbGljYXRpb24vamF2YXNjcmlwdC54bWwiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMjgKb3Bl
bigiL3Vzci9zaGFyZS8vbWltZS9hcHBsaWNhdGlvbi9qYXZhc2NyaXB0LnhtbCIsIE9fUkRPTkxZ
fE9fQ0xPRVhFQykgPSAyOApvcGVuKCIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvYXJpYWxiZC50dGYiLCBPX1JET05MWSkgPSAyNQpvcGVuKCIvaG9tZS9obmFuZG9yLy5s
b2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2VyLy5RdFdlYktpdC9jYWNoZS9kYXRhNy80LzJ4
czNrMzh0LmQiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUg
b3IgZGlyZWN0b3J5KQpvcGVuKCIvZGV2L3NobS9XSzJTaGFyZWRNZW1vcnkuNjg5NjE3NjgiLCBP
X1JEV1J8T19DUkVBVHxPX05PRk9MTE9XfE9fQ0xPRVhFQywgMDYwMCkgPSAyOApvcGVuKCIvdXNy
L3NoYXJlLy9taW1lL3RleHQvaHRtbC54bWwiLCBPX1JET05MWXxPX0NMT0VYRUMpID0gMzAKb3Bl
bigiL3Vzci9zaGFyZS8vbWltZS90ZXh0L2h0bWwueG1sIiwgT19SRE9OTFl8T19DTE9FWEVDKSA9
IDMwCm9wZW4oIi9ob21lL2huYW5kb3IvLmxvY2FsL3NoYXJlL05va2lhL1F0TWluaUJyb3dzZXIv
LlF0V2ViS2l0L2NhY2hlL2RhdGE3L2QvMmppNTk1eW0uZCIsIE9fUkRPTkxZfE9fQ0xPRVhFQykg
PSAzMApvcGVuKCIvaG9tZS9obmFuZG9yLy5sb2NhbC9zaGFyZS9Ob2tpYS9RdE1pbmlCcm93c2Vy
Ly5RdFdlYktpdC9jYWNoZS9kYXRhNy9kLzJqaTU5NXltLmQiLCBPX1JET05MWXxPX0NMT0VYRUMp
ID0gMzAKb3BlbigiL3Vzci9zaGFyZS8vbWltZS9hcHBsaWNhdGlvbi9qYXZhc2NyaXB0LnhtbCIs
IE9fUkRPTkxZfE9fQ0xPRVhFQykgPSAzMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181544</attachid>
            <date>2013-01-07 12:30:21 -0800</date>
            <delta_ts>2013-01-07 12:37:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130107222724.patch</filename>
            <type>text/plain</type>
            <size>66055</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4OTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1MTdhZDY5N2JhYmM3ZTBiNGZlMzhh
YWVjNTU4MWI0YzJlYjZjOTUuLjVkZjJkOWM0YjlmMWIxOTExNDQwZDBlMTIyMjQzMjcyMThkNzYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDcgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IGhhbmRsZSBT
SUdTWVMgd2hlbiBTZWNjb21wIEZpbHRlcnMgaXMgZW5hYmxlZCBzaW5jZSB0aGlzCisgICAgICAg
IHNpZ25hbCBpcyBuZWVkZWQgdG8gcHJveHkgdGhlIHN5c2NhbGxzIHRvIHRoZSBicm9rZXIgcHJv
Y2Vzcy4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKwogMjAxMy0wMS0wNSAgSm9u
YXRoYW4gTGl1ICA8bmV0MTQ3QGdtYWlsLmNvbT4KIAogICAgICAgICBPbmx5IGVuYWJsZSBNaW5H
Vy13NjQgcG93KCkgd29ya2Fyb3VuZCBpZiBuZWVkZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZTRmMGUzNDk1
ODcyYWE4N2M2OTVlOGZlNGI2YzNhNWEzZTgxNGMyLi41YzE0YTI1MDY3NzUyZTk1ODgxMTczOTYw
Mjk2MmI0MGQwNWIyMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEzLTAxLTA3
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgorCisg
ICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNpbmcg
c2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjZSB0aGUgZm91bmRhdGlvbnMgb2YgdGhlIFNlY2NvbXBGaWx0ZXItYmFz
ZWQgc2FuZGJveC4gVGhlCisgICAgICAgIGhhcmRlbmluZyBvZiB0aGUgV2ViUHJvY2VzcyAoYW5k
IHBvdGVudGlhbGx5IFBsdWdpblByb2Nlc3MsIGV0YykKKyAgICAgICAgd29ya3MgYnkgYSBjb21i
aW5hdGlvbiBvZiB0aGUgdHdvIHRoaW5nczoKKworICAgICAgICAtIEJsb2NraW5nIHN5c2NhbGxz
IHRoYXQgYXJlIG5vdCB1c2VkLCByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNrCisgICAg
ICAgIHN1cmZhY2UuCisgICAgICAgIC0gVHJhcHBpbmcgc2Vuc2l0aXZlIHN5c2NhbGxzIGFuZCBk
ZWxlZ2F0aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlc2UKKyAgICAgICAgc3lzY2FsbHMgdG8gYSBz
ZXBhcmF0ZWQgdHJ1c3RlZCBwcm9jZXNzIHN1YmplY3QgdG8gYSBzZXQgb2YgcG9saWNpZXMuCisK
KyAgICAgICAgVGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gdHJhcHMgdGhlIG9wZW4oKSBzeXNj
YWxsIGZvciBXZWJLaXQgRUZMJ3MKKyAgICAgICAgV2ViUHJvY2VzcywgYnV0IGl0IGNvdWxkIGJl
IGVhc2lseSB1c2VkIGJ5IGFueSBMaW51eCBwb3J0LCBzaW5jZSB0aGUKKyAgICAgICAgY29kZSBp
cyBzdXBwb3NlIHRvIGJlIExpbnV4LWNvbXBsaWFudC4gVGhlIGxpc3Qgb2Ygc3lzY2FsbHMgaGFu
ZGxlZAorICAgICAgICBieSB0aGUgYnJva2VyIHByb2Nlc3Mgc2hvdWxkIGRlZmluaXRlbHkgYXMg
d2UgbWF0dXJlIHRoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGUgYnJv
a2VyIHByb2Nlc3Mgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIG9u
IHRoZQorICAgICAgICBzYW5kYm94ZWQgcHJvY2VzcyBtYWluLCBiZWNhdXNlIGl0IG9ubHkgZG9l
cyBhIGZvcmsoKSwgd2hpY2ggaXMgY2hlYXAKKyAgICAgICAgb24gTGludXguIFRoYXQgYWxzbyBh
aW1zIHRvIG1pbmltaXplIHRoZSByZXNpZGVudCBtZW1vcnkgZm9vdHByaW50IG9mCisgICAgICAg
IHRoZSBicm9rZXIgcHJvY2Vzcy4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGJyb2tlciBzdXBw
b3J0cyBvbmx5IGRpcmVjdG9yeSBwb2xpY2llcywgYnV0IGZpbGUgcG9saWNpZXMKKyAgICAgICAg
Y291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZSB0byBtYWtlIG5hcnJvd2VyIHRoZSBm
aWxlc3lzdGVtCisgICAgICAgIGV4cG9zZWQgdG8gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAg
T3BlbmluZyBvZiBmaWxlcyBmb3IgdXBsb2FkIGFuZCBzYXZpbmcgZG93bmxvYWRzIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0LAorICAgICAgICBzaW5jZSBpdCBzaG91bGQgYmUgaGFuZGxlZCB0byB0aGUg
VUlQcm9jZXNzIGluIGEgc2ltaWxhciBmYXNoaW9uIGFzCisgICAgICAgIHRoZSBNYWMgcG9ydCBk
b2VzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogU2hhcmVkL2xp
bnV4L09wZW5TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpPcGVu
U3lzY2FsbDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmV4ZWN1
dGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6T3BlblN5c2NhbGw6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
UmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
UmVzdWx0Ojp+T3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2Fs
bFJlc3VsdDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6OmRl
Y29kZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmg6IEFkZGVkLgorICAg
ICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoT3BlblN5c2NhbGwp
OgorICAgICAgICAoT3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lz
Y2FsbFJlc3VsdDo6ZmQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZXJy
b3JOdW1iZXIpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wQnJva2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VjY29tcEJyb2tlckNsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6cmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpzeXNTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdl
YktpdDo6cmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNs
aWVudDo6U2VjY29tcEJyb2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXJDbGllbnQ6On5TZWNjb21wQnJva2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2Vy
Q2xpZW50OjpoYW5kbGVJZk9wZW5pbmdDUFVDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2Nv
bXBCcm9rZXI6OnN0YXJ0V2l0aFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpydW5Mb29w
KToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wQnJva2VyKToKKyAgICAgICAgKFdlYktpdDo6
U2VjY29tcEJyb2tlcjo6c2V0U3lzY2FsbFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2Nv
bXBCcm9rZXI6OlNlY2NvbXBCcm9rZXIpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
U2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEZpbHRlcnM6On5TZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0
ZXJzOjphZGRSdWxlKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJl
ZC9saW51eC9TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlN5
c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6U3lz
Y2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVy
KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6U3lzY2FsbFJlc3VsdCk6CisgICAg
ICAgICogU2hhcmVkL2xpbnV4L1N5c2NhbGwuaDogQWRkZWQuCisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6
U3lzY2FsbDo6flN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjp0eXBlKToKKyAg
ICAgICAgKFdlYktpdDo6U3lzY2FsbDo6Y29udGV4dCk6CisgICAgICAgIChTeXNjYWxsUmVzdWx0
KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6flN5c2NhbGxSZXN1bHQpOgorICAg
ICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp0eXBlKToKKyAgICAgICAgKiBTaGFyZWQvbGlu
dXgvU3lzY2FsbFBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6U3lzY2FsbFBvbGljeTo6aGFzUGVybWlzc2lvbkZvclBhdGgpOgorICAgICAgICAq
IFNoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFN5c2NhbGxQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5
OjpzZXREaXJlY3RvcnlQb2xpY3kpOgorICAgICAgICAqIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBG
aWx0ZXJzRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyc0VmbDo6U2VjY29tcEZpbHRlcnNFZmwpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChTZWNjb21wRmlsdGVyc0VmbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwv
V2ViUHJvY2Vzc01haW5FZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkVm
bCk6CisKIDIwMTMtMDEtMDQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW1vdmUgV2ViUHJvY2Vzc0luaXRpYWxpemF0aW9uIGFuZCBOZXR3b3JrUHJvY2Vzc0luaXRp
YWxpemF0aW9uIGJ5IHB1dHRpbmcgdGhlIHJlc3Qgb2YgaW5pdGlhbGl6YXRpb24gaW4gQ2hpbGRQ
cm9jZXNzIGRlcml2ZWQgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXNzZXJ0
aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcAppbmRleCBlZDQ4ZDgxM2Rm
YmE3NTk2OTdhNjk4ZmE2N2I1MDk1YWI3NTZmNGRjLi5jOTI5ZTNhN2NjOGIwZDJlM2IyYTM5YWVm
NTA4NGEyZjdlYjY0Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcApAQCAtMzQ5LDcgKzM0OSwxMSBA
QCBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnNGb3JGYXRhbEVycm9ycyh2b2lkICgq
aGFuZGxlcikoaW50KSkKICAgICBzaWduYWwoU0lHRlBFLCBoYW5kbGVyKTsgLy8gICAgODogZmxv
YXRpbmcgcG9pbnQgZXhjZXB0aW9uLgogICAgIHNpZ25hbChTSUdCVVMsIGhhbmRsZXIpOyAvLyAg
IDEwOiBidXMgZXJyb3IuCiAgICAgc2lnbmFsKFNJR1NFR1YsIGhhbmRsZXIpOyAvLyAgMTE6IHNl
Z21lbnRhdGlvbiB2aW9sYXRpb24uCisjaWYgIUVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAg
Ly8gU2VjY29tcEJyb2tlciBpbnN0YWxscyBhIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdTWVMgdGhh
dAorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUuCiAgICAgc2lnbmFsKFNJR1NZUywg
aGFuZGxlcik7IC8vICAgMTI6IGJhZCBhcmd1bWVudCB0byBzeXN0ZW0gY2FsbC4KKyNlbmRpZgog
ICAgIHNpZ25hbChTSUdQSVBFLCBoYW5kbGVyKTsgLy8gIDEzOiB3cml0ZSBvbiBhIHBpcGUgd2l0
aCBubyByZWFkZXIuCiAgICAgc2lnbmFsKFNJR1hDUFUsIGhhbmRsZXIpOyAvLyAgMjQ6IGV4Y2Vl
ZGVkIENQVSB0aW1lIGxpbWl0LgogICAgIHNpZ25hbChTSUdYRlNaLCBoYW5kbGVyKTsgLy8gIDI1
OiBleGNlZWRlZCBmaWxlIHNpemUgbGltaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IDExNTRkM2ZjMTRmYWY4Mzc2ZWI5MjYzYzVlZDBiZmFmYTkyZjYzYmIuLjEzZmUyZTVhZjVlNDA4
YTA1YmRiYWFhOTEwYzUwMTNmNzMwNjVmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0yMyw2ICsyMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQv
ZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQvZWZsL1dlYkV2ZW50
RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKKyAgICBTaGFy
ZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5
c2NhbGxQb2xpY3kuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5j
cHAKIAogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcApAQCAtMTQw
LDYgKzE0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9lZmwvV2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9l
ZmwvV2ViUGFnZUVmbC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZs
LmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAogCiAgICAgV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQ3LDYgKzI1Myw4IEBAIGlmIChF
TkFCTEVfU0VDQ09NUF9GSUxURVJTKQogICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICAgICAke0xJQlNFQ0NPTVBfSU5DTFVERV9ESVJTfQogICAgICkKKwor
ICAgIGFkZF9kZWZpbml0aW9ucygtRFBST0pFQ1RfUk9PVF9ESVI9XCIke0NNQUtFX1NPVVJDRV9E
SVJ9XCIpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX0VDT1JFX1gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvT3BlblN5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTMzMmY5OWU3YjhiYjhj
M2IwOTg0ODJjY2UwYTNlNDk1MDNkMTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TeXNjYWxs
LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiQXJndW1lbnRD
b2RlcnMuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ09NUElMRV9BU1NFUlQoT19SRE9OTFkg
PT0gMCwgT19SRE9OTFkpOworQ09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkp
OworQ09NUElMRV9BU1NFUlQoT19SRFdSID09IDIsIE9fUkRSVyk7CisKK09wZW5TeXNjYWxsOjpP
cGVuU3lzY2FsbChtY29udGV4dF90KiBjb250ZXh0KQorICAgIDogU3lzY2FsbChTQ01QX1NZUyhv
cGVuKSwgY29udGV4dCkKKyAgICAsIG1fZmxhZ3MoMCkKKyAgICAsIG1fbW9kZSgwKQoreworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0gQ1N0cmluZyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF0pKTsKKyAgICBt
X2ZsYWdzID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdOworICAgIG1fbW9kZSA9IGNvbnRleHQt
PmdyZWdzW1JFR19BUkcyXTsKK30KKwordm9pZCBPcGVuU3lzY2FsbDo6c2V0UmVzdWx0KGNvbnN0
IFN5c2NhbGxSZXN1bHQqIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpICYmIHJlc3Vs
dC0+dHlwZSgpID09IHR5cGUoKSk7CisKKyAgICBjb25zdCBPcGVuU3lzY2FsbFJlc3VsdCogb3Bl
blJlc3VsdCA9IHN0YXRpY19jYXN0PGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0Kj4ocmVzdWx0KTsK
KworICAgIGlmIChvcGVuUmVzdWx0LT5mZCgpID49IDApCisgICAgICAgIGNvbnRleHQoKS0+Z3Jl
Z3NbUkVHX1NZU0NBTExdID0gZHVwKG9wZW5SZXN1bHQtPmZkKCkpOworICAgIGVsc2UKKyAgICAg
ICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtb3BlblJlc3VsdC0+ZXJyb3JOdW1i
ZXIoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBPcGVuU3lzY2FsbDo6ZXhlY3V0
ZShjb25zdCBTeXNjYWxsUG9saWN5JiBwb2xpY3kpCit7CisgICAgaWYgKCFzdHJuY21wKCIvcHJv
Yy9zZWxmLyIsIG1fcGF0aC5kYXRhKCksIDExKSkgeworICAgICAgICBTdHJpbmcgcmVzb2x2ZWRT
ZWxmUGF0aCA9IEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihnZXRwcGlk
KCkpICsgJm1fcGF0aC5kYXRhKClbMTBdOworICAgICAgICBtX3BhdGggPSByZXNvbHZlZFNlbGZQ
YXRoLnV0ZjgoKS5kYXRhKCk7CisgICAgfQorCisgICAgU3lzY2FsbFBvbGljeTo6UGVybWlzc2lv
biBwZXJtaXNzaW9uID0gU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZDsKKyAgICBpZiAobV9mbGFn
cyAmIE9fUkRXUikKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xp
Y3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUp
OworICAgIGVsc2UgaWYgKG1fZmxhZ3MgJiBPX1dST05MWSkKKyAgICAgICAgcGVybWlzc2lvbiA9
IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNj
YWxsUG9saWN5OjpXcml0ZSk7CisgICAgZWxzZQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGlj
X2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xp
Y3k6OlJlYWQpOworCisgICAgLy8gQ3JlYXRlIGEgZmlsZSBpbXBsaWVzIHdyaXRlIHBlcm1pc3Np
b24gb24gdGhlIGRpcmVjdG9yeS4KKyAgICBpZiAobV9mbGFncyAmIE9fQ1JFQVQgfHwgbV9mbGFn
cyAmIE9fRVhDTCkKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xp
Y3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisKKyAg
ICBpZiAoIXBvbGljeS5oYXNQZXJtaXNzaW9uRm9yUGF0aChtX3BhdGguZGF0YSgpLCBwZXJtaXNz
aW9uKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwg
RUFDQ0VTKSk7CisKKyAgICAvLyBQZXJtaXNzaW9uIGdyYW50ZWQsIGV4ZWN1dGUgdGhlIHN5c2Nh
bGwuIFRoZSBzeXNjYWxsIG1pZ2h0IHN0aWxsCisgICAgLy8gZmFpbCBiZWNhdXNlIG9mIGhhcmQg
cGVybWlzc2lvbnMgZW5mb3JjZWQgYnkgdGhlIGZpbGVzeXN0ZW0gYW5kCisgICAgLy8gdGhpbmdz
IGxpa2UgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LgorICAgIGludCBmZCA9IG9wZW4obV9wYXRo
LmRhdGEoKSwgbV9mbGFncywgbV9tb2RlKTsKKyAgICBpbnQgZXJyb3JOdW1iZXIgPSBmZCA9PSAt
MSA/IGVycm5vIDogMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGxSZXN1
bHQoZmQsIGVycm9yTnVtYmVyKSk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGw6OmVuY29kZShDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNv
ZGUodHlwZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZShtX3BhdGgpOworICAgIGVuY29kZXIuZW5j
b2RlKG1fZmxhZ3MpOworICAgIGVuY29kZXIuZW5jb2RlKG1fbW9kZSk7Cit9CisKK2Jvb2wgT3Bl
blN5c2NhbGw6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9wYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1fZmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKG1fbW9kZSk7Cit9CisKK09wZW5TeXNjYWxs
UmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdChpbnQgZmQsIGludCBlcnJvck51bWJlcikKKyAgICA6
IFN5c2NhbGxSZXN1bHQoU0NNUF9TWVMob3BlbikpCisgICAgLCBtX2ZkKGZkKQorICAgICwgbV9l
cnJvck51bWJlcihlcnJvck51bWJlcikKK3sKK30KKworT3BlblN5c2NhbGxSZXN1bHQ6On5PcGVu
U3lzY2FsbFJlc3VsdCgpCit7CisgICAgaWYgKG1fZmQgPj0gMCkKKyAgICAgICAgY2xvc2UobV9m
ZCk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGxSZXN1bHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNvZGUodHlwZSgpKTsK
KworICAgIGlmIChtX2ZkID49IDApIHsKKyAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCBhdHRh
Y2htZW50KG1fZmQpOworICAgICAgICBlbmNvZGVyLmFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCk7
CisgICAgfQorCisgICAgZW5jb2Rlci5lbmNvZGUobV9lcnJvck51bWJlcik7Cit9CisKK2Jvb2wg
T3BlblN5c2NhbGxSZXN1bHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIGludCBmZCkKK3sKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgbV9mZCA9IGZkOworCisg
ICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShtX2Vycm9yTnVtYmVyKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvT3BlblN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2MzZDVlOGZk
MGRlNDg1Y2JiNWYxMWMwZjJiZjQ1YWJlMGQ5NDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcGVuU3lzY2FsbF9oCisjZGVmaW5lIE9wZW5TeXNj
YWxsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTeXNjYWxs
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7
CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVudEVuY29kZXI7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBPcGVuU3lzY2FsbCA6IHB1YmxpYyBTeXNjYWxsIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcGVuU3lzY2FsbChtY29udGV4dF90Kik7CisKKyAgICAv
LyBTeXNjYWxsIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHQoY29u
c3QgU3lzY2FsbFJlc3VsdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0
PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisKK3ByaXZhdGU6CisgICAgQ1N0cmluZyBt
X3BhdGg7CisgICAgaW50IG1fZmxhZ3M7CisgICAgbW9kZV90IG1fbW9kZTsKK307CisKK2NsYXNz
IE9wZW5TeXNjYWxsUmVzdWx0IDogcHVibGljIFN5c2NhbGxSZXN1bHQgeworcHVibGljOgorICAg
IE9wZW5TeXNjYWxsUmVzdWx0KGludCBmZCwgaW50IGVycm9yTnVtYmVyKTsKKyAgICB+T3BlblN5
c2NhbGxSZXN1bHQoKTsKKworICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmQ7IH0KKyAg
ICBpbnQgZXJyb3JOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTnVtYmVyOyB9CisKKyAg
ICAvLyBTeXNjYWxsUmVzdWx0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBlbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRl
Y29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQpOworCitwcml2YXRlOgorICAg
IGludCBtX2ZkOworICAgIGludCBtX2Vycm9yTnVtYmVyOworfTsKKworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAv
LyBPcGVuU3lzY2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2VjY29tcEJyb2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJy
b2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0NjMxNWFkZDM0MjI2ZGE5N2MxNDc5YWVmMmIwMmU0MDY2
OWJhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wQnJva2VyLmNwcApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNlY2NvbXBCcm9rZXIuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIlN5c2NhbGwu
aCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2Vj
Y29tcC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIFNZ
U19TRUNDT01QCisjZGVmaW5lIFNZU19TRUNDT01QIDEKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qg
c2l6ZV90IG1lc3NhZ2VNYXhTaXplID0gNDA5NjsKK3N0YXRpYyBjb25zdCBjaGFyIGNwdUNvdW50
UGF0aFtdID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSI7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBTZWNjb21wQnJva2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU2VjY29tcEJyb2tlckNsaWVudCYgc2hhcmVkKGludCBzb2NrZXQ9LTEpOworICAgIH5TZWNj
b21wQnJva2VyQ2xpZW50KCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKFN5c2NhbGwqKSBjb25zdDsK
KyAgICBib29sIGhhbmRsZUlmT3BlbmluZ0NQVUNvdW50KG1jb250ZXh0X3QqKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBTZWNjb21wQnJva2VyQ2xpZW50KGludCBzb2NrZXQpOworCisgICAgaW50
IG1fc29ja2V0OworICAgIGludCBtX25jcHVzOworCisgICAgbXV0YWJsZSBNdXRleCBtX3NvY2tl
dExvY2s7Cit9OworCitzdGF0aWMgc3NpemVfdCBzZW5kTWVzc2FnZShpbnQgc29ja2V0LCB2b2lk
KiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IGZkPS0xKQoreworICAgIEFTU0VSVChzaXplIDw9IG1l
c3NhZ2VNYXhTaXplKTsKKworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQo
Jm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92Owor
ICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgaW92Lmlvdl9iYXNlID0gZGF0
YTsKKyAgICBpb3YuaW92X2xlbiA9IHNpemU7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAmaW92
OworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19T
UEFDRShzaXplb2YoZmQpKV07CisgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgbWVzc2FnZS5t
c2dfY29udHJvbCA9IGNvbnRyb2w7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBz
aXplb2YoY29udHJvbCk7CisgICAgICAgIG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBt
ZXNzYWdlLm1zZ19jb250cm9sbGVuKTsKKworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9
IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOworICAgICAgICBjbXNnLT5jbXNnX2xldmVsID0gU09M
X1NPQ0tFVDsKKyAgICAgICAgY21zZy0+Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKKyAgICAgICAg
Y21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2YoZmQpKTsKKworICAgICAgICBtZW1tb3Zl
KENNU0dfREFUQShjbXNnKSwgJmZkLCBzaXplb2YoZmQpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c2VuZG1zZyhzb2NrZXQsICZtZXNzYWdlLCAwKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjZWl2
ZU1lc3NhZ2UoaW50IHNvY2tldCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGludCogZmQgPSAw
KQoreworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAs
IHNpemVvZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIG1lbXNldCgm
aW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBpb3Yu
aW92X2xlbiA9IHNpemU7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAmaW92OworICAgIG1lc3Nh
Z2UubXNnX2lvdmxlbiA9IDE7CisKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yo
ZmQpKV07CisgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGNvbnRyb2w7CisgICAgbWVzc2FnZS5t
c2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKKyAgICBtZW1zZXQobWVzc2FnZS5tc2df
Y29udHJvbCwgMCwgbWVzc2FnZS5tc2dfY29udHJvbGxlbik7CisKKyAgICBzc2l6ZV90IHJlY2Vp
dmVkQnl0ZXMgPSByZWN2bXNnKHNvY2tldCwgJm1lc3NhZ2UsIDApOworCisgICAgaWYgKGZkICYm
IHJlY2VpdmVkQnl0ZXMgPiAwKSB7CisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01T
R19GSVJTVEhEUigmbWVzc2FnZSk7CisgICAgICAgIGlmIChjbXNnICYmIGNtc2ctPmNtc2dfbGV2
ZWwgPT0gU09MX1NPQ0tFVCAmJiBjbXNnLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykKKyAgICAg
ICAgICAgIG1lbWNweShmZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YoKmZkKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICpmZCA9IC0xOworICAgIH0KKworICAgIHJldHVybiByZWNlaXZl
ZEJ5dGVzOworfQorCitzdGF0aWMgdm9pZCBzeXNTaWduYWxIYW5kbGVyKGludCBzaWduYWwsIHNp
Z2luZm9fdCogaW5mbywgdm9pZCogZGF0YSkKK3sKKyAgICBpZiAoc2lnbmFsICE9IFNJR1NZUyB8
fCBpbmZvLT5zaV9jb2RlICE9IFNZU19TRUNDT01QKQorICAgICAgICBDUkFTSCgpOworCisgICAg
dWNvbnRleHRfdCogY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPihkYXRhKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAoU2VjY29tcEJyb2tl
ckNsaWVudDo6c2hhcmVkKCkuaGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQoJmNvbnRleHQtPnVjX21j
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGwg
PSBTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCgmY29udGV4dC0+dWNfbWNvbnRleHQpOworICAg
IFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCgpLmRpc3BhdGNoKHN5c2NhbGwuZ2V0KCkpOwor
fQorCitzdGF0aWMgdm9pZCByZWdpc3RlclN5c1NpZ25hbEhhbmRsZXIoKQoreworICAgIHN0cnVj
dCBzaWdhY3Rpb24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9u
KSk7CisgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZzeXNTaWduYWxIYW5kbGVyOworICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9OT0RFRkVSOworCisgICAgaWYgKHNpZ2Fj
dGlvbihTSUdTWVMsICZhY3Rpb24sIDApIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHNp
Z3NldF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFz
aywgU0lHU1lTKTsKKworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDAp
IDwgMCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudCYgU2VjY29t
cEJyb2tlckNsaWVudDo6c2hhcmVkKGludCBzb2NrZXQpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTZWNjb21wQnJva2VyQ2xpZW50LCBicm9rZXJDbGllbnQsIChzb2NrZXQpKTsKKworICAg
IHJldHVybiBicm9rZXJDbGllbnQ7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBC
cm9rZXJDbGllbnQoaW50IHNvY2tldCkKKyAgICA6IG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1f
bmNwdXMob3BlbihjcHVDb3VudFBhdGgsIE9fUkRPTkxZKSkKK3sKKyAgICBBU1NFUlQobV9zb2Nr
ZXQgPj0gMCAmJiBtX25jcHVzID49IDApOworfQorCitTZWNjb21wQnJva2VyQ2xpZW50Ojp+U2Vj
Y29tcEJyb2tlckNsaWVudCgpCit7CisgICAgY2xvc2UobV9zb2NrZXQpOworICAgIGNsb3NlKG1f
bmNwdXMpOworfQorCit2b2lkIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmRpc3BhdGNoKFN5c2NhbGwq
IHN5c2NhbGwpIGNvbnN0Cit7CisgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcj4g
ZW5jb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6Y3JlYXRlKCk7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKCpzeXNjYWxsKTsKKworICAgIGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsK
KyAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMgPSAwOworICAgIGludCBmZCA9IC0xOworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc29ja2V0TG9jayk7CisgICAgICAgIGlmIChz
ZW5kTWVzc2FnZShtX3NvY2tldCwgZW5jb2Rlci0+YnVmZmVyKCksIGVuY29kZXItPmJ1ZmZlclNp
emUoKSkgPCAwKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICB3aGlsZSAocmVjZWl2
ZWRCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICByZWNlaXZlZEJ5dGVzID0gcmVjZWl2ZU1lc3Nh
Z2UobV9zb2NrZXQsICZidWZmZXIsIHNpemVvZihidWZmZXIpLCAmZmQpOworICAgICAgICAgICAg
aWYgKHJlY2VpdmVkQnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJ
TlRSKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBicm9rZXIgc2hvdWxk
IG5vdCBzaHV0ZG93biBiZWZvcmUgdGhlIGNsaWVudC4KKyAgICAgICAgICAgIGlmICghcmVjZWl2
ZWRCeXRlcykKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gZGVjb2RlciA9IENvcmVJUEM6OkFy
Z3VtZW50RGVjb2Rlcjo6Y3JlYXRlKChjb25zdCB1aW50OF90KikgYnVmZmVyLCByZWNlaXZlZEJ5
dGVzKTsKKyAgICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0ID0gU3lzY2FsbFJlc3VsdDo6
Y3JlYXRlRnJvbURlY29kZXIoZGVjb2Rlci5nZXQoKSwgZmQpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICBDUkFTSCgpOworCisgICAgc3lzY2FsbC0+c2V0UmVzdWx0KHJlc3VsdC5nZXQoKSk7
Cit9CisKK2Jvb2wgU2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQo
bWNvbnRleHRfdCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoY29udGV4dC0+Z3JlZ3NbUkVH
X1NZU0NBTExdICE9IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBjb25zdCBjaGFyICpwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29udGV4dC0+Z3Jl
Z3NbUkVHX0FSRzBdKTsKKyAgICBpZiAoc3RyY21wKGNwdUNvdW50UGF0aCwgcGF0aCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hbGxvYyB3aWxsIHNvbWV0aW1lcyBjaGVjayB0
aGUgbnVtYmVyIG9mIENQVXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtCisgICAgLy8gYnkgb3Blbmlu
ZyBhIHNwZWNpYWwgZmlsZS4gSWYgaXQgZG9lcyB0aGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIFNJ
R1NZUworICAgIC8vIHNpZ25hbCBoYW5kbGVyLCBpdCBtaWdodCB0cmlnZ2VyIGEgcmVjdXJzaXZl
IGF0dGVtcHQgb2YgcHJveHlpbmcgdGhlCisgICAgLy8gb3BlbigpIHN5c2NhbGwgdG8gdGhlIGJy
b2tlci4gQmVjYXVzZSBvZiB0aGF0LCB3ZSBjYWNoZSB0aGlzIHJlc291cmNlLgorICAgIGNvbnRl
eHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IGR1cChtX25jcHVzKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNlY2NvbXBCcm9rZXI6OnN0YXJ0V2l0aFBvbGljeShjb25zdCBTeXNjYWxs
UG9saWN5JiBwb2xpY3kpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsK
KyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY2NvbXBCcm9r
ZXIgc2VjY29tcEJyb2tlcjsKKyAgICBzZWNjb21wQnJva2VyLnNldFN5c2NhbGxQb2xpY3kocG9s
aWN5KTsKKyAgICBzZWNjb21wQnJva2VyLmluaXRpYWxpemUoKTsKKworICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKK30KKwordm9pZCBTZWNjb21wQnJva2VyOjppbml0aWFsaXplKCkKK3sKKyAgICBp
bnQgc29ja2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwg
MCwgc29ja2V0cykgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgcGlkX3QgcGlkID0gZm9y
aygpOworICAgIGlmIChwaWQpIHsgLy8gV2ViUHJvY2Vzcy4KKyAgICAgICAgY2xvc2Uoc29ja2V0
c1sxXSk7CisgICAgICAgIFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZChzb2NrZXRzWzBdKTsK
KyAgICAgICAgcmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKCk7CisgICAgfSBlbHNlIHsgLy8gQnJv
a2VyLgorICAgICAgICAvLyBUT0RPOiBUaGUgYnJva2VyIHNob3VsZCBzZXR1cCBzZWNjb21wIGZp
bHRlcnMKKyAgICAgICAgLy8gZm9yIGl0c2VsZiBhbmQgYmxvY2sgZXZlcnl0aGluZyBlbHNlIG90
aGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIG1pbmltYWwgc2V0IG9mIHN5c2NhbGxzIG5lZWRlZCB0
byBleGVjdXRlIHRoZQorICAgICAgICAvLyBzeXNjYWxscyBpdCBpcyBzdXBwb3NlIHRvIHByb3h5
LgorICAgICAgICBjbG9zZShzb2NrZXRzWzBdKTsKKyAgICAgICAgcnVuTG9vcChzb2NrZXRzWzFd
KTsKKyAgICB9Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlcjo6cnVuTG9vcChpbnQgc29ja2V0KQor
eworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgaSA9IFNUREVSUl9GSUxFTk8gKyAxOworI2Vsc2UK
KyAgICBpbnQgaSA9IDA7CisjZW5kaWYKKyAgICAvLyBDbG9zZSBhbGwgaW5oZXJpdGVkIGZpbGUg
ZGVzY3JpcHRvcnMgb3RoZXIKKyAgICAvLyB0aGFuIHRoZSBzb2NrZXQgdG8gdGhlIHNhbmRib3hl
ZCBwcm9jZXNzLgorICAgIGZvciAoOyBpIDwgRkRfU0VUU0laRTsgKytpKQorICAgICAgICBpZiAo
aSAhPSBzb2NrZXQpCisgICAgICAgICAgICBjbG9zZShpKTsKKworICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKKyAgICAgICAgc3NpemVfdCBy
ZWNlaXZlZEJ5dGVzID0gcmVjZWl2ZU1lc3NhZ2Uoc29ja2V0LCAmYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSk7CisKKyAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPCAwKSB7CisgICAgICAgICAgICBp
ZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vcm1hbCBz
aHV0ZG93biBmcm9tIHRoZSBjbGllbnQuCisgICAgICAgIGlmICghcmVjZWl2ZWRCeXRlcykKKyAg
ICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6
QXJndW1lbnREZWNvZGVyPiBkZWNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVh
dGUoKGNvbnN0IHVpbnQ4X3QqKSBidWZmZXIsIHJlY2VpdmVkQnl0ZXMpOworICAgICAgICBPd25Q
dHI8U3lzY2FsbD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKGRlY29kZXIu
Z2V0KCkpOworICAgICAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7CisKKyAgICAgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IHN5c2NhbGwt
PmV4ZWN1dGUobV9wb2xpY3kpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGV4
aXQoRVhJVF9GQUlMVVJFKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyPiBlbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKCpyZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxDb3JlSVBDOjpB
dHRhY2htZW50PiBhdHRhY2htZW50cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2htZW50cygpOwor
ICAgICAgICBpbnQgZmQgPSBhdHRhY2htZW50cy5zaXplKCkgPT0gMSA/IGF0dGFjaG1lbnRzWzBd
LmZpbGVEZXNjcmlwdG9yKCkgOiAtMTsKKworICAgICAgICAvLyBUaGUgY2xpZW50IGlzIGRvd24s
IHRoZSBicm9rZXIgc2hvdWxkIGdvIGF3YXkuCisgICAgICAgIGlmIChzZW5kTWVzc2FnZShzb2Nr
ZXQsIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCksIGZkKSA8IDApCisg
ICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2M2ZGJjYWU2
NGU0ZTVlNmIxNzBhZmFiODkxMzE2NjI1MmVjNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBCcm9rZXJfaAorI2RlZmluZSBTZWNj
b21wQnJva2VyX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJT
eXNjYWxsLmgiCisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPHNpZ25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBTZWNjb21wQnJva2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wQnJva2Vy
KTsKKworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHN0YXJ0V2l0aFBvbGljeShjb25zdCBTeXNj
YWxsUG9saWN5Jik7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIHNldFN5c2Nh
bGxQb2xpY3koY29uc3QgU3lzY2FsbFBvbGljeSYgcG9saWN5KSB7IG1fcG9saWN5ID0gcG9saWN5
OyB9CisKK3ByaXZhdGU6CisgICAgU2VjY29tcEJyb2tlcigpIHsgfQorCisgICAgdm9pZCBydW5M
b29wKGludCBzb2NrZXQpOworCisgICAgU3lzY2FsbFBvbGljeSBtX3BvbGljeTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2VuZGlmIC8vIFNlY2NvbXBCcm9rZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TZWNjb21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdjNzNiNWU3NzAwNjFjZmY1OGNl
OGYyZGVkYjA4ZTEyZDM2MzMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJz
LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEJy
b2tlci5oIgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6
OkFsbG93ID09IFNDTVBfQUNUX0FMTE9XLCBBbGxvdyk7CitDT01QSUxFX0FTU0VSVChTZWNjb21w
RmlsdGVyczo6S2lsbCA9PSBTQ01QX0FDVF9LSUxMLCBLaWxsKTsKK0NPTVBJTEVfQVNTRVJUKFNl
Y2NvbXBGaWx0ZXJzOjpUcmFwID09IFNDTVBfQUNUX1RSQVAsIFRyYXApOworCitTZWNjb21wRmls
dGVyczo6U2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pCisgICAgOiBtX2NvbnRl
eHQoc2VjY29tcF9pbml0KGRlZmF1bHRBY3Rpb24pKQorICAgICwgbV9pbml0aWFsaXplZChmYWxz
ZSkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworU2VjY29t
cEZpbHRlcnM6On5TZWNjb21wRmlsdGVycygpCit7CisgICAgc2VjY29tcF9yZWxlYXNlKG1fY29u
dGV4dCk7Cit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUoY29uc3QgY2hhciogc3lz
Y2FsbE5hbWUsIEFjdGlvbiBhY3Rpb24pCit7CisgICAgaW50IHN5c2NhbGwgPSBzZWNjb21wX3N5
c2NhbGxfcmVzb2x2ZV9uYW1lKHN5c2NhbGxOYW1lKTsKKyAgICBpZiAoc3lzY2FsbCA9PSBfX05S
X1NDTVBfRVJST1IpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAoc2VjY29tcF9ydWxlX2Fk
ZChtX2NvbnRleHQsIGFjdGlvbiwgc3lzY2FsbCwgMCkgPCAwKQorICAgICAgICBDUkFTSCgpOwor
fQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAobV9pbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wbGVtZW50IHRoaXMgaXMgbm90
IHJlcXVpcmVkIGluIGNhc2Ugd2UgYXJlIGp1c3QKKyAgICAvLyBzZXR0aW5nIGZpbHRlcnMuIFRo
aXMgaXMgYSBnb29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKKyAgICAvLyBicm9rZXIgYW5kIHN5c2Nh
bGwgcG9saWN5IG90aGVyd2lzZS4KKyAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAgIGlm
IChzZWNjb21wX2xvYWQobV9jb250ZXh0KSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU2VjY29tcEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzFlMWVhZmMxMWIwNDFlMzdhYTMwNzkz
YjM3MzhkMDA1NDZhMDYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJzX2gK
KworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNjb21wQnJva2Vy
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTZWNjb21wRmlsdGVycyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjY29t
cEZpbHRlcnMpOworCitwdWJsaWM6CisgICAgZW51bSBBY3Rpb24geworICAgICAgICBBbGxvdyA9
IDB4N2ZmZjAwMDBVLAorICAgICAgICBLaWxsICA9IDB4MDAwMDAwMDBVLAorICAgICAgICBUcmFw
ICA9IDB4MDAwMzAwMDBVCisgICAgfTsKKworICAgIGV4cGxpY2l0IFNlY2NvbXBGaWx0ZXJzKEFj
dGlvbiBkZWZhdWx0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIH5TZWNjb21wRmlsdGVycygpOworCisg
ICAgdm9pZCBhZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24pOworICAgIHZv
aWQgaW5pdGlhbGl6ZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemUoKSB7IH0KKworICAgIHR5cGVkZWYgdm9pZCAqSEFORExFOworCisgICAgSEFORExF
IG1fY29udGV4dDsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAv
LyBTZWNjb21wRmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU3lzY2FsbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2FsbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGE5NTJlZmIyOTE0NmM2OTAzZDYyYTk0MmNkODBlMTljODZmN2E1MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmNwcApA
QCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiT3BlblN5c2NhbGwuaCIKKyNp
bmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFN5
c2NhbGw+IFN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7
CisgICAgaWYgKGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9PSBTQ01QX1NZUyhvcGVuKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbChjb250ZXh0KSk7CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093
blB0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqIGRlY29kZXIpCit7CisgICAgaW50IHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgT3duUHRyPFN5c2Nh
bGw+IHN5c2NhbGw7CisgICAgaWYgKHR5cGUgPT0gU0NNUF9TWVMob3BlbikpCisgICAgICAgIHN5
c2NhbGwgPSBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGwoMCkpOworCisgICAgaWYgKCFzeXNjYWxs
LT5kZWNvZGUoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IHN5c2NhbGwucmVsZWFzZSgpOworfQorCitTeXNjYWxsOjpTeXNjYWxsKGludCB0eXBlLCBtY29u
dGV4dF90KiBjb250ZXh0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKK3sKK30KKworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBTeXNjYWxsUmVzdWx0Ojpj
cmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIGludCBm
ZCkKK3sKKyAgICBpbnQgdHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0
OworICAgIGlmICh0eXBlID09IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICByZXN1bHQgPSBhZG9w
dFB0cihuZXcgT3BlblN5c2NhbGxSZXN1bHQoLTEsIDApKTsKKworICAgIGlmICghcmVzdWx0LT5k
ZWNvZGUoZGVjb2RlciwgZmQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOworfQorCitTeXNjYWxsUmVzdWx0OjpTeXNjYWxsUmVzdWx0KGlu
dCB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3NzhkMTk4NGM5ZTlkNzMwZTRmMDdhOTM2Yzgy
YzhjNzM5OTg1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU3lzY2FsbC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFN5c2NhbGxfaAorI2RlZmluZSBTeXNjYWxsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNpZiBDUFUoWDg2XzY0KQorI2RlZmluZSBSRUdfU1lTQ0FMTCBSRUdfUkFYCisj
ZGVmaW5lIFJFR19BUkcwICAgIFJFR19SREkKKyNkZWZpbmUgUkVHX0FSRzEgICAgUkVHX1JTSQor
I2RlZmluZSBSRUdfQVJHMiAgICBSRUdfUkRYCisjZWxpZiBDUFUoWDg2KQorI2RlZmluZSBSRUdf
U1lTQ0FMTCBSRUdfRUFYCisjZGVmaW5lIFJFR19BUkcwICAgIFJFR19FQlgKKyNkZWZpbmUgUkVH
X0FSRzEgICAgUkVHX0VDWAorI2RlZmluZSBSRUdfQVJHMiAgICBSRUdfRURYCisjZWxzZQorI2Vy
cm9yICJDUFUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFy
Z3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFN5c2NhbGxSZXN1bHQ7CitjbGFzcyBTeXNjYWxsUG9saWN5OworCitj
bGFzcyBTeXNjYWxsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsKTsKKworcHVi
bGljOgorICAgIHZpcnR1YWwgflN5c2NhbGwoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PFN5c2NhbGw+IGNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKworICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgbWNv
bnRleHRfdCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdmly
dHVhbCB2b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0KikgPSAwOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3km
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIm
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNjYWxsKGludCB0eXBlLCBtY29udGV4
dF90Kik7CisKK3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsKKyAgICBtY29udGV4dF90KiBtX2Nv
bnRleHQ7Cit9OworCitjbGFzcyBTeXNjYWxsUmVzdWx0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTeXNjYWxsUmVzdWx0KTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2NhbGxSZXN1
bHQoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IGNyZWF0ZUZy
b21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGludCBmZCk7CisKKyAgICBpbnQg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGVuY29k
ZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQ9LTEpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIFN5c2NhbGxSZXN1bHQoaW50IHR5cGUpOworCitwcml2YXRlOgorICAgIGlu
dCBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTAyNTA4Yzc5
YTkyMTY2MGMwNzZmMGU0OWI1NTVmM2U1YzU4NzE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0wLDAgKzEsODggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXNj
YWxsUG9saWN5LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8
bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFN5c2NhbGxQb2xpY3k6Omhh
c1Blcm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Npb24gcGVybWlzc2lv
bikgY29uc3QKK3sKKyAgICAvLyBUaGUgcm9vdCBkaXJlY3RvcnkgcG9saWN5IG5lZWRzIHRvIGJl
IHNldCBiZWNhdXNlIGl0IGlzIHRoZQorICAgIC8vIHVsdGltYXRlIGZhbGxiYWNrIHdoZW4gcmV3
aW5kaW5nIGRpcmVjdG9yaWVzLgorICAgIEFTU0VSVChtX2RpcmVjdG9yeVBvbGljeS5jb250YWlu
cygiLyIpKTsKKworICAgIGlmIChwZXJtaXNzaW9uID09IE5vdEFsbG93ZWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNoYXIqIGJhc2VFbnRyeSA9IHN0cmR1cChwYXRoKTsKKyAgICBj
aGFyKiBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShiYXNlRW50cnkpOwor
CisgICAgaWYgKGNhbm9uaWNhbFBhdGgpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7
CisgICAgICAgIGlmIChzdGF0KGNhbm9uaWNhbFBhdGgsICZwYXRoU3RhdCkgPT0gLTEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gSWYgcGF0aCBpcyBub3QgYSBkaXJl
Y3RvcnksIHdlIGZvcmNlIHRoZSByZXdpbmQuCisgICAgICAgIGlmICghU19JU0RJUihwYXRoU3Rh
dC5zdF9tb2RlKSkgeworICAgICAgICAgICAgZnJlZShjYW5vbmljYWxQYXRoKTsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbFBhdGggPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKCFj
YW5vbmljYWxQYXRoKSB7CisgICAgICAgIGNoYXIqIGN1cnJlbnRCYXNlRGlyZWN0b3J5ID0gZGly
bmFtZShiYXNlRW50cnkpOworICAgICAgICBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2Zp
bGVfbmFtZShjdXJyZW50QmFzZURpcmVjdG9yeSk7CisgICAgfQorCisgICAgUGVybWlzc2lvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgcG9saWN5ID0gbV9kaXJlY3RvcnlQb2xpY3kuZmluZChTdHJpbmco
Y2Fub25pY2FsUGF0aCkpOworICAgIHdoaWxlIChwb2xpY3kgPT0gbV9kaXJlY3RvcnlQb2xpY3ku
ZW5kKCkpIHsKKyAgICAgICAgY2hhciogY3VycmVudEJhc2VEaXJlY3RvcnkgPSBkaXJuYW1lKGNh
bm9uaWNhbFBhdGgpOworICAgICAgICBwb2xpY3kgPSBtX2RpcmVjdG9yeVBvbGljeS5maW5kKFN0
cmluZyhjdXJyZW50QmFzZURpcmVjdG9yeSkpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAg
ICBpZiAoKHBlcm1pc3Npb24gJiBwb2xpY3ktPnZhbHVlKSAhPSBwZXJtaXNzaW9uKQorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlNlY2NvbXBCcm9rZXI6IEFjY2VzcyBkZW5pZWQgdG8gJXNcbiIs
IHBhdGgpOworI2VuZGlmCisKKyAgICBmcmVlKGJhc2VFbnRyeSk7CisgICAgZnJlZShjYW5vbmlj
YWxQYXRoKTsKKworICAgIHJldHVybiAocGVybWlzc2lvbiAmIHBvbGljeS0+dmFsdWUpID09IHBl
cm1pc3Npb247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TeXNjYWxsUG9saWN5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2FsbFBv
bGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM2NjBiYTJjNWM5MGU3MGRlYjZjNTA4ODUyNDU3MWU3NTQ2MmQx
ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2Fs
bFBvbGljeS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U3lzY2FsbFBvbGljeV9oCisjZGVmaW5lIFN5c2NhbGxQb2xpY3lfaAorCisjaWYgRU5BQkxFKFNF
Q0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3lzY2FsbFBvbGljeSB7CitwdWJsaWM6CisgICAg
ZW51bSBQZXJtaXNzaW9uIHsKKyAgICAgICAgTm90QWxsb3dlZCAgID0gMCwKKyAgICAgICAgUmVh
ZCAgICAgICAgID0gMSwKKyAgICAgICAgV3JpdGUgICAgICAgID0gMSA8PCAxLAorICAgICAgICBS
ZWFkQW5kV3JpdGUgPSBSZWFkIHwgV3JpdGUKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgaW50PiBQZXJtaXNzaW9uTWFwOworCisgICAgdm9pZCBzZXREaXJlY3RvcnlQb2xp
Y3koY29uc3QgUGVybWlzc2lvbk1hcCYgcG9saWN5KSB7IG1fZGlyZWN0b3J5UG9saWN5ID0gcG9s
aWN5OyB9CisgICAgYm9vbCBoYXNQZXJtaXNzaW9uRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoLCBQ
ZXJtaXNzaW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQZXJtaXNzaW9uTWFwIG1fZGlyZWN0
b3J5UG9saWN5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU3lzY2FsbFBvbGljeV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTIyM2Q1YjZlY2YwYjE0YjNjYzE1YmE0M2I2ZTI5OWFmZGQwNjAwYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJz
RWZsLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnNFZmwuaCIKKworI2lmIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxFZnJlZXQuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1N5c2NhbGxQb2xpY3kuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJz
RWZsOjpTZWNjb21wRmlsdGVyc0VmbCgpCisgICAgOiBTZWNjb21wRmlsdGVycyhBbGxvdykKK3sK
K30KKwordm9pZCBTZWNjb21wRmlsdGVyc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAg
ICBhZGRSdWxlKCJvcGVuIiwgVHJhcCk7CisKKyAgICBBU1NFUlQoZWZyZWV0X2luaXQoKSk7CisK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcm9vdERpciwgKEFTQ0lJTGl0ZXJhbCgi
LyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV0Y0RpciwgKEFTQ0lJTGl0
ZXJhbCgiL2V0YyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGxpYkRpciwg
KEFTQ0lJTGl0ZXJhbCgiL2xpYiIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHByb2NEaXIsIChBU0NJSUxpdGVyYWwoIi9wcm9jIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgc3lzRGlyLCAoQVNDSUlMaXRlcmFsKCIvc3lzIikpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgdXNyRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyIikpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZGV2RGlyLCAoQVNDSUlMaXRlcmFsKCIvZGV2
IikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdG1wRGlyLCAoQVNDSUlMaXRl
cmFsKCIvdG1wIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcnVuU2htRGly
LCAoQVNDSUlMaXRlcmFsKCIvcnVuL3NobSIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIGVmbERhdGFEaXIsIChTdHJpbmc6OmZyb21VVEY4KGVmcmVldF9kYXRhX2hvbWVfZ2V0
KCkpICsgIi9XZWJLaXRFZmwiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGVm
bENhY2hlRGlyLCAoU3RyaW5nOjpmcm9tVVRGOChlZnJlZXRfY2FjaGVfaG9tZV9nZXQoKSkgKyAi
L1dlYktpdEVmbCIpKTsKKworICAgIFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb25NYXAgZGlyZWN0
b3J5UG9saWN5OworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQocm9vdERpciwgU3lzY2FsbFBvbGlj
eTo6Tm90QWxsb3dlZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChldGNEaXIsIFN5c2NhbGxQ
b2xpY3k6OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQobGliRGlyLCBTeXNjYWxsUG9s
aWN5OjpSZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHByb2NEaXIsIFN5c2NhbGxQb2xp
Y3k6OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQoc3lzRGlyLCBTeXNjYWxsUG9saWN5
OjpSZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHVzckRpciwgU3lzY2FsbFBvbGljeTo6
UmVhZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChkZXZEaXIsIFN5c2NhbGxQb2xpY3k6OlJl
YWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0bXBEaXIsIFN5c2NhbGxQb2xp
Y3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChydW5TaG1EaXIsIFN5
c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChlZmxE
YXRhRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgIGRpcmVjdG9yeVBvbGlj
eS5zZXQoZWZsQ2FjaGVEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgLy8gRGV2ZWxvcGVycyB1c2luZyBidWlsZC13ZWJraXQgLS1lZmwgZXhw
ZWN0IHNvbWUgbGlicmFyaWVzIHRvIGJlIGxvYWRlZAorICAgIC8vIGZyb20gamhidWlsZCByb290
IGZvbGRlciB3aGljaCBpcyB1c3VhbGx5IGluc2lkZSBXZWJLaXRCdWlsZC4gV2UKKyAgICAvLyBh
cmUgdXNpbmcgdGhlIHByb2plY3Qgcm9vdCBoZXJlIHRvIGJlIG5pY2UgaWYgdGhlIGRldmVsb3Bl
ciBkZWNpZGVzCisgICAgLy8gdG8gdXNlIFdFQktJVE9VVFBVVERJUi4KKyAgICBjaGFyKiBwYXRo
ID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShQUk9KRUNUX1JPT1RfRElSKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgcHJvamVjdFJvb3REaXIsIChTdHJpbmc6OmZyb21VVEY4KHBh
dGgpKSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChwcm9qZWN0Um9vdERpciwgU3lzY2FsbFBv
bGljeTo6UmVhZEFuZFdyaXRlKTsKKyAgICBmcmVlKHBhdGgpOworI2VuZGlmCisKKyAgICBTeXNj
YWxsUG9saWN5IHBvbGljeTsKKyAgICBwb2xpY3kuc2V0RGlyZWN0b3J5UG9saWN5KGRpcmVjdG9y
eVBvbGljeSk7CisKKyAgICBlZnJlZXRfc2h1dGRvd24oKTsKKworICAgIFNlY2NvbXBCcm9rZXI6
OnN0YXJ0V2l0aFBvbGljeShwb2xpY3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODQ2OTdkZWFl
NzIyNzFmMzlhZjc3YzVlY2RlYjhkMTlhY2YxYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzRWZsX2gKKyNk
ZWZpbmUgU2VjY29tcEZpbHRlcnNFZmxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzRWZsIDogcHVibGljIFNlY2NvbXBGaWx0ZXJzIHsK
K3B1YmxpYzoKKyAgICBTZWNjb21wRmlsdGVyc0VmbCgpOworCitwcml2YXRlOgorICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2Nv
bXBGaWx0ZXJzRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZs
L1dlYlByb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dl
YlByb2Nlc3NNYWluRWZsLmNwcAppbmRleCA2MjJkZTUxYjBjNzExMTBjZWFjOTI2Y2UyMzE3Mzc4
ZDg2ZDQxNDU3Li4xY2MzMDljYjVhMWNmNmJjNjJkMTFkOTAzNmEyYTdlYjY4ZmE2Y2U2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwu
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIExJQlNPVVBfVVNFX1VOU1RBQkxFX1JFUVVF
U1RfQVBJCiAKICNpbmNsdWRlICJQcm94eVJlc29sdmVyU291cC5oIgorI2luY2x1ZGUgIlNlY2Nv
bXBGaWx0ZXJzRWZsLmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSA8RWNvcmUuaD4K
ICNpbmNsdWRlIDxFZnJlZXQuaD4KQEAgLTYwLDYgKzYxLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluRWZsKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCiB7CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICB7CisgICAgICAgIFNlY2Nv
bXBGaWx0ZXJzRWZsIHNlY2NvbXBGaWx0ZXJzOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0
aWFsaXplKCk7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBXZWJQcm9jZXNzIHNob3VsZCBiZSBs
YXVuY2hlZCB3aXRoIGFuIG9wdGlvbi4KICAgICBpZiAoYXJnYyAhPSAyKQogICAgICAgICByZXR1
cm4gMTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAxODRlYThkYmMyMjU4ZDFhMmQ5YmIxZGJjZGYyNDY0ZjIwNzc0YzIxLi5hMTU2MDhiM2ZkMGFk
NmRhOTUxZmU2ZjRhNzUwMzA3NGE5M2EyODE1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTMtMDEtMDcgIFRoaWFn
byBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAg
W1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21w
IGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg5ODc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHVuaXQgdGVzdHMgdG8gdmVyaWZ5IGlmIHRoZSBoYW5kbGluZyBvZiB0aGUgb3BlbigpIHN5
c2NhbGwgaXMKKyAgICAgICAgYmVpbmcgZG9uZSByaWdodC4gV2UgY2hlY2sgaWYgdGhlIFJlYWQv
V3JpdGUvUmVhZEFuZFdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgIGFyZSByZXNwZWN0ZWQsIGlm
IHRoZSBjYW5vbmljYWwgcGF0aCBpcyBiZWluZyByZXNvbHZlZCBhbmQgaWYKKyAgICAgICAgdGhl
IHBlcm1pc3Npb25zIGFyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRvcG1vc3QgcGFyZW50IGRpcmVj
dG9yeSB3aXRoIGEKKyAgICAgICAgcG9saWN5IHNldCB3aGVuIHRoZSBkaXJlY3RvcnkgYmVpbmcg
b3BlbmVkIGhhcyBubyBwb2xpY3kuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21w
RmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSSk6CisgICAgICAgIChT
ZWNjb21wRW52aXJvbm1lbnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmly
b25tZW50OjpTZXRVcCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1l
bnQ6OlRlYXJEb3duKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDEzLTAx
LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBzdm46
ZXhlY3V0YWJsZSB0byBhIGJ1bmNoIG9mIHNjcmlwdHMgaW4gQnVpbGRTbGF2ZVN1cHBvcnQuCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzY2E3MTFjYzBkMTBmN2NlNGE3
ODMzNWM4ZWU0Y2UxMzQwYWFjYzgwLi5iNmFmMmZlYzAzN2EzMTk1Mzk1MTUxMTZjMjhlN2ZkMmFh
YWNlOGU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTg1LDYgKzg1
LDEyIEBAIHNldCh0ZXN0X3dlYmtpdDJfYXBpX0JJTkFSSUVTCiAgICAgV2lsbFNlbmRTdWJtaXRF
dmVudAogKQogCitpZiAoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBsaXN0KEFQUEVORCB0
ZXN0X3dlYmtpdDJfYXBpX0JJTkFSSUVTCisgICAgICAgIFNlY2NvbXBGaWx0ZXJzCisgICAgKQor
ZW5kaWYgKCkKKwogc2V0KHRlc3Rfd2Via2l0Ml9hcGlfZmFpbF9CSU5BUklFUwogICAgIENhbkhh
bmRsZVJlcXVlc3QKICAgICBEb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ3Jhc2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVhM2VmZTM4ZTFmZGQ5MGMyNjU0ZmJmNWQ3MjVlOTQzOTEzOTcwNjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29tcEZp
bHRlcnMuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBCcm9rZXIuaD4KKyNpbmNs
dWRlIDxXZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TeXNjYWxs
UG9saWN5Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCByb290RGlyLCAoQVNDSUlM
aXRlcmFsKCIvIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBob21lRGlyLCAoU3Ry
aW5nKGdldGVudigiSE9NRSIpKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzckRp
ciwgKEFTQ0lJTGl0ZXJhbCgiL3VzciIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
dXNyU2JpbkRpciwgKEFTQ0lJTGl0ZXJhbCgiL3Vzci9zYmluIikpKTsKK0RFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZCwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0UmVhZCIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVz
dERpcldyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RX
cml0ZSIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpclJlYWRBbmRXcml0
ZSwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdy
aXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyTm90QWxsb3dlZCwg
KEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZCIp
KSk7CisKK3N0YXRpYyBjb25zdCBtb2RlX3QgZGVmYXVsdE1vZGUgPSBTX0lSVVNSIHwgU19JV1VT
UiB8IFNfSVhVU1I7CisKK2NsYXNzIFNlY2NvbXBFbnZpcm9ubWVudCA6IHB1YmxpYyB0ZXN0aW5n
OjpFbnZpcm9ubWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVF9UUlVFKCFob21lRGlyLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbWtk
aXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMiLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1r
ZGlyKHRlc3REaXJSZWFkLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtk
aXIodGVzdERpcldyaXRlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtk
aXIodGVzdERpclJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAg
ICAgIG1rZGlyKHRlc3REaXJOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsK
KworICAgICAgICAvLyBDcmVhdGUgYSBmaWxlIGZvciB0aGUgUmVhZCBvbmx5IGFuZCBOb3RBbGxv
d2VkIGRpcmVjdG9yeSBiZWZvcmUKKyAgICAgICAgLy8gbG9hZGluZyB0aGUgZmlsdGVycy4KKyAg
ICAgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOworICAgICAgICBp
bnQgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVs
dE1vZGUpOworICAgICAgICBBU1NFUlRfTkUoY2xvc2UoZmQpLCAtMSk7CisgICAgICAgIGZpbGUg
PSB0ZXN0RGlyTm90QWxsb3dlZCArICIvdGVzdEZpbGUiOworICAgICAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgICAg
IEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKworICAgICAgICBTeXNjYWxsUG9saWN5OjpQZXJt
aXNzaW9uTWFwIGRpcmVjdG9yeVBvbGljeTsKKyAgICAgICAgZGlyZWN0b3J5UG9saWN5LnNldChy
b290RGlyLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKKyAgICAgICAgZGlyZWN0b3J5UG9s
aWN5LnNldCh1c3JEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAgICAgICBkaXJlY3RvcnlQ
b2xpY3kuc2V0KHVzclNiaW5EaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworICAgICAg
ICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJSZWFkLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsK
KyAgICAgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0ZXN0RGlyV3JpdGUsIFN5c2NhbGxQb2xpY3k6
OldyaXRlKTsKKyAgICAgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0ZXN0RGlyUmVhZEFuZFdyaXRl
LCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworCisgICAgICAgIFN5c2NhbGxQb2xpY3kg
cG9saWN5OworICAgICAgICBwb2xpY3kuc2V0RGlyZWN0b3J5UG9saWN5KGRpcmVjdG9yeVBvbGlj
eSk7CisKKyAgICAgICAgU2VjY29tcEJyb2tlcjo6c3RhcnRXaXRoUG9saWN5KHBvbGljeSk7CisK
KyAgICAgICAgU2VjY29tcEZpbHRlcnMgc2VjY29tcEZpbHRlcnMoU2VjY29tcEZpbHRlcnM6OkFs
bG93KTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgib3BlbiIsIFNlY2NvbXBGaWx0
ZXJzOjpUcmFwKTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICAvLyBUaGlzIHdp
bGwgaGF2ZSB0byBtb3ZlIHRvIGEgc2VwYXJhdGVkIHByb2Nlc3MgY3JlYXRlZCBiZWZvcmUgbG9h
ZGluZworICAgICAgICAvLyB0aGUgZmlsdGVycyB3aGVuIHdlIHB1dCB0aGUgcm1kaXIvdW5saW5r
IHBvbGljaWVzIGluIHBsYWNlLgorICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZp
bHRlcnMvdGVzdE5vdEFsbG93ZWQvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUiKTsKKyAgICAgICAg
dW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZS90ZXN0RmlsZSIpOwor
ICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQvdGVzdEZp
bGUiKTsKKyAgICAgICAgcm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFs
bG93ZWQiKTsKKyAgICAgICAgcm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJl
YWRBbmRXcml0ZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90
ZXN0V3JpdGUiKTsKKyAgICAgICAgcm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVz
dFJlYWQiKTsKKyAgICAgICAgcm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMiKTsKKyAg
ICB9Cit9OworCis6OnRlc3Rpbmc6OkVudmlyb25tZW50KiBjb25zdCBlbnYgPSA6OnRlc3Rpbmc6
OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChuZXcgU2VjY29tcEVudmlyb25tZW50KTsKKworVEVT
VChXZWJLaXQyLCBvcGVuKQoreworICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisgICAgU3Ry
aW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOworICAgIGludCBmZCA9IG9wZW4o
ZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYm
IGVycm5vID09IEVBQ0NFUykgPDwgIldyaXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0
b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiV3JpdGUgaXMg
bm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fUkRPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIkNyZWF0ZSBpcyBub3QgYWxs
b3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19SRE9OTFkpOworICAgIEFTU0VSVF9ORShmZCwgLTEpIDw8ICJSZWFkIG9ubHkgYW5k
IGNyZWF0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworICAgIGNsb3Nl
KGZkKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvVGhpc0ZpbGVEb2VzTm90RXhpc3Qi
OworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpIDw8ICJTaG91bGQgcmV0dXJuIEVO
T0VOVCB3aGVuIHRyeWluZyAiIFwKKyAgICAgICAgInRvIG9wZW4gYSBmaWxlIHRoYXQgZG9lcyBu
b3QgZXhpdCBhbmQgdGhlIHBlcm1pc3Npb25zIGFyZSBPSy4iOworCisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYm
IGVycm5vID09IEVBQ0NFUykgPDwgIlNob3VsZCByZXR1cm4gRUFDQ0VTIHdoZW4gdHJ5aW5nICIg
XAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGl0IGFuZCB0aGUgcGVy
bWlzc2lvbnMgYXJlIG5vdCBPSy4iOworCisgICAgLy8gV3JpdGUgb25seSBkaXJlY3RvcnkuCisg
ICAgZmlsZSA9IHRlc3REaXJXcml0ZSArICIvdGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxl
LnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEFT
U0VSVF9ORShmZCwgLTEpIDw8ICJDcmVhdGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJl
Y3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0
YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NF
UykgPDwgIlJlYWQgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJSZWFkIGlzIG5vdCBhbGxvd2VkIGF0IHRo
aXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dS
T05MWSk7CisgICAgQVNTRVJUX05FKGZkLCAtMSkgPDwgIldyaXRlIHNob3VsZCBiZSBhbGxvd2Vk
IGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gUmVhZCBhbiB3
cml0ZSBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RG
aWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JF
QVQsIGRlZmF1bHRNb2RlKTsKKyAgICBBU1NFUlRfTkUoZmQsIC0xKSA8PCAiQ3JlYXRlIHNob3Vs
ZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xvc2UoZmQpOworCisgICAg
ZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfTkUoZmQs
IC0xKSA8PCAiUmVhZCBhbmQgd3JpdGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3Rv
cnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIlJlYWQgc2hvdWxkIGJlIGFs
bG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9w
ZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkg
PDwgIldyaXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xv
c2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3RE
aXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUo
ZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlzIG5vdCBhbGxvd2VkIGF0
IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBP
X1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwg
IlJlYWQgYW5kIHdyaXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAg
ICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiUmVhZCBpcyBub3QgYWxsb3dlZCBh
dCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwg
T19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykg
PDwgIldyaXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKworICAgIC8v
IFRoZSAvdXNyIGRpcmVjdG9yeSBoZXJlIGhhcyByZWFkIHBlcm1pc3Npb25zLCBzbyBpdCdzIHN1
YmRpcmVjdG9yaWVzCisgICAgLy8gc2hvdWxkIHJlc29sdmUgdG8gdGhlIC91c3IgcGVybWlzc2lv
bnMgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICAgIGZpbGUgPSB1c3JEaXIgKyAiL2Jp
bi9iYXNlbmFtZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkp
OworICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJTdWJkaXJlY3RvcmllcyBzaG91bGQgd2l0aCBu
byBwb2xpY3Qgc2hvdWxkICIgXAorICAgICAgICAiaW5oZXJpdCB0aGUgcGFyZW50J3MgcG9saWNp
ZXMuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmaWxlID0gdXNyU2JpbkRpciArICIvYWRkdXNl
ciI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVY
UEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlRoaXMgZGlyZWN0b3J5
IHNob3VsZCBoYXZlICIgXAorICAgICAgICAiaXRzIG93biBwb2xpY3kgaW5zdGVhZCBvZiB0aGUg
cGFyZW50J3MuIjsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgc3lz
dGVtIGlzIGJsb2NrZWQgYW5kIHNob3VsZAorICAgIC8vIG5ldmVyIHJldHVybiBhbnl0aGluZyBl
bHNlIG90aGVyIHRoYW4gRUFDQ0VTIHJlZ2FyZGxlc3MgaWYgdGhlCisgICAgLy8gZmlsZSBleGlz
dHMgb3Igbm90LiBUaGUgcmVhc29uIGlzIGJlY2F1c2UgaXQgd2lsbCBmYWxsYmFjayB0byB0aGUK
KyAgICAvLyBwb2xpY3kgb2YgdGhlIFJvb3QgZGlyZWN0b3J5LCBtYXJrZWQgYXMgTm90QWxsb3dl
ZC4KKyAgICBmaWxlID0gaG9tZURpciArICIvdGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxl
LnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKCIv
ZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJu
byA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4u
Ly4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRP
TkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisg
ICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uIiArIHRlc3REaXJSZWFk
QW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJu
byA9PSBFQUNDRVMpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181545</attachid>
            <date>2013-01-07 12:38:06 -0800</date>
            <delta_ts>2013-01-08 00:53:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130107223510.patch</filename>
            <type>text/plain</type>
            <size>73390</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4OTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1MTdhZDY5N2JhYmM3ZTBiNGZlMzhh
YWVjNTU4MWI0YzJlYjZjOTUuLjVkZjJkOWM0YjlmMWIxOTExNDQwZDBlMTIyMjQzMjcyMThkNzYx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDcgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IGhhbmRsZSBT
SUdTWVMgd2hlbiBTZWNjb21wIEZpbHRlcnMgaXMgZW5hYmxlZCBzaW5jZSB0aGlzCisgICAgICAg
IHNpZ25hbCBpcyBuZWVkZWQgdG8gcHJveHkgdGhlIHN5c2NhbGxzIHRvIHRoZSBicm9rZXIgcHJv
Y2Vzcy4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKwogMjAxMy0wMS0wNSAgSm9u
YXRoYW4gTGl1ICA8bmV0MTQ3QGdtYWlsLmNvbT4KIAogICAgICAgICBPbmx5IGVuYWJsZSBNaW5H
Vy13NjQgcG93KCkgd29ya2Fyb3VuZCBpZiBuZWVkZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZTRmMGUzNDk1
ODcyYWE4N2M2OTVlOGZlNGI2YzNhNWEzZTgxNGMyLi41YzE0YTI1MDY3NzUyZTk1ODgxMTczOTYw
Mjk2MmI0MGQwNWIyMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEzLTAxLTA3
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgorCisg
ICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNpbmcg
c2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjZSB0aGUgZm91bmRhdGlvbnMgb2YgdGhlIFNlY2NvbXBGaWx0ZXItYmFz
ZWQgc2FuZGJveC4gVGhlCisgICAgICAgIGhhcmRlbmluZyBvZiB0aGUgV2ViUHJvY2VzcyAoYW5k
IHBvdGVudGlhbGx5IFBsdWdpblByb2Nlc3MsIGV0YykKKyAgICAgICAgd29ya3MgYnkgYSBjb21i
aW5hdGlvbiBvZiB0aGUgdHdvIHRoaW5nczoKKworICAgICAgICAtIEJsb2NraW5nIHN5c2NhbGxz
IHRoYXQgYXJlIG5vdCB1c2VkLCByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNrCisgICAg
ICAgIHN1cmZhY2UuCisgICAgICAgIC0gVHJhcHBpbmcgc2Vuc2l0aXZlIHN5c2NhbGxzIGFuZCBk
ZWxlZ2F0aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlc2UKKyAgICAgICAgc3lzY2FsbHMgdG8gYSBz
ZXBhcmF0ZWQgdHJ1c3RlZCBwcm9jZXNzIHN1YmplY3QgdG8gYSBzZXQgb2YgcG9saWNpZXMuCisK
KyAgICAgICAgVGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gdHJhcHMgdGhlIG9wZW4oKSBzeXNj
YWxsIGZvciBXZWJLaXQgRUZMJ3MKKyAgICAgICAgV2ViUHJvY2VzcywgYnV0IGl0IGNvdWxkIGJl
IGVhc2lseSB1c2VkIGJ5IGFueSBMaW51eCBwb3J0LCBzaW5jZSB0aGUKKyAgICAgICAgY29kZSBp
cyBzdXBwb3NlIHRvIGJlIExpbnV4LWNvbXBsaWFudC4gVGhlIGxpc3Qgb2Ygc3lzY2FsbHMgaGFu
ZGxlZAorICAgICAgICBieSB0aGUgYnJva2VyIHByb2Nlc3Mgc2hvdWxkIGRlZmluaXRlbHkgYXMg
d2UgbWF0dXJlIHRoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGUgYnJv
a2VyIHByb2Nlc3Mgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIG9u
IHRoZQorICAgICAgICBzYW5kYm94ZWQgcHJvY2VzcyBtYWluLCBiZWNhdXNlIGl0IG9ubHkgZG9l
cyBhIGZvcmsoKSwgd2hpY2ggaXMgY2hlYXAKKyAgICAgICAgb24gTGludXguIFRoYXQgYWxzbyBh
aW1zIHRvIG1pbmltaXplIHRoZSByZXNpZGVudCBtZW1vcnkgZm9vdHByaW50IG9mCisgICAgICAg
IHRoZSBicm9rZXIgcHJvY2Vzcy4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGJyb2tlciBzdXBw
b3J0cyBvbmx5IGRpcmVjdG9yeSBwb2xpY2llcywgYnV0IGZpbGUgcG9saWNpZXMKKyAgICAgICAg
Y291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZSB0byBtYWtlIG5hcnJvd2VyIHRoZSBm
aWxlc3lzdGVtCisgICAgICAgIGV4cG9zZWQgdG8gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAg
T3BlbmluZyBvZiBmaWxlcyBmb3IgdXBsb2FkIGFuZCBzYXZpbmcgZG93bmxvYWRzIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0LAorICAgICAgICBzaW5jZSBpdCBzaG91bGQgYmUgaGFuZGxlZCB0byB0aGUg
VUlQcm9jZXNzIGluIGEgc2ltaWxhciBmYXNoaW9uIGFzCisgICAgICAgIHRoZSBNYWMgcG9ydCBk
b2VzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogU2hhcmVkL2xp
bnV4L09wZW5TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpPcGVu
U3lzY2FsbDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmV4ZWN1
dGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6T3BlblN5c2NhbGw6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
UmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
UmVzdWx0Ojp+T3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2Fs
bFJlc3VsdDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6OmRl
Y29kZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmg6IEFkZGVkLgorICAg
ICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoT3BlblN5c2NhbGwp
OgorICAgICAgICAoT3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lz
Y2FsbFJlc3VsdDo6ZmQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZXJy
b3JOdW1iZXIpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wQnJva2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VjY29tcEJyb2tlckNsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6cmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpzeXNTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdl
YktpdDo6cmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNs
aWVudDo6U2VjY29tcEJyb2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXJDbGllbnQ6On5TZWNjb21wQnJva2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2Vy
Q2xpZW50OjpoYW5kbGVJZk9wZW5pbmdDUFVDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2Nv
bXBCcm9rZXI6OnN0YXJ0V2l0aFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpydW5Mb29w
KToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wQnJva2VyKToKKyAgICAgICAgKFdlYktpdDo6
U2VjY29tcEJyb2tlcjo6c2V0U3lzY2FsbFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2Nv
bXBCcm9rZXI6OlNlY2NvbXBCcm9rZXIpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
U2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEZpbHRlcnM6On5TZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0
ZXJzOjphZGRSdWxlKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJl
ZC9saW51eC9TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlN5
c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6U3lz
Y2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVy
KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6U3lzY2FsbFJlc3VsdCk6CisgICAg
ICAgICogU2hhcmVkL2xpbnV4L1N5c2NhbGwuaDogQWRkZWQuCisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6
U3lzY2FsbDo6flN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjp0eXBlKToKKyAg
ICAgICAgKFdlYktpdDo6U3lzY2FsbDo6Y29udGV4dCk6CisgICAgICAgIChTeXNjYWxsUmVzdWx0
KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6flN5c2NhbGxSZXN1bHQpOgorICAg
ICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp0eXBlKToKKyAgICAgICAgKiBTaGFyZWQvbGlu
dXgvU3lzY2FsbFBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6U3lzY2FsbFBvbGljeTo6aGFzUGVybWlzc2lvbkZvclBhdGgpOgorICAgICAgICAq
IFNoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFN5c2NhbGxQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5
OjpzZXREaXJlY3RvcnlQb2xpY3kpOgorICAgICAgICAqIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBG
aWx0ZXJzRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyc0VmbDo6U2VjY29tcEZpbHRlcnNFZmwpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChTZWNjb21wRmlsdGVyc0VmbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwv
V2ViUHJvY2Vzc01haW5FZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkVm
bCk6CisKIDIwMTMtMDEtMDQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW1vdmUgV2ViUHJvY2Vzc0luaXRpYWxpemF0aW9uIGFuZCBOZXR3b3JrUHJvY2Vzc0luaXRp
YWxpemF0aW9uIGJ5IHB1dHRpbmcgdGhlIHJlc3Qgb2YgaW5pdGlhbGl6YXRpb24gaW4gQ2hpbGRQ
cm9jZXNzIGRlcml2ZWQgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXNzZXJ0
aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcAppbmRleCBlZDQ4ZDgxM2Rm
YmE3NTk2OTdhNjk4ZmE2N2I1MDk1YWI3NTZmNGRjLi5jOTI5ZTNhN2NjOGIwZDJlM2IyYTM5YWVm
NTA4NGEyZjdlYjY0Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcApAQCAtMzQ5LDcgKzM0OSwxMSBA
QCBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnNGb3JGYXRhbEVycm9ycyh2b2lkICgq
aGFuZGxlcikoaW50KSkKICAgICBzaWduYWwoU0lHRlBFLCBoYW5kbGVyKTsgLy8gICAgODogZmxv
YXRpbmcgcG9pbnQgZXhjZXB0aW9uLgogICAgIHNpZ25hbChTSUdCVVMsIGhhbmRsZXIpOyAvLyAg
IDEwOiBidXMgZXJyb3IuCiAgICAgc2lnbmFsKFNJR1NFR1YsIGhhbmRsZXIpOyAvLyAgMTE6IHNl
Z21lbnRhdGlvbiB2aW9sYXRpb24uCisjaWYgIUVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAg
Ly8gU2VjY29tcEJyb2tlciBpbnN0YWxscyBhIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdTWVMgdGhh
dAorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUuCiAgICAgc2lnbmFsKFNJR1NZUywg
aGFuZGxlcik7IC8vICAgMTI6IGJhZCBhcmd1bWVudCB0byBzeXN0ZW0gY2FsbC4KKyNlbmRpZgog
ICAgIHNpZ25hbChTSUdQSVBFLCBoYW5kbGVyKTsgLy8gIDEzOiB3cml0ZSBvbiBhIHBpcGUgd2l0
aCBubyByZWFkZXIuCiAgICAgc2lnbmFsKFNJR1hDUFUsIGhhbmRsZXIpOyAvLyAgMjQ6IGV4Y2Vl
ZGVkIENQVSB0aW1lIGxpbWl0LgogICAgIHNpZ25hbChTSUdYRlNaLCBoYW5kbGVyKTsgLy8gIDI1
OiBleGNlZWRlZCBmaWxlIHNpemUgbGltaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGM1N2MyOGVhZjJmZWMyNmIxZWE3NDE5OTYwZDhmOTM2NGJiNGU5MjEuLjEzZmUyZTVhZjVlNDA4
YTA1YmRiYWFhOTEwYzUwMTNmNzMwNjVmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0yMyw2ICsyMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQv
ZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQvZWZsL1dlYkV2ZW50
RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKKyAgICBTaGFy
ZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5
c2NhbGxQb2xpY3kuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5j
cHAKIAogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcApAQCAtMTQw
LDYgKzE0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9lZmwvV2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9l
ZmwvV2ViUGFnZUVmbC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZs
LmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAogCiAgICAgV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQwLDYgKzI0NiwxNyBAQCBsaXN0
KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7U1FMSVRFX0xJQlJBUklFU30KICkK
IAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9M
SUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30KKyAgICApCisgICAgbGlz
dChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7TElCU0VDQ09N
UF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgYWRkX2RlZmluaXRpb25zKC1EUFJPSkVDVF9S
T09UX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKK2VuZGlmICgpCisKIGlmIChFTkFCTEVf
RUNPUkVfWCkKICAgICBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICAgICAk
e0VDT1JFX1hfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L09wZW5TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9PcGVuU3lz
Y2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzMzJmOTllN2I4YmI4YzNiMDk4NDgyY2NlMGEzZTQ5NTAz
ZDExMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9PcGVu
U3lzY2FsbC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNF
Q0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAi
U3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK0NPTVBJTEVfQVNTRVJUKE9fUkRPTkxZID09IDAsIE9fUkRPTkxZKTsKK0NP
TVBJTEVfQVNTRVJUKE9fV1JPTkxZID09IDEsIE9fV1JPTkxZKTsKK0NPTVBJTEVfQVNTRVJUKE9f
UkRXUiA9PSAyLCBPX1JEUlcpOworCitPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwobWNvbnRleHRf
dCogY29udGV4dCkKKyAgICA6IFN5c2NhbGwoU0NNUF9TWVMob3BlbiksIGNvbnRleHQpCisgICAg
LCBtX2ZsYWdzKDApCisgICAgLCBtX21vZGUoMCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcGF0aCA9IENTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzBdKSk7CisgICAgbV9mbGFncyA9IGNvbnRleHQtPmdy
ZWdzW1JFR19BUkcxXTsKKyAgICBtX21vZGUgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJHMl07Cit9
CisKK3ZvaWQgT3BlblN5c2NhbGw6OnNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0KiByZXN1
bHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKSAmJiByZXN1bHQtPnR5cGUoKSA9PSB0eXBlKCkp
OworCisgICAgY29uc3QgT3BlblN5c2NhbGxSZXN1bHQqIG9wZW5SZXN1bHQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBPcGVuU3lzY2FsbFJlc3VsdCo+KHJlc3VsdCk7CisKKyAgICBpZiAob3BlblJlc3Vs
dC0+ZmQoKSA+PSAwKQorICAgICAgICBjb250ZXh0KCktPmdyZWdzW1JFR19TWVNDQUxMXSA9IGR1
cChvcGVuUmVzdWx0LT5mZCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQoKS0+Z3JlZ3Nb
UkVHX1NZU0NBTExdID0gLW9wZW5SZXN1bHQtPmVycm9yTnVtYmVyKCk7Cit9CisKK1Bhc3NPd25Q
dHI8U3lzY2FsbFJlc3VsdD4gT3BlblN5c2NhbGw6OmV4ZWN1dGUoY29uc3QgU3lzY2FsbFBvbGlj
eSYgcG9saWN5KQoreworICAgIGlmICghc3RybmNtcCgiL3Byb2Mvc2VsZi8iLCBtX3BhdGguZGF0
YSgpLCAxMSkpIHsKKyAgICAgICAgU3RyaW5nIHJlc29sdmVkU2VsZlBhdGggPSBBU0NJSUxpdGVy
YWwoIi9wcm9jLyIpICsgU3RyaW5nOjpudW1iZXIoZ2V0cHBpZCgpKSArICZtX3BhdGguZGF0YSgp
WzEwXTsKKyAgICAgICAgbV9wYXRoID0gcmVzb2x2ZWRTZWxmUGF0aC51dGY4KCkuZGF0YSgpOwor
ICAgIH0KKworICAgIFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24gcGVybWlzc2lvbiA9IFN5c2Nh
bGxQb2xpY3k6Ok5vdEFsbG93ZWQ7CisgICAgaWYgKG1fZmxhZ3MgJiBPX1JEV1IpCisgICAgICAg
IHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uPihwZXJt
aXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKKyAgICBlbHNlIGlmIChtX2Zs
YWdzICYgT19XUk9OTFkpCisgICAgICAgIHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxs
UG9saWN5OjpQZXJtaXNzaW9uPihwZXJtaXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6V3JpdGUpOwor
ICAgIGVsc2UKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6
OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKworICAgIC8v
IENyZWF0ZSBhIGZpbGUgaW1wbGllcyB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBkaXJlY3Rvcnku
CisgICAgaWYgKG1fZmxhZ3MgJiBPX0NSRUFUIHx8IG1fZmxhZ3MgJiBPX0VYQ0wpCisgICAgICAg
IHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uPihwZXJt
aXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6V3JpdGUpOworCisgICAgaWYgKCFwb2xpY3kuaGFzUGVy
bWlzc2lvbkZvclBhdGgobV9wYXRoLmRhdGEoKSwgcGVybWlzc2lvbikpCisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGxSZXN1bHQoLTEsIEVBQ0NFUykpOworCisgICAgLy8g
UGVybWlzc2lvbiBncmFudGVkLCBleGVjdXRlIHRoZSBzeXNjYWxsLiBUaGUgc3lzY2FsbCBtaWdo
dCBzdGlsbAorICAgIC8vIGZhaWwgYmVjYXVzZSBvZiBoYXJkIHBlcm1pc3Npb25zIGVuZm9yY2Vk
IGJ5IHRoZSBmaWxlc3lzdGVtIGFuZAorICAgIC8vIHRoaW5ncyBsaWtlIHRoZSBlbnRyeSBkb2Vz
IG5vdCBleGlzdC4KKyAgICBpbnQgZmQgPSBvcGVuKG1fcGF0aC5kYXRhKCksIG1fZmxhZ3MsIG1f
bW9kZSk7CisgICAgaW50IGVycm9yTnVtYmVyID0gZmQgPT0gLTEgPyBlcnJubyA6IDA7CisKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsUmVzdWx0KGZkLCBlcnJvck51bWJlcikp
OworfQorCit2b2lkIE9wZW5TeXNjYWxsOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIuZW5jb2RlKHR5cGUoKSk7CisgICAgZW5j
b2Rlci5lbmNvZGUobV9wYXRoKTsKKyAgICBlbmNvZGVyLmVuY29kZShtX2ZsYWdzKTsKKyAgICBl
bmNvZGVyLmVuY29kZShtX21vZGUpOworfQorCitib29sIE9wZW5TeXNjYWxsOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyKQoreworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKG1fcGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShtX2ZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRlY29k
ZXItPmRlY29kZShtX21vZGUpOworfQorCitPcGVuU3lzY2FsbFJlc3VsdDo6T3BlblN5c2NhbGxS
ZXN1bHQoaW50IGZkLCBpbnQgZXJyb3JOdW1iZXIpCisgICAgOiBTeXNjYWxsUmVzdWx0KFNDTVBf
U1lTKG9wZW4pKQorICAgICwgbV9mZChmZCkKKyAgICAsIG1fZXJyb3JOdW1iZXIoZXJyb3JOdW1i
ZXIpCit7Cit9CisKK09wZW5TeXNjYWxsUmVzdWx0Ojp+T3BlblN5c2NhbGxSZXN1bHQoKQorewor
ICAgIGlmIChtX2ZkID49IDApCisgICAgICAgIGNsb3NlKG1fZmQpOworfQorCit2b2lkIE9wZW5T
eXNjYWxsUmVzdWx0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIuZW5jb2RlKHR5cGUoKSk7CisKKyAgICBpZiAobV9mZCA+PSAw
KSB7CisgICAgICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgYXR0YWNobWVudChtX2ZkKTsKKyAgICAg
ICAgZW5jb2Rlci5hZGRBdHRhY2htZW50KGF0dGFjaG1lbnQpOworICAgIH0KKworICAgIGVuY29k
ZXIuZW5jb2RlKG1fZXJyb3JOdW1iZXIpOworfQorCitib29sIE9wZW5TeXNjYWxsUmVzdWx0Ojpk
ZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCit7CisgICAg
aWYgKGZkID49IDApCisgICAgICAgIG1fZmQgPSBmZDsKKworICAgIHJldHVybiBkZWNvZGVyLT5k
ZWNvZGUobV9lcnJvck51bWJlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L09wZW5TeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNjM2Q1ZThmZDBkZTQ4NWNiYjVmMTFjMGYyYmY0
NWFiZTBkOTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9PcGVuU3lzY2FsbC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgT3BlblN5c2NhbGxfaAorI2RlZmluZSBPcGVuU3lzY2FsbF9oCisKKyNpZiBFTkFCTEUo
U0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU3lzY2FsbC5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNv
ZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgT3BlblN5c2NhbGwgOiBwdWJsaWMgU3lzY2FsbCB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgT3BlblN5c2NhbGwobWNvbnRleHRfdCopOworCisgICAgLy8gU3lzY2FsbCBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0KGNvbnN0IFN5c2NhbGxSZXN1bHQqKTsK
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U3lzY2FsbFJlc3VsdD4gZXhlY3V0ZShjb25zdCBTeXNj
YWxsUG9saWN5Jik7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOworCitwcml2YXRlOgorICAgIENTdHJpbmcgbV9wYXRoOworICAgIGludCBtX2Zs
YWdzOworICAgIG1vZGVfdCBtX21vZGU7Cit9OworCitjbGFzcyBPcGVuU3lzY2FsbFJlc3VsdCA6
IHB1YmxpYyBTeXNjYWxsUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBPcGVuU3lzY2FsbFJlc3VsdChp
bnQgZmQsIGludCBlcnJvck51bWJlcik7CisgICAgfk9wZW5TeXNjYWxsUmVzdWx0KCk7CisKKyAg
ICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBtX2ZkOyB9CisgICAgaW50IGVycm9yTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9lcnJvck51bWJlcjsgfQorCisgICAgLy8gU3lzY2FsbFJlc3VsdCBp
bXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiwgaW50IGZkKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9mZDsKKyAgICBpbnQg
bV9lcnJvck51bWJlcjsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gT3BlblN5c2NhbGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVmNDYzMTVhZGQzNDIyNmRhOTdjMTQ3OWFlZjJiMDJlNDA2NjliYTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKQEAgLTAs
MCArMSwzMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNj
b21wQnJva2VyLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDxz
eXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBTWVNfU0VDQ09NUAorI2RlZmluZSBT
WVNfU0VDQ09NUCAxCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6
ZSA9IDQwOTY7CitzdGF0aWMgY29uc3QgY2hhciBjcHVDb3VudFBhdGhbXSA9ICIvc3lzL2Rldmlj
ZXMvc3lzdGVtL2NwdS9vbmxpbmUiOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2Vj
Y29tcEJyb2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFNlY2NvbXBCcm9rZXJDbGll
bnQmIHNoYXJlZChpbnQgc29ja2V0PS0xKTsKKyAgICB+U2VjY29tcEJyb2tlckNsaWVudCgpOwor
CisgICAgdm9pZCBkaXNwYXRjaChTeXNjYWxsKikgY29uc3Q7CisgICAgYm9vbCBoYW5kbGVJZk9w
ZW5pbmdDUFVDb3VudChtY29udGV4dF90KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU2VjY29t
cEJyb2tlckNsaWVudChpbnQgc29ja2V0KTsKKworICAgIGludCBtX3NvY2tldDsKKyAgICBpbnQg
bV9uY3B1czsKKworICAgIG11dGFibGUgTXV0ZXggbV9zb2NrZXRMb2NrOworfTsKKworc3RhdGlj
IHNzaXplX3Qgc2VuZE1lc3NhZ2UoaW50IHNvY2tldCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUs
IGludCBmZD0tMSkKK3sKKyAgICBBU1NFUlQoc2l6ZSA8PSBtZXNzYWdlTWF4U2l6ZSk7CisKKyAg
ICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2Yo
bWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBtZW1zZXQoJmlvdiwgMCwg
c2l6ZW9mKGlvdikpOworICAgIGlvdi5pb3ZfYmFzZSA9IGRhdGE7CisgICAgaW92Lmlvdl9sZW4g
PSBzaXplOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKKyAgICBtZXNzYWdlLm1zZ19p
b3ZsZW4gPSAxOworCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOwor
ICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBjb250cm9s
OworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOworICAg
ICAgICBtZW1zZXQobWVzc2FnZS5tc2dfY29udHJvbCwgMCwgbWVzc2FnZS5tc2dfY29udHJvbGxl
bik7CisKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNz
YWdlKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CisgICAgICAgIGNt
c2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01T
R19MRU4oc2l6ZW9mKGZkKSk7CisKKyAgICAgICAgbWVtbW92ZShDTVNHX0RBVEEoY21zZyksICZm
ZCwgc2l6ZW9mKGZkKSk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbmRtc2coc29ja2V0LCAmbWVz
c2FnZSwgMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY2VpdmVNZXNzYWdlKGludCBzb2NrZXQs
IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBpbnQqIGZkID0gMCkKK3sKKyAgICBzdHJ1Y3QgbXNn
aGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOwor
CisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikp
OworICAgIGlvdi5pb3ZfYmFzZSA9IGRhdGE7CisgICAgaW92Lmlvdl9sZW4gPSBzaXplOworCisg
ICAgbWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKKyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwor
CisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOworICAgIG1lc3NhZ2Uu
bXNnX2NvbnRyb2wgPSBjb250cm9sOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXpl
b2YoY29udHJvbCk7CisgICAgbWVtc2V0KG1lc3NhZ2UubXNnX2NvbnRyb2wsIDAsIG1lc3NhZ2Uu
bXNnX2NvbnRyb2xsZW4pOworCisgICAgc3NpemVfdCByZWNlaXZlZEJ5dGVzID0gcmVjdm1zZyhz
b2NrZXQsICZtZXNzYWdlLCAwKTsKKworICAgIGlmIChmZCAmJiByZWNlaXZlZEJ5dGVzID4gMCkg
eworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2Up
OworICAgICAgICBpZiAoY21zZyAmJiBjbXNnLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYg
Y21zZy0+Y21zZ190eXBlID09IFNDTV9SSUdIVFMpCisgICAgICAgICAgICBtZW1jcHkoZmQsIENN
U0dfREFUQShjbXNnKSwgc2l6ZW9mKCpmZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAq
ZmQgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVjZWl2ZWRCeXRlczsKK30KKworc3RhdGlj
IHZvaWQgc3lzU2lnbmFsSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQq
IGRhdGEpCit7CisgICAgaWYgKHNpZ25hbCAhPSBTSUdTWVMgfHwgaW5mby0+c2lfY29kZSAhPSBT
WVNfU0VDQ09NUCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHVjb250ZXh0X3QqIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4oZGF0YSk7CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICBDUkFTSCgpOworCisgICAgaWYgKFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCgpLmhh
bmRsZUlmT3BlbmluZ0NQVUNvdW50KCZjb250ZXh0LT51Y19tY29udGV4dCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE93blB0cjxTeXNjYWxsPiBzeXNjYWxsID0gU3lzY2FsbDo6Y3JlYXRlRnJv
bUNvbnRleHQoJmNvbnRleHQtPnVjX21jb250ZXh0KTsKKyAgICBTZWNjb21wQnJva2VyQ2xpZW50
OjpzaGFyZWQoKS5kaXNwYXRjaChzeXNjYWxsLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgcmVn
aXN0ZXJTeXNTaWduYWxIYW5kbGVyKCkKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsK
KyAgICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6ZW9mKGFjdGlvbikpOworICAgIGFjdGlvbi5zYV9z
aWdhY3Rpb24gPSAmc3lzU2lnbmFsSGFuZGxlcjsKKyAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9T
SUdJTkZPIHwgU0FfTk9ERUZFUjsKKworICAgIGlmIChzaWdhY3Rpb24oU0lHU1lTLCAmYWN0aW9u
LCAwKSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNp
Z2VtcHR5c2V0KCZtYXNrKTsKKyAgICBzaWdhZGRzZXQoJm1hc2ssIFNJR1NZUyk7CisKKyAgICBp
ZiAoc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKSA8IDApCisgICAgICAgIENSQVNI
KCk7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQmIFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJl
ZChpbnQgc29ja2V0KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2VjY29tcEJyb2tlckNs
aWVudCwgYnJva2VyQ2xpZW50LCAoc29ja2V0KSk7CisKKyAgICByZXR1cm4gYnJva2VyQ2xpZW50
OworfQorCitTZWNjb21wQnJva2VyQ2xpZW50OjpTZWNjb21wQnJva2VyQ2xpZW50KGludCBzb2Nr
ZXQpCisgICAgOiBtX3NvY2tldChzb2NrZXQpCisgICAgLCBtX25jcHVzKG9wZW4oY3B1Q291bnRQ
YXRoLCBPX1JET05MWSkpCit7CisgICAgQVNTRVJUKG1fc29ja2V0ID49IDAgJiYgbV9uY3B1cyA+
PSAwKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudDo6flNlY2NvbXBCcm9rZXJDbGllbnQoKQor
eworICAgIGNsb3NlKG1fc29ja2V0KTsKKyAgICBjbG9zZShtX25jcHVzKTsKK30KKwordm9pZCBT
ZWNjb21wQnJva2VyQ2xpZW50OjpkaXNwYXRjaChTeXNjYWxsKiBzeXNjYWxsKSBjb25zdAorewor
ICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IGVuY29kZXIgPSBDb3JlSVBDOjpB
cmd1bWVudEVuY29kZXI6OmNyZWF0ZSgpOworICAgIGVuY29kZXItPmVuY29kZSgqc3lzY2FsbCk7
CisKKyAgICBjaGFyIGJ1ZmZlclttZXNzYWdlTWF4U2l6ZV07CisgICAgc3NpemVfdCByZWNlaXZl
ZEJ5dGVzID0gMDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3NvY2tldExvY2spOworICAgICAgICBpZiAoc2VuZE1lc3NhZ2UobV9zb2NrZXQs
IGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCkpIDwgMCkKKyAgICAgICAg
ICAgIENSQVNIKCk7CisKKyAgICAgICAgd2hpbGUgKHJlY2VpdmVkQnl0ZXMgPD0gMCkgeworICAg
ICAgICAgICAgcmVjZWl2ZWRCeXRlcyA9IHJlY2VpdmVNZXNzYWdlKG1fc29ja2V0LCAmYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgJmZkKTsKKyAgICAgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzIDwg
MCkgeworICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUaGUgYnJva2VyIHNob3VsZCBub3Qgc2h1dGRvd24gYmVmb3Jl
IHRoZSBjbGllbnQuCisgICAgICAgICAgICBpZiAoIXJlY2VpdmVkQnl0ZXMpCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE93blB0cjxDb3JlSVBDOjpB
cmd1bWVudERlY29kZXI+IGRlY29kZXIgPSBDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6OmNyZWF0
ZSgoY29uc3QgdWludDhfdCopIGJ1ZmZlciwgcmVjZWl2ZWRCeXRlcyk7CisgICAgT3duUHRyPFN5
c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IFN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVyKGRl
Y29kZXIuZ2V0KCksIGZkKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgQ1JBU0goKTsKKwor
ICAgIHN5c2NhbGwtPnNldFJlc3VsdChyZXN1bHQuZ2V0KCkpOworfQorCitib29sIFNlY2NvbXBC
cm9rZXJDbGllbnQ6OmhhbmRsZUlmT3BlbmluZ0NQVUNvdW50KG1jb250ZXh0X3QqIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgaWYgKGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSAhPSBTQ01QX1NZ
UyhvcGVuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgY2hhciAqcGF0aCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSk7CisgICAg
aWYgKHN0cmNtcChjcHVDb3VudFBhdGgsIHBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBNYWxsb2Mgd2lsbCBzb21ldGltZXMgY2hlY2sgdGhlIG51bWJlciBvZiBDUFVzIHBy
ZXNlbnQgb24gdGhlIHN5c3RlbQorICAgIC8vIGJ5IG9wZW5pbmcgYSBzcGVjaWFsIGZpbGUuIElm
IGl0IGRvZXMgdGhhdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBTSUdTWVMKKyAgICAvLyBzaWduYWwg
aGFuZGxlciwgaXQgbWlnaHQgdHJpZ2dlciBhIHJlY3Vyc2l2ZSBhdHRlbXB0IG9mIHByb3h5aW5n
IHRoZQorICAgIC8vIG9wZW4oKSBzeXNjYWxsIHRvIHRoZSBicm9rZXIuIEJlY2F1c2Ugb2YgdGhh
dCwgd2UgY2FjaGUgdGhpcyByZXNvdXJjZS4KKyAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FM
TF0gPSBkdXAobV9uY3B1cyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTZWNjb21w
QnJva2VyOjpzdGFydFdpdGhQb2xpY3koY29uc3QgU3lzY2FsbFBvbGljeSYgcG9saWN5KQorewor
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGluaXRpYWxpemVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBTZWNjb21wQnJva2VyIHNlY2NvbXBCcm9rZXI7Cisg
ICAgc2VjY29tcEJyb2tlci5zZXRTeXNjYWxsUG9saWN5KHBvbGljeSk7CisgICAgc2VjY29tcEJy
b2tlci5pbml0aWFsaXplKCk7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQg
U2VjY29tcEJyb2tlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgaW50IHNvY2tldHNbMl07CisgICAg
aWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tldHMpIDwgMCkKKyAg
ICAgICAgQ1JBU0goKTsKKworICAgIHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgICBpZiAocGlkKSB7
IC8vIFdlYlByb2Nlc3MuCisgICAgICAgIGNsb3NlKHNvY2tldHNbMV0pOworICAgICAgICBTZWNj
b21wQnJva2VyQ2xpZW50OjpzaGFyZWQoc29ja2V0c1swXSk7CisgICAgICAgIHJlZ2lzdGVyU3lz
U2lnbmFsSGFuZGxlcigpOworICAgIH0gZWxzZSB7IC8vIEJyb2tlci4KKyAgICAgICAgLy8gVE9E
TzogVGhlIGJyb2tlciBzaG91bGQgc2V0dXAgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIC8vIGZv
ciBpdHNlbGYgYW5kIGJsb2NrIGV2ZXJ5dGhpbmcgZWxzZSBvdGhlciB0aGFuCisgICAgICAgIC8v
IHRoZSBtaW5pbWFsIHNldCBvZiBzeXNjYWxscyBuZWVkZWQgdG8gZXhlY3V0ZSB0aGUKKyAgICAg
ICAgLy8gc3lzY2FsbHMgaXQgaXMgc3VwcG9zZSB0byBwcm94eS4KKyAgICAgICAgY2xvc2Uoc29j
a2V0c1swXSk7CisgICAgICAgIHJ1bkxvb3Aoc29ja2V0c1sxXSk7CisgICAgfQorfQorCit2b2lk
IFNlY2NvbXBCcm9rZXI6OnJ1bkxvb3AoaW50IHNvY2tldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisg
ICAgaW50IGkgPSBTVERFUlJfRklMRU5PICsgMTsKKyNlbHNlCisgICAgaW50IGkgPSAwOworI2Vu
ZGlmCisgICAgLy8gQ2xvc2UgYWxsIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIG90aGVyCisg
ICAgLy8gdGhhbiB0aGUgc29ja2V0IHRvIHRoZSBzYW5kYm94ZWQgcHJvY2Vzcy4KKyAgICBmb3Ig
KDsgaSA8IEZEX1NFVFNJWkU7ICsraSkKKyAgICAgICAgaWYgKGkgIT0gc29ja2V0KQorICAgICAg
ICAgICAgY2xvc2UoaSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFyIGJ1ZmZl
clttZXNzYWdlTWF4U2l6ZV07CisgICAgICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY2Vp
dmVNZXNzYWdlKHNvY2tldCwgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgICAgIGlm
IChyZWNlaXZlZEJ5dGVzIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3JtYWwgc2h1dGRvd24gZnJvbSB0aGUgY2xp
ZW50LgorICAgICAgICBpZiAoIXJlY2VpdmVkQnl0ZXMpCisgICAgICAgICAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7CisKKyAgICAgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gZGVj
b2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6Y3JlYXRlKChjb25zdCB1aW50OF90Kikg
YnVmZmVyLCByZWNlaXZlZEJ5dGVzKTsKKyAgICAgICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGwg
PSBTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2RlcihkZWNvZGVyLmdldCgpKTsKKyAgICAgICAgaWYg
KCFzeXNjYWxsKQorICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworCisgICAgICAgIE93
blB0cjxTeXNjYWxsUmVzdWx0PiByZXN1bHQgPSBzeXNjYWxsLT5leGVjdXRlKG1fcG9saWN5KTsK
KyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisK
KyAgICAgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcj4gZW5jb2RlciA9IENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2Rlcjo6Y3JlYXRlKCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZSgq
cmVzdWx0KTsKKworICAgICAgICBWZWN0b3I8Q29yZUlQQzo6QXR0YWNobWVudD4gYXR0YWNobWVu
dHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKKyAgICAgICAgaW50IGZkID0gYXR0
YWNobWVudHMuc2l6ZSgpID09IDEgPyBhdHRhY2htZW50c1swXS5maWxlRGVzY3JpcHRvcigpIDog
LTE7CisKKyAgICAgICAgLy8gVGhlIGNsaWVudCBpcyBkb3duLCB0aGUgYnJva2VyIHNob3VsZCBn
byBhd2F5LgorICAgICAgICBpZiAoc2VuZE1lc3NhZ2Uoc29ja2V0LCBlbmNvZGVyLT5idWZmZXIo
KSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBmZCkgPCAwKQorICAgICAgICAgICAgZXhpdChFWElU
X1NVQ0NFU1MpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9T
ZWNjb21wQnJva2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNjNmRiY2FlNjRlNGU1ZTZiMTcwYWZhYjg5MTMx
NjYyNTJlYzQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TZWNjb21wQnJva2VyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTZWNjb21wQnJva2VyX2gKKyNkZWZpbmUgU2VjY29tcEJyb2tlcl9oCisKKyNpZiBF
TkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU3lzY2FsbC5oIgorI2luY2x1ZGUg
IlN5c2NhbGxQb2xpY3kuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2VjY29tcEJyb2tlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjY29tcEJyb2tlcik7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgdm9pZCBzdGFydFdpdGhQb2xpY3koY29uc3QgU3lzY2FsbFBvbGljeSYpOworCisgICAg
dm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBzZXRTeXNjYWxsUG9saWN5KGNvbnN0IFN5c2Nh
bGxQb2xpY3kmIHBvbGljeSkgeyBtX3BvbGljeSA9IHBvbGljeTsgfQorCitwcml2YXRlOgorICAg
IFNlY2NvbXBCcm9rZXIoKSB7IH0KKworICAgIHZvaWQgcnVuTG9vcChpbnQgc29ja2V0KTsKKwor
ICAgIFN5c2NhbGxQb2xpY3kgbV9wb2xpY3k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21w
QnJva2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk3YzczYjVlNzcwMDYxY2ZmNThjZThmMmRlZGIwOGUxMmQzNjMzMWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZp
bHRlcnMuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVycy5oIgorCisjaWYgRU5BQkxFKFNF
Q0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIlNlY2NvbXBCcm9rZXIuaCIKKyNpbmNsdWRlIDxz
ZWNjb21wLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpBbGxvdyA9PSBTQ01QX0FDVF9B
TExPVywgQWxsb3cpOworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OktpbGwgPT0gU0NN
UF9BQ1RfS0lMTCwgS2lsbCk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6VHJhcCA9
PSBTQ01QX0FDVF9UUkFQLCBUcmFwKTsKKworU2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJz
KEFjdGlvbiBkZWZhdWx0QWN0aW9uKQorICAgIDogbV9jb250ZXh0KHNlY2NvbXBfaW5pdChkZWZh
dWx0QWN0aW9uKSkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX2Nv
bnRleHQpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZp
bHRlcnMoKQoreworICAgIHNlY2NvbXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lkIFNl
Y2NvbXBGaWx0ZXJzOjphZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24gYWN0
aW9uKQoreworICAgIGludCBzeXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbmFtZShz
eXNjYWxsTmFtZSk7CisgICAgaWYgKHN5c2NhbGwgPT0gX19OUl9TQ01QX0VSUk9SKQorICAgICAg
ICBDUkFTSCgpOworCisgICAgaWYgKHNlY2NvbXBfcnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24s
IHN5c2NhbGwsIDApIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordm9pZCBTZWNjb21wRmls
dGVyczo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKG1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEltcGxlbWVudCB0aGlzIGlzIG5vdCByZXF1aXJlZCBpbiBjYXNlIHdl
IGFyZSBqdXN0CisgICAgLy8gc2V0dGluZyBmaWx0ZXJzLiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0
byBjcmVhdGUgdGhlCisgICAgLy8gYnJva2VyIGFuZCBzeXNjYWxsIHBvbGljeSBvdGhlcndpc2Uu
CisgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CisKKyAgICBpZiAoc2VjY29tcF9sb2FkKG1fY29u
dGV4dCkgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBf
RklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjMxZTFlYWZjMTFiMDQxZTM3YWEzMDc5M2IzNzM4ZDAwNTQ2YTA2MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjY29t
cEZpbHRlcnNfaAorI2RlZmluZSBTZWNjb21wRmlsdGVyc19oCisKKyNpZiBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2VjY29tcEZpbHRl
cnMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlY2NvbXBGaWx0ZXJzKTsKKworcHVibGlj
OgorICAgIGVudW0gQWN0aW9uIHsKKyAgICAgICAgQWxsb3cgPSAweDdmZmYwMDAwVSwKKyAgICAg
ICAgS2lsbCAgPSAweDAwMDAwMDAwVSwKKyAgICAgICAgVHJhcCAgPSAweDAwMDMwMDAwVQorICAg
IH07CisKKyAgICBleHBsaWNpdCBTZWNjb21wRmlsdGVycyhBY3Rpb24gZGVmYXVsdEFjdGlvbik7
CisgICAgdmlydHVhbCB+U2VjY29tcEZpbHRlcnMoKTsKKworICAgIHZvaWQgYWRkUnVsZShjb25z
dCBjaGFyKiBzeXNjYWxsTmFtZSwgQWN0aW9uKTsKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCkgeyB9CisKKyAg
ICB0eXBlZGVmIHZvaWQgKkhBTkRMRTsKKworICAgIEhBTkRMRSBtX2NvbnRleHQ7CisgICAgYm9v
bCBtX2luaXRpYWxpemVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhOTUyZWZi
MjkxNDZjNjkwM2Q2MmE5NDJjZDgwZTE5Yzg2ZjdhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2FsbC5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5c2NhbGwu
aCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgIk9wZW5TeXNjYWxsLmgiCisjaW5jbHVkZSA8c2VjY29tcC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVh
dGVGcm9tQ29udGV4dChtY29udGV4dF90KiBjb250ZXh0KQoreworICAgIGlmIChjb250ZXh0LT5n
cmVnc1tSRUdfU1lTQ0FMTF0gPT0gU0NNUF9TWVMob3BlbikpCisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgT3BlblN5c2NhbGwoY29udGV4dCkpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8U3lzY2FsbD4gU3lzY2Fs
bDo6Y3JlYXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyKQor
eworICAgIGludCB0eXBlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHR5cGUpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIE93blB0cjxTeXNjYWxsPiBzeXNjYWxsOworICAgIGlm
ICh0eXBlID09IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICBzeXNjYWxsID0gYWRvcHRQdHIobmV3
IE9wZW5TeXNjYWxsKDApKTsKKworICAgIGlmICghc3lzY2FsbC0+ZGVjb2RlKGRlY29kZXIpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzeXNjYWxsLnJlbGVhc2UoKTsK
K30KKworU3lzY2FsbDo6U3lzY2FsbChpbnQgdHlwZSwgbWNvbnRleHRfdCogY29udGV4dCkKKyAg
ICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1Bhc3NP
d25QdHI8U3lzY2FsbFJlc3VsdD4gU3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURlY29kZXIoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCit7CisgICAgaW50IHR5cGU7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdDsKKyAgICBpZiAodHlwZSA9PSBT
Q01QX1NZUyhvcGVuKSkKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxs
UmVzdWx0KC0xLCAwKSk7CisKKyAgICBpZiAoIXJlc3VsdC0+ZGVjb2RlKGRlY29kZXIsIGZkKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
K30KKworU3lzY2FsbFJlc3VsdDo6U3lzY2FsbFJlc3VsdChpbnQgdHlwZSkKKyAgICA6IG1fdHlw
ZSh0eXBlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU3lzY2FsbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNzc4ZDE5ODRjOWU5ZDczMGU0ZjA3YTkzNmM4MmM4YzczOTk4NTQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuaApAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTeXNjYWxsX2gKKyNkZWZp
bmUgU3lzY2FsbF9oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaWYgQ1BVKFg4
Nl82NCkKKyNkZWZpbmUgUkVHX1NZU0NBTEwgUkVHX1JBWAorI2RlZmluZSBSRUdfQVJHMCAgICBS
RUdfUkRJCisjZGVmaW5lIFJFR19BUkcxICAgIFJFR19SU0kKKyNkZWZpbmUgUkVHX0FSRzIgICAg
UkVHX1JEWAorI2VsaWYgQ1BVKFg4NikKKyNkZWZpbmUgUkVHX1NZU0NBTEwgUkVHX0VBWAorI2Rl
ZmluZSBSRUdfQVJHMCAgICBSRUdfRUJYCisjZGVmaW5lIFJFR19BUkcxICAgIFJFR19FQ1gKKyNk
ZWZpbmUgUkVHX0FSRzIgICAgUkVHX0VEWAorI2Vsc2UKKyNlcnJvciAiQ1BVIG5vdCBzdXBwb3J0
ZWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFz
cyBBcmd1bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTeXNj
YWxsUmVzdWx0OworY2xhc3MgU3lzY2FsbFBvbGljeTsKKworY2xhc3MgU3lzY2FsbCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3lzY2FsbCk7CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5T
eXNjYWxsKCkgeyB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9t
Q29udGV4dChtY29udGV4dF90Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lzY2FsbD4gY3Jl
YXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisKKyAgICBpbnQgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIG1jb250ZXh0X3QqIGNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHQo
Y29uc3QgU3lzY2FsbFJlc3VsdCopID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U3lzY2Fs
bFJlc3VsdD4gZXhlY3V0ZShjb25zdCBTeXNjYWxsUG9saWN5JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOworCitwcm90
ZWN0ZWQ6CisgICAgU3lzY2FsbChpbnQgdHlwZSwgbWNvbnRleHRfdCopOworCitwcml2YXRlOgor
ICAgIGludCBtX3R5cGU7CisgICAgbWNvbnRleHRfdCogbV9jb250ZXh0OworfTsKKworY2xhc3Mg
U3lzY2FsbFJlc3VsdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3lzY2FsbFJlc3VsdCk7
CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TeXNjYWxsUmVzdWx0KCkgeyB9CisKKyAgICBzdGF0
aWMgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqLCBpbnQgZmQpOworCisgICAgaW50IHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiwgaW50IGZkPS0xKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNjYWxs
UmVzdWx0KGludCB0eXBlKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV90eXBlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQor
CisjZW5kaWYgLy8gU3lzY2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU3lzY2FsbFBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lz
Y2FsbFBvbGljeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUwMjUwOGM3OWE5MjE2NjBjMDc2ZjBlNDliNTU1
ZjNlNWM1ODcxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TeXNjYWxsUG9saWN5LmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorCisjaWYg
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworYm9vbCBTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aChj
b25zdCBjaGFyKiBwYXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pIGNvbnN0Cit7CisgICAgLy8g
VGhlIHJvb3QgZGlyZWN0b3J5IHBvbGljeSBuZWVkcyB0byBiZSBzZXQgYmVjYXVzZSBpdCBpcyB0
aGUKKyAgICAvLyB1bHRpbWF0ZSBmYWxsYmFjayB3aGVuIHJld2luZGluZyBkaXJlY3Rvcmllcy4K
KyAgICBBU1NFUlQobV9kaXJlY3RvcnlQb2xpY3kuY29udGFpbnMoIi8iKSk7CisKKyAgICBpZiAo
cGVybWlzc2lvbiA9PSBOb3RBbGxvd2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
aGFyKiBiYXNlRW50cnkgPSBzdHJkdXAocGF0aCk7CisgICAgY2hhciogY2Fub25pY2FsUGF0aCA9
IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoYmFzZUVudHJ5KTsKKworICAgIGlmIChjYW5vbmljYWxQ
YXRoKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHBhdGhTdGF0OworICAgICAgICBpZiAoc3RhdChj
YW5vbmljYWxQYXRoLCAmcGF0aFN0YXQpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIC8vIElmIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5LCB3ZSBmb3JjZSB0aGUg
cmV3aW5kLgorICAgICAgICBpZiAoIVNfSVNESVIocGF0aFN0YXQuc3RfbW9kZSkpIHsKKyAgICAg
ICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7CisgICAgICAgICAgICBjYW5vbmljYWxQYXRoID0g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICghY2Fub25pY2FsUGF0aCkgeworICAg
ICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoYmFzZUVudHJ5KTsKKyAg
ICAgICAgY2Fub25pY2FsUGF0aCA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoY3VycmVudEJhc2VE
aXJlY3RvcnkpOworICAgIH0KKworICAgIFBlcm1pc3Npb25NYXA6OmNvbnN0X2l0ZXJhdG9yIHBv
bGljeSA9IG1fZGlyZWN0b3J5UG9saWN5LmZpbmQoU3RyaW5nKGNhbm9uaWNhbFBhdGgpKTsKKyAg
ICB3aGlsZSAocG9saWN5ID09IG1fZGlyZWN0b3J5UG9saWN5LmVuZCgpKSB7CisgICAgICAgIGNo
YXIqIGN1cnJlbnRCYXNlRGlyZWN0b3J5ID0gZGlybmFtZShjYW5vbmljYWxQYXRoKTsKKyAgICAg
ICAgcG9saWN5ID0gbV9kaXJlY3RvcnlQb2xpY3kuZmluZChTdHJpbmcoY3VycmVudEJhc2VEaXJl
Y3RvcnkpKTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKChwZXJtaXNzaW9uICYg
cG9saWN5LT52YWx1ZSkgIT0gcGVybWlzc2lvbikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJT
ZWNjb21wQnJva2VyOiBBY2Nlc3MgZGVuaWVkIHRvICVzXG4iLCBwYXRoKTsKKyNlbmRpZgorCisg
ICAgZnJlZShiYXNlRW50cnkpOworICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7CisKKyAgICByZXR1
cm4gKHBlcm1pc3Npb24gJiBwb2xpY3ktPnZhbHVlKSA9PSBwZXJtaXNzaW9uOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2FsbFBvbGljeS5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NjYwYmEyYzVjOTBlNzBkZWI2YzUwODg1MjQ1NzFlNzU0NjJkMWViCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaApAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN5c2NhbGxQb2xpY3lfaAorI2Rl
ZmluZSBTeXNjYWxsUG9saWN5X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFN5c2NhbGxQb2xpY3kgeworcHVibGljOgorICAgIGVudW0gUGVybWlzc2lvbiB7Cisg
ICAgICAgIE5vdEFsbG93ZWQgICA9IDAsCisgICAgICAgIFJlYWQgICAgICAgICA9IDEsCisgICAg
ICAgIFdyaXRlICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgUmVhZEFuZFdyaXRlID0gUmVhZCB8
IFdyaXRlCisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gUGVybWlz
c2lvbk1hcDsKKworICAgIHZvaWQgc2V0RGlyZWN0b3J5UG9saWN5KGNvbnN0IFBlcm1pc3Npb25N
YXAmIHBvbGljeSkgeyBtX2RpcmVjdG9yeVBvbGljeSA9IHBvbGljeTsgfQorICAgIGJvb2wgaGFz
UGVybWlzc2lvbkZvclBhdGgoY29uc3QgY2hhciogcGF0aCwgUGVybWlzc2lvbikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgUGVybWlzc2lvbk1hcCBtX2RpcmVjdG9yeVBvbGljeTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2VuZGlmIC8vIFN5c2NhbGxQb2xpY3lfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyMjNkNWI2ZWNm
MGIxNGIzY2MxNWJhNDNiNmUyOTlhZmRkMDYwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNlY2NvbXBGaWx0ZXJzRWZsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisj
aW5jbHVkZSA8RWZyZWV0Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TeXNjYWxsUG9saWN5Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitTZWNjb21wRmlsdGVyc0VmbDo6U2VjY29tcEZpbHRlcnNF
ZmwoKQorICAgIDogU2VjY29tcEZpbHRlcnMoQWxsb3cpCit7Cit9CisKK3ZvaWQgU2VjY29tcEZp
bHRlcnNFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgYWRkUnVsZSgib3BlbiIsIFRy
YXApOworCisgICAgQVNTRVJUKGVmcmVldF9pbml0KCkpOworCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHJvb3REaXIsIChBU0NJSUxpdGVyYWwoIi8iKSkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBldGNEaXIsIChBU0NJSUxpdGVyYWwoIi9ldGMiKSkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBsaWJEaXIsIChBU0NJSUxpdGVyYWwoIi9saWIi
KSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBwcm9jRGlyLCAoQVNDSUlMaXRl
cmFsKCIvcHJvYyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHN5c0Rpciwg
KEFTQ0lJTGl0ZXJhbCgiL3N5cyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHVzckRpciwgKEFTQ0lJTGl0ZXJhbCgiL3VzciIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGRldkRpciwgKEFTQ0lJTGl0ZXJhbCgiL2RldiIpKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIHRtcERpciwgKEFTQ0lJTGl0ZXJhbCgiL3RtcCIpKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJ1blNobURpciwgKEFTQ0lJTGl0ZXJhbCgiL3J1
bi9zaG0iKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBlZmxEYXRhRGlyLCAo
U3RyaW5nOjpmcm9tVVRGOChlZnJlZXRfZGF0YV9ob21lX2dldCgpKSArICIvV2ViS2l0RWZsIikp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBlZmxDYWNoZURpciwgKFN0cmluZzo6
ZnJvbVVURjgoZWZyZWV0X2NhY2hlX2hvbWVfZ2V0KCkpICsgIi9XZWJLaXRFZmwiKSk7CisKKyAg
ICBTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uTWFwIGRpcmVjdG9yeVBvbGljeTsKKyAgICBkaXJl
Y3RvcnlQb2xpY3kuc2V0KHJvb3REaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworICAg
IGRpcmVjdG9yeVBvbGljeS5zZXQoZXRjRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICBk
aXJlY3RvcnlQb2xpY3kuc2V0KGxpYkRpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgZGly
ZWN0b3J5UG9saWN5LnNldChwcm9jRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICBkaXJl
Y3RvcnlQb2xpY3kuc2V0KHN5c0RpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgZGlyZWN0
b3J5UG9saWN5LnNldCh1c3JEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAgIGRpcmVjdG9y
eVBvbGljeS5zZXQoZGV2RGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgIGRp
cmVjdG9yeVBvbGljeS5zZXQodG1wRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOwor
ICAgIGRpcmVjdG9yeVBvbGljeS5zZXQocnVuU2htRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5k
V3JpdGUpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQoZWZsRGF0YURpciwgU3lzY2FsbFBvbGlj
eTo6UmVhZEFuZFdyaXRlKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KGVmbENhY2hlRGlyLCBT
eXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIERl
dmVsb3BlcnMgdXNpbmcgYnVpbGQtd2Via2l0IC0tZWZsIGV4cGVjdCBzb21lIGxpYnJhcmllcyB0
byBiZSBsb2FkZWQKKyAgICAvLyBmcm9tIGpoYnVpbGQgcm9vdCBmb2xkZXIgd2hpY2ggaXMgdXN1
YWxseSBpbnNpZGUgV2ViS2l0QnVpbGQuIFdlCisgICAgLy8gYXJlIHVzaW5nIHRoZSBwcm9qZWN0
IHJvb3QgaGVyZSB0byBiZSBuaWNlIGlmIHRoZSBkZXZlbG9wZXIgZGVjaWRlcworICAgIC8vIHRv
IHVzZSBXRUJLSVRPVVRQVVRESVIuCisgICAgY2hhciogcGF0aCA9IGNhbm9uaWNhbGl6ZV9maWxl
X25hbWUoUFJPSkVDVF9ST09UX0RJUik7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHByb2plY3RSb290RGlyLCAoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSkpOworICAgIGRpcmVjdG9y
eVBvbGljeS5zZXQocHJvamVjdFJvb3REaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7
CisgICAgZnJlZShwYXRoKTsKKyNlbmRpZgorCisgICAgU3lzY2FsbFBvbGljeSBwb2xpY3k7Cisg
ICAgcG9saWN5LnNldERpcmVjdG9yeVBvbGljeShkaXJlY3RvcnlQb2xpY3kpOworCisgICAgZWZy
ZWV0X3NodXRkb3duKCk7CisKKyAgICBTZWNjb21wQnJva2VyOjpzdGFydFdpdGhQb2xpY3kocG9s
aWN5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwv
U2VjY29tcEZpbHRlcnNFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2Nv
bXBGaWx0ZXJzRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjg0Njk3ZGVhZTcyMjcxZjM5YWY3N2M1ZWNkZWI4
ZDE5YWNmMWM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
ZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc0VmbF9oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJz
RWZsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxXZWJLaXQy
L1NlY2NvbXBGaWx0ZXJzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21w
RmlsdGVyc0VmbCA6IHB1YmxpYyBTZWNjb21wRmlsdGVycyB7CitwdWJsaWM6CisgICAgU2VjY29t
cEZpbHRlcnNFZmwoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc0VmbF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAK
aW5kZXggNjIyZGU1MWIwYzcxMTEwY2VhYzkyNmNlMjMxNzM3OGQ4NmQ0MTQ1Ny4uMWNjMzA5Y2I1
YTFjZjZiYzYyZDExZDkwMzZhMmE3ZWI2OGZhNmNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQogCiAjaW5jbHVkZSAi
UHJveHlSZXNvbHZlclNvdXAuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc0VmbC5oIgogI2lu
Y2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWZyZWV0Lmg+
CkBAIC02MCw2ICs2MSwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV0tfRVhQT1JUIGludCBX
ZWJQcm9jZXNzTWFpbkVmbChpbnQgYXJnYywgY2hhciogYXJndltdKQogeworI2lmIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisgICAgeworICAgICAgICBTZWNjb21wRmlsdGVyc0VmbCBzZWNjb21w
RmlsdGVyczsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKyNl
bmRpZgorCiAgICAgLy8gV2ViUHJvY2VzcyBzaG91bGQgYmUgbGF1bmNoZWQgd2l0aCBhbiBvcHRp
b24uCiAgICAgaWYgKGFyZ2MgIT0gMikKICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UgYi9Tb3VyY2UvY21ha2UvRmluZExpYlNl
Y2NvbXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE4ZjAyMjkxNWNlNjg3MzA2N2VkOTkxODcyNjNhYjc1
M2NmMWMwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5j
bWFrZQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9y
YXRpb24KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgdGhpcworIyAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisj
ICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisjICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgIHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
CisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyBUcnkgdG8gZmluZCBsaWJzZWNjb21wIGluY2x1
ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisjCisjIEFmdGVyIHN1Y2Nlc3NmdWwgZGlzY292
ZXJ5LCB0aGlzIHdpbGwgc2V0IGZvciBpbmNsdXNpb24gd2hlcmUgbmVlZGVkOgorIyBMSUJTRUND
T01QX0lOQ0xVREVfRElSUyAtIGNvbnRhaW5nIHRoZSBsaWJzZWNjb21wIGhlYWRlcnMKKyMgTElC
U0VDQ09NUF9MSUJSQVJJRVMgLSBjb250YWluZyB0aGUgbGlic2VjY29tcCBsaWJyYXJ5CisKK2lu
Y2x1ZGUoRmluZFBrZ0NvbmZpZykKKworcGtnX2NoZWNrX21vZHVsZXMoUENfTElCU0VDQ09NUCBs
aWJzZWNjb21wKQorCitmaW5kX3BhdGgoTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgTkFNRVMgc2Vj
Y29tcC5oCisgICAgSElOVFMgJHtQQ19MSUJTRUNDT01QX0lOQ0xVREVfRElSU30gJHtQQ19MSUJT
RUNDT01QX0lOQ0xVREVESVJ9CispCisKK2ZpbmRfbGlicmFyeShMSUJTRUNDT01QX0xJQlJBUklF
UyBOQU1FUyBzZWNjb21wCisgICAgSElOVFMgJHtQQ19MSUJTRUNDT01QX0xJQlJBUllfRElSU30g
JHtQQ19MSUJTRUNDT01QX0xJQkRJUn0KKykKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0
YW5kYXJkQXJncykKK0ZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhzZWNjb21wIERF
RkFVTFRfTVNHIExJQlNFQ0NPTVBfSU5DTFVERV9ESVJTIExJQlNFQ0NPTVBfTElCUkFSSUVTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQppbmRleCA3ZGZlYzRjZWJiYTc3OWI4NzE4ZDY2YjQ3OWZjYzI5MmVi
MGQ4MzFiLi4yZjJmYTdhZjcyZmZlMGY3MWIxMGZiNzUzMTEzM2NmMDE0MDU4NWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0
aW9uc0VmbC5jbWFrZQpAQCAtNzksNiArNzksNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSBPTikKIFdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZIE9OKQogV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04p
CitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VDQ09NUF9GSUxURVJT
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQURPV19ET00g
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBUkVEX1dPUktF
UlMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU1BFTExDSEVD
SyBPTikKQEAgLTIxMyw2ICsyMTQsMTAgQEAgaWYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAgYWRk
X2RlZmluaXRpb25zKC1EV0VCX0lOU1BFQ1RPUl9JTlNUQUxMX0RJUj1cIiR7Q01BS0VfSU5TVEFM
TF9QUkVGSVh9LyR7V0VCX0lOU1BFQ1RPUl9ESVJ9XCIpCiBlbmRpZiAoKQogCitpZiAoRU5BQkxF
X1NFQ0NPTVBfRklMVEVSUykKKyAgICBmaW5kX3BhY2thZ2UoTGliU2VjY29tcCBSRVFVSVJFRCkK
K2VuZGlmICgpCisKIHNldChDUEFDS19TT1VSQ0VfR0VORVJBVE9SIFRCWjIpCiAKICMgT3B0aW1p
emUgYmluYXJ5IHNpemUgZm9yIHJlbGVhc2UgYnVpbGRzIGJ5IHJlbW92aW5nIGRlYWQgc2VjdGlv
bnMgb24gdW5peC9nY2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCA0ZDEwMmEyY2Ri
YmIzYWE3Mzk3M2IwMzQ2ZDA4MDgwNDlhMGNhODQzLi4xYjYyMDM2N2I3N2E1OTU5ODM4ZWI2YzFh
OWQyZmM3ZGRkYjYzZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMu
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xMDAsNiAr
MTAwLDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgIlRvZ2dsZSByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9S
RVNPTFVUSU9OX01FRElBX1FVRVJZICJUb2dnbGUgcmVzb2x1dGlvbiBtZWRpYSBxdWVyeSBzdXBw
b3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVD
SCAiVG9nZ2xlIFNjcmlwdGVkIFNwZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMgIlRvZ2dsZSBMaW51eCBzZWNjb21w
IGZpbHRlcnMgZm9yIHRoZSBXZWJQcm9jZXNzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfU0hBRE9XX0RPTSAiVG9nZ2xlIFNoYWRvdyBET00gc3VwcG9ydCIg
T0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFSRURfV09SS0VSUyAiVG9n
Z2xlIFNoYXJlZFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5F
KEVOQUJMRV9TUEVMTENIRUNLICJUb2dnbGUgU3BlbGxjaGVja2luZyBzdXBwb3J0IChyZXF1aXJl
cyBFbmNoYW50KSIgT0ZGKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2Ug
Yi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQppbmRleCBhMzg5M2NkNmRjMmJjY2NhZGNhYjIw
NjFmNTVmODAzNTY5NGQ2N2M2Li5jNWZmZWNhNzU5ZDA1YTIwOTA0MGZjYjM0MDJhZDc2MDE1OTQz
ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZQpAQCAtOTQsNiArOTQsNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5B
QkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUkVTT0xV
VElPTl9NRURJQV9RVUVSWQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NDUklQVEVEX1NQRUVDSAor
I2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NFQ0NPTVBfRklMVEVSUwogI2NtYWtlZGVmaW5lMDEgRU5B
QkxFX1NIQURPV19ET00KICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2Nt
YWtlZGVmaW5lMDEgRU5BQkxFX1NNT09USF9TQ1JPTExJTkcKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxODRlYThkYmMyMjU4ZDFhMmQ5YmIxZGJj
ZGYyNDY0ZjIwNzc0YzIxLi5iYWFlNjc0YTJlODBlNzYwZTA1YzY5MzYwODA5ZDFlZTYyZWNmOTUw
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjggQEAKKzIwMTMtMDEtMDcgIFRoaWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdv
LnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNhcGFi
aWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgdG8gdmVyaWZ5IGlm
IHRoZSBoYW5kbGluZyBvZiB0aGUgb3BlbigpIHN5c2NhbGwgaXMKKyAgICAgICAgYmVpbmcgZG9u
ZSByaWdodC4gV2UgY2hlY2sgaWYgdGhlIFJlYWQvV3JpdGUvUmVhZEFuZFdyaXRlIHBlcm1pc3Np
b25zCisgICAgICAgIGFyZSByZXNwZWN0ZWQsIGlmIHRoZSBjYW5vbmljYWwgcGF0aCBpcyBiZWlu
ZyByZXNvbHZlZCBhbmQgaWYKKyAgICAgICAgdGhlIHBlcm1pc3Npb25zIGFyZSBmYWxsaW5nIGJh
Y2sgdG8gdGhlIHRvcG1vc3QgcGFyZW50IGRpcmVjdG9yeSB3aXRoIGEKKyAgICAgICAgcG9saWN5
IHNldCB3aGVuIHRoZSBkaXJlY3RvcnkgYmVpbmcgb3BlbmVkIGhhcyBubyBwb2xpY3kuCisKKyAg
ICAgICAgQWxzbyBhZGRlZCBsaWJzZWNjb21wIHRvIEVGTCdzIGpoYnVpbGQgdG8gbWFrZSB0aGUg
bGlmZSBvZiBkZXZlbG9wZXJzCisgICAgICAgIHdpbGxpbmcgdG8gaGVscCBlYXNpZXIuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSSk6CisgICAgICAgIChTZWNjb21wRW52aXJvbm1lbnQpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmlyb25tZW50OjpTZXRVcCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1lbnQ6OlRlYXJEb3duKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIGVmbC9qaGJ1aWxkLm1vZHVsZXM6CisKIDIw
MTMtMDEtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRk
IHN2bjpleGVjdXRhYmxlIHRvIGEgYnVuY2ggb2Ygc2NyaXB0cyBpbiBCdWlsZFNsYXZlU3VwcG9y
dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDNjYTcxMWNjMGQxMGY3
Y2U0YTc4MzM1YzhlZTRjZTEzNDBhYWNjODAuLmI2YWYyZmVjMDM3YTMxOTUzOTUxNTExNmMyOGU3
ZmQyYWFhY2U4ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwu
Y21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODUs
NiArODUsMTIgQEAgc2V0KHRlc3Rfd2Via2l0Ml9hcGlfQklOQVJJRVMKICAgICBXaWxsU2VuZFN1
Ym1pdEV2ZW50CiApCiAKK2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGxpc3QoQVBQ
RU5EIHRlc3Rfd2Via2l0Ml9hcGlfQklOQVJJRVMKKyAgICAgICAgU2VjY29tcEZpbHRlcnMKKyAg
ICApCitlbmRpZiAoKQorCiBzZXQodGVzdF93ZWJraXQyX2FwaV9mYWlsX0JJTkFSSUVTCiAgICAg
Q2FuSGFuZGxlUmVxdWVzdAogICAgIERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DcmFzaApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0ZXJz
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWEzZWZlMzhlMWZkZDkwYzI2NTRmYmY1ZDcyNWU5NDM5MTM5NzA2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNj
b21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgor
I2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5
c2NhbGxQb2xpY3kuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJvb3REaXIsIChB
U0NJSUxpdGVyYWwoIi8iKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGhvbWVEaXIs
IChTdHJpbmcoZ2V0ZW52KCJIT01FIikpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
dXNyRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB1c3JTYmluRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyL3NiaW4iKSkpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJSZWFkLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktp
dFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCB0ZXN0RGlyV3JpdGUsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMv
dGVzdFdyaXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZEFu
ZFdyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFk
QW5kV3JpdGUiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJOb3RBbGxv
d2VkLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxv
d2VkIikpKTsKKworc3RhdGljIGNvbnN0IG1vZGVfdCBkZWZhdWx0TW9kZSA9IFNfSVJVU1IgfCBT
X0lXVVNSIHwgU19JWFVTUjsKKworY2xhc3MgU2VjY29tcEVudmlyb25tZW50IDogcHVibGljIHRl
c3Rpbmc6OkVudmlyb25tZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoIWhvbWVEaXIuaXNFbXB0eSgpKTsKKworICAgICAg
ICBta2RpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIsIGRlZmF1bHRNb2RlKTsKKyAgICAg
ICAgbWtkaXIodGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAg
ICBta2Rpcih0ZXN0RGlyV3JpdGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAg
ICBta2Rpcih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsK
KyAgICAgICAgbWtkaXIodGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1v
ZGUpOworCisgICAgICAgIC8vIENyZWF0ZSBhIGZpbGUgZm9yIHRoZSBSZWFkIG9ubHkgYW5kIE5v
dEFsbG93ZWQgZGlyZWN0b3J5IGJlZm9yZQorICAgICAgICAvLyBsb2FkaW5nIHRoZSBmaWx0ZXJz
LgorICAgICAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZSI7CisgICAg
ICAgIGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBk
ZWZhdWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKyAgICAgICAg
ZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAg
ICAgICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOworCisgICAgICAgIFN5c2NhbGxQb2xpY3k6
OlBlcm1pc3Npb25NYXAgZGlyZWN0b3J5UG9saWN5OworICAgICAgICBkaXJlY3RvcnlQb2xpY3ku
c2V0KHJvb3REaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworICAgICAgICBkaXJlY3Rv
cnlQb2xpY3kuc2V0KHVzckRpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgICAgIGRpcmVj
dG9yeVBvbGljeS5zZXQodXNyU2JpbkRpciwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7Cisg
ICAgICAgIGRpcmVjdG9yeVBvbGljeS5zZXQodGVzdERpclJlYWQsIFN5c2NhbGxQb2xpY3k6OlJl
YWQpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJXcml0ZSwgU3lzY2FsbFBv
bGljeTo6V3JpdGUpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJSZWFkQW5k
V3JpdGUsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisKKyAgICAgICAgU3lzY2FsbFBv
bGljeSBwb2xpY3k7CisgICAgICAgIHBvbGljeS5zZXREaXJlY3RvcnlQb2xpY3koZGlyZWN0b3J5
UG9saWN5KTsKKworICAgICAgICBTZWNjb21wQnJva2VyOjpzdGFydFdpdGhQb2xpY3kocG9saWN5
KTsKKworICAgICAgICBTZWNjb21wRmlsdGVycyBzZWNjb21wRmlsdGVycyhTZWNjb21wRmlsdGVy
czo6QWxsb3cpOworICAgICAgICBzZWNjb21wRmlsdGVycy5hZGRSdWxlKCJvcGVuIiwgU2VjY29t
cEZpbHRlcnM6OlRyYXApOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFsaXplKCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBoYXZlIHRvIG1vdmUgdG8gYSBzZXBhcmF0ZWQgcHJvY2VzcyBjcmVhdGVkIGJlZm9y
ZSBsb2FkaW5nCisgICAgICAgIC8vIHRoZSBmaWx0ZXJzIHdoZW4gd2UgcHV0IHRoZSBybWRpci91
bmxpbmsgcG9saWNpZXMgaW4gcGxhY2UuCisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZSIpOworICAgICAgICB1bmxpbmsoIi90
bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZSIpOworICAg
ICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFdyaXRlL3Rlc3RGaWxl
Iik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZC90
ZXN0RmlsZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0
Tm90QWxsb3dlZCIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90
ZXN0UmVhZEFuZFdyaXRlIik7CisgICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0
ZXJzL3Rlc3RXcml0ZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVy
cy90ZXN0UmVhZCIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIp
OworICAgIH0KK307CisKKzo6dGVzdGluZzo6RW52aXJvbm1lbnQqIGNvbnN0IGVudiA9IDo6dGVz
dGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25tZW50KG5ldyBTZWNjb21wRW52aXJvbm1lbnQpOwor
CitURVNUKFdlYktpdDIsIG9wZW4pCit7CisgICAgLy8gUmVhZCBvbmx5IGRpcmVjdG9yeS4KKyAg
ICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZSI7CisgICAgaW50IGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0g
LTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiV3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBk
aXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZ
KTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJXcml0
ZSBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlzIG5v
dCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgQVNTRVJUX05FKGZkLCAtMSkgPDwgIlJlYWQgb25s
eSBhbmQgY3JlYXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAg
Y2xvc2UoZmQpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkICsgIi9UaGlzRmlsZURvZXNOb3RF
eGlzdCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAg
IEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgPDwgIlNob3VsZCByZXR1
cm4gRU5PRU5UIHdoZW4gdHJ5aW5nICIgXAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBk
b2VzIG5vdCBleGl0IGFuZCB0aGUgcGVybWlzc2lvbnMgYXJlIE9LLiI7CisKKyAgICBmZCA9IG9w
ZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0g
LTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiU2hvdWxkIHJldHVybiBFQUNDRVMgd2hlbiB0cnlp
bmcgIiBcCisgICAgICAgICJ0byBvcGVuIGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXQgYW5kIHRo
ZSBwZXJtaXNzaW9ucyBhcmUgbm90IE9LLiI7CisKKyAgICAvLyBXcml0ZSBvbmx5IGRpcmVjdG9y
eS4KKyAgICBmaWxlID0gdGVzdERpcldyaXRlICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVu
KGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Cisg
ICAgQVNTRVJUX05FKGZkLCAtMSkgPDwgIkNyZWF0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlz
IGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0Zjgo
KS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKSA8PCAiUmVhZCBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisg
ICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9U
UlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlJlYWQgaXMgbm90IGFsbG93ZWQg
YXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCks
IE9fV1JPTkxZKTsKKyAgICBBU1NFUlRfTkUoZmQsIC0xKSA8PCAiV3JpdGUgc2hvdWxkIGJlIGFs
bG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBSZWFk
IGFuIHdyaXRlIGRpcmVjdG9yeS4KKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIv
dGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZIHwg
T19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEFTU0VSVF9ORShmZCwgLTEpIDw8ICJDcmVhdGUg
c2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisK
KyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9O
RShmZCwgLTEpIDw8ICJSZWFkIGFuZCB3cml0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRp
cmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiUmVhZCBzaG91bGQg
YmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQs
IC0xKSA8PCAiV3JpdGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAg
ICBjbG9zZShmZCk7CisKKyAgICAvLyBOb3RBbGxvd2VkIGRpcmVjdG9yeS4KKyAgICBmaWxlID0g
dGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1Rf
VFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJDcmVhdGUgaXMgbm90IGFsbG93
ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRh
KCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VT
KSA8PCAiUmVhZCBhbmQgd3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsK
KworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJSZWFkIGlzIG5vdCBhbGxv
d2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0
YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFD
Q0VTKSA8PCAiV3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworCisg
ICAgLy8gVGhlIC91c3IgZGlyZWN0b3J5IGhlcmUgaGFzIHJlYWQgcGVybWlzc2lvbnMsIHNvIGl0
J3Mgc3ViZGlyZWN0b3JpZXMKKyAgICAvLyBzaG91bGQgcmVzb2x2ZSB0byB0aGUgL3VzciBwZXJt
aXNzaW9ucyB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuCisgICAgZmlsZSA9IHVzckRpciAr
ICIvYmluL2Jhc2VuYW1lIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIlN1YmRpcmVjdG9yaWVzIHNob3VsZCB3
aXRoIG5vIHBvbGljdCBzaG91bGQgIiBcCisgICAgICAgICJpbmhlcml0IHRoZSBwYXJlbnQncyBw
b2xpY2llcy4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSB1c3JTYmluRGlyICsgIi9h
ZGR1c2VyIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiVGhpcyBkaXJl
Y3Rvcnkgc2hvdWxkIGhhdmUgIiBcCisgICAgICAgICJpdHMgb3duIHBvbGljeSBpbnN0ZWFkIG9m
IHRoZSBwYXJlbnQncy4iOworCisgICAgLy8gQWNjZXNzIHRvIHRoZSByZXN0IG9mIHRoZSBmaWxl
cyBzeXN0ZW0gaXMgYmxvY2tlZCBhbmQgc2hvdWxkCisgICAgLy8gbmV2ZXIgcmV0dXJuIGFueXRo
aW5nIGVsc2Ugb3RoZXIgdGhhbiBFQUNDRVMgcmVnYXJkbGVzcyBpZiB0aGUKKyAgICAvLyBmaWxl
IGV4aXN0cyBvciBub3QuIFRoZSByZWFzb24gaXMgYmVjYXVzZSBpdCB3aWxsIGZhbGxiYWNrIHRv
IHRoZQorICAgIC8vIHBvbGljeSBvZiB0aGUgUm9vdCBkaXJlY3RvcnksIG1hcmtlZCBhcyBOb3RB
bGxvd2VkLgorICAgIGZpbGUgPSBob21lRGlyICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVu
KGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAg
IEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9w
ZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYm
IGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIv
Li4vLi4vLi4vZXRjL3Bhc3N3ZCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwg
T19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7
CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4iICsgdGVzdERp
clJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7CisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYm
IGVycm5vID09IEVBQ0NFUyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9lZmwvamhidWlsZC5t
b2R1bGVzCmluZGV4IGYxNTAyNGQxODg5YTA5NmNjYTU0ZTZlMjFjN2FiYTBiYmQzOTAyYTYuLmJj
NjNlOTMxMDQ4NjdmNmE3ZmI4Zjc5Yzg1ZTU5YzBkODNmOWJiMDcgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L2VmbC9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwpAQCAt
MTksNiArMTksNyBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJlZnJlZXQiLz4KICAgICAgIDxkZXAg
cGFja2FnZT0iZWxlbWVudGFyeSIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJsaWJ4bWwyIi8+Cisg
ICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNlY2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAg
PC9tZXRhbW9kdWxlPgogCkBAIC00NCw2ICs0NSw4IEBACiAgICAgICBocmVmPSJmdHA6Ly94bWxz
b2Z0Lm9yZyIvPiAKICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZG93bmxvYWQu
ZW5saWdodGVubWVudC5vcmciCiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdodGVu
bWVudC5vcmciLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5zZi5u
ZXQiCisgICAgICBocmVmPSJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC8iLz4KIAogICA8YXV0b3Rv
b2xzIGlkPSJjYWlybyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KICAgICA8ZGVwZW5kZW5jaWVz
PgpAQCAtMjk2LDQgKzI5OSwxMCBAQAogICAgICAgICAgICAgbWQ1c3VtPSJjNjIxMDZmMDJlZTAw
YjY0MzdmMGZiOWQzNzBjMTA5MyIvPgogICA8L2F1dG90b29scz4gCiAKKyAgPGF1dG90b29scyBp
ZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAgIDxicmFuY2ggbW9k
dWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0iZ2l0LmNvZGUuc2Yu
bmV0IgorICAgICAgICAgIHRhZz0iMjdmNWM4NTk4ZDM0MTVmYWY5MDFhOGE5ZTcxNGVlMGVmMGNh
Mzg3NSIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9DaGFu
Z2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMTMzNTU5YzQ2MTFjY2QyZGEwMzY2ZDlhOGM3N2JiOTE0
NTIyYTZlMC4uYTJmYTBmNjc5Mzk3MWQ3MWE4OWNlMmNjYWIzMjFlNWYxZmE1ZGZiOSAxMDA2NDQK
LS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEzLTAx
LTA3ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgor
CisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNp
bmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIHRoZSBiaXRzIHRvIEVGTC9DTWFrZSBidWlsZHN5c3RlbSB0byBmaW5k
IHRoZSBsaWJzZWNjb21wCisgICAgICAgIGxpYnJhcnkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvRmluZExpYlNlY2NvbXAuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZToKKwogMjAxMy0wMS0w
NCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgRU5B
QkxFX01VVEFUSU9OX09CU0VSVkVSUyAjZGVmaW5lCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181667</attachid>
            <date>2013-01-08 00:53:58 -0800</date>
            <delta_ts>2013-01-15 09:29:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130108105102.patch</filename>
            <type>text/plain</type>
            <size>73794</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUxZjU3ODg5ODNiMDE4YjU0ZGJkZDQ5
MTZiN2FkMWFlNTVjOTU5YTYuLmY1NzU1MWE2ZGEwMmVlMjMwZTgxMzk5MzNjNGMxZGY2NzJmMjZk
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDcgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IGhhbmRsZSBT
SUdTWVMgd2hlbiBTZWNjb21wIEZpbHRlcnMgaXMgZW5hYmxlZCBzaW5jZSB0aGlzCisgICAgICAg
IHNpZ25hbCBpcyBuZWVkZWQgdG8gcHJveHkgdGhlIHN5c2NhbGxzIHRvIHRoZSBicm9rZXIgcHJv
Y2Vzcy4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKwogMjAxMy0wMS0wNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJhdGlvbmFsaXplIGNsb3N1
cmUgY2FsbCBoZXVyaXN0aWNzIGFuZCBwcm9maWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyMjZmNDg4Zjhm
YWRmODQ4MWE4MGExNzBmNDM1Y2NkMDM4ZjUyOTRmLi4xMzRlODk5ODc1MTA1Y2ZlMmRjOTc1OWZk
MjU0NjlkMjY3OWM3MmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIzIEBACisyMDEzLTAxLTA3
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgorCisg
ICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNpbmcg
c2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjZSB0aGUgZm91bmRhdGlvbnMgb2YgdGhlIFNlY2NvbXBGaWx0ZXItYmFz
ZWQgc2FuZGJveC4gVGhlCisgICAgICAgIGhhcmRlbmluZyBvZiB0aGUgV2ViUHJvY2VzcyAoYW5k
IHBvdGVudGlhbGx5IFBsdWdpblByb2Nlc3MsIGV0YykKKyAgICAgICAgd29ya3MgYnkgYSBjb21i
aW5hdGlvbiBvZiB0aGUgdHdvIHRoaW5nczoKKworICAgICAgICAtIEJsb2NraW5nIHN5c2NhbGxz
IHRoYXQgYXJlIG5vdCB1c2VkLCByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNrCisgICAg
ICAgIHN1cmZhY2UuCisgICAgICAgIC0gVHJhcHBpbmcgc2Vuc2l0aXZlIHN5c2NhbGxzIGFuZCBk
ZWxlZ2F0aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlc2UKKyAgICAgICAgc3lzY2FsbHMgdG8gYSBz
ZXBhcmF0ZWQgdHJ1c3RlZCBwcm9jZXNzIHN1YmplY3QgdG8gYSBzZXQgb2YgcG9saWNpZXMuCisK
KyAgICAgICAgVGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gdHJhcHMgdGhlIG9wZW4oKSBzeXNj
YWxsIGZvciBXZWJLaXQgRUZMJ3MKKyAgICAgICAgV2ViUHJvY2VzcywgYnV0IGl0IGNvdWxkIGJl
IGVhc2lseSB1c2VkIGJ5IGFueSBMaW51eCBwb3J0LCBzaW5jZSB0aGUKKyAgICAgICAgY29kZSBp
cyBzdXBwb3NlIHRvIGJlIExpbnV4LWNvbXBsaWFudC4gVGhlIGxpc3Qgb2Ygc3lzY2FsbHMgaGFu
ZGxlZAorICAgICAgICBieSB0aGUgYnJva2VyIHByb2Nlc3Mgc2hvdWxkIGRlZmluaXRlbHkgZ3Jv
dyBhcyB3ZSBtYXR1cmUgdGhlCisgICAgICAgIGltcGxlbWVudGF0aW9uLiBPdGhlciBzeXNjYWxs
cyBuZWVkcyB0byBiZSBoYW5kbGVkIHRvIGdldCB0aGlzIHNhbmRib3gKKyAgICAgICAgZnVsbHkg
ZnVuY3Rpb25hbCAoaS5lLiBvcGVuKCkgY2FuIHN0aWxsIGJlIGRvbmUgdmlhIG9wZW5hdCgpLCB3
ZSBoYXZlCisgICAgICAgIHVubGluaygpLCBta2RpcigpLCBldGMpLgorCisgICAgICAgIFRoZSBi
cm9rZXIgcHJvY2VzcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXMgZWFybHkgYXMgcG9zc2libGUg
b24gdGhlCisgICAgICAgIHNhbmRib3hlZCBwcm9jZXNzIG1haW4sIGJlY2F1c2UgaXQgb25seSBk
b2VzIGEgZm9yaygpLCB3aGljaCBpcyBjaGVhcAorICAgICAgICBvbiBMaW51eC4gVGhhdCBhbHNv
IGFpbXMgdG8gbWluaW1pemUgdGhlIHJlc2lkZW50IG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAg
ICAgdGhlIGJyb2tlciBwcm9jZXNzLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgYnJva2VyIHN1
cHBvcnRzIG9ubHkgZGlyZWN0b3J5IHBvbGljaWVzLCBidXQgZmlsZSBwb2xpY2llcworICAgICAg
ICBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlIHRvIG1ha2UgbmFycm93ZXIgdGhl
IGZpbGVzeXN0ZW0KKyAgICAgICAgZXhwb3NlZCB0byB0aGUgV2ViUHJvY2Vzcy4KKworICAgICAg
ICBPcGVuaW5nIG9mIGZpbGVzIGZvciB1cGxvYWQgYW5kIHNhdmluZyBkb3dubG9hZHMgaXMgbm90
IHN1cHBvcnRlZCB5ZXQsCisgICAgICAgIHNpbmNlIGl0IHNob3VsZCBiZSBoYW5kbGVkIHRvIHRo
ZSBVSVByb2Nlc3MgaW4gYSBzaW1pbGFyIGZhc2hpb24gYXMKKyAgICAgICAgdGhlIE1hYyBwb3J0
IGRvZXMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQv
bGludXgvT3BlblN5c2NhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpPcGVuU3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZW5TeXNjYWxsOjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZXhl
Y3V0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpPcGVuU3lzY2FsbDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2Nh
bGxSZXN1bHQ6Ok9wZW5TeXNjYWxsUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2Nh
bGxSZXN1bHQ6On5PcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNj
YWxsUmVzdWx0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvT3BlblN5c2NhbGwuaDogQWRkZWQuCisg
ICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChPcGVuU3lzY2Fs
bCk6CisgICAgICAgIChPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5T
eXNjYWxsUmVzdWx0OjpmZCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsUmVzdWx0Ojpl
cnJvck51bWJlcik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wQnJva2VyQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpyZWNlaXZl
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OnN5c1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAo
V2ViS2l0OjpyZWdpc3RlclN5c1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWNj
b21wQnJva2VyQ2xpZW50OjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2Vy
Q2xpZW50OjpTZWNjb21wQnJva2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJy
b2tlckNsaWVudDo6flNlY2NvbXBCcm9rZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpTZWNj
b21wQnJva2VyQ2xpZW50OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXJDbGllbnQ6OmhhbmRsZUlmT3BlbmluZ0NQVUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6U2Vj
Y29tcEJyb2tlcjo6c3RhcnRXaXRoUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJy
b2tlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OnJ1bkxv
b3ApOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wQnJva2VyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBCcm9rZXIpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wQnJva2VyOjpzZXRTeXNjYWxsUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6U2Vj
Y29tcEJyb2tlcjo6U2VjY29tcEJyb2tlcik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2Nv
bXBGaWx0ZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyczo6U2VjY29tcEZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNj
b21wRmlsdGVyczo6flNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZp
bHRlcnM6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6aW5pdGlh
bGl6ZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6U2VjY29tcEZpbHRlcnM6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogU2hh
cmVkL2xpbnV4L1N5c2NhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
U3lzY2FsbDo6Y3JlYXRlRnJvbURlY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpT
eXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURlY29k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0OjpTeXNjYWxsUmVzdWx0KToKKyAg
ICAgICAgKiBTaGFyZWQvbGludXgvU3lzY2FsbC5oOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEMp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0
OjpTeXNjYWxsOjp+U3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OnR5cGUpOgor
ICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjb250ZXh0KToKKyAgICAgICAgKFN5c2NhbGxSZXN1
bHQpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp+U3lzY2FsbFJlc3VsdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OnR5cGUpOgorICAgICAgICAqIFNoYXJlZC9s
aW51eC9TeXNjYWxsUG9saWN5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aCk6CisgICAgICAg
ICogU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoU3lzY2FsbFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxQb2xp
Y3k6OnNldERpcmVjdG9yeVBvbGljeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwvU2VjY29t
cEZpbHRlcnNFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBGaWx0ZXJzRWZsOjpTZWNjb21wRmlsdGVyc0VmbCk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBGaWx0ZXJzRWZsOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzRWZsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2Vm
bC9XZWJQcm9jZXNzTWFpbkVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NNYWlu
RWZsKToKKwogMjAxMy0wMS0wNyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtDb29yZGluYXRlZEdyYXBoaWNzXSBjb21wb3NpdGluZy9y
ZXBhaW50L3Jlc2l6ZS1yZXBhaW50Lmh0bWwgaXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQXNzZXJ0aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcApp
bmRleCBlZDQ4ZDgxM2RmYmE3NTk2OTdhNjk4ZmE2N2I1MDk1YWI3NTZmNGRjLi5jOTI5ZTNhN2Nj
OGIwZDJlM2IyYTM5YWVmNTA4NGEyZjdlYjY0Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9Bc3NlcnRpb25zLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcApAQCAt
MzQ5LDcgKzM0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnNGb3JGYXRh
bEVycm9ycyh2b2lkICgqaGFuZGxlcikoaW50KSkKICAgICBzaWduYWwoU0lHRlBFLCBoYW5kbGVy
KTsgLy8gICAgODogZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uLgogICAgIHNpZ25hbChTSUdCVVMs
IGhhbmRsZXIpOyAvLyAgIDEwOiBidXMgZXJyb3IuCiAgICAgc2lnbmFsKFNJR1NFR1YsIGhhbmRs
ZXIpOyAvLyAgMTE6IHNlZ21lbnRhdGlvbiB2aW9sYXRpb24uCisjaWYgIUVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisgICAgLy8gU2VjY29tcEJyb2tlciBpbnN0YWxscyBhIHNpZ25hbCBoYW5kbGVy
IGZvciBTSUdTWVMgdGhhdAorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUuCiAgICAg
c2lnbmFsKFNJR1NZUywgaGFuZGxlcik7IC8vICAgMTI6IGJhZCBhcmd1bWVudCB0byBzeXN0ZW0g
Y2FsbC4KKyNlbmRpZgogICAgIHNpZ25hbChTSUdQSVBFLCBoYW5kbGVyKTsgLy8gIDEzOiB3cml0
ZSBvbiBhIHBpcGUgd2l0aCBubyByZWFkZXIuCiAgICAgc2lnbmFsKFNJR1hDUFUsIGhhbmRsZXIp
OyAvLyAgMjQ6IGV4Y2VlZGVkIENQVSB0aW1lIGxpbWl0LgogICAgIHNpZ25hbChTSUdYRlNaLCBo
YW5kbGVyKTsgLy8gIDI1OiBleGNlZWRlZCBmaWxlIHNpemUgbGltaXQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IGM1N2MyOGVhZjJmZWMyNmIxZWE3NDE5OTYwZDhmOTM2NGJiNGU5MjEu
LjEzZmUyZTVhZjVlNDA4YTA1YmRiYWFhOTEwYzUwMTNmNzMwNjVmZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC0yMyw2ICsyMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBTaGFyZWQvZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFy
ZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9PcGVuU3lzY2Fs
bC5jcHAKKyAgICBTaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQvbGlu
dXgvU2VjY29tcEZpbHRlcnMuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCisgICAg
U2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9y
eVNhbXBsZXJMaW51eC5jcHAKIAogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJ
bmZvLmNwcApAQCAtMTQwLDYgKzE0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9lZmwvV2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9lZmwvV2ViUGFnZUVmbC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1Nl
Y2NvbXBGaWx0ZXJzRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZs
LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQwLDYg
KzI0NiwxNyBAQCBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7U1FMSVRF
X0xJQlJBUklFU30KICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30K
KyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgICR7TElCU0VDQ09NUF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgYWRkX2RlZmluaXRp
b25zKC1EUFJPSkVDVF9ST09UX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKK2VuZGlmICgp
CisKIGlmIChFTkFCTEVfRUNPUkVfWCkKICAgICBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJB
UklFUwogICAgICAgICAke0VDT1JFX1hfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY2ODMyZjM0NTk4N2NiNzM1ODlk
M2RhNTNiZGEwZWI4ODVmMGE4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgor
CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu
aD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NPTVBJTEVfQVNTRVJUKCFPX1JET05MWSwgT19S
RE9OTFkpOworQ09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkpOworQ09NUElM
RV9BU1NFUlQoT19SRFdSID09IDIsIE9fUkRSVyk7CisKK09wZW5TeXNjYWxsOjpPcGVuU3lzY2Fs
bChtY29udGV4dF90KiBjb250ZXh0KQorICAgIDogU3lzY2FsbChTQ01QX1NZUyhvcGVuKSwgY29u
dGV4dCkKKyAgICAsIG1fZmxhZ3MoMCkKKyAgICAsIG1fbW9kZSgwKQoreworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0gQ1N0cmluZyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF0pKTsKKyAgICBtX2ZsYWdzID0g
Y29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdOworICAgIG1fbW9kZSA9IGNvbnRleHQtPmdyZWdzW1JF
R19BUkcyXTsKK30KKwordm9pZCBPcGVuU3lzY2FsbDo6c2V0UmVzdWx0KGNvbnN0IFN5c2NhbGxS
ZXN1bHQqIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpICYmIHJlc3VsdC0+dHlwZSgp
ID09IHR5cGUoKSk7CisKKyAgICBjb25zdCBPcGVuU3lzY2FsbFJlc3VsdCogb3BlblJlc3VsdCA9
IHN0YXRpY19jYXN0PGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0Kj4ocmVzdWx0KTsKKworICAgIGlm
IChvcGVuUmVzdWx0LT5mZCgpID49IDApCisgICAgICAgIGNvbnRleHQoKS0+Z3JlZ3NbUkVHX1NZ
U0NBTExdID0gZHVwKG9wZW5SZXN1bHQtPmZkKCkpOworICAgIGVsc2UKKyAgICAgICAgY29udGV4
dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtb3BlblJlc3VsdC0+ZXJyb3JOdW1iZXIoKTsKK30K
KworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBPcGVuU3lzY2FsbDo6ZXhlY3V0ZShjb25zdCBT
eXNjYWxsUG9saWN5JiBwb2xpY3kpCit7CisgICAgaWYgKCFzdHJuY21wKCIvcHJvYy9zZWxmLyIs
IG1fcGF0aC5kYXRhKCksIDExKSkgeworICAgICAgICBTdHJpbmcgcmVzb2x2ZWRTZWxmUGF0aCA9
IEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihnZXRwcGlkKCkpICsgJm1f
cGF0aC5kYXRhKClbMTBdOworICAgICAgICBtX3BhdGggPSByZXNvbHZlZFNlbGZQYXRoLnV0Zjgo
KS5kYXRhKCk7CisgICAgfQorCisgICAgU3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbiBwZXJtaXNz
aW9uID0gU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZDsKKyAgICBpZiAobV9mbGFncyAmIE9fUkRX
UikKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1p
c3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgIGVs
c2UgaWYgKG1fZmxhZ3MgJiBPX1dST05MWSkKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19j
YXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5
OjpXcml0ZSk7CisgICAgZWxzZQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lz
Y2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xpY3k6OlJlYWQp
OworCisgICAgLy8gQ3JlYXRlIGEgZmlsZSBpbXBsaWVzIHdyaXRlIHBlcm1pc3Npb24gb24gdGhl
IGRpcmVjdG9yeS4KKyAgICBpZiAobV9mbGFncyAmIE9fQ1JFQVQgfHwgbV9mbGFncyAmIE9fRVhD
TCkKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1p
c3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisKKyAgICBpZiAoIXBv
bGljeS5oYXNQZXJtaXNzaW9uRm9yUGF0aChtX3BhdGguZGF0YSgpLCBwZXJtaXNzaW9uKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwgRUFDQ0VTKSk7
CisKKyAgICAvLyBQZXJtaXNzaW9uIGdyYW50ZWQsIGV4ZWN1dGUgdGhlIHN5c2NhbGwuIFRoZSBz
eXNjYWxsIG1pZ2h0IHN0aWxsCisgICAgLy8gZmFpbCBiZWNhdXNlIG9mIGhhcmQgcGVybWlzc2lv
bnMgZW5mb3JjZWQgYnkgdGhlIGZpbGVzeXN0ZW0gYW5kCisgICAgLy8gdGhpbmdzIGxpa2UgdGhl
IGVudHJ5IGRvZXMgbm90IGV4aXN0LgorICAgIGludCBmZCA9IG9wZW4obV9wYXRoLmRhdGEoKSwg
bV9mbGFncywgbV9tb2RlKTsKKyAgICBpbnQgZXJyb3JOdW1iZXIgPSBmZCA9PSAtMSA/IGVycm5v
IDogMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGxSZXN1bHQoZmQsIGVy
cm9yTnVtYmVyKSk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGw6OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNvZGUodHlwZSgp
KTsKKyAgICBlbmNvZGVyLmVuY29kZShtX3BhdGgpOworICAgIGVuY29kZXIuZW5jb2RlKG1fZmxh
Z3MpOworICAgIGVuY29kZXIuZW5jb2RlKG1fbW9kZSk7Cit9CisKK2Jvb2wgT3BlblN5c2NhbGw6
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUobV9wYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKG1fZmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKG1fbW9kZSk7Cit9CisKK09wZW5TeXNjYWxsUmVzdWx0OjpP
cGVuU3lzY2FsbFJlc3VsdChpbnQgZmQsIGludCBlcnJvck51bWJlcikKKyAgICA6IFN5c2NhbGxS
ZXN1bHQoU0NNUF9TWVMob3BlbikpCisgICAgLCBtX2ZkKGZkKQorICAgICwgbV9lcnJvck51bWJl
cihlcnJvck51bWJlcikKK3sKK30KKworT3BlblN5c2NhbGxSZXN1bHQ6On5PcGVuU3lzY2FsbFJl
c3VsdCgpCit7CisgICAgaWYgKG1fZmQgPj0gMCkKKyAgICAgICAgY2xvc2UobV9mZCk7Cit9CisK
K3ZvaWQgT3BlblN5c2NhbGxSZXN1bHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNvZGUodHlwZSgpKTsKKworICAgIGlm
IChtX2ZkID49IDApIHsKKyAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCBhdHRhY2htZW50KG1f
ZmQpOworICAgICAgICBlbmNvZGVyLmFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CisgICAgfQor
CisgICAgZW5jb2Rlci5lbmNvZGUobV9lcnJvck51bWJlcik7Cit9CisKK2Jvb2wgT3BlblN5c2Nh
bGxSZXN1bHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIGludCBm
ZCkKK3sKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgbV9mZCA9IGZkOworCisgICAgcmV0dXJu
IGRlY29kZXItPmRlY29kZShtX2Vycm9yTnVtYmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvT3BlblN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2MzZDVlOGZkMGRlNDg1Y2Ji
NWYxMWMwZjJiZjQ1YWJlMGQ5NDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBPcGVuU3lzY2FsbF9oCisjZGVmaW5lIE9wZW5TeXNjYWxsX2gKKwor
I2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBB
cmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBPcGVuU3lzY2FsbCA6IHB1YmxpYyBTeXNjYWxsIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBPcGVuU3lzY2FsbChtY29udGV4dF90Kik7CisKKyAgICAvLyBTeXNjYWxs
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHQoY29uc3QgU3lzY2Fs
bFJlc3VsdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRl
KGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKik7CisKK3ByaXZhdGU6CisgICAgQ1N0cmluZyBtX3BhdGg7Cisg
ICAgaW50IG1fZmxhZ3M7CisgICAgbW9kZV90IG1fbW9kZTsKK307CisKK2NsYXNzIE9wZW5TeXNj
YWxsUmVzdWx0IDogcHVibGljIFN5c2NhbGxSZXN1bHQgeworcHVibGljOgorICAgIE9wZW5TeXNj
YWxsUmVzdWx0KGludCBmZCwgaW50IGVycm9yTnVtYmVyKTsKKyAgICB+T3BlblN5c2NhbGxSZXN1
bHQoKTsKKworICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmQ7IH0KKyAgICBpbnQgZXJy
b3JOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTnVtYmVyOyB9CisKKyAgICAvLyBTeXNj
YWxsUmVzdWx0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQpOworCitwcml2YXRlOgorICAgIGludCBtX2Zk
OworICAgIGludCBtX2Vycm9yTnVtYmVyOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBPcGVuU3lz
Y2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJy
b2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWY0NjMxNWFkZDM0MjI2ZGE5N2MxNDc5YWVmMmIwMmU0MDY2OWJhMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wQnJva2Vy
LmNwcApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNlY2NvbXBCcm9rZXIuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisK
KyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2VjY29tcC5oPgor
I2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIFNZU19TRUNDT01Q
CisjZGVmaW5lIFNZU19TRUNDT01QIDEKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1l
c3NhZ2VNYXhTaXplID0gNDA5NjsKK3N0YXRpYyBjb25zdCBjaGFyIGNwdUNvdW50UGF0aFtdID0g
Ii9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSI7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTZWNjb21wQnJva2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2VjY29t
cEJyb2tlckNsaWVudCYgc2hhcmVkKGludCBzb2NrZXQ9LTEpOworICAgIH5TZWNjb21wQnJva2Vy
Q2xpZW50KCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKFN5c2NhbGwqKSBjb25zdDsKKyAgICBib29s
IGhhbmRsZUlmT3BlbmluZ0NQVUNvdW50KG1jb250ZXh0X3QqKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBTZWNjb21wQnJva2VyQ2xpZW50KGludCBzb2NrZXQpOworCisgICAgaW50IG1fc29ja2V0
OworICAgIGludCBtX25jcHVzOworCisgICAgbXV0YWJsZSBNdXRleCBtX3NvY2tldExvY2s7Cit9
OworCitzdGF0aWMgc3NpemVfdCBzZW5kTWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRhLCBz
aXplX3Qgc2l6ZSwgaW50IGZkPS0xKQoreworICAgIEFTU0VSVChzaXplIDw9IG1lc3NhZ2VNYXhT
aXplKTsKKworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2Us
IDAsIHNpemVvZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIG1lbXNl
dCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBp
b3YuaW92X2xlbiA9IHNpemU7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAmaW92OworICAgIG1l
c3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXpl
b2YoZmQpKV07CisgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJv
bCA9IGNvbnRyb2w7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29u
dHJvbCk7CisgICAgICAgIG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1z
Z19jb250cm9sbGVuKTsKKworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9IENNU0dfRklS
U1RIRFIoJm1lc3NhZ2UpOworICAgICAgICBjbXNnLT5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsK
KyAgICAgICAgY21zZy0+Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKKyAgICAgICAgY21zZy0+Y21z
Z19sZW4gPSBDTVNHX0xFTihzaXplb2YoZmQpKTsKKworICAgICAgICBtZW1tb3ZlKENNU0dfREFU
QShjbXNnKSwgJmZkLCBzaXplb2YoZmQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VuZG1zZyhz
b2NrZXQsICZtZXNzYWdlLCAwKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjZWl2ZU1lc3NhZ2Uo
aW50IHNvY2tldCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGludCogZmQgPSAwKQoreworICAg
IHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZiht
ZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIG1lbXNldCgmaW92LCAwLCBz
aXplb2YoaW92KSk7CisgICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBpb3YuaW92X2xlbiA9
IHNpemU7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAmaW92OworICAgIG1lc3NhZ2UubXNnX2lv
dmxlbiA9IDE7CisKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2YoZmQpKV07Cisg
ICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGNvbnRyb2w7CisgICAgbWVzc2FnZS5tc2dfY29udHJv
bGxlbiA9IHNpemVvZihjb250cm9sKTsKKyAgICBtZW1zZXQobWVzc2FnZS5tc2dfY29udHJvbCwg
MCwgbWVzc2FnZS5tc2dfY29udHJvbGxlbik7CisKKyAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMg
PSByZWN2bXNnKHNvY2tldCwgJm1lc3NhZ2UsIDApOworCisgICAgaWYgKGZkICYmIHJlY2VpdmVk
Qnl0ZXMgPiAwKSB7CisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhE
UigmbWVzc2FnZSk7CisgICAgICAgIGlmIChjbXNnICYmIGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09M
X1NPQ0tFVCAmJiBjbXNnLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykKKyAgICAgICAgICAgIG1l
bWNweShmZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YoKmZkKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICpmZCA9IC0xOworICAgIH0KKworICAgIHJldHVybiByZWNlaXZlZEJ5dGVzOwor
fQorCitzdGF0aWMgdm9pZCBzeXNTaWduYWxIYW5kbGVyKGludCBzaWduYWwsIHNpZ2luZm9fdCog
aW5mbywgdm9pZCogZGF0YSkKK3sKKyAgICBpZiAoc2lnbmFsICE9IFNJR1NZUyB8fCBpbmZvLT5z
aV9jb2RlICE9IFNZU19TRUNDT01QKQorICAgICAgICBDUkFTSCgpOworCisgICAgdWNvbnRleHRf
dCogY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPihkYXRhKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAoU2VjY29tcEJyb2tlckNsaWVudDo6
c2hhcmVkKCkuaGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQoJmNvbnRleHQtPnVjX21jb250ZXh0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGwgPSBTeXNjYWxs
OjpjcmVhdGVGcm9tQ29udGV4dCgmY29udGV4dC0+dWNfbWNvbnRleHQpOworICAgIFNlY2NvbXBC
cm9rZXJDbGllbnQ6OnNoYXJlZCgpLmRpc3BhdGNoKHN5c2NhbGwuZ2V0KCkpOworfQorCitzdGF0
aWMgdm9pZCByZWdpc3RlclN5c1NpZ25hbEhhbmRsZXIoKQoreworICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7CisgICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZzeXNTaWduYWxIYW5kbGVyOworICAgIGFjdGlvbi5zYV9m
bGFncyA9IFNBX1NJR0lORk8gfCBTQV9OT0RFRkVSOworCisgICAgaWYgKHNpZ2FjdGlvbihTSUdT
WVMsICZhY3Rpb24sIDApIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHNpZ3NldF90IG1h
c2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywgU0lHU1lT
KTsKKworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApIDwgMCkKKyAg
ICAgICAgQ1JBU0goKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudCYgU2VjY29tcEJyb2tlckNs
aWVudDo6c2hhcmVkKGludCBzb2NrZXQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTZWNj
b21wQnJva2VyQ2xpZW50LCBicm9rZXJDbGllbnQsIChzb2NrZXQpKTsKKworICAgIHJldHVybiBi
cm9rZXJDbGllbnQ7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBCcm9rZXJDbGll
bnQoaW50IHNvY2tldCkKKyAgICA6IG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fbmNwdXMob3Bl
bihjcHVDb3VudFBhdGgsIE9fUkRPTkxZKSkKK3sKKyAgICBBU1NFUlQobV9zb2NrZXQgPj0gMCAm
JiBtX25jcHVzID49IDApOworfQorCitTZWNjb21wQnJva2VyQ2xpZW50Ojp+U2VjY29tcEJyb2tl
ckNsaWVudCgpCit7CisgICAgY2xvc2UobV9zb2NrZXQpOworICAgIGNsb3NlKG1fbmNwdXMpOwor
fQorCit2b2lkIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmRpc3BhdGNoKFN5c2NhbGwqIHN5c2NhbGwp
IGNvbnN0Cit7CisgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcj4gZW5jb2RlciA9
IENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6Y3JlYXRlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KCpzeXNjYWxsKTsKKworICAgIGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKKyAgICBzc2l6
ZV90IHJlY2VpdmVkQnl0ZXMgPSAwOworICAgIGludCBmZCA9IC0xOworICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fc29ja2V0TG9jayk7CisgICAgICAgIGlmIChzZW5kTWVzc2Fn
ZShtX3NvY2tldCwgZW5jb2Rlci0+YnVmZmVyKCksIGVuY29kZXItPmJ1ZmZlclNpemUoKSkgPCAw
KQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICB3aGlsZSAocmVjZWl2ZWRCeXRlcyA8
PSAwKSB7CisgICAgICAgICAgICByZWNlaXZlZEJ5dGVzID0gcmVjZWl2ZU1lc3NhZ2UobV9zb2Nr
ZXQsICZidWZmZXIsIHNpemVvZihidWZmZXIpLCAmZmQpOworICAgICAgICAgICAgaWYgKHJlY2Vp
dmVkQnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBicm9rZXIgc2hvdWxkIG5vdCBzaHV0
ZG93biBiZWZvcmUgdGhlIGNsaWVudC4KKyAgICAgICAgICAgIGlmICghcmVjZWl2ZWRCeXRlcykK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgfQorCisgICAgT3duUHRy
PENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gZGVjb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6Y3JlYXRlKChjb25zdCB1aW50OF90KikgYnVmZmVyLCByZWNlaXZlZEJ5dGVzKTsKKyAg
ICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0ID0gU3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJv
bURlY29kZXIoZGVjb2Rlci5nZXQoKSwgZmQpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBD
UkFTSCgpOworCisgICAgc3lzY2FsbC0+c2V0UmVzdWx0KHJlc3VsdC5nZXQoKSk7Cit9CisKK2Jv
b2wgU2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQobWNvbnRleHRf
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExd
ICE9IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBj
aGFyICpwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29udGV4dC0+Z3JlZ3NbUkVHX0FS
RzBdKTsKKyAgICBpZiAoc3RyY21wKGNwdUNvdW50UGF0aCwgcGF0aCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIE1hbGxvYyB3aWxsIHNvbWV0aW1lcyBjaGVjayB0aGUgbnVtYmVy
IG9mIENQVXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtCisgICAgLy8gYnkgb3BlbmluZyBhIHNwZWNp
YWwgZmlsZS4gSWYgaXQgZG9lcyB0aGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIFNJR1NZUworICAg
IC8vIHNpZ25hbCBoYW5kbGVyLCBpdCBtaWdodCB0cmlnZ2VyIGEgcmVjdXJzaXZlIGF0dGVtcHQg
b2YgcHJveHlpbmcgdGhlCisgICAgLy8gb3BlbigpIHN5c2NhbGwgdG8gdGhlIGJyb2tlci4gQmVj
YXVzZSBvZiB0aGF0LCB3ZSBjYWNoZSB0aGlzIHJlc291cmNlLgorICAgIGNvbnRleHQtPmdyZWdz
W1JFR19TWVNDQUxMXSA9IGR1cChtX25jcHVzKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNlY2NvbXBCcm9rZXI6OnN0YXJ0V2l0aFBvbGljeShjb25zdCBTeXNjYWxsUG9saWN5JiBw
b2xpY3kpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAo
aW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY2NvbXBCcm9rZXIgc2VjY29t
cEJyb2tlcjsKKyAgICBzZWNjb21wQnJva2VyLnNldFN5c2NhbGxQb2xpY3kocG9saWN5KTsKKyAg
ICBzZWNjb21wQnJva2VyLmluaXRpYWxpemUoKTsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsK
K30KKwordm9pZCBTZWNjb21wQnJva2VyOjppbml0aWFsaXplKCkKK3sKKyAgICBpbnQgc29ja2V0
c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0
cykgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgcGlkX3QgcGlkID0gZm9yaygpOworICAg
IGlmIChwaWQpIHsgLy8gV2ViUHJvY2Vzcy4KKyAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7Cisg
ICAgICAgIFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZChzb2NrZXRzWzBdKTsKKyAgICAgICAg
cmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKCk7CisgICAgfSBlbHNlIHsgLy8gQnJva2VyLgorICAg
ICAgICAvLyBUT0RPOiBUaGUgYnJva2VyIHNob3VsZCBzZXR1cCBzZWNjb21wIGZpbHRlcnMKKyAg
ICAgICAgLy8gZm9yIGl0c2VsZiBhbmQgYmxvY2sgZXZlcnl0aGluZyBlbHNlIG90aGVyIHRoYW4K
KyAgICAgICAgLy8gdGhlIG1pbmltYWwgc2V0IG9mIHN5c2NhbGxzIG5lZWRlZCB0byBleGVjdXRl
IHRoZQorICAgICAgICAvLyBzeXNjYWxscyBpdCBpcyBzdXBwb3NlIHRvIHByb3h5LgorICAgICAg
ICBjbG9zZShzb2NrZXRzWzBdKTsKKyAgICAgICAgcnVuTG9vcChzb2NrZXRzWzFdKTsKKyAgICB9
Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlcjo6cnVuTG9vcChpbnQgc29ja2V0KQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBpbnQgaSA9IFNUREVSUl9GSUxFTk8gKyAxOworI2Vsc2UKKyAgICBpbnQg
aSA9IDA7CisjZW5kaWYKKyAgICAvLyBDbG9zZSBhbGwgaW5oZXJpdGVkIGZpbGUgZGVzY3JpcHRv
cnMgb3RoZXIKKyAgICAvLyB0aGFuIHRoZSBzb2NrZXQgdG8gdGhlIHNhbmRib3hlZCBwcm9jZXNz
LgorICAgIGZvciAoOyBpIDwgRkRfU0VUU0laRTsgKytpKQorICAgICAgICBpZiAoaSAhPSBzb2Nr
ZXQpCisgICAgICAgICAgICBjbG9zZShpKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKKyAgICAgICAgc3NpemVfdCByZWNlaXZlZEJ5
dGVzID0gcmVjZWl2ZU1lc3NhZ2Uoc29ja2V0LCAmYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisK
KyAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8g
PT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGV4aXQo
RVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vcm1hbCBzaHV0ZG93biBm
cm9tIHRoZSBjbGllbnQuCisgICAgICAgIGlmICghcmVjZWl2ZWRCeXRlcykKKyAgICAgICAgICAg
IGV4aXQoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyPiBkZWNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVhdGUoKGNvbnN0
IHVpbnQ4X3QqKSBidWZmZXIsIHJlY2VpdmVkQnl0ZXMpOworICAgICAgICBPd25QdHI8U3lzY2Fs
bD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKGRlY29kZXIuZ2V0KCkpOwor
ICAgICAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisK
KyAgICAgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IHN5c2NhbGwtPmV4ZWN1dGUo
bV9wb2xpY3kpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGV4aXQoRVhJVF9G
QUlMVVJFKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBlbmNv
ZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKCpyZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxDb3JlSVBDOjpBdHRhY2htZW50
PiBhdHRhY2htZW50cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2htZW50cygpOworICAgICAgICBp
bnQgZmQgPSBhdHRhY2htZW50cy5zaXplKCkgPT0gMSA/IGF0dGFjaG1lbnRzWzBdLmZpbGVEZXNj
cmlwdG9yKCkgOiAtMTsKKworICAgICAgICAvLyBUaGUgY2xpZW50IGlzIGRvd24sIHRoZSBicm9r
ZXIgc2hvdWxkIGdvIGF3YXkuCisgICAgICAgIGlmIChzZW5kTWVzc2FnZShzb2NrZXQsIGVuY29k
ZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCksIGZkKSA8IDApCisgICAgICAgICAg
ICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2M2ZGJjYWU2NGU0ZTVlNmIx
NzBhZmFiODkxMzE2NjI1MmVjNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBCcm9rZXJfaAorI2RlZmluZSBTZWNjb21wQnJva2Vy
X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTeXNjYWxsLmgi
CisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21w
QnJva2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wQnJva2VyKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyB2b2lkIHN0YXJ0V2l0aFBvbGljeShjb25zdCBTeXNjYWxsUG9saWN5
Jik7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIHNldFN5c2NhbGxQb2xpY3ko
Y29uc3QgU3lzY2FsbFBvbGljeSYgcG9saWN5KSB7IG1fcG9saWN5ID0gcG9saWN5OyB9CisKK3By
aXZhdGU6CisgICAgU2VjY29tcEJyb2tlcigpIHsgfQorCisgICAgdm9pZCBydW5Mb29wKGludCBz
b2NrZXQpOworCisgICAgU3lzY2FsbFBvbGljeSBtX3BvbGljeTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlm
IC8vIFNlY2NvbXBCcm9rZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdjNzNiNWU3NzAwNjFjZmY1OGNlOGYyZGVkYjA4
ZTEyZDM2MzMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNp
ZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgor
I2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OkFsbG93ID09
IFNDTVBfQUNUX0FMTE9XLCBBbGxvdyk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6
S2lsbCA9PSBTQ01QX0FDVF9LSUxMLCBLaWxsKTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0
ZXJzOjpUcmFwID09IFNDTVBfQUNUX1RSQVAsIFRyYXApOworCitTZWNjb21wRmlsdGVyczo6U2Vj
Y29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pCisgICAgOiBtX2NvbnRleHQoc2VjY29t
cF9pbml0KGRlZmF1bHRBY3Rpb24pKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKKyAg
ICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworU2VjY29tcEZpbHRlcnM6
On5TZWNjb21wRmlsdGVycygpCit7CisgICAgc2VjY29tcF9yZWxlYXNlKG1fY29udGV4dCk7Cit9
CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUoY29uc3QgY2hhciogc3lzY2FsbE5hbWUs
IEFjdGlvbiBhY3Rpb24pCit7CisgICAgaW50IHN5c2NhbGwgPSBzZWNjb21wX3N5c2NhbGxfcmVz
b2x2ZV9uYW1lKHN5c2NhbGxOYW1lKTsKKyAgICBpZiAoc3lzY2FsbCA9PSBfX05SX1NDTVBfRVJS
T1IpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAoc2VjY29tcF9ydWxlX2FkZChtX2NvbnRl
eHQsIGFjdGlvbiwgc3lzY2FsbCwgMCkgPCAwKQorICAgICAgICBDUkFTSCgpOworfQorCit2b2lk
IFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wbGVtZW50IHRoaXMgaXMgbm90IHJlcXVpcmVk
IGluIGNhc2Ugd2UgYXJlIGp1c3QKKyAgICAvLyBzZXR0aW5nIGZpbHRlcnMuIFRoaXMgaXMgYSBn
b29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKKyAgICAvLyBicm9rZXIgYW5kIHN5c2NhbGwgcG9saWN5
IG90aGVyd2lzZS4KKyAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAgIGlmIChzZWNjb21w
X2xvYWQobV9jb250ZXh0KSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICBtX2luaXRpYWxp
emVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzFlMWVhZmMxMWIwNDFlMzdhYTMwNzkzYjM3MzhkMDA1
NDZhMDYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJzX2gKKworI2lmIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNjb21wQnJva2VyLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBT
ZWNjb21wRmlsdGVycyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjY29tcEZpbHRlcnMp
OworCitwdWJsaWM6CisgICAgZW51bSBBY3Rpb24geworICAgICAgICBBbGxvdyA9IDB4N2ZmZjAw
MDBVLAorICAgICAgICBLaWxsICA9IDB4MDAwMDAwMDBVLAorICAgICAgICBUcmFwICA9IDB4MDAw
MzAwMDBVCisgICAgfTsKKworICAgIGV4cGxpY2l0IFNlY2NvbXBGaWx0ZXJzKEFjdGlvbiBkZWZh
dWx0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIH5TZWNjb21wRmlsdGVycygpOworCisgICAgdm9pZCBh
ZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24pOworICAgIHZvaWQgaW5pdGlh
bGl6ZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUo
KSB7IH0KKworICAgIHR5cGVkZWYgdm9pZCAqSEFORExFOworCisgICAgSEFORExFIG1fY29udGV4
dDsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21w
RmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2Fs
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2FsbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGE5NTJlZmIyOTE0NmM2OTAzZDYyYTk0MmNkODBlMTljODZmN2E1MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmNwcApAQCAtMCwwICsx
LDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiT3BlblN5c2NhbGwuaCIKKyNpbmNsdWRlIDxz
ZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFN5c2NhbGw+IFN5
c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7CisgICAgaWYg
KGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9PSBTQ01QX1NZUyhvcGVuKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbChjb250ZXh0KSk7CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxTeXNj
YWxsPiBTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGRlY29kZXIpCit7CisgICAgaW50IHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlw
ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgT3duUHRyPFN5c2NhbGw+IHN5c2Nh
bGw7CisgICAgaWYgKHR5cGUgPT0gU0NNUF9TWVMob3BlbikpCisgICAgICAgIHN5c2NhbGwgPSBh
ZG9wdFB0cihuZXcgT3BlblN5c2NhbGwoMCkpOworCisgICAgaWYgKCFzeXNjYWxsLT5kZWNvZGUo
ZGVjb2RlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN5c2NhbGwu
cmVsZWFzZSgpOworfQorCitTeXNjYWxsOjpTeXNjYWxsKGludCB0eXBlLCBtY29udGV4dF90KiBj
b250ZXh0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sK
K30KKworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBTeXNjYWxsUmVzdWx0OjpjcmVhdGVGcm9t
RGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIGludCBmZCkKK3sKKyAg
ICBpbnQgdHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0OworICAgIGlm
ICh0eXBlID09IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICByZXN1bHQgPSBhZG9wdFB0cihuZXcg
T3BlblN5c2NhbGxSZXN1bHQoLTEsIDApKTsKKworICAgIGlmICghcmVzdWx0LT5kZWNvZGUoZGVj
b2RlciwgZmQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOworfQorCitTeXNjYWxsUmVzdWx0OjpTeXNjYWxsUmVzdWx0KGludCB0eXBlKQor
ICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9TeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lz
Y2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI3NzhkMTk4NGM5ZTlkNzMwZTRmMDdhOTM2YzgyYzhjNzM5OTg1
NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU3lzY2Fs
bC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN5c2Nh
bGxfaAorI2RlZmluZSBTeXNjYWxsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisK
KyNpZiBDUFUoWDg2XzY0KQorI2RlZmluZSBSRUdfU1lTQ0FMTCBSRUdfUkFYCisjZGVmaW5lIFJF
R19BUkcwICAgIFJFR19SREkKKyNkZWZpbmUgUkVHX0FSRzEgICAgUkVHX1JTSQorI2RlZmluZSBS
RUdfQVJHMiAgICBSRUdfUkRYCisjZWxpZiBDUFUoWDg2KQorI2RlZmluZSBSRUdfU1lTQ0FMTCBS
RUdfRUFYCisjZGVmaW5lIFJFR19BUkcwICAgIFJFR19FQlgKKyNkZWZpbmUgUkVHX0FSRzEgICAg
UkVHX0VDWAorI2RlZmluZSBSRUdfQVJHMiAgICBSRUdfRURYCisjZWxzZQorI2Vycm9yICJDUFUg
bm90IHN1cHBvcnRlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVj
b2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFN5c2NhbGxSZXN1bHQ7CitjbGFzcyBTeXNjYWxsUG9saWN5OworCitjbGFzcyBTeXNj
YWxsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsKTsKKworcHVibGljOgorICAg
IHZpcnR1YWwgflN5c2NhbGwoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGw+
IGNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxT
eXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKwor
ICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgbWNvbnRleHRfdCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdmlydHVhbCB2b2lk
IHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0KikgPSAwOworICAgIHZpcnR1YWwgUGFzc093
blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3kmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNjYWxsKGludCB0eXBlLCBtY29udGV4dF90Kik7CisK
K3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsKKyAgICBtY29udGV4dF90KiBtX2NvbnRleHQ7Cit9
OworCitjbGFzcyBTeXNjYWxsUmVzdWx0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNj
YWxsUmVzdWx0KTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2NhbGxSZXN1bHQoKSB7IH0K
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IGNyZWF0ZUZyb21EZWNvZGVy
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGludCBmZCk7CisKKyAgICBpbnQgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQ9LTEpID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIFN5c2NhbGxSZXN1bHQoaW50IHR5cGUpOworCitwcml2YXRlOgorICAgIGludCBtX3R5cGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDBlMDcxNTYyYjg1ZWQ5YWM5
ZDUyMmEwZTQ2M2Q1NTFmZTcwMjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5
LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8bGliZ2VuLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFN5c2NhbGxQb2xpY3k6Omhhc1Blcm1pc3Np
b25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Npb24gcGVybWlzc2lvbikgY29uc3QK
K3sKKyAgICAvLyBUaGUgcm9vdCBkaXJlY3RvcnkgcG9saWN5IG5lZWRzIHRvIGJlIHNldCBiZWNh
dXNlIGl0IGlzIHRoZQorICAgIC8vIHVsdGltYXRlIGZhbGxiYWNrIHdoZW4gcmV3aW5kaW5nIGRp
cmVjdG9yaWVzLgorICAgIEFTU0VSVChtX2RpcmVjdG9yeVBvbGljeS5jb250YWlucygiLyIpKTsK
KworICAgIGlmIChwZXJtaXNzaW9uID09IE5vdEFsbG93ZWQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNoYXIqIGJhc2VQYXRoID0gc3RyZHVwKHBhdGgpOworICAgIGNoYXIqIGNhbm9u
aWNhbFBhdGggPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKGJhc2VQYXRoKTsKKworICAgIGlmIChj
YW5vbmljYWxQYXRoKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHBhdGhTdGF0OworICAgICAgICBp
ZiAoc3RhdChjYW5vbmljYWxQYXRoLCAmcGF0aFN0YXQpID09IC0xKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIC8vIElmIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5LCB3ZSBm
b3JjZSB0aGUgcmV3aW5kLgorICAgICAgICBpZiAoIVNfSVNESVIocGF0aFN0YXQuc3RfbW9kZSkp
IHsKKyAgICAgICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7CisgICAgICAgICAgICBjYW5vbmlj
YWxQYXRoID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICghY2Fub25pY2FsUGF0
aCkgeworICAgICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoYmFzZVBh
dGgpOworICAgICAgICBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShjdXJy
ZW50QmFzZURpcmVjdG9yeSk7CisgICAgfQorCisgICAgUGVybWlzc2lvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgcG9saWN5ID0gbV9kaXJlY3RvcnlQb2xpY3kuZmluZChTdHJpbmcoY2Fub25pY2FsUGF0
aCkpOworICAgIHdoaWxlIChwb2xpY3kgPT0gbV9kaXJlY3RvcnlQb2xpY3kuZW5kKCkpIHsKKyAg
ICAgICAgY2hhciogY3VycmVudEJhc2VEaXJlY3RvcnkgPSBkaXJuYW1lKGNhbm9uaWNhbFBhdGgp
OworICAgICAgICBwb2xpY3kgPSBtX2RpcmVjdG9yeVBvbGljeS5maW5kKFN0cmluZyhjdXJyZW50
QmFzZURpcmVjdG9yeSkpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoKHBlcm1p
c3Npb24gJiBwb2xpY3ktPnZhbHVlKSAhPSBwZXJtaXNzaW9uKQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlNlY2NvbXBCcm9rZXI6IEFjY2VzcyBkZW5pZWQgdG8gJXNcbiIsIHBhdGgpOworI2Vu
ZGlmCisKKyAgICBmcmVlKGJhc2VQYXRoKTsKKyAgICBmcmVlKGNhbm9uaWNhbFBhdGgpOworCisg
ICAgcmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgPT0gcGVybWlzc2lvbjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xp
Y3kuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzY2MGJhMmM1YzkwZTcwZGViNmM1MDg4NTI0NTcxZTc1NDYyZDFlYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTeXNjYWxsUG9saWN5
X2gKKyNkZWZpbmUgU3lzY2FsbFBvbGljeV9oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBTeXNjYWxsUG9saWN5IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBlcm1pc3Np
b24geworICAgICAgICBOb3RBbGxvd2VkICAgPSAwLAorICAgICAgICBSZWFkICAgICAgICAgPSAx
LAorICAgICAgICBXcml0ZSAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFJlYWRBbmRXcml0ZSA9
IFJlYWQgfCBXcml0ZQorICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+
IFBlcm1pc3Npb25NYXA7CisKKyAgICB2b2lkIHNldERpcmVjdG9yeVBvbGljeShjb25zdCBQZXJt
aXNzaW9uTWFwJiBwb2xpY3kpIHsgbV9kaXJlY3RvcnlQb2xpY3kgPSBwb2xpY3k7IH0KKyAgICBi
b29sIGhhc1Blcm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Npb24pIGNv
bnN0OworCitwcml2YXRlOgorICAgIFBlcm1pc3Npb25NYXAgbV9kaXJlY3RvcnlQb2xpY3k7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsUG9saWN5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Y2U0
OTVkOTEwM2Y4MzI1Nzg2ZWQ3Yzc0MTNhMTU5MmUxMzdmZWViCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTZWNjb21wRmlsdGVyc0VmbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVS
UykKKworI2luY2x1ZGUgPEVmcmVldC5oPgorI2luY2x1ZGUgPFdlYktpdDIvU3lzY2FsbFBvbGlj
eS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2VjY29tcEZpbHRlcnNFZmw6OlNlY2NvbXBG
aWx0ZXJzRWZsKCkKKyAgICA6IFNlY2NvbXBGaWx0ZXJzKEFsbG93KQoreworICAgIC8vIFNpbmNl
IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW4gYSB2ZXJ5IGVhcmx5IHN0YWdlLCB3ZSBhcmUKKyAg
ICAvLyBub3Qgd2hpdGVsaXN0aW5nIHN5c2NhbGxzIGhlcmUuIElkZWFsbHkgd2Ugc2hvdWxkIGJs
b2NrIGJ5CisgICAgLy8gZGVmYXVsdCBhbmQgY29tcGlsZSBhIGxpc3Qgb2Ygd2hhdCBpcyBhbGxv
d2VkIGFuZCB3aGF0IHNob3VsZAorICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhlIGJyb2tlci4KK30K
Kwordm9pZCBTZWNjb21wRmlsdGVyc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBh
ZGRSdWxlKCJvcGVuIiwgVHJhcCk7CisKKyAgICBBU1NFUlQoZWZyZWV0X2luaXQoKSk7CisKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcm9vdERpciwgKEFTQ0lJTGl0ZXJhbCgiLyIp
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGV0Y0RpciwgKEFTQ0lJTGl0ZXJh
bCgiL2V0YyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGxpYkRpciwgKEFT
Q0lJTGl0ZXJhbCgiL2xpYiIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHBy
b2NEaXIsIChBU0NJSUxpdGVyYWwoIi9wcm9jIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgc3lzRGlyLCAoQVNDSUlMaXRlcmFsKCIvc3lzIikpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgdXNyRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyIikpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZGV2RGlyLCAoQVNDSUlMaXRlcmFsKCIvZGV2Iikp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdG1wRGlyLCAoQVNDSUlMaXRlcmFs
KCIvdG1wIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcnVuU2htRGlyLCAo
QVNDSUlMaXRlcmFsKCIvcnVuL3NobSIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGVmbERhdGFEaXIsIChTdHJpbmc6OmZyb21VVEY4KGVmcmVldF9kYXRhX2hvbWVfZ2V0KCkp
ICsgIi9XZWJLaXRFZmwiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGVmbENh
Y2hlRGlyLCAoU3RyaW5nOjpmcm9tVVRGOChlZnJlZXRfY2FjaGVfaG9tZV9nZXQoKSkgKyAiL1dl
YktpdEVmbCIpKTsKKworICAgIFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb25NYXAgZGlyZWN0b3J5
UG9saWN5OworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQocm9vdERpciwgU3lzY2FsbFBvbGljeTo6
Tm90QWxsb3dlZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChldGNEaXIsIFN5c2NhbGxQb2xp
Y3k6OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQobGliRGlyLCBTeXNjYWxsUG9saWN5
OjpSZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHByb2NEaXIsIFN5c2NhbGxQb2xpY3k6
OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQoc3lzRGlyLCBTeXNjYWxsUG9saWN5OjpS
ZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHVzckRpciwgU3lzY2FsbFBvbGljeTo6UmVh
ZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChkZXZEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRB
bmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0bXBEaXIsIFN5c2NhbGxQb2xpY3k6
OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChydW5TaG1EaXIsIFN5c2Nh
bGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChlZmxEYXRh
RGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgIGRpcmVjdG9yeVBvbGljeS5z
ZXQoZWZsQ2FjaGVEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgLy8gRGV2ZWxvcGVycyB1c2luZyBidWlsZC13ZWJraXQgLS1lZmwgZXhwZWN0
IHNvbWUgbGlicmFyaWVzIHRvIGJlIGxvYWRlZAorICAgIC8vIGZyb20gamhidWlsZCByb290IGZv
bGRlciB3aGljaCBpcyB1c3VhbGx5IGluc2lkZSBXZWJLaXRCdWlsZC4gV2UKKyAgICAvLyBhcmUg
dXNpbmcgdGhlIHByb2plY3Qgcm9vdCBoZXJlIHRvIGJlIG5pY2UgaWYgdGhlIGRldmVsb3BlciBk
ZWNpZGVzCisgICAgLy8gdG8gdXNlIFdFQktJVE9VVFBVVERJUi4KKyAgICBjaGFyKiBwYXRoID0g
Y2Fub25pY2FsaXplX2ZpbGVfbmFtZShQUk9KRUNUX1JPT1RfRElSKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgcHJvamVjdFJvb3REaXIsIChTdHJpbmc6OmZyb21VVEY4KHBhdGgp
KSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChwcm9qZWN0Um9vdERpciwgU3lzY2FsbFBvbGlj
eTo6UmVhZEFuZFdyaXRlKTsKKyAgICBmcmVlKHBhdGgpOworI2VuZGlmCisKKyAgICBTeXNjYWxs
UG9saWN5IHBvbGljeTsKKyAgICBwb2xpY3kuc2V0RGlyZWN0b3J5UG9saWN5KGRpcmVjdG9yeVBv
bGljeSk7CisKKyAgICBlZnJlZXRfc2h1dGRvd24oKTsKKworICAgIFNlY2NvbXBCcm9rZXI6OnN0
YXJ0V2l0aFBvbGljeShwb2xpY3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODQ2OTdkZWFlNzIy
NzFmMzlhZjc3YzVlY2RlYjhkMTlhY2YxYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuaApAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzRWZsX2gKKyNkZWZp
bmUgU2VjY29tcEZpbHRlcnNFZmxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzRWZsIDogcHVibGljIFNlY2NvbXBGaWx0ZXJzIHsKK3B1
YmxpYzoKKyAgICBTZWNjb21wRmlsdGVyc0VmbCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBG
aWx0ZXJzRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dl
YlByb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlBy
b2Nlc3NNYWluRWZsLmNwcAppbmRleCA2MjJkZTUxYjBjNzExMTBjZWFjOTI2Y2UyMzE3Mzc4ZDg2
ZDQxNDU3Li4xY2MzMDljYjVhMWNmNmJjNjJkMTFkOTAzNmEyYTdlYjY4ZmE2Y2U2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIExJQlNPVVBfVVNFX1VOU1RBQkxFX1JFUVVFU1Rf
QVBJCiAKICNpbmNsdWRlICJQcm94eVJlc29sdmVyU291cC5oIgorI2luY2x1ZGUgIlNlY2NvbXBG
aWx0ZXJzRWZsLmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSA8RWNvcmUuaD4KICNp
bmNsdWRlIDxFZnJlZXQuaD4KQEAgLTYwLDYgKzYxLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluRWZsKGludCBhcmdjLCBjaGFyKiBhcmd2W10p
CiB7CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICB7CisgICAgICAgIFNlY2NvbXBG
aWx0ZXJzRWZsIHNlY2NvbXBGaWx0ZXJzOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFs
aXplKCk7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBXZWJQcm9jZXNzIHNob3VsZCBiZSBsYXVu
Y2hlZCB3aXRoIGFuIG9wdGlvbi4KICAgICBpZiAoYXJnYyAhPSAyKQogICAgICAgICByZXR1cm4g
MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZSBiL1NvdXJj
ZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMThmMDIyOTE1Y2U2ODcz
MDY3ZWQ5OTE4NzI2M2FiNzUzY2YxYzAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtl
L0ZpbmRMaWJTZWNjb21wLmNtYWtlCkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJpZ2h0IChjKSAy
MDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisjCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0
aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyMgICBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0CisjICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
IyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjIFRyeSB0byBmaW5k
IGxpYnNlY2NvbXAgaW5jbHVkZSBhbmQgbGlicmFyeSBkaXJlY3Rvcmllcy4KKyMKKyMgQWZ0ZXIg
c3VjY2Vzc2Z1bCBkaXNjb3ZlcnksIHRoaXMgd2lsbCBzZXQgZm9yIGluY2x1c2lvbiB3aGVyZSBu
ZWVkZWQ6CisjIExJQlNFQ0NPTVBfSU5DTFVERV9ESVJTIC0gY29udGFpbmcgdGhlIGxpYnNlY2Nv
bXAgaGVhZGVycworIyBMSUJTRUNDT01QX0xJQlJBUklFUyAtIGNvbnRhaW5nIHRoZSBsaWJzZWNj
b21wIGxpYnJhcnkKKworaW5jbHVkZShGaW5kUGtnQ29uZmlnKQorCitwa2dfY2hlY2tfbW9kdWxl
cyhQQ19MSUJTRUNDT01QIGxpYnNlY2NvbXApCisKK2ZpbmRfcGF0aChMSUJTRUNDT01QX0lOQ0xV
REVfRElSUyBOQU1FUyBzZWNjb21wLmgKKyAgICBISU5UUyAke1BDX0xJQlNFQ0NPTVBfSU5DTFVE
RV9ESVJTfSAke1BDX0xJQlNFQ0NPTVBfSU5DTFVERURJUn0KKykKKworZmluZF9saWJyYXJ5KExJ
QlNFQ0NPTVBfTElCUkFSSUVTIE5BTUVTIHNlY2NvbXAKKyAgICBISU5UUyAke1BDX0xJQlNFQ0NP
TVBfTElCUkFSWV9ESVJTfSAke1BDX0xJQlNFQ0NPTVBfTElCRElSfQorKQorCitpbmNsdWRlKEZp
bmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFS
RF9BUkdTKHNlY2NvbXAgREVGQVVMVF9NU0cgTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgTElCU0VD
Q09NUF9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDdkZmVjNGNlYmJhNzc5Yjg3
MThkNjZiNDc5ZmNjMjkyZWIwZDgzMWIuLjJmMmZhN2FmNzJmZmUwZjcxYjEwZmI3NTMxMTMzY2Yw
MTQwNTg1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC03OSw2ICs3OSw3IEBAIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFf
UVVFUlkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVHSU9O
UyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0hBRE9XX0RPTSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TSEFSRURfV09SS0VSUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9TUEVMTENIRUNLIE9OKQpAQCAtMjEzLDYgKzIxNCwxMCBAQCBpZiAoRU5BQkxFX0lO
U1BFQ1RPUikKICAgICBhZGRfZGVmaW5pdGlvbnMoLURXRUJfSU5TUEVDVE9SX0lOU1RBTExfRElS
PVwiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtXRUJfSU5TUEVDVE9SX0RJUn1cIikKIGVuZGlm
ICgpCiAKK2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGZpbmRfcGFja2FnZShMaWJT
ZWNjb21wIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogc2V0KENQQUNLX1NPVVJDRV9HRU5FUkFUT1Ig
VEJaMikKIAogIyBPcHRpbWl6ZSBiaW5hcnkgc2l6ZSBmb3IgcmVsZWFzZSBidWlsZHMgYnkgcmVt
b3ZpbmcgZGVhZCBzZWN0aW9ucyBvbiB1bml4L2djYwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtl
CmluZGV4IDRkMTAyYTJjZGJiYjNhYTczOTczYjAzNDZkMDgwODA0OWEwY2E4NDMuLjFiNjIwMzY3
Yjc3YTU5NTk4MzhlYjZjMWE5ZDJmYzdkZGRiNjNmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMu
Y21ha2UKQEAgLTEwMCw2ICsxMDAsNyBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAg
IFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSAiVG9n
Z2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgIlRvZ2dsZSByZXNvbHV0aW9u
IG1lZGlhIHF1ZXJ5IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFC
TEVfU0NSSVBURURfU1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBzdXBwb3J0IiBP
RkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyAiVG9n
Z2xlIExpbnV4IHNlY2NvbXAgZmlsdGVycyBmb3IgdGhlIFdlYlByb2Nlc3Mgc3VwcG9ydCIgT0ZG
KQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJUb2dnbGUgU2hh
ZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NI
QVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYpCiAgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sgIlRvZ2dsZSBTcGVsbGNoZWNraW5n
IHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGEzODkz
Y2Q2ZGMyYmNjY2FkY2FiMjA2MWY1NWY4MDM1Njk0ZDY3YzYuLmM1ZmZlY2E3NTlkMDVhMjA5MDQw
ZmNiMzQwMmFkNzYwMTU5NDNkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05NCw2ICs5NCw3IEBACiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUKICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
U0NSSVBURURfU1BFRUNICisjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0VDQ09NUF9GSUxURVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NI
QVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9MTElORwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGJmYTEyMDM5
NGY0MTEyZGI1ZDg1OWQ5OWUyZDk4NzQwMGVmZGVlN2IuLmU1ZTEzNTdjMDFkOGIxMzc3MjRkZDdl
NDdiYWFlNWEzNGY5NWUzNWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMy0wMS0wNyAgVGhpYWdvIE1hcmNvcyBQ
LiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9w
IFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0
ZXN0cyB0byB2ZXJpZnkgaWYgdGhlIGhhbmRsaW5nIG9mIHRoZSBvcGVuKCkgc3lzY2FsbCBpcwor
ICAgICAgICBiZWluZyBkb25lIHJpZ2h0LiBXZSBjaGVjayBpZiB0aGUgUmVhZC9Xcml0ZS9SZWFk
QW5kV3JpdGUgcGVybWlzc2lvbnMKKyAgICAgICAgYXJlIHJlc3BlY3RlZCwgaWYgdGhlIGNhbm9u
aWNhbCBwYXRoIGlzIGJlaW5nIHJlc29sdmVkIGFuZCBpZgorICAgICAgICB0aGUgcGVybWlzc2lv
bnMgYXJlIGZhbGxpbmcgYmFjayB0byB0aGUgdG9wbW9zdCBwYXJlbnQgZGlyZWN0b3J5IHdpdGgg
YQorICAgICAgICBwb2xpY3kgc2V0IHdoZW4gdGhlIGRpcmVjdG9yeSBiZWluZyBvcGVuZWQgaGFz
IG5vIHBvbGljeS4KKworICAgICAgICBBbHNvIGFkZGVkIGxpYnNlY2NvbXAgdG8gRUZMJ3Mgamhi
dWlsZCB0byBtYWtlIHRoZSBsaWZlIG9mIGRldmVsb3BlcnMKKyAgICAgICAgd2lsbGluZyB0byBo
ZWxwIGVhc2llci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNw
cDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJKToKKyAgICAgICAgKFNlY2NvbXBFbnZp
cm9ubWVudCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1lbnQ6OlNl
dFVwKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY2NvbXBFbnZpcm9ubWVudDo6VGVhckRv
d24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogZWZsL2poYnVp
bGQubW9kdWxlczoKKwogMjAxMy0wMS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIFJhdGlvbmFsaXplIGNsb3N1cmUgY2FsbCBoZXVyaXN0aWNzIGFuZCBwcm9m
aWxpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDNjYTcxMWNjMGQx
MGY3Y2U0YTc4MzM1YzhlZTRjZTEzNDBhYWNjODAuLmI2YWYyZmVjMDM3YTMxOTUzOTUxNTExNmMy
OGU3ZmQyYWFhY2U4ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
ODUsNiArODUsMTIgQEAgc2V0KHRlc3Rfd2Via2l0Ml9hcGlfQklOQVJJRVMKICAgICBXaWxsU2Vu
ZFN1Ym1pdEV2ZW50CiApCiAKK2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGxpc3Qo
QVBQRU5EIHRlc3Rfd2Via2l0Ml9hcGlfQklOQVJJRVMKKyAgICAgICAgU2VjY29tcEZpbHRlcnMK
KyAgICApCitlbmRpZiAoKQorCiBzZXQodGVzdF93ZWJraXQyX2FwaV9mYWlsX0JJTkFSSUVTCiAg
ICAgQ2FuSGFuZGxlUmVxdWVzdAogICAgIERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DcmFzaApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0
ZXJzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVy
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWEzZWZlMzhlMWZkZDkwYzI2NTRmYmY1ZDcyNWU5NDM5MTM5NzA2
MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9T
ZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5o
PgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1N5c2NhbGxQb2xpY3kuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJvb3REaXIs
IChBU0NJSUxpdGVyYWwoIi8iKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGhvbWVE
aXIsIChTdHJpbmcoZ2V0ZW52KCJIT01FIikpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgdXNyRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCB1c3JTYmluRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyL3NiaW4iKSkpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJSZWFkLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB0ZXN0RGlyV3JpdGUsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRl
cnMvdGVzdFdyaXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVh
ZEFuZFdyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RS
ZWFkQW5kV3JpdGUiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJOb3RB
bGxvd2VkLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RB
bGxvd2VkIikpKTsKKworc3RhdGljIGNvbnN0IG1vZGVfdCBkZWZhdWx0TW9kZSA9IFNfSVJVU1Ig
fCBTX0lXVVNSIHwgU19JWFVTUjsKKworY2xhc3MgU2VjY29tcEVudmlyb25tZW50IDogcHVibGlj
IHRlc3Rpbmc6OkVudmlyb25tZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoIWhvbWVEaXIuaXNFbXB0eSgpKTsKKworICAg
ICAgICBta2RpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIsIGRlZmF1bHRNb2RlKTsKKyAg
ICAgICAgbWtkaXIodGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAg
ICAgICBta2Rpcih0ZXN0RGlyV3JpdGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAg
ICAgICBta2Rpcih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2Rl
KTsKKyAgICAgICAgbWtkaXIodGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgZGVmYXVs
dE1vZGUpOworCisgICAgICAgIC8vIENyZWF0ZSBhIGZpbGUgZm9yIHRoZSBSZWFkIG9ubHkgYW5k
IE5vdEFsbG93ZWQgZGlyZWN0b3J5IGJlZm9yZQorICAgICAgICAvLyBsb2FkaW5nIHRoZSBmaWx0
ZXJzLgorICAgICAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZSI7Cisg
ICAgICAgIGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFU
LCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKyAgICAg
ICAgZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgICAgIGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsK
KyAgICAgICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOworCisgICAgICAgIFN5c2NhbGxQb2xp
Y3k6OlBlcm1pc3Npb25NYXAgZGlyZWN0b3J5UG9saWN5OworICAgICAgICBkaXJlY3RvcnlQb2xp
Y3kuc2V0KHJvb3REaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworICAgICAgICBkaXJl
Y3RvcnlQb2xpY3kuc2V0KHVzckRpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgICAgIGRp
cmVjdG9yeVBvbGljeS5zZXQodXNyU2JpbkRpciwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7
CisgICAgICAgIGRpcmVjdG9yeVBvbGljeS5zZXQodGVzdERpclJlYWQsIFN5c2NhbGxQb2xpY3k6
OlJlYWQpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJXcml0ZSwgU3lzY2Fs
bFBvbGljeTo6V3JpdGUpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJSZWFk
QW5kV3JpdGUsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisKKyAgICAgICAgU3lzY2Fs
bFBvbGljeSBwb2xpY3k7CisgICAgICAgIHBvbGljeS5zZXREaXJlY3RvcnlQb2xpY3koZGlyZWN0
b3J5UG9saWN5KTsKKworICAgICAgICBTZWNjb21wQnJva2VyOjpzdGFydFdpdGhQb2xpY3kocG9s
aWN5KTsKKworICAgICAgICBTZWNjb21wRmlsdGVycyBzZWNjb21wRmlsdGVycyhTZWNjb21wRmls
dGVyczo6QWxsb3cpOworICAgICAgICBzZWNjb21wRmlsdGVycy5hZGRSdWxlKCJvcGVuIiwgU2Vj
Y29tcEZpbHRlcnM6OlRyYXApOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFsaXplKCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIC8v
IFRoaXMgd2lsbCBoYXZlIHRvIG1vdmUgdG8gYSBzZXBhcmF0ZWQgcHJvY2VzcyBjcmVhdGVkIGJl
Zm9yZSBsb2FkaW5nCisgICAgICAgIC8vIHRoZSBmaWx0ZXJzIHdoZW4gd2UgcHV0IHRoZSBybWRp
ci91bmxpbmsgcG9saWNpZXMgaW4gcGxhY2UuCisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRT
ZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZSIpOworICAgICAgICB1bmxpbmso
Ii90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZSIpOwor
ICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFdyaXRlL3Rlc3RG
aWxlIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVh
ZC90ZXN0RmlsZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90
ZXN0Tm90QWxsb3dlZCIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVy
cy90ZXN0UmVhZEFuZFdyaXRlIik7CisgICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBG
aWx0ZXJzL3Rlc3RXcml0ZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmls
dGVycy90ZXN0UmVhZCIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVy
cyIpOworICAgIH0KK307CisKKzo6dGVzdGluZzo6RW52aXJvbm1lbnQqIGNvbnN0IGVudiA9IDo6
dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25tZW50KG5ldyBTZWNjb21wRW52aXJvbm1lbnQp
OworCitURVNUKFdlYktpdDIsIG9wZW4pCit7CisgICAgLy8gUmVhZCBvbmx5IGRpcmVjdG9yeS4K
KyAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZSI7CisgICAgaW50IGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiV3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhp
cyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JP
TkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJX
cml0ZSBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVu
KGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlz
IG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgQVNTRVJUX05FKGZkLCAtMSkgPDwgIlJlYWQg
b25seSBhbmQgY3JlYXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7Cisg
ICAgY2xvc2UoZmQpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkICsgIi9UaGlzRmlsZURvZXNO
b3RFeGlzdCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOwor
ICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgPDwgIlNob3VsZCBy
ZXR1cm4gRU5PRU5UIHdoZW4gdHJ5aW5nICIgXAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhh
dCBkb2VzIG5vdCBleGl0IGFuZCB0aGUgcGVybWlzc2lvbnMgYXJlIE9LLiI7CisKKyAgICBmZCA9
IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiU2hvdWxkIHJldHVybiBFQUNDRVMgd2hlbiB0
cnlpbmcgIiBcCisgICAgICAgICJ0byBvcGVuIGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXQgYW5k
IHRoZSBwZXJtaXNzaW9ucyBhcmUgbm90IE9LLiI7CisKKyAgICAvLyBXcml0ZSBvbmx5IGRpcmVj
dG9yeS4KKyAgICBmaWxlID0gdGVzdERpcldyaXRlICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBv
cGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7
CisgICAgQVNTRVJUX05FKGZkLCAtMSkgPDwgIkNyZWF0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0
aGlzIGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8g
PT0gRUFDQ0VTKSA8PCAiUmVhZCBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOwor
CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlJlYWQgaXMgbm90IGFsbG93
ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRh
KCksIE9fV1JPTkxZKTsKKyAgICBBU1NFUlRfTkUoZmQsIC0xKSA8PCAiV3JpdGUgc2hvdWxkIGJl
IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBS
ZWFkIGFuIHdyaXRlIGRpcmVjdG9yeS4KKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSAr
ICIvdGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEFTU0VSVF9ORShmZCwgLTEpIDw8ICJDcmVh
dGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7
CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVD
VF9ORShmZCwgLTEpIDw8ICJSZWFkIGFuZCB3cml0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlz
IGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0Zjgo
KS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiUmVhZCBzaG91
bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGZkKTsKKworICAg
IGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUo
ZmQsIC0xKSA8PCAiV3JpdGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsK
KyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBOb3RBbGxvd2VkIGRpcmVjdG9yeS4KKyAgICBmaWxl
ID0gdGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJDcmVhdGUgaXMgbm90IGFs
bG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFD
Q0VTKSA8PCAiUmVhZCBhbmQgd3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3Rvcnku
IjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJSZWFkIGlzIG5vdCBh
bGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCku
ZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKSA8PCAiV3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKwor
CisgICAgLy8gVGhlIC91c3IgZGlyZWN0b3J5IGhlcmUgaGFzIHJlYWQgcGVybWlzc2lvbnMsIHNv
IGl0J3Mgc3ViZGlyZWN0b3JpZXMKKyAgICAvLyBzaG91bGQgcmVzb2x2ZSB0byB0aGUgL3VzciBw
ZXJtaXNzaW9ucyB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuCisgICAgZmlsZSA9IHVzckRp
ciArICIvYmluL2Jhc2VuYW1lIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBP
X1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIlN1YmRpcmVjdG9yaWVzIHNob3Vs
ZCB3aXRoIG5vIHBvbGljdCBzaG91bGQgIiBcCisgICAgICAgICJpbmhlcml0IHRoZSBwYXJlbnQn
cyBwb2xpY2llcy4iOworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSB1c3JTYmluRGlyICsg
Ii9hZGR1c2VyIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7
CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiVGhpcyBk
aXJlY3Rvcnkgc2hvdWxkIGhhdmUgIiBcCisgICAgICAgICJpdHMgb3duIHBvbGljeSBpbnN0ZWFk
IG9mIHRoZSBwYXJlbnQncy4iOworCisgICAgLy8gQWNjZXNzIHRvIHRoZSByZXN0IG9mIHRoZSBm
aWxlcyBzeXN0ZW0gaXMgYmxvY2tlZCBhbmQgc2hvdWxkCisgICAgLy8gbmV2ZXIgcmV0dXJuIGFu
eXRoaW5nIGVsc2Ugb3RoZXIgdGhhbiBFQUNDRVMgcmVnYXJkbGVzcyBpZiB0aGUKKyAgICAvLyBm
aWxlIGV4aXN0cyBvciBub3QuIFRoZSByZWFzb24gaXMgYmVjYXVzZSBpdCB3aWxsIGZhbGxiYWNr
IHRvIHRoZQorICAgIC8vIHBvbGljeSBvZiB0aGUgUm9vdCBkaXJlY3RvcnksIG1hcmtlZCBhcyBO
b3RBbGxvd2VkLgorICAgIGZpbGUgPSBob21lRGlyICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBv
cGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwor
ICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9
IG9wZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSAr
ICIvLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NF
Uyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4iICsgdGVz
dERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7CisgICAgZmQgPSBvcGVu
KGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9lZmwvamhidWls
ZC5tb2R1bGVzCmluZGV4IGYxNTAyNGQxODg5YTA5NmNjYTU0ZTZlMjFjN2FiYTBiYmQzOTAyYTYu
LmJjNjNlOTMxMDQ4NjdmNmE3ZmI4Zjc5Yzg1ZTU5YzBkODNmOWJiMDcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwpA
QCAtMTksNiArMTksNyBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJlZnJlZXQiLz4KICAgICAgIDxk
ZXAgcGFja2FnZT0iZWxlbWVudGFyeSIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJsaWJ4bWwyIi8+
CisgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNlY2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4K
ICAgPC9tZXRhbW9kdWxlPgogCkBAIC00NCw2ICs0NSw4IEBACiAgICAgICBocmVmPSJmdHA6Ly94
bWxzb2Z0Lm9yZyIvPiAKICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZG93bmxv
YWQuZW5saWdodGVubWVudC5vcmciCiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdo
dGVubWVudC5vcmciLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5z
Zi5uZXQiCisgICAgICBocmVmPSJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC8iLz4KIAogICA8YXV0
b3Rvb2xzIGlkPSJjYWlybyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KICAgICA8ZGVwZW5kZW5j
aWVzPgpAQCAtMjk2LDQgKzI5OSwxMCBAQAogICAgICAgICAgICAgbWQ1c3VtPSJjNjIxMDZmMDJl
ZTAwYjY0MzdmMGZiOWQzNzBjMTA5MyIvPgogICA8L2F1dG90b29scz4gCiAKKyAgPGF1dG90b29s
cyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAgIDxicmFuY2gg
bW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0iZ2l0LmNvZGUu
c2YubmV0IgorICAgICAgICAgIHRhZz0iMjdmNWM4NTk4ZDM0MTVmYWY5MDFhOGE5ZTcxNGVlMGVm
MGNhMzg3NSIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9D
aGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZWIzOWEwYWVhZWYyNzcwM2M0N2JkNTcwZDBiMWQx
ZjQ1YWVjOWMyMy4uODk0Yjc0MTA2NzgzNjY3NjE5MGEzOWM4NmI4YzI2NmNhYWM1NDE4MyAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEz
LTAxLTA3ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29t
PgorCisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXgg
dXNpbmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHRoZSBiaXRzIHRvIEVGTC9DTWFrZSBidWlsZHN5c3RlbSB0byBm
aW5kIHRoZSBsaWJzZWNjb21wCisgICAgICAgIGxpYnJhcnkuCisKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvRmluZExpYlNlY2NvbXAuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9PcHRpb25zRWZsLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJl
cy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZToKKwogMjAxMy0w
MS0wNyAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56aHVAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEFkZCB3aW5kb3cuaW50ZXJuYWxzLm5vbkZhc3RTY3JvbGxhYmxlUmVjdHMgZm9yIHRlc3Rpbmcg
c2Nyb2xsYWJsZSBhcmVhcyBpbiBmYXN0L3Nsb3cgcGF0aHMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182790</attachid>
            <date>2013-01-15 09:29:21 -0800</date>
            <delta_ts>2013-01-24 13:24:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130115193124.patch</filename>
            <type>text/plain</type>
            <size>83344</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWMxMTZmNGU2YzA2MjQw
ZWZmOWI2ZTc1M2E1MTYzMTg4OTdiZWZhMy4uOWI2MjI5ODBiNTBkNWIyZjY2NGJmZjMwZDExYzE5
ZmNkZjM0NDI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMCBAQAorMjAxMy0wMS0wNyAgVGhp
YWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAg
ICBbV0syXSBEcm9wIFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2Nv
bXAgZmlsdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODk4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbnRyb2R1Y2UgdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBTZWNjb21wRmlsdGVyLWJhc2VkIHNh
bmRib3guIFRoZQorICAgICAgICBoYXJkZW5pbmcgb2YgdGhlIFdlYlByb2Nlc3MgKGFuZCBwb3Rl
bnRpYWxseSBQbHVnaW5Qcm9jZXNzLCBldGMpCisgICAgICAgIHdvcmtzIGJ5IGEgY29tYmluYXRp
b24gb2YgdGhlIHR3byB0aGluZ3M6CisKKyAgICAgICAgLSBCbG9ja2luZyBzeXNjYWxscyB0aGF0
IGFyZSBub3QgdXNlZCwgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGF0dGFjaworICAgICAgICBz
dXJmYWNlLgorICAgICAgICAtIFRyYXBwaW5nIHNlbnNpdGl2ZSBzeXNjYWxscyBhbmQgZGVsZWdh
dGluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlCisgICAgICAgIHN5c2NhbGxzIHRvIGEgc2VwYXJh
dGVkIHRydXN0ZWQgcHJvY2VzcyBzdWJqZWN0IHRvIGEgc2V0IG9mIHBvbGljaWVzLgorCisgICAg
ICAgIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIHRyYXBzIHRoZSBvcGVuKCktZmFtaWx5IG9m
IHN5c2NhbGxzIG9uIFdlYktpdAorICAgICAgICBFRkwncyBXZWJQcm9jZXNzLCBidXQgaXQgY291
bGQgYmUgZWFzaWx5IHVzZWQgYnkgYW55IExpbnV4IHBvcnQsIHNpbmNlIHRoZQorICAgICAgICBj
b2RlIGlzIHN1cHBvc2UgdG8gYmUgTGludXgtY29tcGxpYW50LiBUaGUgbGlzdCBvZiBzeXNjYWxs
cyBoYW5kbGVkCisgICAgICAgIGJ5IHRoZSBicm9rZXIgcHJvY2VzcyBzaG91bGQgZGVmaW5pdGVs
eSBncm93IGFzIHdlIG1hdHVyZSB0aGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24uIE90aGVyIHN5
c2NhbGxzIG5lZWRzIHRvIGJlIGhhbmRsZWQgdG8gZ2V0IHRoaXMgc2FuZGJveAorICAgICAgICBm
dWxseSBmdW5jdGlvbmFsLCBsaWtlIHVubGluaygpLCBta2RpcigpLCBldGMuCisKKyAgICAgICAg
VGhlIGJyb2tlciBwcm9jZXNzIHNob3VsZCBiZSBpbml0aWFsaXplZCBhcyBlYXJseSBhcyBwb3Nz
aWJsZSBvbiB0aGUKKyAgICAgICAgc2FuZGJveGVkIHByb2Nlc3MgbWFpbiwgYmVjYXVzZSBpdCBv
bmx5IGRvZXMgYSBmb3JrKCksIHdoaWNoIGlzIGNoZWFwCisgICAgICAgIG9uIExpbnV4LiBUaGF0
IGFsc28gYWltcyB0byBtaW5pbWl6ZSB0aGUgcmVzaWRlbnQgbWVtb3J5IGZvb3RwcmludCBvZgor
ICAgICAgICB0aGUgYnJva2VyIHByb2Nlc3MuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBicm9r
ZXIgc3VwcG9ydHMgb25seSBkaXJlY3RvcnkgcG9saWNpZXMsIGJ1dCBmaWxlIHBvbGljaWVzCisg
ICAgICAgIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUgdG8gbWFrZSBuYXJyb3dl
ciB0aGUgZmlsZXN5c3RlbQorICAgICAgICBleHBvc2VkIHRvIHRoZSBXZWJQcm9jZXNzLgorCisg
ICAgICAgIE9wZW5pbmcgb2YgZmlsZXMgZm9yIHVwbG9hZCBhbmQgc2F2aW5nIGRvd25sb2FkcyBp
cyBub3Qgc3VwcG9ydGVkIHlldCwKKyAgICAgICAgc2luY2UgaXQgc2hvdWxkIGJlIGhhbmRsZWQg
dG8gdGhlIFVJUHJvY2VzcyBpbiBhIHNpbWlsYXIgZmFzaGlvbiBhcworICAgICAgICB0aGUgTWFj
IHBvcnQgZG9lcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFNo
YXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmNyZWF0ZUZyb21DcmVhdENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0
OjpPcGVuU3lzY2FsbDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6
OmV4ZWN1dGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5T
eXNjYWxsUmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5T
eXNjYWxsUmVzdWx0Ojp+T3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVu
U3lzY2FsbFJlc3VsdDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1
bHQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmg6IEFkZGVk
LgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoT3BlblN5
c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6c2V0UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpzZXRGbGFncyk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5T
eXNjYWxsOjpzZXRNb2RlKToKKyAgICAgICAgKE9wZW5TeXNjYWxsUmVzdWx0KToKKyAgICAgICAg
KFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6OmZkKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5
c2NhbGxSZXN1bHQ6OmVycm9yTnVtYmVyKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29t
cEJyb2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBC
cm9rZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OnJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6c3lzU2lnbmFsSGFuZGxl
cik6CisgICAgICAgIChXZWJLaXQ6OnJlZ2lzdGVyU3lzU2lnbmFsSGFuZGxlcik6CisgICAgICAg
IChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBCcm9rZXJDbGllbnQpOgorICAgICAgICAoV2Vi
S2l0OjpTZWNjb21wQnJva2VyQ2xpZW50Ojp+U2VjY29tcEJyb2tlckNsaWVudCk6CisgICAgICAg
IChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OmRpc3BhdGNoKToKKyAgICAgICAgKFdlYktp
dDo6U2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQpOgorICAgICAg
ICAoV2ViS2l0OjpTZWNjb21wQnJva2VyQ2xpZW50OjpoYW5kbGVJZlRyeWluZ1RvQmxvY2tTeXNT
aWduYWwpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIFNoYXJlZC9saW51eC9T
ZWNjb21wQnJva2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2Nv
bXBCcm9rZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpzZXRTeXNjYWxsUG9s
aWN5KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6U2VjY29tcEJyb2tlcik6Cisg
ICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6U2VjY29tcEZpbHRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6flNlY2NvbXBGaWx0ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUpOgorICAgICAgICAoV2Vi
S2l0OjpTZWNjb21wRmlsdGVyczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNl
Y2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKiBTaGFyZWQvbGludXgvU3lzY2FsbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2Rlcik6CisgICAgICAgIChXZWJL
aXQ6OlN5c2NhbGw6OlN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojpj
cmVhdGVGcm9tRGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OlN5c2Nh
bGxSZXN1bHQpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TeXNjYWxsLmg6IEFkZGVkLgorICAg
ICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU3lzY2FsbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6On5TeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6U3lz
Y2FsbDo6dHlwZSk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OnNldENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjb250ZXh0KToKKyAgICAgICAgKFN5c2NhbGxSZXN1bHQp
OgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp+U3lzY2FsbFJlc3VsdCk6CisgICAg
ICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OnR5cGUpOgorICAgICAgICAqIFNoYXJlZC9saW51
eC9TeXNjYWxsUG9saWN5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aCk6CisgICAgICAgICog
U2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoU3lzY2FsbFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxQb2xpY3k6
OnNldERpcmVjdG9yeVBvbGljeSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZp
bHRlcnNFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY2NvbXBGaWx0ZXJzRWZsOjpTZWNjb21wRmlsdGVyc0VmbCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY2NvbXBGaWx0ZXJzRWZsOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzRWZsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2VmbC9X
ZWJQcm9jZXNzTWFpbkVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NNYWluRWZs
KToKKwogMjAxMy0wMS0xNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAg
ICAgW0FOR0xFXSBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDQwNzZjODUzNjNkOTZhMmEwZjA0N2NmMDMwYTIzNGIxM2ZiZmNmNjEuLmY0OWEwZDU5
Mjg2ZDk2Zjg1NmU5ZDJmNjRhNzAxOTM1YTdkNTE2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0yMyw2ICsyMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBT
aGFyZWQvZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQvZWZsL1dl
YkV2ZW50RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKKyAg
ICBTaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xp
bnV4L1N5c2NhbGxQb2xpY3kuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJM
aW51eC5jcHAKIAogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcApA
QCAtMTQwLDYgKzE0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9lZmwvV2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9lZmwvV2ViUGFnZUVmbC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0
ZXJzRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAogCiAg
ICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQxLDYgKzI0NywxNyBA
QCBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7U1FMSVRFX0xJQlJBUklF
U30KICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlzdChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30KKyAgICApCisg
ICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7TElC
U0VDQ09NUF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgYWRkX2RlZmluaXRpb25zKC1EUFJP
SkVDVF9ST09UX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKK2VuZGlmICgpCisKIGlmIChF
TkFCTEVfRUNPUkVfWCkKICAgICBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAg
ICAgICAke0VDT1JFX1hfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L09wZW5TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9P
cGVuU3lzY2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmZkNGM2ODY5MmIwYWNlMThhMzM3NDViNTBiNWVm
MjExZGJjOTNkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9PcGVuU3lzY2FsbC5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgorCisjaWYgRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNu
dGwuaD4KKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0NPTVBJTEVfQVNTRVJUKCFPX1JET05MWSwgT19SRE9OTFkpOwor
Q09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkpOworQ09NUElMRV9BU1NFUlQo
T19SRFdSID09IDIsIE9fUkRSVyk7CisKK1Bhc3NPd25QdHI8U3lzY2FsbD4gT3BlblN5c2NhbGw6
OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7CisgICAgT3du
UHRyPE9wZW5TeXNjYWxsPiBvcGVuID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsKDApKTsKKwor
ICAgIG9wZW4tPnNldEZsYWdzKGNvbnRleHQtPmdyZWdzW1JFR19BUkcyXSk7CisgICAgb3Blbi0+
c2V0TW9kZShjb250ZXh0LT5ncmVnc1tSRUdfQVJHM10pOworICAgIG9wZW4tPnNldENvbnRleHQo
Y29udGV4dCk7CisKKyAgICBpbnQgZmQgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF07CisgICAg
Y2hhciogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19B
UkcxXSk7CisKKyAgICBpZiAocGF0aFswXSA9PSAnLycpIHsKKyAgICAgICAgb3Blbi0+c2V0UGF0
aChwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9wZW4ucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0
cnVjdCBzdGF0IHBhdGhTdGF0OworICAgIGlmIChmc3RhdChmZCwgJnBhdGhTdGF0KSA9PSAtMSkg
eworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtZXJybm87CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghU19JU0RJUihwYXRoU3RhdC5zdF9t
b2RlKSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtRU5PVERJUjsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgY2hhciBmZExpbmtQYXRoWzMy
XTsKKyAgICBzbnByaW50ZihmZExpbmtQYXRoLCBzaXplb2YoZmRMaW5rUGF0aCksICIvcHJvYy9z
ZWxmL2ZkLyVkIiwgZmQpOworCisgICAgY2hhciBmZFBhdGhbUEFUSF9NQVhdOworICAgIHNzaXpl
X3Qgc2l6ZSA9IHJlYWRsaW5rKGZkTGlua1BhdGgsIGZkUGF0aCwgc2l6ZW9mKGZkUGF0aCkgLSAx
KTsKKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lT
Q0FMTF0gPSAtZXJybm87CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8v
IFRoZSAiKyAyIiBoZXJlIHN0YW5kcyBmb3IgdGhlICcvJyBhbmQgbnVsbCB0ZXJtaW5hdG9yLgor
ICAgIGlmIChzaXplICsgc3RybGVuKHBhdGgpICsgMiA+IFBBVEhfTUFYKSB7CisgICAgICAgIGNv
bnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1FTkFNRVRPT0xPTkc7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHNwcmludGYoJmZkUGF0aFtzaXplXSwgIi8lcyIsIHBh
dGgpOworICAgIG9wZW4tPnNldFBhdGgoZmRQYXRoKTsKKworICAgIHJldHVybiBvcGVuLnJlbGVh
c2UoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbUNy
ZWF0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0KQoreworICAgIE9wZW5TeXNjYWxsKiBvcGVu
ID0gbmV3IE9wZW5TeXNjYWxsKDApOworCisgICAgb3Blbi0+c2V0UGF0aChDU3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSkpKTsKKyAgICBvcGVu
LT5zZXRGbGFncyhPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DKTsKKyAgICBvcGVuLT5zZXRN
b2RlKGNvbnRleHQtPmdyZWdzW1JFR19BUkcxXSk7CisgICAgb3Blbi0+c2V0Q29udGV4dChjb250
ZXh0KTsKKworICAgIHJldHVybiBhZG9wdFB0cihvcGVuKTsKK30KKworT3BlblN5c2NhbGw6Ok9w
ZW5TeXNjYWxsKG1jb250ZXh0X3QqIGNvbnRleHQpCisgICAgOiBTeXNjYWxsKFNDTVBfU1lTKG9w
ZW4pLCBjb250ZXh0KQorICAgICwgbV9mbGFncygwKQorICAgICwgbV9tb2RlKDApCit7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdGggPSBDU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSkpOworICAgIG1f
ZmxhZ3MgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJHMV07CisgICAgbV9tb2RlID0gY29udGV4dC0+
Z3JlZ3NbUkVHX0FSRzJdOworfQorCit2b2lkIE9wZW5TeXNjYWxsOjpzZXRSZXN1bHQoY29uc3Qg
U3lzY2FsbFJlc3VsdCogcmVzdWx0KQoreworICAgIEFTU0VSVChjb250ZXh0KCkgJiYgcmVzdWx0
LT50eXBlKCkgPT0gdHlwZSgpKTsKKworICAgIGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0KiBvcGVu
UmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgT3BlblN5c2NhbGxSZXN1bHQqPihyZXN1bHQpOwor
CisgICAgaWYgKG9wZW5SZXN1bHQtPmZkKCkgPj0gMCkKKyAgICAgICAgY29udGV4dCgpLT5ncmVn
c1tSRUdfU1lTQ0FMTF0gPSBkdXAob3BlblJlc3VsdC0+ZmQoKSk7CisgICAgZWxzZQorICAgICAg
ICBjb250ZXh0KCktPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1vcGVuUmVzdWx0LT5lcnJvck51bWJl
cigpOworfQorCitQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IE9wZW5TeXNjYWxsOjpleGVjdXRl
KGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkKK3sKKyAgICBpZiAoIXN0cm5jbXAoIi9wcm9j
L3NlbGYvIiwgbV9wYXRoLmRhdGEoKSwgMTEpKSB7CisgICAgICAgIFN0cmluZyByZXNvbHZlZFNl
bGZQYXRoID0gQVNDSUlMaXRlcmFsKCIvcHJvYy8iKSArIFN0cmluZzo6bnVtYmVyKGdldHBwaWQo
KSkgKyAmbV9wYXRoLmRhdGEoKVsxMF07CisgICAgICAgIG1fcGF0aCA9IHJlc29sdmVkU2VsZlBh
dGgudXRmOCgpLmRhdGEoKTsKKyAgICB9CisKKyAgICBTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9u
IHBlcm1pc3Npb24gPSBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkOworICAgIGlmIChtX2ZsYWdz
ICYgT19SRFdSKQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGlj
eTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7
CisgICAgZWxzZSBpZiAobV9mbGFncyAmIE9fV1JPTkxZKQorICAgICAgICBwZXJtaXNzaW9uID0g
c3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2Nh
bGxQb2xpY3k6OldyaXRlKTsKKyAgICBlbHNlCisgICAgICAgIHBlcm1pc3Npb24gPSBzdGF0aWNf
Y2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uPihwZXJtaXNzaW9uIHwgU3lzY2FsbFBvbGlj
eTo6UmVhZCk7CisKKyAgICAvLyBDcmVhdGUgYSBmaWxlIGltcGxpZXMgd3JpdGUgcGVybWlzc2lv
biBvbiB0aGUgZGlyZWN0b3J5LgorICAgIGlmIChtX2ZsYWdzICYgT19DUkVBVCB8fCBtX2ZsYWdz
ICYgT19FWENMKQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGlj
eTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKKworICAg
IGlmICghcG9saWN5Lmhhc1Blcm1pc3Npb25Gb3JQYXRoKG1fcGF0aC5kYXRhKCksIHBlcm1pc3Np
b24pKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsUmVzdWx0KC0xLCBF
QUNDRVMpKTsKKworICAgIC8vIFBlcm1pc3Npb24gZ3JhbnRlZCwgZXhlY3V0ZSB0aGUgc3lzY2Fs
bC4gVGhlIHN5c2NhbGwgbWlnaHQgc3RpbGwKKyAgICAvLyBmYWlsIGJlY2F1c2Ugb2YgaGFyZCBw
ZXJtaXNzaW9ucyBlbmZvcmNlZCBieSB0aGUgZmlsZXN5c3RlbSBhbmQKKyAgICAvLyB0aGluZ3Mg
bGlrZSB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuCisgICAgaW50IGZkID0gb3BlbihtX3BhdGgu
ZGF0YSgpLCBtX2ZsYWdzLCBtX21vZGUpOworICAgIGludCBlcnJvck51bWJlciA9IGZkID09IC0x
ID8gZXJybm8gOiAwOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3Vs
dChmZCwgZXJyb3JOdW1iZXIpKTsKK30KKwordm9pZCBPcGVuU3lzY2FsbDo6ZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLmVuY29k
ZSh0eXBlKCkpOworICAgIGVuY29kZXIuZW5jb2RlKG1fcGF0aCk7CisgICAgZW5jb2Rlci5lbmNv
ZGUobV9mbGFncyk7CisgICAgZW5jb2Rlci5lbmNvZGUobV9tb2RlKTsKK30KKworYm9vbCBPcGVu
U3lzY2FsbDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlcikKK3sKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShtX3BhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9mbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUobV9tb2RlKTsKK30KKworT3BlblN5c2NhbGxS
ZXN1bHQ6Ok9wZW5TeXNjYWxsUmVzdWx0KGludCBmZCwgaW50IGVycm9yTnVtYmVyKQorICAgIDog
U3lzY2FsbFJlc3VsdChTQ01QX1NZUyhvcGVuKSkKKyAgICAsIG1fZmQoZmQpCisgICAgLCBtX2Vy
cm9yTnVtYmVyKGVycm9yTnVtYmVyKQoreworfQorCitPcGVuU3lzY2FsbFJlc3VsdDo6fk9wZW5T
eXNjYWxsUmVzdWx0KCkKK3sKKyAgICBpZiAobV9mZCA+PSAwKQorICAgICAgICBjbG9zZShtX2Zk
KTsKK30KKwordm9pZCBPcGVuU3lzY2FsbFJlc3VsdDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLmVuY29kZSh0eXBlKCkpOwor
CisgICAgaWYgKG1fZmQgPj0gMCkgeworICAgICAgICBDb3JlSVBDOjpBdHRhY2htZW50IGF0dGFj
aG1lbnQobV9mZCk7CisgICAgICAgIGVuY29kZXIuYWRkQXR0YWNobWVudChhdHRhY2htZW50KTsK
KyAgICB9CisKKyAgICBlbmNvZGVyLmVuY29kZShtX2Vycm9yTnVtYmVyKTsKK30KKworYm9vbCBP
cGVuU3lzY2FsbFJlc3VsdDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgaW50IGZkKQoreworICAgIGlmIChmZCA+PSAwKQorICAgICAgICBtX2ZkID0gZmQ7CisKKyAg
ICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKG1fZXJyb3JOdW1iZXIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvT3BlblN5c2NhbGwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMDM1ODhlNDZm
NjI3YzQ4Yzg3NjAyNTBhNzYyNDY0OTc2MjY0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvT3BlblN5c2NhbGwuaApAQCAtMCwwICsxLDg2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wZW5TeXNjYWxsX2gKKyNkZWZpbmUgT3BlblN5c2Nh
bGxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIlN5c2NhbGwu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsK
K2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE9wZW5TeXNjYWxsIDogcHVibGljIFN5c2NhbGwgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGw+IGNyZWF0ZUZyb21PcGVuYXRD
b250ZXh0KG1jb250ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVh
dGVGcm9tQ3JlYXRDb250ZXh0KG1jb250ZXh0X3QqKTsKKworICAgIGV4cGxpY2l0IE9wZW5TeXNj
YWxsKG1jb250ZXh0X3QqKTsKKworICAgIHZvaWQgc2V0UGF0aChjb25zdCBDU3RyaW5nJiBwYXRo
KSB7IG1fcGF0aCA9IHBhdGg7IH07CisgICAgdm9pZCBzZXRGbGFncyhjb25zdCBpbnQgZmxhZ3Mp
IHsgbV9mbGFncyA9IGZsYWdzOyB9OworICAgIHZvaWQgc2V0TW9kZShjb25zdCBtb2RlX3QgbW9k
ZSkgeyBtX21vZGUgPSBtb2RlOyB9OworCisgICAgLy8gU3lzY2FsbCBpbXBsZW1lbnRhdGlvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0KGNvbnN0IFN5c2NhbGxSZXN1bHQqKTsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8U3lzY2FsbFJlc3VsdD4gZXhlY3V0ZShjb25zdCBTeXNjYWxsUG9s
aWN5Jik7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOworCitwcml2YXRlOgorICAgIENTdHJpbmcgbV9wYXRoOworICAgIGludCBtX2ZsYWdzOwor
ICAgIG1vZGVfdCBtX21vZGU7Cit9OworCitjbGFzcyBPcGVuU3lzY2FsbFJlc3VsdCA6IHB1Ymxp
YyBTeXNjYWxsUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBPcGVuU3lzY2FsbFJlc3VsdChpbnQgZmQs
IGludCBlcnJvck51bWJlcik7CisgICAgfk9wZW5TeXNjYWxsUmVzdWx0KCk7CisKKyAgICBpbnQg
ZmQoKSBjb25zdCB7IHJldHVybiBtX2ZkOyB9CisgICAgaW50IGVycm9yTnVtYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvck51bWJlcjsgfQorCisgICAgLy8gU3lzY2FsbFJlc3VsdCBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgaW50IGZkKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9mZDsKKyAgICBpbnQgbV9lcnJv
ck51bWJlcjsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gT3BlblN5c2NhbGxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjYTIx
MmJmODAxNTVmZTVmOWFlMDUwNDI3NDE0YzAwMTI4NDZlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKQEAgLTAsMCArMSwz
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wQnJv
a2VyLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiQXJndW1l
bnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDxzeXMvc29j
a2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBTWVNfU0VDQ09NUAorI2RlZmluZSBTWVNfU0VD
Q09NUCAxCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQw
OTY7CitzdGF0aWMgY29uc3QgY2hhciBjcHVDb3VudFBhdGhbXSA9ICIvc3lzL2RldmljZXMvc3lz
dGVtL2NwdS9vbmxpbmUiOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2VjY29tcEJy
b2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFNlY2NvbXBCcm9rZXJDbGllbnQmIHNo
YXJlZChpbnQgc29ja2V0PS0xKTsKKyAgICB+U2VjY29tcEJyb2tlckNsaWVudCgpOworCisgICAg
dm9pZCBkaXNwYXRjaChTeXNjYWxsKikgY29uc3Q7CisKKyAgICBib29sIGhhbmRsZUlmT3Blbmlu
Z0NQVUNvdW50KG1jb250ZXh0X3QqKSBjb25zdDsKKyAgICBib29sIGhhbmRsZUlmVHJ5aW5nVG9C
bG9ja1N5c1NpZ25hbCh1Y29udGV4dF90KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU2VjY29t
cEJyb2tlckNsaWVudChpbnQgc29ja2V0KTsKKworICAgIGludCBtX3NvY2tldDsKKyAgICBpbnQg
bV9uY3B1czsKKworICAgIG11dGFibGUgTXV0ZXggbV9zb2NrZXRMb2NrOworfTsKKworc3RhdGlj
IHNzaXplX3Qgc2VuZE1lc3NhZ2UoaW50IHNvY2tldCwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUs
IGludCBmZD0tMSkKK3sKKyAgICBBU1NFUlQoc2l6ZSA8PSBtZXNzYWdlTWF4U2l6ZSk7CisKKyAg
ICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2Yo
bWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBtZW1zZXQoJmlvdiwgMCwg
c2l6ZW9mKGlvdikpOworICAgIGlvdi5pb3ZfYmFzZSA9IGRhdGE7CisgICAgaW92Lmlvdl9sZW4g
PSBzaXplOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKKyAgICBtZXNzYWdlLm1zZ19p
b3ZsZW4gPSAxOworCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOwor
ICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBjb250cm9s
OworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOworICAg
ICAgICBtZW1zZXQobWVzc2FnZS5tc2dfY29udHJvbCwgMCwgbWVzc2FnZS5tc2dfY29udHJvbGxl
bik7CisKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNz
YWdlKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CisgICAgICAgIGNt
c2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01T
R19MRU4oc2l6ZW9mKGZkKSk7CisKKyAgICAgICAgbWVtbW92ZShDTVNHX0RBVEEoY21zZyksICZm
ZCwgc2l6ZW9mKGZkKSk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbmRtc2coc29ja2V0LCAmbWVz
c2FnZSwgMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY2VpdmVNZXNzYWdlKGludCBzb2NrZXQs
IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBpbnQqIGZkID0gMCkKK3sKKyAgICBzdHJ1Y3QgbXNn
aGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOwor
CisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikp
OworICAgIGlvdi5pb3ZfYmFzZSA9IGRhdGE7CisgICAgaW92Lmlvdl9sZW4gPSBzaXplOworCisg
ICAgbWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKKyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwor
CisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOworICAgIG1lc3NhZ2Uu
bXNnX2NvbnRyb2wgPSBjb250cm9sOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXpl
b2YoY29udHJvbCk7CisgICAgbWVtc2V0KG1lc3NhZ2UubXNnX2NvbnRyb2wsIDAsIG1lc3NhZ2Uu
bXNnX2NvbnRyb2xsZW4pOworCisgICAgc3NpemVfdCByZWNlaXZlZEJ5dGVzID0gcmVjdm1zZyhz
b2NrZXQsICZtZXNzYWdlLCAwKTsKKworICAgIGlmIChmZCAmJiByZWNlaXZlZEJ5dGVzID4gMCkg
eworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2Up
OworICAgICAgICBpZiAoY21zZyAmJiBjbXNnLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYg
Y21zZy0+Y21zZ190eXBlID09IFNDTV9SSUdIVFMpCisgICAgICAgICAgICBtZW1jcHkoZmQsIENN
U0dfREFUQShjbXNnKSwgc2l6ZW9mKCpmZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAq
ZmQgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVjZWl2ZWRCeXRlcyA+PSAwID8gcmVjZWl2
ZWRCeXRlcyA6IC1lcnJubzsKK30KKworc3RhdGljIHZvaWQgc3lzU2lnbmFsSGFuZGxlcihpbnQg
c2lnbmFsLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIGRhdGEpCit7CisgICAgaWYgKHNpZ25hbCAh
PSBTSUdTWVMgfHwgaW5mby0+c2lfY29kZSAhPSBTWVNfU0VDQ09NUCkKKyAgICAgICAgQ1JBU0go
KTsKKworICAgIHVjb250ZXh0X3QqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4o
ZGF0YSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBDUkFTSCgpOworCisgICAgU2VjY29t
cEJyb2tlckNsaWVudCogY2xpZW50ID0gJlNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCgpOwor
CisgICAgaWYgKGNsaWVudC0+aGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQoJmNvbnRleHQtPnVjX21j
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjbGllbnQtPmhhbmRsZUlmVHJ5aW5n
VG9CbG9ja1N5c1NpZ25hbChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3duUHRy
PFN5c2NhbGw+IHN5c2NhbGwgPSBTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCgmY29udGV4dC0+
dWNfbWNvbnRleHQpOworICAgIGNsaWVudC0+ZGlzcGF0Y2goc3lzY2FsbC5nZXQoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHJlZ2lzdGVyU3lzU2lnbmFsSGFuZGxlcigpCit7CisgICAgc3RydWN0IHNp
Z2FjdGlvbiBhY3Rpb247CisgICAgbWVtc2V0KCZhY3Rpb24sIDAsIHNpemVvZihhY3Rpb24pKTsK
KyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gJnN5c1NpZ25hbEhhbmRsZXI7CisgICAgYWN0aW9u
LnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX05PREVGRVI7CisKKyAgICBpZiAoc2lnYWN0aW9u
KFNJR1NZUywgJmFjdGlvbiwgMCkgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgc2lnc2V0
X3QgbWFzazsKKyAgICBzaWdlbXB0eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBT
SUdTWVMpOworCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCkgPCAw
KQorICAgICAgICBDUkFTSCgpOworfQorCitTZWNjb21wQnJva2VyQ2xpZW50JiBTZWNjb21wQnJv
a2VyQ2xpZW50OjpzaGFyZWQoaW50IHNvY2tldCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFNlY2NvbXBCcm9rZXJDbGllbnQsIGJyb2tlckNsaWVudCwgKHNvY2tldCkpOworCisgICAgcmV0
dXJuIGJyb2tlckNsaWVudDsKK30KKworU2VjY29tcEJyb2tlckNsaWVudDo6U2VjY29tcEJyb2tl
ckNsaWVudChpbnQgc29ja2V0KQorICAgIDogbV9zb2NrZXQoc29ja2V0KQorICAgICwgbV9uY3B1
cyhvcGVuKGNwdUNvdW50UGF0aCwgT19SRE9OTFkpKQoreworICAgIEFTU0VSVChtX3NvY2tldCA+
PSAwICYmIG1fbmNwdXMgPj0gMCk7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQ6On5TZWNjb21w
QnJva2VyQ2xpZW50KCkKK3sKKyAgICBjbG9zZShtX3NvY2tldCk7CisgICAgY2xvc2UobV9uY3B1
cyk7Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlckNsaWVudDo6ZGlzcGF0Y2goU3lzY2FsbCogc3lz
Y2FsbCkgY29uc3QKK3sKKyAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgIHJldHVybjsKKworICAg
IE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IGVuY29kZXIgPSBDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXI6OmNyZWF0ZSgpOworICAgIGVuY29kZXItPmVuY29kZSgqc3lzY2FsbCk7CisK
KyAgICBjaGFyIGJ1ZmZlclttZXNzYWdlTWF4U2l6ZV07CisgICAgc3NpemVfdCByZWNlaXZlZEJ5
dGVzID0gMDsKKyAgICBpbnQgZmQgPSAtMTsKKworICAgIG1fc29ja2V0TG9jay5sb2NrKCk7CisK
KyAgICBpZiAoc2VuZE1lc3NhZ2UobV9zb2NrZXQsIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVy
LT5idWZmZXJTaXplKCkpIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIHJlY2VpdmVkQnl0ZXMgPSByZWNlaXZlTWVzc2FnZShtX3NvY2tldCwgJmJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICZmZCk7CisgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzID4g
MCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzICE9IC1F
SU5UUikKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgbV9zb2NrZXRMb2NrLnVu
bG9jaygpOworCisgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gZGVjb2RlciA9
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6Y3JlYXRlKChjb25zdCB1aW50OF90KikgYnVmZmVy
LCByZWNlaXZlZEJ5dGVzKTsKKyAgICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0ID0gU3lz
Y2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURlY29kZXIoZGVjb2Rlci5nZXQoKSwgZmQpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICBDUkFTSCgpOworCisgICAgc3lzY2FsbC0+c2V0UmVzdWx0KHJl
c3VsdC5nZXQoKSk7Cit9CisKK2Jvb2wgU2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZPcGVu
aW5nQ1BVQ291bnQobWNvbnRleHRfdCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoY29udGV4
dC0+Z3JlZ3NbUkVHX1NZU0NBTExdICE9IFNDTVBfU1lTKG9wZW4pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBjaGFyICpwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Y29udGV4dC0+Z3JlZ3NbUkVHX0FSRzBdKTsKKyAgICBpZiAoc3RyY21wKGNwdUNvdW50UGF0aCwg
cGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hbGxvYyB3aWxsIHNvbWV0
aW1lcyBjaGVjayB0aGUgbnVtYmVyIG9mIENQVXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtCisgICAg
Ly8gYnkgb3BlbmluZyBhIHNwZWNpYWwgZmlsZS4gSWYgaXQgZG9lcyB0aGF0IGluIHRoZSBtaWRk
bGUgb2YgdGhlIFNJR1NZUworICAgIC8vIHNpZ25hbCBoYW5kbGVyLCBpdCBtaWdodCB0cmlnZ2Vy
IGEgcmVjdXJzaXZlIGF0dGVtcHQgb2YgcHJveHlpbmcgdGhlCisgICAgLy8gb3BlbigpIHN5c2Nh
bGwgdG8gdGhlIGJyb2tlci4gQmVjYXVzZSBvZiB0aGF0LCB3ZSBjYWNoZSB0aGlzIHJlc291cmNl
LgorICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IGR1cChtX25jcHVzKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmVHJ5
aW5nVG9CbG9ja1N5c1NpZ25hbCh1Y29udGV4dF90KiB1Y29udGV4dCkgY29uc3QKK3sKKyAgICAv
LyBXZSBzaG91bGQgcHJvYmFibHkgZG8gdGhlIHNhbWUgdGhpbmcgaWYgYSBwcm9jZXNzIHRyaWVz
IHRvIG92ZXJyaWRlIHRoZQorICAgIC8vIFNJR1NZUyBzaWduYWwgaGFuZGxlLCBidXQgdGhpcyBp
cyB2ZXJ5IHVubGlrZWx5IHRvIGhhcHBlbi4KKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNl
OworICAgIG1jb250ZXh0X3QgbWNvbnRleHQgPSB1Y29udGV4dC0+dWNfbWNvbnRleHQ7CisjaWYg
Q1BVKFg4NikKKyAgICBpZiAobWNvbnRleHQuZ3JlZ3NbUkVHX1NZU0NBTExdID09IFNDTVBfU1lT
KHNpZ3Byb2NtYXNrKSkKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyNlbmRpZgorICAg
IGlmIChtY29udGV4dC5ncmVnc1tSRUdfU1lTQ0FMTF0gPT0gU0NNUF9TWVMocnRfc2lncHJvY21h
c2spKQorICAgICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworCisgICAgaWYgKCFzaG91bGRIYW5k
bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBob3cgPSBtY29udGV4dC5ncmVn
c1tSRUdfQVJHMF07CisgICAgc2lnc2V0X3QqIHNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2lnc2V0
X3QqPihtY29udGV4dC5ncmVnc1tSRUdfQVJHMV0pOworICAgIHNpZ3NldF90KiBvbGRTZXQgPSBy
ZWludGVycHJldF9jYXN0PHNpZ3NldF90Kj4obWNvbnRleHQuZ3JlZ3NbUkVHX0FSRzJdKTsKKwor
ICAgIGlmIChvbGRTZXQpCisgICAgICAgIG1lbWNweShvbGRTZXQsICZ1Y29udGV4dC0+dWNfc2ln
bWFzaywgc2l6ZW9mKHNpZ3NldF90KSk7CisKKyAgICBpZiAoaG93ID09IFNJR19TRVRNQVNLKQor
ICAgICAgICBtZW1jcHkoJnVjb250ZXh0LT51Y19zaWdtYXNrLCBzZXQsIHNpemVvZihzaWdzZXRf
dCkpOworICAgIGVsc2UKKyAgICAgICAgc2lnb3JzZXQoJnVjb250ZXh0LT51Y19zaWdtYXNrLCBz
ZXQsICZ1Y29udGV4dC0+dWNfc2lnbWFzayk7CisKKyAgICBzaWdkZWxzZXQoJnVjb250ZXh0LT51
Y19zaWdtYXNrLCBTSUdTWVMpOworICAgIG1jb250ZXh0LmdyZWdzW1JFR19TWVNDQUxMXSA9IDA7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9j
ZXNzKFNlY2NvbXBGaWx0ZXJzKiBmaWx0ZXJzLCBjb25zdCBTeXNjYWxsUG9saWN5JiBwb2xpY3kp
Cit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBzaWdwcm9jbWFzayBmaWx0ZXJz
IGJlbGxvdyBhcmUgbmVlZGVkIGJ5IGhhbmRsZUlmVHJ5aW5nVG9CbG9ja1N5c1NpZ25hbCgpCisg
ICAgLy8gc28gd2UgY2FuIHByZXZlbnQgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzIGZyb20gYmxvY2tp
bmcgU0lHU1lTLgorI2lmIENQVShYODYpCisgICAgZmlsdGVycy0+YWRkUnVsZSgic2lncHJvY21h
c2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVx
dWFsLCBTSUdfQkxPQ0ssCisgICAgICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCwgMCk7
CisgICAgZmlsdGVycy0+YWRkUnVsZSgic2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJh
cCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVxdWFsLCBTSUdfU0VUTUFTSywKKyAgICAg
ICAgMSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsLCAwKTsKKyNlbmRpZgorICAgIGZpbHRlcnMt
PmFkZFJ1bGUoInJ0X3NpZ3Byb2NtYXNrIiwgU2VjY29tcEZpbHRlcnM6OlRyYXAsCisgICAgICAg
IDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX0JMT0NLLAorICAgICAgICAxLCBTZWNjb21w
RmlsdGVyczo6Tm90RXF1YWwsIDApOworICAgIGZpbHRlcnMtPmFkZFJ1bGUoInJ0X3NpZ3Byb2Nt
YXNrIiwgU2VjY29tcEZpbHRlcnM6OlRyYXAsCisgICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpF
cXVhbCwgU0lHX1NFVE1BU0ssCisgICAgICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCwg
MCk7CisKKyAgICBTZWNjb21wQnJva2VyIHNlY2NvbXBCcm9rZXI7CisgICAgc2VjY29tcEJyb2tl
ci5zZXRTeXNjYWxsUG9saWN5KHBvbGljeSk7CisgICAgc2VjY29tcEJyb2tlci5pbml0aWFsaXpl
KCk7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlcjo6
aW5pdGlhbGl6ZSgpCit7CisgICAgaW50IHNvY2tldHNbMl07CisgICAgaWYgKHNvY2tldHBhaXIo
QUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tldHMpIDwgMCkKKyAgICAgICAgQ1JBU0goKTsK
KworICAgIHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgICBpZiAocGlkKSB7IC8vIFdlYlByb2Nlc3Mu
CisgICAgICAgIGNsb3NlKHNvY2tldHNbMV0pOworICAgICAgICBTZWNjb21wQnJva2VyQ2xpZW50
OjpzaGFyZWQoc29ja2V0c1swXSk7CisgICAgICAgIHJlZ2lzdGVyU3lzU2lnbmFsSGFuZGxlcigp
OworICAgIH0gZWxzZSB7IC8vIEJyb2tlci4KKyAgICAgICAgLy8gVE9ETzogVGhlIGJyb2tlciBz
aG91bGQgc2V0dXAgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIC8vIGZvciBpdHNlbGYgYW5kIGJs
b2NrIGV2ZXJ5dGhpbmcgZWxzZSBvdGhlciB0aGFuCisgICAgICAgIC8vIHRoZSBtaW5pbWFsIHNl
dCBvZiBzeXNjYWxscyBuZWVkZWQgdG8gZXhlY3V0ZSB0aGUKKyAgICAgICAgLy8gc3lzY2FsbHMg
aXQgaXMgc3VwcG9zZSB0byBwcm94eS4KKyAgICAgICAgY2xvc2Uoc29ja2V0c1swXSk7CisgICAg
ICAgIHJ1bkxvb3Aoc29ja2V0c1sxXSk7CisgICAgfQorfQorCit2b2lkIFNlY2NvbXBCcm9rZXI6
OnJ1bkxvb3AoaW50IHNvY2tldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaW50IGkgPSBTVERF
UlJfRklMRU5PICsgMTsKKyNlbHNlCisgICAgaW50IGkgPSAwOworI2VuZGlmCisgICAgLy8gQ2xv
c2UgYWxsIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIG90aGVyCisgICAgLy8gdGhhbiB0aGUg
c29ja2V0IHRvIHRoZSBzYW5kYm94ZWQgcHJvY2Vzcy4KKyAgICBmb3IgKDsgaSA8IEZEX1NFVFNJ
WkU7ICsraSkKKyAgICAgICAgaWYgKGkgIT0gc29ja2V0KQorICAgICAgICAgICAgY2xvc2UoaSk7
CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFyIGJ1ZmZlclttZXNzYWdlTWF4U2l6
ZV07CisgICAgICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY2VpdmVNZXNzYWdlKHNvY2tl
dCwgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA9
PSAtRUlOVFIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVjZWl2ZWRC
eXRlcyA8PSAwKQorICAgICAgICAgICAgZXhpdChyZWNlaXZlZEJ5dGVzID8gRVhJVF9GQUlMVVJF
IDogRVhJVF9TVUNDRVNTKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyPiBkZWNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVhdGUoKGNvbnN0IHVp
bnQ4X3QqKSBidWZmZXIsIHJlY2VpdmVkQnl0ZXMpOworICAgICAgICBPd25QdHI8U3lzY2FsbD4g
c3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKGRlY29kZXIuZ2V0KCkpOworICAg
ICAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisKKyAg
ICAgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IHN5c2NhbGwtPmV4ZWN1dGUobV9w
b2xpY3kpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBlbmNvZGVy
ID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKCpyZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxDb3JlSVBDOjpBdHRhY2htZW50PiBh
dHRhY2htZW50cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2htZW50cygpOworICAgICAgICBpbnQg
ZmQgPSBhdHRhY2htZW50cy5zaXplKCkgPT0gMSA/IGF0dGFjaG1lbnRzWzBdLmZpbGVEZXNjcmlw
dG9yKCkgOiAtMTsKKworICAgICAgICAvLyBUaGUgY2xpZW50IGlzIGRvd24sIHRoZSBicm9rZXIg
c2hvdWxkIGdvIGF3YXkuCisgICAgICAgIGlmIChzZW5kTWVzc2FnZShzb2NrZXQsIGVuY29kZXIt
PmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCksIGZkKSA8IDApCisgICAgICAgICAgICBl
eGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NlY2NvbXBCcm9rZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzVjODZiNzRlN2Y3ZTI0OTYxYzg3
OGNhNmEyN2MwNTRjZWY4ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNlY2NvbXBCcm9rZXJfaAorI2RlZmluZSBTZWNjb21wQnJva2VyX2gK
KworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVy
cy5oIgorI2luY2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBCcm9rZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFNlY2NvbXBCcm9rZXIpOworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgbGF1bmNoUHJv
Y2VzcyhTZWNjb21wRmlsdGVycyosIGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOworICAgIHZvaWQgc2V0U3lzY2FsbFBvbGljeShjb25zdCBTeXNjYWxsUG9s
aWN5JiBwb2xpY3kpIHsgbV9wb2xpY3kgPSBwb2xpY3k7IH0KKworcHJpdmF0ZToKKyAgICBTZWNj
b21wQnJva2VyKCkgeyB9CisKKyAgICB2b2lkIHJ1bkxvb3AoaW50IHNvY2tldCk7CisKKyAgICBT
eXNjYWxsUG9saWN5IG1fcG9saWN5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEJyb2tl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45NDkxYmQxNjdkMWQzMTgxOWE2Y2FjYzRkMWJkYjAwZDUwYzNiYmE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
LmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgorI2luY2x1ZGUgPHNlY2Nv
bXAuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OkFsbG93ID09IFNDTVBfQUNUX0FMTE9X
LCBBbGxvdyk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6S2lsbCA9PSBTQ01QX0FD
VF9LSUxMLCBLaWxsKTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpUcmFwID09IFND
TVBfQUNUX1RSQVAsIFRyYXApOworCitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90
U2V0ID09IHN0YXRpY19jYXN0PFNlY2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oX1NDTVBfQ01QX01J
TiksIE5vdFNldCk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwgPT0g
c3RhdGljX2Nhc3Q8U2VjY29tcEZpbHRlcnM6Ok9wZXJhdG9yPihTQ01QX0NNUF9ORSksIE5vdEVx
dWFsKTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCA9PSBzdGF0aWNfY2Fz
dDxTZWNjb21wRmlsdGVyczo6T3BlcmF0b3I+KFNDTVBfQ01QX0VRKSwgRXF1YWwpOworCitDT01Q
SUxFX0FTU0VSVChzaXplb2Yoc2NtcF9kYXR1bV90KSA9PSBzaXplb2YobG9uZyBsb25nKSwgc2Nt
cF9kYXR1bV90KTsKKworU2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKEFjdGlvbiBkZWZh
dWx0QWN0aW9uKQorICAgIDogbV9jb250ZXh0KHNlY2NvbXBfaW5pdChkZWZhdWx0QWN0aW9uKSkK
KyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAg
ICAgIENSQVNIKCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRlcnMoKQorewor
ICAgIHNlY2NvbXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJz
OjphZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24gYWN0aW9uLAorICAgIHVu
c2lnbmVkIGFyZ051bTEsIE9wZXJhdG9yIG9wZXJhdG9yMSwgbG9uZyBsb25nIGRhdGExLAorICAg
IHVuc2lnbmVkIGFyZ051bTIsIE9wZXJhdG9yIG9wZXJhdG9yMiwgbG9uZyBsb25nIGRhdGEyKQor
eworICAgIGludCBzeXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbmFtZShzeXNjYWxs
TmFtZSk7CisgICAgaWYgKHN5c2NhbGwgPT0gX19OUl9TQ01QX0VSUk9SKQorICAgICAgICBDUkFT
SCgpOworCisgICAgaW50IHJlc3VsdDsKKyAgICBpZiAob3BlcmF0b3IyICE9IE5vdFNldCkKKyAg
ICAgICAgcmVzdWx0ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwgc3lzY2Fs
bCwgMiwKKyAgICAgICAgICAgIFNDTVBfQ01QKGFyZ051bTEsIHN0YXRpY19jYXN0PHNjbXBfY29t
cGFyZT4ob3BlcmF0b3IxKSwgZGF0YTEsIDApLAorICAgICAgICAgICAgU0NNUF9DTVAoYXJnTnVt
Miwgc3RhdGljX2Nhc3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjIpLCBkYXRhMiwgMCkpOworICAg
IGVsc2UgaWYgKG9wZXJhdG9yMSAhPSBOb3RTZXQpCisgICAgICAgIHJlc3VsdCA9IHNlY2NvbXBf
cnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDEsCisgICAgICAgICAgICBTQ01Q
X0NNUChhcmdOdW0xLCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9wZXJhdG9yMSksIGRhdGEx
LCAwKSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRkKG1fY29u
dGV4dCwgYWN0aW9uLCBzeXNjYWxsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAg
ICBDUkFTSCgpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wbGVtZW50
IHRoaXMgaXMgbm90IHJlcXVpcmVkIGluIGNhc2Ugd2UgYXJlIGp1c3QKKyAgICAvLyBzZXR0aW5n
IGZpbHRlcnMuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKKyAgICAvLyBicm9r
ZXIgYW5kIHN5c2NhbGwgcG9saWN5IG90aGVyd2lzZS4KKyAgICBwbGF0Zm9ybUluaXRpYWxpemUo
KTsKKworICAgIGlmIChzZWNjb21wX2xvYWQobV9jb250ZXh0KSA8IDApCisgICAgICAgIENSQVNI
KCk7CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDllMWZiNjJlNmQ4
MDM2NWYxYTJhOTA2Yzk1NzRlZGFkZThmNGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2Nv
bXBGaWx0ZXJzX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBG
aWx0ZXJzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wRmlsdGVycyk7CisKK3B1
YmxpYzoKKyAgICBlbnVtIEFjdGlvbiB7CisgICAgICAgIEFsbG93ID0gMHg3ZmZmMDAwMFUsCisg
ICAgICAgIEtpbGwgID0gMHgwMDAwMDAwMFUsCisgICAgICAgIFRyYXAgID0gMHgwMDAzMDAwMFUK
KyAgICB9OworCisgICAgZW51bSBPcGVyYXRvciB7CisgICAgICAgIE5vdFNldCAgID0gMCwKKyAg
ICAgICAgTm90RXF1YWwgPSAxLAorICAgICAgICBFcXVhbCAgICA9IDQKKyAgICB9OworCisgICAg
ZXhwbGljaXQgU2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pOworICAgIHZpcnR1
YWwgflNlY2NvbXBGaWx0ZXJzKCk7CisKKyAgICB2b2lkKiBjb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9OworCisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBB
Y3Rpb24sCisgICAgICAgIHVuc2lnbmVkIGFyZ051bTEgPSAwLCBPcGVyYXRvciBvcGVyYXRvcjEg
PSBOb3RTZXQsIGxvbmcgbG9uZyBkYXRhMSA9IDAsCisgICAgICAgIHVuc2lnbmVkIGFyZ051bTIg
PSAwLCBPcGVyYXRvciBvcGVyYXRvcjIgPSBOb3RTZXQsIGxvbmcgbG9uZyBkYXRhMiA9IDApOwor
CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICpIQU5ETEU7CisKKyAg
ICBIQU5ETEUgbV9jb250ZXh0OworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNj
YWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NDE5NjRmOTY5MjhmZDA1ZjQ5ZDJiOGQ0NzdiNDUzMjlkZTli
ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2Nh
bGwuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2Fs
bC5oIgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NP
d25QdHI8U3lzY2FsbD4gU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQobWNvbnRleHRfdCogY29u
dGV4dCkKK3sKKyAgICBzd2l0Y2ggKGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSkgeworICAg
IGNhc2UgU0NNUF9TWVMob3Blbik6CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlblN5
c2NhbGwoY29udGV4dCkpOworICAgIGNhc2UgU0NNUF9TWVMob3BlbmF0KToKKyAgICAgICAgcmV0
dXJuIE9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tT3BlbmF0Q29udGV4dChjb250ZXh0KTsKKyAgICBj
YXNlIFNDTVBfU1lTKGNyZWF0KToKKyAgICAgICAgcmV0dXJuIE9wZW5TeXNjYWxsOjpjcmVhdGVG
cm9tQ3JlYXRDb250ZXh0KGNvbnRleHQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzT3du
UHRyPFN5c2NhbGw+IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlcikKK3sKKyAgICBpbnQgdHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBPd25QdHI8U3lzY2Fs
bD4gc3lzY2FsbDsKKyAgICBpZiAodHlwZSA9PSBTQ01QX1NZUyhvcGVuKSkKKyAgICAgICAgc3lz
Y2FsbCA9IGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbCgwKSk7CisKKyAgICBpZiAoIXN5c2NhbGwt
PmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
c3lzY2FsbC5yZWxlYXNlKCk7Cit9CisKK1N5c2NhbGw6OlN5c2NhbGwoaW50IHR5cGUsIG1jb250
ZXh0X3QqIGNvbnRleHQpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fY29udGV4dChjb250
ZXh0KQoreworfQorCitQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IFN5c2NhbGxSZXN1bHQ6OmNy
ZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgaW50IGZk
KQoreworICAgIGludCB0eXBlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHR5cGUpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE93blB0cjxTeXNjYWxsUmVzdWx0PiByZXN1bHQ7
CisgICAgaWYgKHR5cGUgPT0gU0NNUF9TWVMob3BlbikpCisgICAgICAgIHJlc3VsdCA9IGFkb3B0
UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwgMCkpOworCisgICAgaWYgKCFyZXN1bHQtPmRl
Y29kZShkZWNvZGVyLCBmZCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1N5c2NhbGxSZXN1bHQ6OlN5c2NhbGxSZXN1bHQoaW50
IHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmMTA1YjMwMTQ3OGQ0ZDQzZTA3OTQ3OTkzNjk0
ZWZlM2IyNzkwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TeXNjYWxsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU3lzY2FsbF9oCisjZGVmaW5lIFN5c2NhbGxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKKworI2lmIENQVShYODZfNjQpCisjZGVmaW5lIFJFR19TWVNDQUxMIFJFR19SQVgKKyNk
ZWZpbmUgUkVHX0FSRzAgICAgUkVHX1JESQorI2RlZmluZSBSRUdfQVJHMSAgICBSRUdfUlNJCisj
ZGVmaW5lIFJFR19BUkcyICAgIFJFR19SRFgKKyNkZWZpbmUgUkVHX0FSRzMgICAgUkVHX1IxMAor
I2VsaWYgQ1BVKFg4NikKKyNkZWZpbmUgUkVHX1NZU0NBTEwgUkVHX0VBWAorI2RlZmluZSBSRUdf
QVJHMCAgICBSRUdfRUJYCisjZGVmaW5lIFJFR19BUkcxICAgIFJFR19FQ1gKKyNkZWZpbmUgUkVH
X0FSRzIgICAgUkVHX0VEWAorI2RlZmluZSBSRUdfQVJHMyAgICBSRUdfRVNJCisjZWxzZQorI2Vy
cm9yICJDUFUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFy
Z3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFN5c2NhbGxSZXN1bHQ7CitjbGFzcyBTeXNjYWxsUG9saWN5OworCitj
bGFzcyBTeXNjYWxsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsKTsKKworcHVi
bGljOgorICAgIHZpcnR1YWwgflN5c2NhbGwoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PFN5c2NhbGw+IGNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKworICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2
b2lkIHNldENvbnRleHQobWNvbnRleHRfdCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0
OyB9CisgICAgbWNvbnRleHRfdCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsg
fQorCisgICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0KikgPSAw
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5
c2NhbGxQb2xpY3kmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNjYWxsKGludCB0
eXBlLCBtY29udGV4dF90Kik7CisKK3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsKKyAgICBtY29u
dGV4dF90KiBtX2NvbnRleHQ7Cit9OworCitjbGFzcyBTeXNjYWxsUmVzdWx0IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTeXNjYWxsUmVzdWx0KTsKKworcHVibGljOgorICAgIHZpcnR1YWwg
flN5c2NhbGxSZXN1bHQoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGxSZXN1
bHQ+IGNyZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGludCBmZCk7
CisKKyAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQ9LTEp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIFN5c2NhbGxSZXN1bHQoaW50IHR5cGUpOworCitwcml2
YXRlOgorICAgIGludCBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNDBlMDcxNTYyYjg1ZWQ5YWM5ZDUyMmEwZTQ2M2Q1NTFmZTcwMjYxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0w
LDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQor
CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFN5c2Nh
bGxQb2xpY3k6Omhhc1Blcm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Np
b24gcGVybWlzc2lvbikgY29uc3QKK3sKKyAgICAvLyBUaGUgcm9vdCBkaXJlY3RvcnkgcG9saWN5
IG5lZWRzIHRvIGJlIHNldCBiZWNhdXNlIGl0IGlzIHRoZQorICAgIC8vIHVsdGltYXRlIGZhbGxi
YWNrIHdoZW4gcmV3aW5kaW5nIGRpcmVjdG9yaWVzLgorICAgIEFTU0VSVChtX2RpcmVjdG9yeVBv
bGljeS5jb250YWlucygiLyIpKTsKKworICAgIGlmIChwZXJtaXNzaW9uID09IE5vdEFsbG93ZWQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIqIGJhc2VQYXRoID0gc3RyZHVwKHBh
dGgpOworICAgIGNoYXIqIGNhbm9uaWNhbFBhdGggPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKGJh
c2VQYXRoKTsKKworICAgIGlmIChjYW5vbmljYWxQYXRoKSB7CisgICAgICAgIHN0cnVjdCBzdGF0
IHBhdGhTdGF0OworICAgICAgICBpZiAoc3RhdChjYW5vbmljYWxQYXRoLCAmcGF0aFN0YXQpID09
IC0xKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIElmIHBhdGggaXMg
bm90IGEgZGlyZWN0b3J5LCB3ZSBmb3JjZSB0aGUgcmV3aW5kLgorICAgICAgICBpZiAoIVNfSVNE
SVIocGF0aFN0YXQuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7
CisgICAgICAgICAgICBjYW5vbmljYWxQYXRoID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHdoaWxlICghY2Fub25pY2FsUGF0aCkgeworICAgICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVj
dG9yeSA9IGRpcm5hbWUoYmFzZVBhdGgpOworICAgICAgICBjYW5vbmljYWxQYXRoID0gY2Fub25p
Y2FsaXplX2ZpbGVfbmFtZShjdXJyZW50QmFzZURpcmVjdG9yeSk7CisgICAgfQorCisgICAgUGVy
bWlzc2lvbk1hcDo6Y29uc3RfaXRlcmF0b3IgcG9saWN5ID0gbV9kaXJlY3RvcnlQb2xpY3kuZmlu
ZChTdHJpbmcoY2Fub25pY2FsUGF0aCkpOworICAgIHdoaWxlIChwb2xpY3kgPT0gbV9kaXJlY3Rv
cnlQb2xpY3kuZW5kKCkpIHsKKyAgICAgICAgY2hhciogY3VycmVudEJhc2VEaXJlY3RvcnkgPSBk
aXJuYW1lKGNhbm9uaWNhbFBhdGgpOworICAgICAgICBwb2xpY3kgPSBtX2RpcmVjdG9yeVBvbGlj
eS5maW5kKFN0cmluZyhjdXJyZW50QmFzZURpcmVjdG9yeSkpOworICAgIH0KKworI2lmbmRlZiBO
REVCVUcKKyAgICBpZiAoKHBlcm1pc3Npb24gJiBwb2xpY3ktPnZhbHVlKSAhPSBwZXJtaXNzaW9u
KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNlY2NvbXBCcm9rZXI6IEFjY2VzcyBkZW5pZWQg
dG8gJXNcbiIsIHBhdGgpOworI2VuZGlmCisKKyAgICBmcmVlKGJhc2VQYXRoKTsKKyAgICBmcmVl
KGNhbm9uaWNhbFBhdGgpOworCisgICAgcmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1
ZSkgPT0gcGVybWlzc2lvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9T
eXNjYWxsUG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY2MGJhMmM1YzkwZTcwZGViNmM1MDg4NTI0NTcx
ZTc1NDYyZDFlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TeXNjYWxsUG9saWN5LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTeXNjYWxsUG9saWN5X2gKKyNkZWZpbmUgU3lzY2FsbFBvbGljeV9oCisKKyNpZiBF
TkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTeXNjYWxsUG9saWN5IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFBlcm1pc3Npb24geworICAgICAgICBOb3RBbGxvd2VkICAgPSAwLAorICAg
ICAgICBSZWFkICAgICAgICAgPSAxLAorICAgICAgICBXcml0ZSAgICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIFJlYWRBbmRXcml0ZSA9IFJlYWQgfCBXcml0ZQorICAgIH07CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFBlcm1pc3Npb25NYXA7CisKKyAgICB2b2lkIHNldERpcmVj
dG9yeVBvbGljeShjb25zdCBQZXJtaXNzaW9uTWFwJiBwb2xpY3kpIHsgbV9kaXJlY3RvcnlQb2xp
Y3kgPSBwb2xpY3k7IH0KKyAgICBib29sIGhhc1Blcm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgsIFBlcm1pc3Npb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIFBlcm1pc3Npb25NYXAg
bV9kaXJlY3RvcnlQb2xpY3k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsUG9saWN5X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJz
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNzNlZjgwY2I5MDRlZmJkMGVlNGU0YzFhOGVmNjQwMmE5ZTlkZGY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29t
cEZpbHRlcnNFZmwuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnNFZmwuaCIKKworI2lm
IEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxFZnJlZXQuaD4KKyNpbmNsdWRl
IDxXZWJLaXQyL1NlY2NvbXBCcm9rZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xp
Y3kuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJzRWZsOjpTZWNjb21w
RmlsdGVyc0VmbCgpCisgICAgOiBTZWNjb21wRmlsdGVycyhBbGxvdykKK3sKKyAgICAvLyBTaW5j
ZSB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGluIGEgdmVyeSBlYXJseSBzdGFnZSwgd2UgYXJlCisg
ICAgLy8gbm90IHdoaXRlbGlzdGluZyBzeXNjYWxscyBoZXJlLiBJZGVhbGx5IHdlIHNob3VsZCBi
bG9jayBieQorICAgIC8vIGRlZmF1bHQgYW5kIGNvbXBpbGUgYSBsaXN0IG9mIHdoYXQgaXMgYWxs
b3dlZCBhbmQgd2hhdCBzaG91bGQKKyAgICAvLyBiZSBoYW5kbGVkIGJ5IHRoZSBicm9rZXIuCit9
CisKK3ZvaWQgU2VjY29tcEZpbHRlcnNFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAg
YWRkUnVsZSgib3BlbiIsIFRyYXApOworICAgIGFkZFJ1bGUoIm9wZW5hdCIsIFRyYXApOworICAg
IGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7CisKKyAgICBlZnJlZXRfaW5pdCgpOworCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJvb3REaXIsIChBU0NJSUxpdGVyYWwoIi8iKSkpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBldGNEaXIsIChBU0NJSUxpdGVyYWwoIi9l
dGMiKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBsaWJEaXIsIChBU0NJSUxp
dGVyYWwoIi9saWIiKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBwcm9jRGly
LCAoQVNDSUlMaXRlcmFsKCIvcHJvYyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIHN5c0RpciwgKEFTQ0lJTGl0ZXJhbCgiL3N5cyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHVzckRpciwgKEFTQ0lJTGl0ZXJhbCgiL3VzciIpKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGRldkRpciwgKEFTQ0lJTGl0ZXJhbCgiL2RldiIpKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRtcERpciwgKEFTQ0lJTGl0ZXJhbCgiL3Rt
cCIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJ1blNobURpciwgKEFTQ0lJ
TGl0ZXJhbCgiL3J1bi9zaG0iKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBl
ZmxEYXRhRGlyLCAoU3RyaW5nOjpmcm9tVVRGOChlZnJlZXRfZGF0YV9ob21lX2dldCgpKSArICIv
V2ViS2l0RWZsIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBlZmxDYWNoZURp
ciwgKFN0cmluZzo6ZnJvbVVURjgoZWZyZWV0X2NhY2hlX2hvbWVfZ2V0KCkpICsgIi9XZWJLaXRF
ZmwiKSk7CisKKyAgICBlZnJlZXRfc2h1dGRvd24oKTsKKworICAgIFN5c2NhbGxQb2xpY3k6OlBl
cm1pc3Npb25NYXAgZGlyZWN0b3J5UG9saWN5OworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQocm9v
dERpciwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNl
dChldGNEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQo
bGliRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHBy
b2NEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAgIGRpcmVjdG9yeVBvbGljeS5zZXQoc3lz
RGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHVzckRp
ciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChkZXZEaXIs
IFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0
bXBEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0b3J5UG9saWN5
LnNldChydW5TaG1EaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZGlyZWN0
b3J5UG9saWN5LnNldChlZmxEYXRhRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOwor
ICAgIGRpcmVjdG9yeVBvbGljeS5zZXQoZWZsQ2FjaGVEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWRB
bmRXcml0ZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gRGV2ZWxvcGVycyB1c2luZyBidWls
ZC13ZWJraXQgLS1lZmwgZXhwZWN0IHNvbWUgbGlicmFyaWVzIHRvIGJlIGxvYWRlZAorICAgIC8v
IGZyb20gamhidWlsZCByb290IGZvbGRlciB3aGljaCBpcyB1c3VhbGx5IGluc2lkZSBXZWJLaXRC
dWlsZC4gV2UKKyAgICAvLyBhcmUgdXNpbmcgdGhlIHByb2plY3Qgcm9vdCBoZXJlIHRvIGJlIG5p
Y2UgaWYgdGhlIGRldmVsb3BlciBkZWNpZGVzCisgICAgLy8gdG8gdXNlIFdFQktJVE9VVFBVVERJ
Ui4KKyAgICBjaGFyKiBwYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShQUk9KRUNUX1JPT1Rf
RElSKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHJvamVjdFJvb3REaXIsIChT
dHJpbmc6OmZyb21VVEY4KHBhdGgpKSk7CisgICAgZGlyZWN0b3J5UG9saWN5LnNldChwcm9qZWN0
Um9vdERpciwgU3lzY2FsbFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKKyAgICBmcmVlKHBhdGgpOwor
I2VuZGlmCisKKyAgICBTeXNjYWxsUG9saWN5IHBvbGljeTsKKyAgICBwb2xpY3kuc2V0RGlyZWN0
b3J5UG9saWN5KGRpcmVjdG9yeVBvbGljeSk7CisKKyAgICBTZWNjb21wQnJva2VyOjpsYXVuY2hQ
cm9jZXNzKHRoaXMsIHBvbGljeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NDY5N2RlYWU3MjI3
MWYzOWFmNzdjNWVjZGViOGQxOWFjZjFjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjY29tcEZpbHRlcnNFZmxfaAorI2RlZmlu
ZSBTZWNjb21wRmlsdGVyc0VmbF9oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisj
aW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgU2VjY29tcEZpbHRlcnNFZmwgOiBwdWJsaWMgU2VjY29tcEZpbHRlcnMgeworcHVi
bGljOgorICAgIFNlY2NvbXBGaWx0ZXJzRWZsKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEZp
bHRlcnNFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2Vi
UHJvY2Vzc01haW5FZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJv
Y2Vzc01haW5FZmwuY3BwCmluZGV4IDVmNDg2NTBkYWUyMDZmNTVlNWYxODNlYWY2MWU0MGEwOTE5
YjNlOWUuLjY5M2ZmMzhmMjQ5ZTI5NDRjZmU1MzgyZmY1YTMzZGJkZDgyODY5MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFCTEVfUkVRVUVTVF9B
UEkKIAogI2luY2x1ZGUgIlByb3h5UmVzb2x2ZXJTb3VwLmgiCisjaW5jbHVkZSAiU2VjY29tcEZp
bHRlcnNFZmwuaCIKICNpbmNsdWRlICJXS0Jhc2UuaCIKICNpbmNsdWRlIDxFY29yZS5oPgogI2lu
Y2x1ZGUgPEVmcmVldC5oPgpAQCAtNjEsNiArNjIsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IFdLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5FZmwoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
IHsKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorICAgIHsKKyAgICAgICAgU2VjY29tcEZp
bHRlcnNFZmwgc2VjY29tcEZpbHRlcnM7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmluaXRpYWxp
emUoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFdlYlByb2Nlc3Mgc2hvdWxkIGJlIGxhdW5j
aGVkIHdpdGggYW4gb3B0aW9uLgogICAgIGlmIChhcmdjICE9IDIpCiAgICAgICAgIHJldHVybiAx
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlIGIvU291cmNl
L2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxOGYwMjI5MTVjZTY4NzMw
NjdlZDk5MTg3MjYzYWI3NTNjZjFjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2Uv
RmluZExpYlNlY2NvbXAuY21ha2UKQEAgLTAsMCArMSw0NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIw
MTIsIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyMgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRp
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorIyAgIGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQKKyMgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisj
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMgVHJ5IHRvIGZpbmQg
bGlic2VjY29tcCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorIworIyBBZnRlciBz
dWNjZXNzZnVsIGRpc2NvdmVyeSwgdGhpcyB3aWxsIHNldCBmb3IgaW5jbHVzaW9uIHdoZXJlIG5l
ZWRlZDoKKyMgTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgLSBjb250YWluZyB0aGUgbGlic2VjY29t
cCBoZWFkZXJzCisjIExJQlNFQ0NPTVBfTElCUkFSSUVTIC0gY29udGFpbmcgdGhlIGxpYnNlY2Nv
bXAgbGlicmFyeQorCitpbmNsdWRlKEZpbmRQa2dDb25maWcpCisKK3BrZ19jaGVja19tb2R1bGVz
KFBDX0xJQlNFQ0NPTVAgbGlic2VjY29tcCkKKworZmluZF9wYXRoKExJQlNFQ0NPTVBfSU5DTFVE
RV9ESVJTIE5BTUVTIHNlY2NvbXAuaAorICAgIEhJTlRTICR7UENfTElCU0VDQ09NUF9JTkNMVURF
X0RJUlN9ICR7UENfTElCU0VDQ09NUF9JTkNMVURFRElSfQorKQorCitmaW5kX2xpYnJhcnkoTElC
U0VDQ09NUF9MSUJSQVJJRVMgTkFNRVMgc2VjY29tcAorICAgIEhJTlRTICR7UENfTElCU0VDQ09N
UF9MSUJSQVJZX0RJUlN9ICR7UENfTElCU0VDQ09NUF9MSUJESVJ9CispCisKK2luY2x1ZGUoRmlu
ZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJE
X0FSR1Moc2VjY29tcCBERUZBVUxUX01TRyBMSUJTRUNDT01QX0lOQ0xVREVfRElSUyBMSUJTRUND
T01QX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggZDM2YTkwNGMzZDYwMWM1MDkw
ZDc1ZDU0ZDk0MWMyNGY3ZDM2NDQ5Zi4uNGQ0NWY4MzhlZjc1Mjg5YTViNzVjMmYwODk2M2YxM2Vi
YTQ5ZTVmMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTc4LDYgKzc4LDcgQEAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9R
VUVSWSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRUdJT05T
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1NFQ0NPTVBfRklMVEVSUyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0hBRE9XX0RPTSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TSEFSRURfV09SS0VSUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9TUEVMTENIRUNLIE9OKQpAQCAtMjEyLDYgKzIxMywxMCBAQCBpZiAoRU5BQkxFX0lO
U1BFQ1RPUikKICAgICBhZGRfZGVmaW5pdGlvbnMoLURXRUJfSU5TUEVDVE9SX0lOU1RBTExfRElS
PVwiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtXRUJfSU5TUEVDVE9SX0RJUn1cIikKIGVuZGlm
ICgpCiAKK2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGZpbmRfcGFja2FnZShMaWJT
ZWNjb21wIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogc2V0KENQQUNLX1NPVVJDRV9HRU5FUkFUT1Ig
VEJaMikKIAogIyBPcHRpbWl6ZSBiaW5hcnkgc2l6ZSBmb3IgcmVsZWFzZSBidWlsZHMgYnkgcmVt
b3ZpbmcgZGVhZCBzZWN0aW9ucyBvbiB1bml4L2djYwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtl
CmluZGV4IDViZTM0ZmJkNjg4NGVmYjIzNDFlMDI4ODg3NGYzYWQ1YWI3YzkzZGEuLjFiNDE3ZTRi
OWQzY2FhODZhZGU4MTAwOGM5NWM4MTg4MjY3NGVmZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMu
Y21ha2UKQEAgLTEwMCw2ICsxMDAsNyBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAg
IFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSAiVG9n
Z2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgIlRvZ2dsZSByZXNvbHV0aW9u
IG1lZGlhIHF1ZXJ5IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFC
TEVfU0NSSVBURURfU1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBzdXBwb3J0IiBP
RkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyAiVG9n
Z2xlIExpbnV4IHNlY2NvbXAgZmlsdGVycyBmb3IgdGhlIFdlYlByb2Nlc3Mgc3VwcG9ydCIgT0ZG
KQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJUb2dnbGUgU2hh
ZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NI
QVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYpCiAgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sgIlRvZ2dsZSBTcGVsbGNoZWNraW5n
IHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IDNjMTNk
YTdkMTFiZTUxNzYwY2I3MWE3NGM4MDBhMWM4N2M4ZTA3ZTMuLjIzYjk5M2EyMGNhZTg3YTljMjdk
NzQ0YmM4MTQwY2U5ZWE1NzNlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05NCw2ICs5NCw3IEBACiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUKICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
U0NSSVBURURfU1BFRUNICisjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0VDQ09NUF9GSUxURVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NI
QVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9MTElORwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDZhMDNhYjBm
ZTU1OGEzMDc3M2IyZjA0Zjc4YmQ0NjgzNjk5ODljYzIuLjczMDY3MzE4YzgwMGRkZTAyYjk0NDYz
YjY4MDU3NzA0ZGNjYjRjM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMy0wMS0wNyAgVGhpYWdvIE1hcmNvcyBQ
LiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9w
IFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0
ZXN0cyB0byB2ZXJpZnkgaWYgdGhlIGhhbmRsaW5nIG9mIHRoZSBvcGVuLCBvcGVuYXQsIGNyZWF0
IHN5c2NhbGwKKyAgICAgICAgaXMgYmVpbmcgZG9uZSByaWdodC4gV2UgY2hlY2sgaWYgdGhlIFJl
YWQvV3JpdGUvUmVhZEFuZFdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgIGFyZSByZXNwZWN0ZWQs
IGlmIHRoZSBjYW5vbmljYWwgcGF0aCBpcyBiZWluZyByZXNvbHZlZCBhbmQgaWYKKyAgICAgICAg
dGhlIHBlcm1pc3Npb25zIGFyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRvcG1vc3QgcGFyZW50IGRp
cmVjdG9yeSB3aXRoIGEKKyAgICAgICAgcG9saWN5IHNldCB3aGVuIHRoZSBkaXJlY3RvcnkgYmVp
bmcgb3BlbmVkIGhhcyBubyBwb2xpY3kuCisKKyAgICAgICAgV2UgYWxzbyB0ZXN0IGlmIGFueSBh
dHRlbXB0IG9mIGJsb2NraW5nIFNJR1NZUyBpcyBzaWxlbnRseSBpZ25vcmVkLgorICAgICAgICBT
SUdTWVMgY2Fubm90IGJlIGJsb2NrZWQgYmVjYXVzZSBpbiBpdCdzIGhhbmRsZXIgaXMgd2hlcmUg
d2UgaG9vaworICAgICAgICBzeXNjYWxscyB0byB0aGUgYnJva2VyIHByb2Nlc3MuCisKKyAgICAg
ICAgQWxzbyBhZGRlZCBsaWJzZWNjb21wIHRvIEVGTCdzIGpoYnVpbGQgdG8gbWFrZSB0aGUgbGlm
ZSBvZiBkZXZlbG9wZXJzCisgICAgICAgIHdpbGxpbmcgdG8gaGVscCBlYXNpZXIuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSSk6CisgICAgICAgIChTZWNjb21wRW52aXJvbm1lbnQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmlyb25tZW50OjpTZXRVcCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1lbnQ6OlRlYXJEb3duKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIGVmbC9qaGJ1aWxkLm1vZHVsZXM6CisKIDIwMTMt
MDEtMTUgIFZpY3RvciBDYXJidW5lICA8dmljdG9yQHJvc2VkdS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gVXBkYXRlIG15IGVtYWlsIGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRm
b3JtRWZsLmNtYWtlCmluZGV4IDNjYTcxMWNjMGQxMGY3Y2U0YTc4MzM1YzhlZTRjZTEzNDBhYWNj
ODAuLmI2YWYyZmVjMDM3YTMxOTUzOTUxNTExNmMyOGU3ZmQyYWFhY2U4ZTggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODUsNiArODUsMTIgQEAgc2V0KHRlc3Rfd2Vi
a2l0Ml9hcGlfQklOQVJJRVMKICAgICBXaWxsU2VuZFN1Ym1pdEV2ZW50CiApCiAKK2lmIChFTkFC
TEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGxpc3QoQVBQRU5EIHRlc3Rfd2Via2l0Ml9hcGlfQklO
QVJJRVMKKyAgICAgICAgU2VjY29tcEZpbHRlcnMKKyAgICApCitlbmRpZiAoKQorCiBzZXQodGVz
dF93ZWJraXQyX2FwaV9mYWlsX0JJTkFSSUVTCiAgICAgQ2FuSGFuZGxlUmVxdWVzdAogICAgIERv
d25sb2FkRGVjaWRlRGVzdGluYXRpb25DcmFzaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ2NTE4OTQx
NGQzZDYyMTA2YThjZDdiNjE0MDk0MWUyZmU1OTk0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCAr
MSwzMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29t
cEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xpY3kuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHJvb3REaXIsIChBU0NJ
SUxpdGVyYWwoIi8iKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGhvbWVEaXIsIChT
dHJpbmcoZ2V0ZW52KCJIT01FIikpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdXNy
RGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCB1c3JTYmluRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyL3NiaW4iKSkpOworREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIHRlc3REaXJSZWFkLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNl
Y2NvbXBGaWx0ZXJzL3Rlc3RSZWFkIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0
ZXN0RGlyV3JpdGUsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVz
dFdyaXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZEFuZFdy
aXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5k
V3JpdGUiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJOb3RBbGxvd2Vk
LCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2Vk
IikpKTsKKworc3RhdGljIGNvbnN0IG1vZGVfdCBkZWZhdWx0TW9kZSA9IFNfSVJVU1IgfCBTX0lX
VVNSIHwgU19JWFVTUjsKKworY2xhc3MgU2VjY29tcEVudmlyb25tZW50IDogcHVibGljIHRlc3Rp
bmc6OkVudmlyb25tZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1RSVUUoIWhvbWVEaXIuaXNFbXB0eSgpKTsKKworICAgICAgICBt
a2RpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIsIGRlZmF1bHRNb2RlKTsKKyAgICAgICAg
bWtkaXIodGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAgICBt
a2Rpcih0ZXN0RGlyV3JpdGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAgICBt
a2Rpcih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAg
ICAgICAgbWtkaXIodGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUp
OworCisgICAgICAgIC8vIENyZWF0ZSBhIGZpbGUgZm9yIHRoZSBSZWFkIG9ubHkgYW5kIE5vdEFs
bG93ZWQgZGlyZWN0b3J5IGJlZm9yZQorICAgICAgICAvLyBsb2FkaW5nIHRoZSBmaWx0ZXJzLgor
ICAgICAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZSI7CisgICAgICAg
IGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZh
dWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKyAgICAgICAgZmls
ZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgICAgIGZkID0gb3Blbihm
aWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICAg
ICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOworCisgICAgICAgIFN5c2NhbGxQb2xpY3k6OlBl
cm1pc3Npb25NYXAgZGlyZWN0b3J5UG9saWN5OworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0
KHJvb3REaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworICAgICAgICBkaXJlY3RvcnlQ
b2xpY3kuc2V0KHVzckRpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgICAgIGRpcmVjdG9y
eVBvbGljeS5zZXQodXNyU2JpbkRpciwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7CisgICAg
ICAgIGRpcmVjdG9yeVBvbGljeS5zZXQodGVzdERpclJlYWQsIFN5c2NhbGxQb2xpY3k6OlJlYWQp
OworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJXcml0ZSwgU3lzY2FsbFBvbGlj
eTo6V3JpdGUpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJSZWFkQW5kV3Jp
dGUsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgICAgIGRpcmVjdG9yeVBvbGlj
eS5zZXQodGVzdERpck5vdEFsbG93ZWQsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOworCisg
ICAgICAgIFNlY2NvbXBGaWx0ZXJzIHNlY2NvbXBGaWx0ZXJzKFNlY2NvbXBGaWx0ZXJzOjpBbGxv
dyk7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmFkZFJ1bGUoIm9wZW4iLCBTZWNjb21wRmlsdGVy
czo6VHJhcCk7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmFkZFJ1bGUoIm9wZW5hdCIsIFNlY2Nv
bXBGaWx0ZXJzOjpUcmFwKTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgiY3JlYXQi
LCBTZWNjb21wRmlsdGVyczo6VHJhcCk7CisKKyAgICAgICAgU3lzY2FsbFBvbGljeSBwb2xpY3k7
CisgICAgICAgIHBvbGljeS5zZXREaXJlY3RvcnlQb2xpY3koZGlyZWN0b3J5UG9saWN5KTsKKwor
ICAgICAgICBTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9jZXNzKCZzZWNjb21wRmlsdGVycywgcG9s
aWN5KTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgaGF2
ZSB0byBtb3ZlIHRvIGEgc2VwYXJhdGVkIHByb2Nlc3MgY3JlYXRlZCBiZWZvcmUgbG9hZGluZwor
ICAgICAgICAvLyB0aGUgZmlsdGVycyB3aGVuIHdlIHB1dCB0aGUgcm1kaXIvdW5saW5rIHBvbGlj
aWVzIGluIHBsYWNlLgorICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMv
dGVzdE5vdEFsbG93ZWQvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNl
Y2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5r
KCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUyIik7
CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdy
aXRlL3Rlc3RGaWxlMyIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRl
cnMvdGVzdFdyaXRlL3Rlc3RGaWxlIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0V3JpdGUvdGVzdEZpbGUyIik7CisgICAgICAgIHVubGluaygiL3RtcC9X
ZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZC90ZXN0RmlsZSIpOworICAgICAgICBybWRpcigi
L3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZCIpOworICAgICAgICBybWRp
cigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlIik7CisgICAgICAg
IHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZSIpOworICAgICAgICBy
bWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIpOworICAgICAgICBybWRp
cigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIpOworICAgIH0KK307CisKKzo6dGVzdGluZzo6
RW52aXJvbm1lbnQqIGNvbnN0IGVudiA9IDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25t
ZW50KG5ldyBTZWNjb21wRW52aXJvbm1lbnQpOworCitURVNUKFdlYktpdDIsIHNpZ3Byb2NtYXNr
KQoreworICAgIC8vIFdlIHRlc3QgaGVyZSB0aGUgbWVjaGFuaXNtIGluc3RhbGxlZCB0byBwcmV2
ZW50IFNJR1NZUyB0byBiZSBibG9ja2VkLiBBbnkKKyAgICAvLyBhdHRlbXAgdG8gYWRkIFNJR1NZ
UyB0byB0aGUgc2V0IG9mIGJsb2NrZWQgc2lnbmFscyB3aWxsIGJlIHNpbGVudGx5CisgICAgLy8g
aWdub3JlZCAoYnV0IG90aGVyIHNpZ25hbHMgd2lsbCBiZSBibG9ja2VkIGp1c3QgZmluZSkuCisg
ICAgc2lnc2V0X3Qgc2V0LCBvbGRTZXQ7CisgICAgc2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2ln
YWRkc2V0KCZzZXQsIFNJR1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjEpOworCisg
ICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgMCksIC0xKTsKKyAgICBB
U1NFUlRfTkUoc2lncHJvY21hc2soU0lHX0JMT0NLLCAwLCAmb2xkU2V0KSwgLTEpOworICAgIEFT
U0VSVF9GQUxTRShzaWdpc21lbWJlcigmb2xkU2V0LCBTSUdTWVMpKSA8PCAiU0lHU1lTIHNob3Vs
ZCBub3QgYmUgYmxvY2tlZC4iOworICAgIEFTU0VSVF9UUlVFKHNpZ2lzbWVtYmVyKCZvbGRTZXQs
IFNJR1VTUjEpKSA8PCAiT3RoZXIgc2lnbmFscyBzaG91bGQgYmUgYmxvY2tlZCBub3JtYWxseS4i
OworCisgICAgc2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1NZUyk7
CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjIpOworCisgICAgQVNTRVJUX05FKHNpZ3Byb2Nt
YXNrKFNJR19TRVRNQVNLLCAmc2V0LCAmb2xkU2V0KSwgLTEpOworICAgIEFTU0VSVF9ORShzaWdw
cm9jbWFzayhTSUdfU0VUTUFTSywgMCwgJnNldCksIC0xKTsKKyAgICBBU1NFUlRfRkFMU0Uoc2ln
aXNtZW1iZXIoJnNldCwgU0lHU1lTKSkgPDwgIlNJR1NZUyBzaG91bGQgbm90IGJlIGJsb2NrZWQu
IjsKKyAgICBBU1NFUlRfVFJVRShzaWdpc21lbWJlcigmc2V0LCBTSUdVU1IyKSkgPDwgIk90aGVy
IHNpZ25hbHMgc2hvdWxkIGJlIGJsb2NrZWQgbm9ybWFsbHkuIjsKKyAgICBBU1NFUlRfRkFMU0Uo
c2lnaXNtZW1iZXIoJm9sZFNldCwgU0lHVVNSMikpOworCisgICAgQVNTRVJUX05FKHNpZ3Byb2Nt
YXNrKFNJR19TRVRNQVNLLCAmb2xkU2V0LCAwKSwgLTEpIDw8ICJTaG91bGQgcmVzdG9yZSB0aGUg
b2xkIHNpZ25hbCBzZXQganVzdCBmaW5lLiI7CisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJ
R19TRVRNQVNLLCAwLCAmc2V0KSwgLTEpOworICAgIEFTU0VSVF9GQUxTRShzaWdpc21lbWJlcigm
c2V0LCBTSUdVU1IyKSkgPDwgIlRoZSByZXN0b3JlZCBzZXQgZG9lc24ndCBoYXZlIFNJR1VTUjIu
IjsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuKQoreworICAgIC8vIFJlYWQgb25seSBkaXJlY3Rv
cnkuCisgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOworICAgIGlu
dCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIldyaXRlIGlzIG5vdCBhbGxvd2VkIGF0
IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBP
X1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8
PCAiV3JpdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUp
OworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIkNyZWF0
ZSBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJS
ZWFkIG9ubHkgYW5kIGNyZWF0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4i
OworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvVGhpc0ZpbGVE
b2VzTm90RXhpc3QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZ
KTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpIDw8ICJTaG91
bGQgcmV0dXJuIEVOT0VOVCB3aGVuIHRyeWluZyAiIFwKKyAgICAgICAgInRvIG9wZW4gYSBmaWxl
IHRoYXQgZG9lcyBub3QgZXhpdCBhbmQgdGhlIHBlcm1pc3Npb25zIGFyZSBPSy4iOworCisgICAg
ZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlNob3VsZCByZXR1cm4gRUFDQ0VTIHdo
ZW4gdHJ5aW5nICIgXAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGl0
IGFuZCB0aGUgcGVybWlzc2lvbnMgYXJlIG5vdCBPSy4iOworCisgICAgLy8gV3JpdGUgb25seSBk
aXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJXcml0ZSArICIvdGVzdEZpbGUiOworICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1v
ZGUpOworICAgIEFTU0VSVF9ORShmZCwgLTEpIDw8ICJDcmVhdGUgc2hvdWxkIGJlIGFsbG93ZWQg
YXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVy
cm5vID09IEVBQ0NFUykgPDwgIlJlYWQgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3Rvcnku
IjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJSZWFkIGlzIG5vdCBh
bGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCku
ZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIldyaXRlIHNob3Vs
ZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xvc2UoZmQpOworCisgICAg
Ly8gUmVhZCBhbiB3cml0ZSBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3Jp
dGUgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dS
T05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBBU1NFUlRfTkUoZmQsIC0xKSA8PCAi
Q3JlYXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xvc2Uo
ZmQpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBF
WFBFQ1RfTkUoZmQsIC0xKSA8PCAiUmVhZCBhbmQgd3JpdGUgc2hvdWxkIGJlIGFsbG93ZWQgYXQg
dGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIlJlYWQg
c2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisK
KyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNU
X05FKGZkLCAtMSkgPDwgIldyaXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5
LiI7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAg
ZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlzIG5v
dCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09
IEVBQ0NFUykgPDwgIlJlYWQgYW5kIHdyaXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0
b3J5LiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiUmVhZCBpcyBu
b3QgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRm
OCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5v
ID09IEVBQ0NFUykgPDwgIldyaXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5LiI7
CisKKworICAgIC8vIFRoZSAvdXNyIGRpcmVjdG9yeSBoZXJlIGhhcyByZWFkIHBlcm1pc3Npb25z
LCBzbyBpdCdzIHN1YmRpcmVjdG9yaWVzCisgICAgLy8gc2hvdWxkIHJlc29sdmUgdG8gdGhlIC91
c3IgcGVybWlzc2lvbnMgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICAgIGZpbGUgPSB1
c3JEaXIgKyAiL2Jpbi9iYXNlbmFtZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJTdWJkaXJlY3RvcmllcyBz
aG91bGQgd2l0aCBubyBwb2xpY3Qgc2hvdWxkICIgXAorICAgICAgICAiaW5oZXJpdCB0aGUgcGFy
ZW50J3MgcG9saWNpZXMuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmaWxlID0gdXNyU2JpbkRp
ciArICIvYWRkdXNlciI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9O
TFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlRo
aXMgZGlyZWN0b3J5IHNob3VsZCBoYXZlICIgXAorICAgICAgICAiaXRzIG93biBwb2xpY3kgaW5z
dGVhZCBvZiB0aGUgcGFyZW50J3MuIjsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgcmVzdCBvZiB0
aGUgZmlsZXMgc3lzdGVtIGlzIGJsb2NrZWQgYW5kIHNob3VsZAorICAgIC8vIG5ldmVyIHJldHVy
biBhbnl0aGluZyBlbHNlIG90aGVyIHRoYW4gRUFDQ0VTIHJlZ2FyZGxlc3MgaWYgdGhlCisgICAg
Ly8gZmlsZSBleGlzdHMgb3Igbm90LiBUaGUgcmVhc29uIGlzIGJlY2F1c2UgaXQgd2lsbCBmYWxs
YmFjayB0byB0aGUKKyAgICAvLyBwb2xpY3kgb2YgdGhlIFJvb3QgZGlyZWN0b3J5LCBtYXJrZWQg
YXMgTm90QWxsb3dlZC4KKyAgICBmaWxlID0gaG9tZURpciArICIvdGVzdEZpbGUiOworICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2Rl
KTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAg
ZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9
PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3Jp
dGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBF
QUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uIiAr
IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9
PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworfQorCitURVNUKFdlYktpdDIsIGNyZWF0KQorewor
ICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVh
ZCArICIvdGVzdEZpbGUyIjsKKyAgICBpbnQgZmQgPSBjcmVhdChmaWxlLnV0ZjgoKS5kYXRhKCks
IGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUND
RVMpIDw8ICJDcmVhdGUgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAg
IC8vIFdyaXRlIG9ubHkgZGlyZWN0b3J5LgorICAgIGZpbGUgPSB0ZXN0RGlyV3JpdGUgKyAiL3Rl
c3RGaWxlMiI7CisgICAgZmQgPSBjcmVhdChmaWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2Rl
KTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiQ3JlYXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0
IHRoaXMgZGlyZWN0b3J5LiI7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gUmVhZCBhbiB3cml0
ZSBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxl
MiI7CisgICAgZmQgPSBjcmVhdChmaWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAg
ICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiQ3JlYXRlIHNob3VsZCBiZSBhbGxvd2VkIGF0IHRoaXMg
ZGlyZWN0b3J5LiI7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3Rv
cnkuCisgICAgZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZTIiOworICAgIGZk
ID0gY3JlYXQoZmlsZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlzIG5vdCBhbGxvd2Vk
IGF0IHRoaXMgZGlyZWN0b3J5LiI7Cit9CisKK1RFU1QoV2ViS2l0Miwgb3BlbmF0KQoreworICAg
IGludCBkaXJGZCA9IG9wZW4odGVzdERpclJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSk7CisgICAgQVNTRVJUX05FKGRpckZkLCAtMSkgPDwgIlRoaXMgZGlyZWN0b3J5IHNob3Vs
ZCBiZSBmaW5lIGZvciBvcGVuaW5nLiI7CisKKyAgICBpbnQgZmQgPSBvcGVuYXQoZGlyRmQsICJ0
ZXN0RmlsZTMiLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX05F
KGZkLCAtMSkgPDwgIkNyZWF0ZSBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4i
OworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUzIiwg
T19SRFdSKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiUmVhZCBhbmQgV3JpdGUgc2hvdWxk
IGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBm
ZCA9IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlMyIsIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUo
ZmQsIC0xKSA8PCAiUmVhZCBzaG91bGQgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOwor
ICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUzIiwgT19X
Uk9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJXcml0ZSBzaG91bGQgYmUgYWxsb3dl
ZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworCisgICAgZmQgPSBvcGVuYXQoZmQsICJ0ZXN0RmlsZTMi
LCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRU5PVERJ
UikgPDwgIlNob3VsZCByZXR1cm4gRU5PVERJUiB3aGVuIHRoZSBmZCBpcyBhIGZpbGUuIjsKKyAg
ICBjbG9zZShmZCk7CisKKyAgICBTdHJpbmcgZmlsZSA9ICIuLi8uLi8uLiIgKyB0ZXN0RGlyUmVh
ZEFuZFdyaXRlICsgIi90ZXN0RmlsZTMiOworICAgIGZkID0gb3BlbmF0KGRpckZkLCBmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiV3JpdGUg
c2hvdWxkIGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKyAgICBjbG9zZShmZCk7CisK
KyAgICBmaWxlID0gIi4uLy4uLy4uIiArIHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZTMiOworICAg
IGZkID0gb3BlbmF0KGRpckZkLCBmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJXcml0ZSBzaG91bGQg
bm90IGJlIGFsbG93ZWQgYXQgdGhpcyBkaXJlY3RvcnkuIjsKKworICAgIGZpbGUgPSB0ZXN0RGly
UmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZTMiOworICAgIGZkID0gb3BlbmF0KC0xLCBmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiRGlyZWN0
b3J5IGZkIHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gdGhlIHBhdGggaXMgYWJzb2x1dGUuIjsKKyAg
ICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW5hdCgtMSwgInRlc3RGaWxlMyIsIE9fV1JPTkxZ
KTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQkFERikgPDwgIlNob3Vs
ZCByZXR1cm4gRUJBREYgd2hlbiB0aGUgZmQgaXMgaW52YWxpZC4iOworICAgIGNsb3NlKGRpckZk
KTsKKworICAgIGRpckZkID0gb3Blbih0ZXN0RGlyTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBP
X1JET05MWSk7CisgICAgRVhQRUNUX1RSVUUoZGlyRmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VT
KSA8PCAiT3BlbmluZyB0aGlzIGRpcmVjdG9yeSBpcyBub3QgYWxsb3dlZC4iOworCisgICAgZGly
RmQgPSBvcGVuKHRlc3REaXJSZWFkLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBBU1NF
UlRfTkUoZGlyRmQsIC0xKSA8PCAiVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlIGZpbmUgZm9yIG9w
ZW5pbmcuIjsKKworICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUyIiwgT19SRE9OTFkg
fCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJy
bm8gPT0gRUFDQ0VTKSA8PCAiQ3JlYXRlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgZGlyZWN0b3J5
LiI7CisKKyAgICBmZCA9IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlIiwgT19XUk9OTFkpOworICAg
IEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIldyaXRlIHNob3Vs
ZCBub3QgYmUgYWxsb3dlZCBhdCB0aGlzIGRpcmVjdG9yeS4iOworICAgIGNsb3NlKGRpckZkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZs
L2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggNDlkYmEz
MmY5ODJmZjRkZGQ1MzYyY2EyMGJjNmQwNDdlNGM0MzFiZi4uMmZjMzFhY2ZkODc1NTc4YTc3N2Jm
YjYxMzE4M2EwYTU0NWY4NWQwNSAxMDA2NDQKLS0tIGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxl
cworKysgYi9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCkBAIC0yNCw2ICsyNCw3IEBACiAgICAg
ICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWdvb2QiLz4KICAgICAgIDxkZXAgcGFja2FnZT0i
Z3N0LXBsdWdpbnMtYmFkIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1saWJhdiIvPgorICAg
ICAgPGRlcCBwYWNrYWdlPSJsaWJzZWNjb21wIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwv
bWV0YW1vZHVsZT4KIApAQCAtNTEsNiArNTIsOCBAQAogICAgICAgaHJlZj0iaHR0cDovL2Rvd25s
b2FkLmVubGlnaHRlbm1lbnQub3JnIi8+CiAgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5h
bWU9ImdzdHJlYW1lciIKICAgICAgIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Au
b3JnL3NyYy8iLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXQuY29kZS5zZi5u
ZXQiCisgICAgICBocmVmPSJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC8iLz4KIAogICA8YXV0b3Rv
b2xzIGlkPSJjYWlybyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KICAgICA8ZGVwZW5kZW5jaWVz
PgpAQCAtMzQ2LDQgKzM0OSwxMCBAQAogICAgICAgICAgICAgaGFzaD0ic2hhMjU2OmFlZjhiZTY2
NTA5NmIzYTRlNjQ0MjRmYjM5ZDdjNWRhNTdmYWFhZjk1ZTlmZWE2YzFiYjQ0Mjk1ZDRmYjMyZDUi
Lz4KICAgPC9hdXRvdG9vbHM+IAogCisgIDxhdXRvdG9vbHMgaWQ9ImxpYnNlY2NvbXAiIGF1dG9n
ZW4tc2g9ImNvbmZpZ3VyZSI+CisgICAgICA8YnJhbmNoIG1vZHVsZT0ibGlic2VjY29tcC9saWJz
ZWNjb21wIgorICAgICAgICAgIHJlcG89ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAgICAgICB0YWc9
IjA2YjNlYzc3YzU3Y2U1OGQxYjNlYmI5N2NiODE4NjdkNTQyYTQ5NzkiLz4KKyAgPC9hdXRvdG9v
bHM+CisKIDwvbW9kdWxlc2V0PgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IDNjZTU1NDQ4ZDBjNWYzNjBmN2NhZmY5OWFhNTA3ODBiNGM5YTU0YjMuLjcxYTkzYmNmYzMz
MDEyMjkyNjZkZmQ4MWUxMTljYjhiZDNhMWEwY2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysg
Yi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMS0wNyAgVGhpYWdvIE1hcmNvcyBQ
LiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9w
IFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUg
Yml0cyB0byBFRkwvQ01ha2UgYnVpbGRzeXN0ZW0gdG8gZmluZCB0aGUgbGlic2VjY29tcAorICAg
ICAgICBsaWJyYXJ5LgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNt
YWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZToKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTMtMDEtMTQgIE5hdGUgQ2hhcGluICA8amFw
aGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFibGUgcmV1c2Ugb2YgY2FjaGVkIG1haW4g
cmVzb3VyY2VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184566</attachid>
            <date>2013-01-24 13:24:38 -0800</date>
            <delta_ts>2013-02-06 09:09:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130124232129.patch</filename>
            <type>text/plain</type>
            <size>98971</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk1OTNmNmYyMDk1ODJhNTg4NjZiZDIx
MDBlODQzZmQ0ZGFlNjZlN2UuLjM4NDZhOGM2Zjk2NTZiYWEwOGRmZjczNGQ4ZGQ5MTk2ZWM0YTNl
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjQgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm8gc2V0dXAgYSBo
YW5kbGVyIGZvciBTSUdTWVMgd2hlbiBTZWNjb21wIEZpbHRlcnMgYXJlIGVuYWJsZWQuCisgICAg
ICAgIFRoaXMgc2lnbmFsIG5lZWRzIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHNhbmRib3guCisKKyAg
ICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6CisKIDIwMTMtMDEtMjQgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0aXB1bGF0ZSBidWlsZCBvcmRlciBi
ZXR3ZWVuIFdURkdlbmVyYXRlZCBhbmQgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTI1OTIzNWQwMDcxZTlh
YWMwMjlkMWY0MjYyZjEzMWE0NzczZWVlZC4uYzcxNWIzZTMzYWVhZjcwMTk1YzFhZjBhMThkZThj
ZmU3NGY4ODFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMy0wMS0yNCAgVGhp
YWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAg
ICBbV0syXSBEcm9wIFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2Nv
bXAgZmlsdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODk4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbnRyb2R1Y2UgdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBTZWNjb21wRmlsdGVyLWJhc2VkIHNh
bmRib3guIFRoZQorICAgICAgICBoYXJkZW5pbmcgb2YgdGhlIFdlYlByb2Nlc3MgKGFuZCBwb3Rl
bnRpYWxseSBQbHVnaW5Qcm9jZXNzLCBldGMpCisgICAgICAgIHdvcmtzIGJ5IGEgY29tYmluYXRp
b24gb2YgdGhlIHR3byB0aGluZ3M6CisKKyAgICAgICAgLSBCbG9ja2luZyBzeXNjYWxscyB0aGF0
IGFyZSBub3QgdXNlZCwgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGF0dGFjaworICAgICAgICBz
dXJmYWNlLgorICAgICAgICAtIFRyYXBwaW5nIHNlbnNpdGl2ZSBzeXNjYWxscyBhbmQgZGVsZWdh
dGluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlCisgICAgICAgIHN5c2NhbGxzIHRvIGEgc2VwYXJh
dGVkIHRydXN0ZWQgcHJvY2VzcyBzdWJqZWN0IHRvIGEgc2V0IG9mIHBvbGljaWVzLgorCisgICAg
ICAgIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIHRyYXBzIHRoZSBvcGVuKCktZmFtaWx5IG9m
IHN5c2NhbGxzIG9uIFdlYktpdAorICAgICAgICBFRkwncyBhbmQgUXQncyBXZWJQcm9jZXNzLCBi
dXQgaXQgY291bGQgYmUgZWFzaWx5IHVzZWQgYnkgYW55IExpbnV4IHBvcnQsCisgICAgICAgIHNp
bmNlIHRoZSBjb2RlIGlzIHN1cHBvc2UgdG8gYmUgTGludXgtY29tcGxpYW50LiBUaGUgbGlzdCBv
ZiBzeXNjYWxscyBoYW5kbGVkCisgICAgICAgIGJ5IHRoZSBicm9rZXIgcHJvY2VzcyBzaG91bGQg
ZGVmaW5pdGVseSBncm93IGFzIHdlIG1hdHVyZSB0aGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24u
IE90aGVyIHN5c2NhbGxzIG5lZWRzIHRvIGJlIGhhbmRsZWQgdG8gZ2V0IHRoaXMgc2FuZGJveAor
ICAgICAgICBmdWxseSBmdW5jdGlvbmFsLCBsaWtlIHVubGluaygpLCBta2RpcigpLCBldGMuCisK
KyAgICAgICAgVGhlIGJyb2tlciBwcm9jZXNzIHNob3VsZCBiZSBpbml0aWFsaXplZCBhcyBlYXJs
eSBhcyBwb3NzaWJsZSBvbiB0aGUKKyAgICAgICAgc2FuZGJveGVkIHByb2Nlc3MgbWFpbiwgYmVj
YXVzZSBpdCBvbmx5IGRvZXMgYSBmb3JrKCksIHdoaWNoIGlzIGNoZWFwCisgICAgICAgIG9uIExp
bnV4LiBUaGF0IGFsc28gYWltcyB0byBtaW5pbWl6ZSB0aGUgcmVzaWRlbnQgbWVtb3J5IGZvb3Rw
cmludCBvZgorICAgICAgICB0aGUgYnJva2VyIHByb2Nlc3MuCisKKyAgICAgICAgQ3VycmVudGx5
IHRoZSBicm9rZXIgc3VwcG9ydHMgb25seSBkaXJlY3RvcnkgcG9saWNpZXMsIGJ1dCBmaWxlIHBv
bGljaWVzCisgICAgICAgIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUgdG8gbWFr
ZSBuYXJyb3dlciB0aGUgZmlsZXN5c3RlbQorICAgICAgICBleHBvc2VkIHRvIHRoZSBXZWJQcm9j
ZXNzLgorCisgICAgICAgIE9wZW5pbmcgb2YgZmlsZXMgZm9yIHVwbG9hZCBhbmQgc2F2aW5nIGRv
d25sb2FkcyBpcyBub3Qgc3VwcG9ydGVkIHlldCwKKyAgICAgICAgc2luY2UgaXQgc2hvdWxkIGJl
IGhhbmRsZWQgdG8gdGhlIFVJUHJvY2VzcyBpbiBhIHNpbWlsYXIgZmFzaGlvbiBhcworICAgICAg
ICB0aGUgTWFjIHBvcnQgZG9lcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFNoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmNyZWF0ZUZyb21DcmVhdENvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwpOgorICAgICAg
ICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3Bl
blN5c2NhbGw6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZW5TeXNjYWxsUmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZW5TeXNjYWxsUmVzdWx0Ojp+T3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2Vi
S2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5
c2NhbGxSZXN1bHQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxs
Lmg6IEFkZGVkLgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoT3BlblN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6c2V0UGF0aCk6
CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpzZXRGbGFncyk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZW5TeXNjYWxsOjpzZXRNb2RlKToKKyAgICAgICAgKE9wZW5TeXNjYWxsUmVzdWx0KToK
KyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6OmZkKToKKyAgICAgICAgKFdlYktp
dDo6T3BlblN5c2NhbGxSZXN1bHQ6OmVycm9yTnVtYmVyKToKKyAgICAgICAgKiBTaGFyZWQvbGlu
dXgvU2VjY29tcEJyb2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFNlY2NvbXBCcm9rZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpzZW5kTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OnJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6c3lzU2ln
bmFsSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OnJlZ2lzdGVyU3lzU2lnbmFsSGFuZGxlcik6
CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBCcm9rZXJDbGllbnQpOgorICAg
ICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyQ2xpZW50Ojp+U2VjY29tcEJyb2tlckNsaWVudCk6
CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OmRpc3BhdGNoKToKKyAgICAg
ICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZPcGVuaW5nQ1BVQ291bnQp
OgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyQ2xpZW50OjpoYW5kbGVJZlRyeWluZ1Rv
QmxvY2tTeXNTaWduYWwpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpsYXVuY2hQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIFNoYXJl
ZC9saW51eC9TZWNjb21wQnJva2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFNlY2NvbXBCcm9rZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpzZXRT
eXNjYWxsUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6U2VjY29tcEJy
b2tlcik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6U2Vj
Y29tcEZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6flNlY2NvbXBG
aWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUpOgorICAg
ICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6
OmNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6cGxhdGZvcm1Jbml0
aWFsaXplKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU3lzY2FsbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2Rlcik6CisgICAg
ICAgIChXZWJLaXQ6OlN5c2NhbGw6OlN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxs
UmVzdWx0OjpjcmVhdGVGcm9tRGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1
bHQ6OlN5c2NhbGxSZXN1bHQpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TeXNjYWxsLmg6IEFk
ZGVkLgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU3lz
Y2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6On5TeXNjYWxsKToKKyAgICAgICAgKFdl
YktpdDo6U3lzY2FsbDo6dHlwZSk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OnNldENvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjb250ZXh0KToKKyAgICAgICAgKFN5c2Nh
bGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp+U3lzY2FsbFJlc3Vs
dCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OnR5cGUpOgorICAgICAgICAqIFNo
YXJlZC9saW51eC9TeXNjYWxsUG9saWN5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aCk6Cisg
ICAgICAgICogU2hhcmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoU3lzY2FsbFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OlN5c2Nh
bGxQb2xpY3k6OnNldEZpbGVQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5
OjpzZXREaXJlY3RvcnlQb2xpY3kpOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzRWZsOjpTZWNjb21wRmlsdGVy
c0VmbCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzRWZsOjpwbGF0Zm9ybUluaXRp
YWxpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzRWZsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzRWZsKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NNYWluRWZsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1NlY2Nv
bXBGaWx0ZXJzUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBGaWx0ZXJzUXQ6OlNlY2NvbXBGaWx0ZXJzUXQpOgorICAgICAgICAoV2ViS2l0
OjpTZWNjb21wRmlsdGVyc1F0OjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChTZWNjb21wRmlsdGVyc1F0KToKKyAgICAgICAgKiBxdC9NYWluUXQuY3BwOgorICAg
ICAgICAobWFpbik6CisKIDIwMTMtMDEtMjQgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhl
LmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFVzZSBDIEFQSSBpbnNpZGUg
ZXdrX2Zhdmljb25fZGF0YWJhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXggNGE0NjgxYjRlYWZl
NjFhNWQ0NzUzOTNiYjQzNDE0OWRiNmEwNzkzZi4uNmJiMWU1YzU4NmE5YjgwZDVmZWQzMGM3OGZi
YjdmZTc0MGM1YzVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTM0OSw3ICszNDksOSBAQCBz
dGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnNGb3JGYXRhbEVycm9ycyh2b2lkICgqaGFu
ZGxlcikoaW50KSkKICAgICBzaWduYWwoU0lHRlBFLCBoYW5kbGVyKTsgLy8gICAgODogZmxvYXRp
bmcgcG9pbnQgZXhjZXB0aW9uLgogICAgIHNpZ25hbChTSUdCVVMsIGhhbmRsZXIpOyAvLyAgIDEw
OiBidXMgZXJyb3IuCiAgICAgc2lnbmFsKFNJR1NFR1YsIGhhbmRsZXIpOyAvLyAgMTE6IHNlZ21l
bnRhdGlvbiB2aW9sYXRpb24uCisjaWYgIUVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCiAgICAgc2ln
bmFsKFNJR1NZUywgaGFuZGxlcik7IC8vICAgMTI6IGJhZCBhcmd1bWVudCB0byBzeXN0ZW0gY2Fs
bC4KKyNlbmRpZgogICAgIHNpZ25hbChTSUdQSVBFLCBoYW5kbGVyKTsgLy8gIDEzOiB3cml0ZSBv
biBhIHBpcGUgd2l0aCBubyByZWFkZXIuCiAgICAgc2lnbmFsKFNJR1hDUFUsIGhhbmRsZXIpOyAv
LyAgMjQ6IGV4Y2VlZGVkIENQVSB0aW1lIGxpbWl0LgogICAgIHNpZ25hbChTSUdYRlNaLCBoYW5k
bGVyKTsgLy8gIDI1OiBleGNlZWRlZCBmaWxlIHNpemUgbGltaXQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IGMwNmEwYTUwZTcwOWM4ZjFmMWJlN2ZjMDIyN2JjMTBjYjUxYTg3YTQuLjMz
NDY5Y2UyMTA4Y2FjNmNkMTEzZDcxNTQ3MjMyMjA5ZTMxZjU5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC0yMyw2ICsyMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMK
ICAgICBTaGFyZWQvZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQv
ZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5j
cHAKKyAgICBTaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQvbGludXgv
U2VjY29tcEZpbHRlcnMuY3BwCisgICAgU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCisgICAgU2hh
cmVkL2xpbnV4L1N5c2NhbGxQb2xpY3kuY3BwCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNh
bXBsZXJMaW51eC5jcHAKIAogICAgIFNoYXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
LmNwcApAQCAtMTQwLDYgKzE0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9lZmwvV2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9lZmwvV2ViUGFnZUVmbC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1NlY2Nv
bXBGaWx0ZXJzRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNw
cAogCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQxLDYgKzI0
NywxNyBAQCBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7U1FMSVRFX0xJ
QlJBUklFU30KICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklFU30KKyAg
ICApCisgICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAg
ICR7TElCU0VDQ09NUF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgYWRkX2RlZmluaXRpb25z
KC1EUFJPSkVDVF9ST09UX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKK2VuZGlmICgpCisK
IGlmIChFTkFCTEVfRUNPUkVfWCkKICAgICBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklF
UwogICAgICAgICAke0VDT1JFX1hfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9PcGVuU3lzY2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMwNjhmNWE2N2Y5OGM1N2NkODJhNDJk
YjU5MDcwYTEzZDQ2YzRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9PcGVuU3lzY2FsbC5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgorCisj
aWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NPTVBJTEVfQVNTRVJUKCFPX1JET05MWSwgT19SRE9O
TFkpOworQ09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkpOworQ09NUElMRV9B
U1NFUlQoT19SRFdSID09IDIsIE9fUkRSVyk7CisKK1Bhc3NPd25QdHI8U3lzY2FsbD4gT3BlblN5
c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7Cisg
ICAgT3duUHRyPE9wZW5TeXNjYWxsPiBvcGVuID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsKDAp
KTsKKworICAgIG9wZW4tPnNldEZsYWdzKGNvbnRleHQtPmdyZWdzW1JFR19BUkcyXSk7CisgICAg
b3Blbi0+c2V0TW9kZShjb250ZXh0LT5ncmVnc1tSRUdfQVJHM10pOworICAgIG9wZW4tPnNldENv
bnRleHQoY29udGV4dCk7CisKKyAgICBpbnQgZmQgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF07
CisgICAgY2hhciogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdz
W1JFR19BUkcxXSk7CisKKyAgICBpZiAocGF0aFswXSA9PSAnLycpIHsKKyAgICAgICAgb3Blbi0+
c2V0UGF0aChwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9wZW4ucmVsZWFzZSgpOworICAgIH0KKwor
ICAgIHN0cnVjdCBzdGF0IHBhdGhTdGF0OworICAgIGlmIChmc3RhdChmZCwgJnBhdGhTdGF0KSA9
PSAtMSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtZXJybm87Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghU19JU0RJUihwYXRoU3Rh
dC5zdF9tb2RlKSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtRU5P
VERJUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgY2hhciBmZExpbmtQ
YXRoWzMyXTsKKyAgICBzbnByaW50ZihmZExpbmtQYXRoLCBzaXplb2YoZmRMaW5rUGF0aCksICIv
cHJvYy9zZWxmL2ZkLyVkIiwgZmQpOworCisgICAgY2hhciBmZFBhdGhbUEFUSF9NQVhdOworICAg
IHNzaXplX3Qgc2l6ZSA9IHJlYWRsaW5rKGZkTGlua1BhdGgsIGZkUGF0aCwgc2l6ZW9mKGZkUGF0
aCkgLSAxKTsKKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tS
RUdfU1lTQ0FMTF0gPSAtZXJybm87CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIC8vIFRoZSAiKyAyIiBoZXJlIHN0YW5kcyBmb3IgdGhlICcvJyBhbmQgbnVsbCB0ZXJtaW5h
dG9yLgorICAgIGlmIChzaXplICsgc3RybGVuKHBhdGgpICsgMiA+IFBBVEhfTUFYKSB7CisgICAg
ICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1FTkFNRVRPT0xPTkc7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHNwcmludGYoJmZkUGF0aFtzaXplXSwgIi8l
cyIsIHBhdGgpOworICAgIG9wZW4tPnNldFBhdGgoZmRQYXRoKTsKKworICAgIHJldHVybiBvcGVu
LnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6Y3JlYXRl
RnJvbUNyZWF0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0KQoreworICAgIE9wZW5TeXNjYWxs
KiBvcGVuID0gbmV3IE9wZW5TeXNjYWxsKDApOworCisgICAgb3Blbi0+c2V0UGF0aChDU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSkpKTsKKyAg
ICBvcGVuLT5zZXRGbGFncyhPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DKTsKKyAgICBvcGVu
LT5zZXRNb2RlKGNvbnRleHQtPmdyZWdzW1JFR19BUkcxXSk7CisgICAgb3Blbi0+c2V0Q29udGV4
dChjb250ZXh0KTsKKworICAgIHJldHVybiBhZG9wdFB0cihvcGVuKTsKK30KKworT3BlblN5c2Nh
bGw6Ok9wZW5TeXNjYWxsKG1jb250ZXh0X3QqIGNvbnRleHQpCisgICAgOiBTeXNjYWxsKF9fTlJf
b3BlbiwgY29udGV4dCkKKyAgICAsIG1fZmxhZ3MoMCkKKyAgICAsIG1fbW9kZSgwKQoreworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0gQ1N0cmluZyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF0pKTsKKyAgICBt
X2ZsYWdzID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdOworICAgIG1fbW9kZSA9IGNvbnRleHQt
PmdyZWdzW1JFR19BUkcyXTsKK30KKwordm9pZCBPcGVuU3lzY2FsbDo6c2V0UmVzdWx0KGNvbnN0
IFN5c2NhbGxSZXN1bHQqIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpICYmIHJlc3Vs
dC0+dHlwZSgpID09IHR5cGUoKSk7CisKKyAgICBjb25zdCBPcGVuU3lzY2FsbFJlc3VsdCogb3Bl
blJlc3VsdCA9IHN0YXRpY19jYXN0PGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0Kj4ocmVzdWx0KTsK
KworICAgIGlmIChvcGVuUmVzdWx0LT5mZCgpID49IDApCisgICAgICAgIGNvbnRleHQoKS0+Z3Jl
Z3NbUkVHX1NZU0NBTExdID0gZHVwKG9wZW5SZXN1bHQtPmZkKCkpOworICAgIGVsc2UKKyAgICAg
ICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtb3BlblJlc3VsdC0+ZXJyb3JOdW1i
ZXIoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBPcGVuU3lzY2FsbDo6ZXhlY3V0
ZShjb25zdCBTeXNjYWxsUG9saWN5JiBwb2xpY3kpCit7CisgICAgaWYgKCFzdHJuY21wKCIvcHJv
Yy9zZWxmLyIsIG1fcGF0aC5kYXRhKCksIDExKSkgeworICAgICAgICBTdHJpbmcgcmVzb2x2ZWRT
ZWxmUGF0aCA9IEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihnZXRwcGlk
KCkpICsgJm1fcGF0aC5kYXRhKClbMTBdOworICAgICAgICBtX3BhdGggPSByZXNvbHZlZFNlbGZQ
YXRoLnV0ZjgoKS5kYXRhKCk7CisgICAgfQorCisgICAgU3lzY2FsbFBvbGljeTo6UGVybWlzc2lv
biBwZXJtaXNzaW9uID0gU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZDsKKyAgICBpZiAobV9mbGFn
cyAmIE9fUkRXUikKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xp
Y3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUp
OworICAgIGVsc2UgaWYgKG1fZmxhZ3MgJiBPX1dST05MWSkKKyAgICAgICAgcGVybWlzc2lvbiA9
IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNj
YWxsUG9saWN5OjpXcml0ZSk7CisgICAgZWxzZQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGlj
X2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xp
Y3k6OlJlYWQpOworCisgICAgLy8gQ3JlYXRlIGEgZmlsZSBpbXBsaWVzIHdyaXRlIHBlcm1pc3Np
b24gb24gdGhlIGRpcmVjdG9yeS4KKyAgICBpZiAobV9mbGFncyAmIE9fQ1JFQVQgfHwgbV9mbGFn
cyAmIE9fRVhDTCkKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xp
Y3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisKKyAg
ICBpZiAoIXBvbGljeS5oYXNQZXJtaXNzaW9uRm9yUGF0aChtX3BhdGguZGF0YSgpLCBwZXJtaXNz
aW9uKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwg
RUFDQ0VTKSk7CisKKyAgICAvLyBQZXJtaXNzaW9uIGdyYW50ZWQsIGV4ZWN1dGUgdGhlIHN5c2Nh
bGwuIFRoZSBzeXNjYWxsIG1pZ2h0IHN0aWxsCisgICAgLy8gZmFpbCBiZWNhdXNlIG9mIGhhcmQg
cGVybWlzc2lvbnMgZW5mb3JjZWQgYnkgdGhlIGZpbGVzeXN0ZW0gYW5kCisgICAgLy8gdGhpbmdz
IGxpa2UgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LgorICAgIGludCBmZCA9IG9wZW4obV9wYXRo
LmRhdGEoKSwgbV9mbGFncywgbV9tb2RlKTsKKyAgICBpbnQgZXJyb3JOdW1iZXIgPSBmZCA9PSAt
MSA/IGVycm5vIDogMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGxSZXN1
bHQoZmQsIGVycm9yTnVtYmVyKSk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGw6OmVuY29kZShDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNv
ZGUodHlwZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZShtX3BhdGgpOworICAgIGVuY29kZXIuZW5j
b2RlKG1fZmxhZ3MpOworICAgIGVuY29kZXIuZW5jb2RlKG1fbW9kZSk7Cit9CisKK2Jvb2wgT3Bl
blN5c2NhbGw6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9wYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1fZmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKG1fbW9kZSk7Cit9CisKK09wZW5TeXNjYWxs
UmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdChpbnQgZmQsIGludCBlcnJvck51bWJlcikKKyAgICA6
IFN5c2NhbGxSZXN1bHQoX19OUl9vcGVuKQorICAgICwgbV9mZChmZCkKKyAgICAsIG1fZXJyb3JO
dW1iZXIoZXJyb3JOdW1iZXIpCit7Cit9CisKK09wZW5TeXNjYWxsUmVzdWx0Ojp+T3BlblN5c2Nh
bGxSZXN1bHQoKQoreworICAgIGlmIChtX2ZkID49IDApCisgICAgICAgIGNsb3NlKG1fZmQpOwor
fQorCit2b2lkIE9wZW5TeXNjYWxsUmVzdWx0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIuZW5jb2RlKHR5cGUoKSk7CisKKyAg
ICBpZiAobV9mZCA+PSAwKSB7CisgICAgICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgYXR0YWNobWVu
dChtX2ZkKTsKKyAgICAgICAgZW5jb2Rlci5hZGRBdHRhY2htZW50KGF0dGFjaG1lbnQpOworICAg
IH0KKworICAgIGVuY29kZXIuZW5jb2RlKG1fZXJyb3JOdW1iZXIpOworfQorCitib29sIE9wZW5T
eXNjYWxsUmVzdWx0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBp
bnQgZmQpCit7CisgICAgaWYgKGZkID49IDApCisgICAgICAgIG1fZmQgPSBmZDsKKworICAgIHJl
dHVybiBkZWNvZGVyLT5kZWNvZGUobV9lcnJvck51bWJlcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L09wZW5TeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMwMzU4OGU0NmY2Mjdj
NDhjODc2MDI1MGE3NjI0NjQ5NzYyNjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9PcGVuU3lzY2FsbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgT3BlblN5c2NhbGxfaAorI2RlZmluZSBPcGVuU3lzY2FsbF9o
CisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU3lzY2FsbC5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgeworY2xh
c3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgT3BlblN5c2NhbGwgOiBwdWJsaWMgU3lzY2FsbCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lzY2FsbD4gY3JlYXRlRnJvbU9wZW5hdENvbnRl
eHQobWNvbnRleHRfdCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGw+IGNyZWF0ZUZy
b21DcmVhdENvbnRleHQobWNvbnRleHRfdCopOworCisgICAgZXhwbGljaXQgT3BlblN5c2NhbGwo
bWNvbnRleHRfdCopOworCisgICAgdm9pZCBzZXRQYXRoKGNvbnN0IENTdHJpbmcmIHBhdGgpIHsg
bV9wYXRoID0gcGF0aDsgfTsKKyAgICB2b2lkIHNldEZsYWdzKGNvbnN0IGludCBmbGFncykgeyBt
X2ZsYWdzID0gZmxhZ3M7IH07CisgICAgdm9pZCBzZXRNb2RlKGNvbnN0IG1vZGVfdCBtb2RlKSB7
IG1fbW9kZSA9IG1vZGU7IH07CisKKyAgICAvLyBTeXNjYWxsIGltcGxlbWVudGF0aW9uLgorICAg
IHZpcnR1YWwgdm9pZCBzZXRSZXN1bHQoY29uc3QgU3lzY2FsbFJlc3VsdCopOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3km
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CisKK3ByaXZhdGU6CisgICAgQ1N0cmluZyBtX3BhdGg7CisgICAgaW50IG1fZmxhZ3M7CisgICAg
bW9kZV90IG1fbW9kZTsKK307CisKK2NsYXNzIE9wZW5TeXNjYWxsUmVzdWx0IDogcHVibGljIFN5
c2NhbGxSZXN1bHQgeworcHVibGljOgorICAgIE9wZW5TeXNjYWxsUmVzdWx0KGludCBmZCwgaW50
IGVycm9yTnVtYmVyKTsKKyAgICB+T3BlblN5c2NhbGxSZXN1bHQoKTsKKworICAgIGludCBmZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmQ7IH0KKyAgICBpbnQgZXJyb3JOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2Vycm9yTnVtYmVyOyB9CisKKyAgICAvLyBTeXNjYWxsUmVzdWx0IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
LCBpbnQgZmQpOworCitwcml2YXRlOgorICAgIGludCBtX2ZkOworICAgIGludCBtX2Vycm9yTnVt
YmVyOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBPcGVuU3lzY2FsbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEJyb2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVhMjY0ODBl
MDI3NWY4YmIyN2MyY2RmMTQwMTg4YTIxMDM1ODZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wQnJva2VyLmNwcApAQCAtMCwwICsxLDM3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBCcm9rZXIu
aCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2VjY29tcC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQu
aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIFNZU19TRUNDT01QCisjZGVmaW5lIFNZU19TRUNDT01Q
IDEKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1lc3NhZ2VNYXhTaXplID0gNDA5NjsK
K3N0YXRpYyBjb25zdCBjaGFyIGNwdUNvdW50UGF0aFtdID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0v
Y3B1L29ubGluZSI7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21wQnJva2Vy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2VjY29tcEJyb2tlckNsaWVudCYgc2hhcmVk
KGludCBzb2NrZXQ9LTEpOworICAgIH5TZWNjb21wQnJva2VyQ2xpZW50KCk7CisKKyAgICB2b2lk
IGRpc3BhdGNoKFN5c2NhbGwqKSBjb25zdDsKKworICAgIGJvb2wgaGFuZGxlSWZPcGVuaW5nQ1BV
Q291bnQobWNvbnRleHRfdCopIGNvbnN0OworICAgIGJvb2wgaGFuZGxlSWZUcnlpbmdUb0Jsb2Nr
U3lzU2lnbmFsKHVjb250ZXh0X3QqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTZWNjb21wQnJv
a2VyQ2xpZW50KGludCBzb2NrZXQpOworCisgICAgaW50IG1fc29ja2V0OworICAgIGludCBtX25j
cHVzOworCisgICAgbXV0YWJsZSBNdXRleCBtX3NvY2tldExvY2s7Cit9OworCitzdGF0aWMgc3Np
emVfdCBzZW5kTWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50
IGZkPS0xKQoreworICAgIEFTU0VSVChzaXplIDw9IG1lc3NhZ2VNYXhTaXplKTsKKworICAgIHN0
cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNz
YWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIG1lbXNldCgmaW92LCAwLCBzaXpl
b2YoaW92KSk7CisgICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBpb3YuaW92X2xlbiA9IHNp
emU7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAmaW92OworICAgIG1lc3NhZ2UubXNnX2lvdmxl
biA9IDE7CisKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2YoZmQpKV07CisgICAg
aWYgKGZkID49IDApIHsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGNvbnRyb2w7Cisg
ICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7CisgICAgICAg
IG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1zZ19jb250cm9sbGVuKTsK
KworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2Up
OworICAgICAgICBjbXNnLT5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKyAgICAgICAgY21zZy0+
Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKKyAgICAgICAgY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xF
TihzaXplb2YoZmQpKTsKKworICAgICAgICBtZW1tb3ZlKENNU0dfREFUQShjbXNnKSwgJmZkLCBz
aXplb2YoZmQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VuZG1zZyhzb2NrZXQsICZtZXNzYWdl
LCAwKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjZWl2ZU1lc3NhZ2UoaW50IHNvY2tldCwgdm9p
ZCogZGF0YSwgc2l6ZV90IHNpemUsIGludCogZmQgPSAwKQoreworICAgIHN0cnVjdCBtc2doZHIg
bWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CisKKyAg
ICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7Cisg
ICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBpb3YuaW92X2xlbiA9IHNpemU7CisKKyAgICBt
ZXNzYWdlLm1zZ19pb3YgPSAmaW92OworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKyAg
ICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2YoZmQpKV07CisgICAgbWVzc2FnZS5tc2df
Y29udHJvbCA9IGNvbnRyb2w7CisgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihj
b250cm9sKTsKKyAgICBtZW1zZXQobWVzc2FnZS5tc2dfY29udHJvbCwgMCwgbWVzc2FnZS5tc2df
Y29udHJvbGxlbik7CisKKyAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMgPSByZWN2bXNnKHNvY2tl
dCwgJm1lc3NhZ2UsIDApOworCisgICAgaWYgKGZkICYmIHJlY2VpdmVkQnl0ZXMgPiAwKSB7Cisg
ICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7Cisg
ICAgICAgIGlmIChjbXNnICYmIGNtc2ctPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjbXNn
LT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykKKyAgICAgICAgICAgIG1lbWNweShmZCwgQ01TR19E
QVRBKGNtc2cpLCBzaXplb2YoKmZkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpmZCA9
IC0xOworICAgIH0KKworICAgIHJldHVybiByZWNlaXZlZEJ5dGVzID49IDAgPyByZWNlaXZlZEJ5
dGVzIDogLWVycm5vOworfQorCitzdGF0aWMgdm9pZCBzeXNTaWduYWxIYW5kbGVyKGludCBzaWdu
YWwsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogZGF0YSkKK3sKKyAgICBpZiAoc2lnbmFsICE9IFNJ
R1NZUyB8fCBpbmZvLT5zaV9jb2RlICE9IFNZU19TRUNDT01QKQorICAgICAgICBDUkFTSCgpOwor
CisgICAgdWNvbnRleHRfdCogY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPihkYXRh
KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBTZWNjb21wQnJv
a2VyQ2xpZW50KiBjbGllbnQgPSAmU2VjY29tcEJyb2tlckNsaWVudDo6c2hhcmVkKCk7CisKKyAg
ICBpZiAoY2xpZW50LT5oYW5kbGVJZk9wZW5pbmdDUFVDb3VudCgmY29udGV4dC0+dWNfbWNvbnRl
eHQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNsaWVudC0+aGFuZGxlSWZUcnlpbmdUb0Js
b2NrU3lzU2lnbmFsKGNvbnRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICBPd25QdHI8U3lz
Y2FsbD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KCZjb250ZXh0LT51Y19t
Y29udGV4dCk7CisgICAgY2xpZW50LT5kaXNwYXRjaChzeXNjYWxsLmdldCgpKTsKK30KKworc3Rh
dGljIHZvaWQgcmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKCkKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKKyAgICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6ZW9mKGFjdGlvbikpOworICAg
IGFjdGlvbi5zYV9zaWdhY3Rpb24gPSAmc3lzU2lnbmFsSGFuZGxlcjsKKyAgICBhY3Rpb24uc2Ff
ZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfTk9ERUZFUjsKKworICAgIGlmIChzaWdhY3Rpb24oU0lH
U1lTLCAmYWN0aW9uLCAwKSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICBzaWdzZXRfdCBt
YXNrOworICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICBzaWdhZGRzZXQoJm1hc2ssIFNJR1NZ
Uyk7CisKKyAgICBpZiAoc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKSA8IDApCisg
ICAgICAgIENSQVNIKCk7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQmIFNlY2NvbXBCcm9rZXJD
bGllbnQ6OnNoYXJlZChpbnQgc29ja2V0KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Vj
Y29tcEJyb2tlckNsaWVudCwgYnJva2VyQ2xpZW50LCAoc29ja2V0KSk7CisKKyAgICByZXR1cm4g
YnJva2VyQ2xpZW50OworfQorCitTZWNjb21wQnJva2VyQ2xpZW50OjpTZWNjb21wQnJva2VyQ2xp
ZW50KGludCBzb2NrZXQpCisgICAgOiBtX3NvY2tldChzb2NrZXQpCisgICAgLCBtX25jcHVzKG9w
ZW4oY3B1Q291bnRQYXRoLCBPX1JET05MWSkpCit7CisgICAgQVNTRVJUKG1fc29ja2V0ID49IDAg
JiYgbV9uY3B1cyA+PSAwKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudDo6flNlY2NvbXBCcm9r
ZXJDbGllbnQoKQoreworICAgIGNsb3NlKG1fc29ja2V0KTsKKyAgICBjbG9zZShtX25jcHVzKTsK
K30KKwordm9pZCBTZWNjb21wQnJva2VyQ2xpZW50OjpkaXNwYXRjaChTeXNjYWxsKiBzeXNjYWxs
KSBjb25zdAoreworICAgIGlmICghc3lzY2FsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3du
UHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcj4gZW5jb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50
RW5jb2Rlcjo6Y3JlYXRlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKCpzeXNjYWxsKTsKKworICAg
IGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKKyAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMg
PSAwOworICAgIGludCBmZCA9IC0xOworCisgICAgbV9zb2NrZXRMb2NrLmxvY2soKTsKKworICAg
IGlmIChzZW5kTWVzc2FnZShtX3NvY2tldCwgZW5jb2Rlci0+YnVmZmVyKCksIGVuY29kZXItPmJ1
ZmZlclNpemUoKSkgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgcmVjZWl2ZWRCeXRlcyA9IHJlY2VpdmVNZXNzYWdlKG1fc29ja2V0LCAmYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgJmZkKTsKKyAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPiAwKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgIT0gLUVJTlRS
KQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBtX3NvY2tldExvY2sudW5sb2Nr
KCk7CisKKyAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyPiBkZWNvZGVyID0gQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVhdGUoKGNvbnN0IHVpbnQ4X3QqKSBidWZmZXIsIHJl
Y2VpdmVkQnl0ZXMpOworICAgIE93blB0cjxTeXNjYWxsUmVzdWx0PiByZXN1bHQgPSBTeXNjYWxs
UmVzdWx0OjpjcmVhdGVGcm9tRGVjb2RlcihkZWNvZGVyLmdldCgpLCBmZCk7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBzeXNjYWxsLT5zZXRSZXN1bHQocmVzdWx0
LmdldCgpKTsKK30KKworYm9vbCBTZWNjb21wQnJva2VyQ2xpZW50OjpoYW5kbGVJZk9wZW5pbmdD
UFVDb3VudChtY29udGV4dF90KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChjb250ZXh0LT5n
cmVnc1tSRUdfU1lTQ0FMTF0gIT0gX19OUl9vcGVuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjb25zdCBjaGFyICpwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29udGV4dC0+
Z3JlZ3NbUkVHX0FSRzBdKTsKKyAgICBpZiAoc3RyY21wKGNwdUNvdW50UGF0aCwgcGF0aCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hbGxvYyB3aWxsIHNvbWV0aW1lcyBjaGVj
ayB0aGUgbnVtYmVyIG9mIENQVXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtCisgICAgLy8gYnkgb3Bl
bmluZyBhIHNwZWNpYWwgZmlsZS4gSWYgaXQgZG9lcyB0aGF0IGluIHRoZSBtaWRkbGUgb2YgdGhl
IFNJR1NZUworICAgIC8vIHNpZ25hbCBoYW5kbGVyLCBpdCBtaWdodCB0cmlnZ2VyIGEgcmVjdXJz
aXZlIGF0dGVtcHQgb2YgcHJveHlpbmcgdGhlCisgICAgLy8gb3BlbigpIHN5c2NhbGwgdG8gdGhl
IGJyb2tlci4gQmVjYXVzZSBvZiB0aGF0LCB3ZSBjYWNoZSB0aGlzIHJlc291cmNlLgorICAgIGNv
bnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IGR1cChtX25jcHVzKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmVHJ5aW5nVG9CbG9j
a1N5c1NpZ25hbCh1Y29udGV4dF90KiB1Y29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBXZSBzaG91
bGQgcHJvYmFibHkgZG8gdGhlIHNhbWUgdGhpbmcgaWYgYSBwcm9jZXNzIHRyaWVzIHRvIG92ZXJy
aWRlIHRoZQorICAgIC8vIFNJR1NZUyBzaWduYWwgaGFuZGxlLCBidXQgdGhpcyBpcyB2ZXJ5IHVu
bGlrZWx5IHRvIGhhcHBlbi4KKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIG1j
b250ZXh0X3QgbWNvbnRleHQgPSB1Y29udGV4dC0+dWNfbWNvbnRleHQ7CisjaWYgQ1BVKFg4NikK
KyAgICBpZiAobWNvbnRleHQuZ3JlZ3NbUkVHX1NZU0NBTExdID09IF9fTlJfc2lncHJvY21hc2sp
CisgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisjZW5kaWYKKyAgICBpZiAobWNvbnRleHQu
Z3JlZ3NbUkVHX1NZU0NBTExdID09IF9fTlJfcnRfc2lncHJvY21hc2spCisgICAgICAgIHNob3Vs
ZEhhbmRsZSA9IHRydWU7CisKKyAgICBpZiAoIXNob3VsZEhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50IGhvdyA9IG1jb250ZXh0LmdyZWdzW1JFR19BUkcwXTsKKyAgICBz
aWdzZXRfdCogc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxzaWdzZXRfdCo+KG1jb250ZXh0LmdyZWdz
W1JFR19BUkcxXSk7CisgICAgc2lnc2V0X3QqIG9sZFNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2ln
c2V0X3QqPihtY29udGV4dC5ncmVnc1tSRUdfQVJHMl0pOworCisgICAgaWYgKG9sZFNldCkKKyAg
ICAgICAgbWVtY3B5KG9sZFNldCwgJnVjb250ZXh0LT51Y19zaWdtYXNrLCBzaXplb2Yoc2lnc2V0
X3QpKTsKKworICAgIGlmIChob3cgPT0gU0lHX1NFVE1BU0spCisgICAgICAgIG1lbWNweSgmdWNv
bnRleHQtPnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKHNpZ3NldF90KSk7CisgICAgZWxzZQorICAg
ICAgICBzaWdvcnNldCgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNldCwgJnVjb250ZXh0LT51Y19z
aWdtYXNrKTsKKworICAgIHNpZ2RlbHNldCgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIFNJR1NZUyk7
CisgICAgbWNvbnRleHQuZ3JlZ3NbUkVHX1NZU0NBTExdID0gMDsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3MoU2VjY29tcEZpbHRlcnMq
IGZpbHRlcnMsIGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkKK3sKKyAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhlIHNpZ3Byb2NtYXNrIGZpbHRlcnMgYmVsbG93IGFyZSBuZWVkZWQg
YnkgaGFuZGxlSWZUcnlpbmdUb0Jsb2NrU3lzU2lnbmFsKCkKKyAgICAvLyBzbyB3ZSBjYW4gcHJl
dmVudCB0aGUgcnVubmluZyBwcm9jZXNzZXMgZnJvbSBibG9ja2luZyBTSUdTWVMuCisjaWYgQ1BV
KFg4NikKKyAgICBmaWx0ZXJzLT5hZGRSdWxlKCJzaWdwcm9jbWFzayIsIFNlY2NvbXBGaWx0ZXJz
OjpUcmFwLAorICAgICAgICAwLCBTZWNjb21wRmlsdGVyczo6RXF1YWwsIFNJR19CTE9DSywKKyAg
ICAgICAgMSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsLCAwKTsKKyAgICBmaWx0ZXJzLT5hZGRS
dWxlKCJzaWdwcm9jbWFzayIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNj
b21wRmlsdGVyczo6RXF1YWwsIFNJR19TRVRNQVNLLAorICAgICAgICAxLCBTZWNjb21wRmlsdGVy
czo6Tm90RXF1YWwsIDApOworI2VuZGlmCisgICAgZmlsdGVycy0+YWRkUnVsZSgicnRfc2lncHJv
Y21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6
OkVxdWFsLCBTSUdfQkxPQ0ssCisgICAgICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCwg
MCk7CisgICAgZmlsdGVycy0+YWRkUnVsZSgicnRfc2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVy
czo6VHJhcCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVxdWFsLCBTSUdfU0VUTUFTSywK
KyAgICAgICAgMSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsLCAwKTsKKworICAgIFNlY2NvbXBC
cm9rZXIgc2VjY29tcEJyb2tlcjsKKyAgICBzZWNjb21wQnJva2VyLnNldFN5c2NhbGxQb2xpY3ko
cG9saWN5KTsKKyAgICBzZWNjb21wQnJva2VyLmluaXRpYWxpemUoKTsKKworICAgIGluaXRpYWxp
emVkID0gdHJ1ZTsKK30KKwordm9pZCBTZWNjb21wQnJva2VyOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpbnQgc29ja2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVB
TSwgMCwgc29ja2V0cykgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgcGlkX3QgcGlkID0g
Zm9yaygpOworICAgIGlmIChwaWQpIHsgLy8gV2ViUHJvY2Vzcy4KKyAgICAgICAgY2xvc2Uoc29j
a2V0c1sxXSk7CisgICAgICAgIFNlY2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZChzb2NrZXRzWzBd
KTsKKyAgICAgICAgcmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKCk7CisgICAgfSBlbHNlIHsgLy8g
QnJva2VyLgorICAgICAgICAvLyBUT0RPOiBUaGUgYnJva2VyIHNob3VsZCBzZXR1cCBzZWNjb21w
IGZpbHRlcnMKKyAgICAgICAgLy8gZm9yIGl0c2VsZiBhbmQgYmxvY2sgZXZlcnl0aGluZyBlbHNl
IG90aGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIG1pbmltYWwgc2V0IG9mIHN5c2NhbGxzIG5lZWRl
ZCB0byBleGVjdXRlIHRoZQorICAgICAgICAvLyBzeXNjYWxscyBpdCBpcyBzdXBwb3NlIHRvIHBy
b3h5LgorICAgICAgICBjbG9zZShzb2NrZXRzWzBdKTsKKyAgICAgICAgcnVuTG9vcChzb2NrZXRz
WzFdKTsKKyAgICB9Cit9CisKK05PX1JFVFVSTiB2b2lkIFNlY2NvbXBCcm9rZXI6OnJ1bkxvb3Ao
aW50IHNvY2tldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaW50IGkgPSBTVERFUlJfRklMRU5P
ICsgMTsKKyNlbHNlCisgICAgaW50IGkgPSAwOworI2VuZGlmCisgICAgLy8gQ2xvc2UgYWxsIGlu
aGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIG90aGVyCisgICAgLy8gdGhhbiB0aGUgc29ja2V0IHRv
IHRoZSBzYW5kYm94ZWQgcHJvY2Vzcy4KKyAgICBmb3IgKDsgaSA8IEZEX1NFVFNJWkU7ICsraSkK
KyAgICAgICAgaWYgKGkgIT0gc29ja2V0KQorICAgICAgICAgICAgY2xvc2UoaSk7CisKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFyIGJ1ZmZlclttZXNzYWdlTWF4U2l6ZV07CisgICAg
ICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY2VpdmVNZXNzYWdlKHNvY2tldCwgJmJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA9PSAtRUlOVFIp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA8PSAw
KQorICAgICAgICAgICAgZXhpdChyZWNlaXZlZEJ5dGVzID8gRVhJVF9GQUlMVVJFIDogRVhJVF9T
VUNDRVNTKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyPiBkZWNv
ZGVyID0gQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVhdGUoKGNvbnN0IHVpbnQ4X3QqKSBi
dWZmZXIsIHJlY2VpdmVkQnl0ZXMpOworICAgICAgICBPd25QdHI8U3lzY2FsbD4gc3lzY2FsbCA9
IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKGRlY29kZXIuZ2V0KCkpOworICAgICAgICBpZiAo
IXN5c2NhbGwpCisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisKKyAgICAgICAgT3du
UHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IHN5c2NhbGwtPmV4ZWN1dGUobV9wb2xpY3kpOwor
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwor
ICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBlbmNvZGVyID0gQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKCpy
ZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxDb3JlSVBDOjpBdHRhY2htZW50PiBhdHRhY2htZW50
cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2htZW50cygpOworICAgICAgICBpbnQgZmQgPSBhdHRh
Y2htZW50cy5zaXplKCkgPT0gMSA/IGF0dGFjaG1lbnRzWzBdLmZpbGVEZXNjcmlwdG9yKCkgOiAt
MTsKKworICAgICAgICAvLyBUaGUgY2xpZW50IGlzIGRvd24sIHRoZSBicm9rZXIgc2hvdWxkIGdv
IGF3YXkuCisgICAgICAgIGlmIChzZW5kTWVzc2FnZShzb2NrZXQsIGVuY29kZXItPmJ1ZmZlcigp
LCBlbmNvZGVyLT5idWZmZXJTaXplKCksIGZkKSA8IDApCisgICAgICAgICAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2VjY29tcEJyb2tlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBCcm9rZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzVjODZiNzRlN2Y3ZTI0OTYxYzg3OGNhNmEyN2Mw
NTRjZWY4ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NlY2NvbXBCcm9rZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNlY2NvbXBCcm9rZXJfaAorI2RlZmluZSBTZWNjb21wQnJva2VyX2gKKworI2lmIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVycy5oIgorI2lu
Y2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFNlY2NvbXBCcm9rZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlY2Nv
bXBCcm9rZXIpOworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgbGF1bmNoUHJvY2VzcyhTZWNj
b21wRmlsdGVycyosIGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZSgpOworICAgIHZvaWQgc2V0U3lzY2FsbFBvbGljeShjb25zdCBTeXNjYWxsUG9saWN5JiBwb2xp
Y3kpIHsgbV9wb2xpY3kgPSBwb2xpY3k7IH0KKworcHJpdmF0ZToKKyAgICBTZWNjb21wQnJva2Vy
KCkgeyB9CisKKyAgICB2b2lkIHJ1bkxvb3AoaW50IHNvY2tldCk7CisKKyAgICBTeXNjYWxsUG9s
aWN5IG1fcG9saWN5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEJyb2tlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NDkxYmQxNjdkMWQzMTgxOWE2Y2FjYzRkMWJkYjAwZDUwYzNiYmE0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcApAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQorCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ09NUElM
RV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OkFsbG93ID09IFNDTVBfQUNUX0FMTE9XLCBBbGxvdyk7
CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6S2lsbCA9PSBTQ01QX0FDVF9LSUxMLCBL
aWxsKTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpUcmFwID09IFNDTVBfQUNUX1RS
QVAsIFRyYXApOworCitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90U2V0ID09IHN0
YXRpY19jYXN0PFNlY2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oX1NDTVBfQ01QX01JTiksIE5vdFNl
dCk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwgPT0gc3RhdGljX2Nh
c3Q8U2VjY29tcEZpbHRlcnM6Ok9wZXJhdG9yPihTQ01QX0NNUF9ORSksIE5vdEVxdWFsKTsKK0NP
TVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCA9PSBzdGF0aWNfY2FzdDxTZWNjb21w
RmlsdGVyczo6T3BlcmF0b3I+KFNDTVBfQ01QX0VRKSwgRXF1YWwpOworCitDT01QSUxFX0FTU0VS
VChzaXplb2Yoc2NtcF9kYXR1bV90KSA9PSBzaXplb2YobG9uZyBsb25nKSwgc2NtcF9kYXR1bV90
KTsKKworU2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKEFjdGlvbiBkZWZhdWx0QWN0aW9u
KQorICAgIDogbV9jb250ZXh0KHNlY2NvbXBfaW5pdChkZWZhdWx0QWN0aW9uKSkKKyAgICAsIG1f
aW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIENSQVNI
KCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRlcnMoKQoreworICAgIHNlY2Nv
bXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjphZGRSdWxl
KGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24gYWN0aW9uLAorICAgIHVuc2lnbmVkIGFy
Z051bTEsIE9wZXJhdG9yIG9wZXJhdG9yMSwgbG9uZyBsb25nIGRhdGExLAorICAgIHVuc2lnbmVk
IGFyZ051bTIsIE9wZXJhdG9yIG9wZXJhdG9yMiwgbG9uZyBsb25nIGRhdGEyKQoreworICAgIGlu
dCBzeXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbmFtZShzeXNjYWxsTmFtZSk7Cisg
ICAgaWYgKHN5c2NhbGwgPT0gX19OUl9TQ01QX0VSUk9SKQorICAgICAgICBDUkFTSCgpOworCisg
ICAgaW50IHJlc3VsdDsKKyAgICBpZiAob3BlcmF0b3IyICE9IE5vdFNldCkKKyAgICAgICAgcmVz
dWx0ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwgc3lzY2FsbCwgMiwKKyAg
ICAgICAgICAgIFNDTVBfQ01QKGFyZ051bTEsIHN0YXRpY19jYXN0PHNjbXBfY29tcGFyZT4ob3Bl
cmF0b3IxKSwgZGF0YTEsIDApLAorICAgICAgICAgICAgU0NNUF9DTVAoYXJnTnVtMiwgc3RhdGlj
X2Nhc3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjIpLCBkYXRhMiwgMCkpOworICAgIGVsc2UgaWYg
KG9wZXJhdG9yMSAhPSBOb3RTZXQpCisgICAgICAgIHJlc3VsdCA9IHNlY2NvbXBfcnVsZV9hZGQo
bV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDEsCisgICAgICAgICAgICBTQ01QX0NNUChhcmdO
dW0xLCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9wZXJhdG9yMSksIGRhdGExLCAwKSk7Cisg
ICAgZWxzZQorICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRkKG1fY29udGV4dCwgYWN0
aW9uLCBzeXNjYWxsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICBDUkFTSCgp
OworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAobV9p
bml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wbGVtZW50IHRoaXMgaXMg
bm90IHJlcXVpcmVkIGluIGNhc2Ugd2UgYXJlIGp1c3QKKyAgICAvLyBzZXR0aW5nIGZpbHRlcnMu
IFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKKyAgICAvLyBicm9rZXIgYW5kIHN5
c2NhbGwgcG9saWN5IG90aGVyd2lzZS4KKyAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAg
IGlmIChzZWNjb21wX2xvYWQobV9jb250ZXh0KSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAg
ICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDllMWZiNjJlNmQ4MDM2NWYxYTJh
OTA2Yzk1NzRlZGFkZThmNGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJz
X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wRmlsdGVycyk7CisKK3B1YmxpYzoKKyAg
ICBlbnVtIEFjdGlvbiB7CisgICAgICAgIEFsbG93ID0gMHg3ZmZmMDAwMFUsCisgICAgICAgIEtp
bGwgID0gMHgwMDAwMDAwMFUsCisgICAgICAgIFRyYXAgID0gMHgwMDAzMDAwMFUKKyAgICB9Owor
CisgICAgZW51bSBPcGVyYXRvciB7CisgICAgICAgIE5vdFNldCAgID0gMCwKKyAgICAgICAgTm90
RXF1YWwgPSAxLAorICAgICAgICBFcXVhbCAgICA9IDQKKyAgICB9OworCisgICAgZXhwbGljaXQg
U2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pOworICAgIHZpcnR1YWwgflNlY2Nv
bXBGaWx0ZXJzKCk7CisKKyAgICB2b2lkKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9
OworCisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24sCisg
ICAgICAgIHVuc2lnbmVkIGFyZ051bTEgPSAwLCBPcGVyYXRvciBvcGVyYXRvcjEgPSBOb3RTZXQs
IGxvbmcgbG9uZyBkYXRhMSA9IDAsCisgICAgICAgIHVuc2lnbmVkIGFyZ051bTIgPSAwLCBPcGVy
YXRvciBvcGVyYXRvcjIgPSBOb3RTZXQsIGxvbmcgbG9uZyBkYXRhMiA9IDApOworCisgICAgdm9p
ZCBpbml0aWFsaXplKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICpIQU5ETEU7CisKKyAgICBIQU5ETEUg
bV9jb250ZXh0OworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8v
IFNlY2NvbXBGaWx0ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZGU4MDJiMGQxNjkzMmIwNjE5YjNjZGI1OTZmNjZhNDFlMmU2NTY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuY3BwCkBA
IC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiT3BlblN5c2NhbGwuaCIKKyNp
bmNsdWRlIDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFN5
c2NhbGw+IFN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7
CisgICAgc3dpdGNoIChjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0pIHsKKyAgICBjYXNlIF9f
TlJfb3BlbjoKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbChjb250ZXh0
KSk7CisgICAgY2FzZSBfX05SX29wZW5hdDoKKyAgICAgICAgcmV0dXJuIE9wZW5TeXNjYWxsOjpj
cmVhdGVGcm9tT3BlbmF0Q29udGV4dChjb250ZXh0KTsKKyAgICBjYXNlIF9fTlJfY3JlYXQ6Cisg
ICAgICAgIHJldHVybiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbUNyZWF0Q29udGV4dChjb250ZXh0
KTsKKyAgICBkZWZhdWx0OgorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgY2hhciogc3lzY2FsbCA9
IHNlY2NvbXBfc3lzY2FsbF9yZXNvbHZlX251bV9hcmNoKFNDTVBfQVJDSF9OQVRJVkUsIGNvbnRl
eHQtPmdyZWdzW1JFR19TWVNDQUxMXSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VjY29t
cEJyb2tlckNsaWVudDogc3lzY2FsbCBub3QgaGFuZGxlZCAnJXMnLlxuIiwgc3lzY2FsbCk7Cisg
ICAgICAgIGZyZWUoc3lzY2FsbCk7CisjZW5kaWYKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBTeXNjYWxsOjpj
cmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7Cisg
ICAgaW50IHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGw7CisgICAgaWYgKHR5
cGUgPT0gX19OUl9vcGVuKQorICAgICAgICBzeXNjYWxsID0gYWRvcHRQdHIobmV3IE9wZW5TeXNj
YWxsKDApKTsKKworICAgIGlmICghc3lzY2FsbC0+ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzeXNjYWxsLnJlbGVhc2UoKTsKK30KKworU3lz
Y2FsbDo6U3lzY2FsbChpbnQgdHlwZSwgbWNvbnRleHRfdCogY29udGV4dCkKKyAgICA6IG1fdHlw
ZSh0eXBlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1Bhc3NPd25QdHI8U3lz
Y2FsbFJlc3VsdD4gU3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCit7CisgICAgaW50IHR5cGU7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
T3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdDsKKyAgICBpZiAodHlwZSA9PSBfX05SX29wZW4p
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwgMCkp
OworCisgICAgaWYgKCFyZXN1bHQtPmRlY29kZShkZWNvZGVyLCBmZCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1N5c2NhbGxS
ZXN1bHQ6OlN5c2NhbGxSZXN1bHQoaW50IHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2NhbGwuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmMTA1
YjMwMTQ3OGQ0ZDQzZTA3OTQ3OTkzNjk0ZWZlM2IyNzkwOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNjYWxsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzY2FsbF9oCisjZGVmaW5lIFN5c2NhbGxfaAor
CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2lmIENQVShYODZfNjQpCisjZGVmaW5l
IFJFR19TWVNDQUxMIFJFR19SQVgKKyNkZWZpbmUgUkVHX0FSRzAgICAgUkVHX1JESQorI2RlZmlu
ZSBSRUdfQVJHMSAgICBSRUdfUlNJCisjZGVmaW5lIFJFR19BUkcyICAgIFJFR19SRFgKKyNkZWZp
bmUgUkVHX0FSRzMgICAgUkVHX1IxMAorI2VsaWYgQ1BVKFg4NikKKyNkZWZpbmUgUkVHX1NZU0NB
TEwgUkVHX0VBWAorI2RlZmluZSBSRUdfQVJHMCAgICBSRUdfRUJYCisjZGVmaW5lIFJFR19BUkcx
ICAgIFJFR19FQ1gKKyNkZWZpbmUgUkVHX0FSRzIgICAgUkVHX0VEWAorI2RlZmluZSBSRUdfQVJH
MyAgICBSRUdfRVNJCisjZWxzZQorI2Vycm9yICJDUFUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYK
KworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5j
b2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFN5c2NhbGxSZXN1bHQ7Citj
bGFzcyBTeXNjYWxsUG9saWN5OworCitjbGFzcyBTeXNjYWxsIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTeXNjYWxsKTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2NhbGwoKSB7IH0K
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGw+IGNyZWF0ZUZyb21Db250ZXh0KG1jb250
ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2Rl
cihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKworICAgIGludCB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisKKyAgICB2b2lkIHNldENvbnRleHQobWNvbnRleHRfdCogY29udGV4
dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CisgICAgbWNvbnRleHRfdCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdChj
b25zdCBTeXNjYWxsUmVzdWx0KikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxs
UmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3kmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CisKK3Byb3Rl
Y3RlZDoKKyAgICBTeXNjYWxsKGludCB0eXBlLCBtY29udGV4dF90Kik7CisKK3ByaXZhdGU6Cisg
ICAgaW50IG1fdHlwZTsKKyAgICBtY29udGV4dF90KiBtX2NvbnRleHQ7Cit9OworCitjbGFzcyBT
eXNjYWxsUmVzdWx0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsUmVzdWx0KTsK
KworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2NhbGxSZXN1bHQoKSB7IH0KKworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IGNyZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciosIGludCBmZCk7CisKKyAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqLCBpbnQgZmQ9LTEpID0gMDsKKworcHJvdGVjdGVkOgorICAgIFN5c2NhbGxS
ZXN1bHQoaW50IHR5cGUpOworCitwcml2YXRlOgorICAgIGludCBtX3R5cGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisK
KyNlbmRpZiAvLyBTeXNjYWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TeXNjYWxsUG9saWN5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TeXNj
YWxsUG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzYxYTE2MzUyYWE4YmY3ZjkxNjhhODM3MDEzNTk3
YmUwYzBlN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorCisjaWYg
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworYm9vbCBTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aChj
b25zdCBjaGFyKiBwYXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pIGNvbnN0Cit7CisgICAgLy8g
VGhlIHJvb3QgZGlyZWN0b3J5IHBvbGljeSBuZWVkcyB0byBiZSBzZXQgYmVjYXVzZSBpdCBpcyB0
aGUKKyAgICAvLyB1bHRpbWF0ZSBmYWxsYmFjayB3aGVuIHJld2luZGluZyBkaXJlY3Rvcmllcy4K
KyAgICBBU1NFUlQobV9kaXJlY3RvcnlQb2xpY3kuY29udGFpbnMoIi8iKSk7CisKKyAgICBpZiAo
cGVybWlzc2lvbiA9PSBOb3RBbGxvd2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
aGFyKiBiYXNlUGF0aCA9IHN0cmR1cChwYXRoKTsKKyAgICBjaGFyKiBjYW5vbmljYWxQYXRoID0g
Y2Fub25pY2FsaXplX2ZpbGVfbmFtZShiYXNlUGF0aCk7CisKKyAgICB3aGlsZSAoY2Fub25pY2Fs
UGF0aCkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBwYXRoU3RhdDsKKyAgICAgICAgaWYgKHN0YXQo
Y2Fub25pY2FsUGF0aCwgJnBhdGhTdGF0KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBpZiAoU19JU0RJUihwYXRoU3RhdC5zdF9tb2RlKSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFBlcm1pc3Npb25NYXA6OmNvbnN0X2l0ZXJhdG9yIHBvbGljeSA9
IG1fZmlsZVBvbGljeS5maW5kKFN0cmluZyhjYW5vbmljYWxQYXRoKSk7CisgICAgICAgIGlmIChw
b2xpY3kgIT0gbV9maWxlUG9saWN5LmVuZCgpKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAg
ICAgaWYgKChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgIT0gcGVybWlzc2lvbikKKyAgICAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNlY2NvbXBCcm9rZXI6IGFjY2VzcyBkZW5pZWQg
dG8gJXNcbiIsIHBhdGgpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gKHBlcm1pc3Npb24g
JiBwb2xpY3ktPnZhbHVlKSA9PSBwZXJtaXNzaW9uOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SWYgbm90IGEgZGlyZWN0b3J5IG5laXRoZXIgYSBmaWxlIHdpdGggYSBwb2xpY3kgZGVmaW5lZCwK
KyAgICAgICAgLy8gd2Ugc2V0IGNhbm9uaWNhbFBhdGggdG8gemVybyB0byBmb3JjZSBhIHJld2lu
ZCB0byB0aGUgcGFyZW50CisgICAgICAgIC8vIGRpcmVjdG9yeS4KKyAgICAgICAgZnJlZShjYW5v
bmljYWxQYXRoKTsKKyAgICAgICAgY2Fub25pY2FsUGF0aCA9IDA7CisgICAgfQorCisgICAgd2hp
bGUgKCFjYW5vbmljYWxQYXRoKSB7CisgICAgICAgIGNoYXIqIGN1cnJlbnRCYXNlRGlyZWN0b3J5
ID0gZGlybmFtZShiYXNlUGF0aCk7CisgICAgICAgIGNhbm9uaWNhbFBhdGggPSBjYW5vbmljYWxp
emVfZmlsZV9uYW1lKGN1cnJlbnRCYXNlRGlyZWN0b3J5KTsKKyAgICB9CisKKyAgICBQZXJtaXNz
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBwb2xpY3kgPSBtX2RpcmVjdG9yeVBvbGljeS5maW5kKFN0
cmluZyhjYW5vbmljYWxQYXRoKSk7CisgICAgd2hpbGUgKHBvbGljeSA9PSBtX2RpcmVjdG9yeVBv
bGljeS5lbmQoKSkgeworICAgICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5h
bWUoY2Fub25pY2FsUGF0aCk7CisgICAgICAgIHBvbGljeSA9IG1fZGlyZWN0b3J5UG9saWN5LmZp
bmQoU3RyaW5nKGN1cnJlbnRCYXNlRGlyZWN0b3J5KSk7CisgICAgfQorCisjaWZuZGVmIE5ERUJV
RworICAgIGlmICgocGVybWlzc2lvbiAmIHBvbGljeS0+dmFsdWUpICE9IHBlcm1pc3Npb24pCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VjY29tcEJyb2tlcjogYWNjZXNzIGRlbmllZCB0byAl
c1xuIiwgcGF0aCk7CisjZW5kaWYKKworICAgIGZyZWUoYmFzZVBhdGgpOworICAgIGZyZWUoY2Fu
b25pY2FsUGF0aCk7CisKKyAgICByZXR1cm4gKHBlcm1pc3Npb24gJiBwb2xpY3ktPnZhbHVlKSA9
PSBwZXJtaXNzaW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU3lzY2FsbFBvbGljeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5c2Nh
bGxQb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGJkZDU3NTViMzljZThhYzdiOWRjNGJhODAyZWZhMTgx
NGQxNzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1N5
c2NhbGxQb2xpY3kuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFN5c2NhbGxQb2xpY3lfaAorI2RlZmluZSBTeXNjYWxsUG9saWN5X2gKKworI2lmIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFN5c2NhbGxQb2xpY3kgeworcHVibGljOgor
ICAgIGVudW0gUGVybWlzc2lvbiB7CisgICAgICAgIE5vdEFsbG93ZWQgICA9IDAsCisgICAgICAg
IFJlYWQgICAgICAgICA9IDEsCisgICAgICAgIFdyaXRlICAgICAgICA9IDEgPDwgMSwKKyAgICAg
ICAgUmVhZEFuZFdyaXRlID0gUmVhZCB8IFdyaXRlCisgICAgfTsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIGludD4gUGVybWlzc2lvbk1hcDsKKworICAgIHZvaWQgc2V0RmlsZVBvbGlj
eShjb25zdCBQZXJtaXNzaW9uTWFwJiBwb2xpY3kpIHsgbV9maWxlUG9saWN5ID0gcG9saWN5OyB9
CisgICAgdm9pZCBzZXREaXJlY3RvcnlQb2xpY3koY29uc3QgUGVybWlzc2lvbk1hcCYgcG9saWN5
KSB7IG1fZGlyZWN0b3J5UG9saWN5ID0gcG9saWN5OyB9CisKKyAgICBib29sIGhhc1Blcm1pc3Np
b25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Npb24pIGNvbnN0OworCitwcml2YXRl
OgorICAgIFBlcm1pc3Npb25NYXAgbV9maWxlUG9saWN5OworICAgIFBlcm1pc3Npb25NYXAgbV9k
aXJlY3RvcnlQb2xpY3k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsUG9saWN5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCmluZGV4IDMxNDEyMTJlNzgyZWNiYWU1YTg3ZWFjYTc4ZmYxYWQ5ODMzODQ3ZmYuLmJk
ZjFkMjkzNWRiOWVhZTBjZjM1Yzc0OTdhYmQyYmU4YWVjM2FlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAt
Nzg3LDYgKzc4Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGlu
QnVuZGxlUGFnZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdl
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwIFwKKyAgICBXZWJQ
cm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlBy
b2Nlc3NNYWluUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKIApA
QCAtOTI1LDYgKzkyNiwyNSBAQCB3aW4zMiB7CiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvQmlu
YXJ5U2VtYXBob3JlLmNwcAogfQogCitlbmFibGU/KFNFQ0NPTVBfRklMVEVSUykgeworICAgIEhF
QURFUlMgKz0gXAorICAgICAgICBTaGFyZWQvbGludXgvT3BlblN5c2NhbGwuaCBcCisgICAgICAg
IFNoYXJlZC9saW51eC9TZWNjb21wQnJva2VyLmggXAorICAgICAgICBTaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMuaCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TeXNjYWxsLmggXAorICAgICAg
ICBTaGFyZWQvbGludXgvU3lzY2FsbFBvbGljeS5oIFwKKyAgICAgICAgV2ViUHJvY2Vzcy9xdC9T
ZWNjb21wRmlsdGVyc1F0LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBTaGFyZWQvbGlu
dXgvT3BlblN5c2NhbGwuY3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBCcm9rZXIu
Y3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzLmNwcCBcCisgICAgICAg
IFNoYXJlZC9saW51eC9TeXNjYWxsLmNwcCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TeXNjYWxs
UG9saWN5LmNwcCBcCisgICAgICAgIFdlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNRdC5jcHAK
KworICAgIFBLR0NPTkZJRyArPSBsaWJzZWNjb21wCit9CiAKIGVuYWJsZT8oSU5TUEVDVE9SX1NF
UlZFUikgewogICAgIEhFQURFUlMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4NTU5ZTFjNWMyMTc3
ZDUxYzRhODY5MzI0ZjczYzhmNjFmZGNmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc0VmbC5jcHAKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
ZWNjb21wRmlsdGVyc0VmbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2lu
Y2x1ZGUgPEVmcmVldC5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvU3lzY2FsbFBvbGljeS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIFBPTElDWShwb2xpY3ksIGlkKSBwb2xpY3kj
I2lkCisjZGVmaW5lIFVOSVFVRV9QT0xJQ1koaWQpIFBPTElDWSh1bmlxdWVQb2xpY3ksIGlkKQor
I2RlZmluZSBBRERfUE9MSUNZKHBvbGljeU1hcCwgcGF0aCwgcGVybWlzc2lvbikgeyBcCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFVOSVFVRV9QT0xJQ1koX19MSU5FX18pLCAocGF0
aCkpOyBcCisgICAgcG9saWN5TWFwLnNldChVTklRVUVfUE9MSUNZKF9fTElORV9fKSwgU3lzY2Fs
bFBvbGljeTo6cGVybWlzc2lvbik7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBG
aWx0ZXJzRWZsOjpTZWNjb21wRmlsdGVyc0VmbCgpCisgICAgOiBTZWNjb21wRmlsdGVycyhBbGxv
dykKK3sKKyAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmxvY2sgYWxsIHRoZSBzeXNjYWxscyBhbmQg
d2hpdGVsaXN0CisgICAgLy8gd2hhdCB3ZSBuZWVkICsgdHJhcCB3aGF0IHNob3VsZCBiZSBoYW5k
bGVkIGJ5IHRoZSBicm9rZXIuCit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnNFZmw6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCit7CisgICAgYWRkUnVsZSgib3BlbiIsIFRyYXApOworICAgIGFkZFJ1bGUo
Im9wZW5hdCIsIFRyYXApOworICAgIGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7CisKKyAgICBTeXNj
YWxsUG9saWN5OjpQZXJtaXNzaW9uTWFwIGRpcmVjdG9yeVBvbGljeTsKKyAgICBBRERfUE9MSUNZ
KGRpcmVjdG9yeVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvIiksIE5vdEFsbG93ZWQpOworICAgIEFE
RF9QT0xJQ1koZGlyZWN0b3J5UG9saWN5LCBBU0NJSUxpdGVyYWwoIi9saWIiKSwgUmVhZCk7Cisg
ICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIiKSwg
UmVhZCk7CisgICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Vz
ci9zaGFyZSIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGRpcmVjdG9yeVBvbGljeSwgQVNDSUlM
aXRlcmFsKCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdSIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZ
KGRpcmVjdG9yeVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZGV2IiksIFJlYWRBbmRXcml0ZSk7Cisg
ICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3J1bi9zaG0iKSwg
UmVhZEFuZFdyaXRlKTsKKyAgICBBRERfUE9MSUNZKGRpcmVjdG9yeVBvbGljeSwgQVNDSUlMaXRl
cmFsKCIvdG1wIiksIFJlYWRBbmRXcml0ZSk7CisgICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xp
Y3ksIEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihnZXRwaWQoKSksIFJl
YWRBbmRXcml0ZSk7CisKKyAgICBlZnJlZXRfaW5pdCgpOworICAgIEFERF9QT0xJQ1koZGlyZWN0
b3J5UG9saWN5LCBTdHJpbmc6OmZyb21VVEY4KGVmcmVldF9kYXRhX2hvbWVfZ2V0KCkpICsgIi9X
ZWJLaXRFZmwiLCBSZWFkQW5kV3JpdGUpOworICAgIEFERF9QT0xJQ1koZGlyZWN0b3J5UG9saWN5
LCBTdHJpbmc6OmZyb21VVEY4KGVmcmVldF9jYWNoZV9ob21lX2dldCgpKSArICIvV2ViS2l0RWZs
IiwgUmVhZEFuZFdyaXRlKTsKKyAgICBlZnJlZXRfc2h1dGRvd24oKTsKKworI2lmbmRlZiBOREVC
VUcKKyAgICAvLyBEZXZlbG9wZXJzIHVzaW5nIGJ1aWxkLXdlYmtpdCAtLWVmbCBleHBlY3Qgc29t
ZSBsaWJyYXJpZXMgdG8gYmUgbG9hZGVkCisgICAgLy8gZnJvbSBqaGJ1aWxkIHJvb3QgZm9sZGVy
IHdoaWNoIGlzIHVzdWFsbHkgaW5zaWRlIFdlYktpdEJ1aWxkLiBXZQorICAgIC8vIGFyZSB1c2lu
ZyB0aGUgcHJvamVjdCByb290IGhlcmUgdG8gYmUgbmljZSBpZiB0aGUgZGV2ZWxvcGVyIGRlY2lk
ZXMKKyAgICAvLyB0byB1c2UgV0VCS0lUT1VUUFVURElSLgorICAgIGNoYXIqIHBhdGggPSBjYW5v
bmljYWxpemVfZmlsZV9uYW1lKFBST0pFQ1RfUk9PVF9ESVIpOworICAgIGlmIChwYXRoKSB7Cisg
ICAgICAgIEFERF9QT0xJQ1koZGlyZWN0b3J5UG9saWN5LCBTdHJpbmc6OmZyb21VVEY4KHBhdGgp
LCBSZWFkQW5kV3JpdGUpOworICAgICAgICBmcmVlKHBhdGgpOworICAgIH0KKyNlbmRpZgorCisg
ICAgU3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbk1hcCBmaWxlUG9saWN5OworICAgIEFERF9QT0xJ
Q1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2dhaS5jb25mIiksIFJlYWQpOworICAg
IEFERF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2dyb3VwIiksIFJlYWQp
OworICAgIEFERF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2hvc3QuY29u
ZiIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL2V0
Yy9ob3N0cyIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJh
bCgiL2V0Yy9sZC5zby5jYWNoZSIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGZpbGVQb2xpY3ks
IEFTQ0lJTGl0ZXJhbCgiL2V0Yy9sb2NhbHRpbWUiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShm
aWxlUG9saWN5LCBBU0NJSUxpdGVyYWwoIi9ldGMvbnNzd2l0Y2guY29uZiIpLCBSZWFkKTsKKyAg
ICBBRERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL2V0Yy9wYXNzd2QiKSwgUmVh
ZCk7CisgICAgQUREX1BPTElDWShmaWxlUG9saWN5LCBBU0NJSUxpdGVyYWwoIi9ldGMvdWRldi91
ZGV2LmNvbmYiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShmaWxlUG9saWN5LCBBU0NJSUxpdGVy
YWwoIi9wcm9jL2NwdWluZm8iKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShmaWxlUG9saWN5LCBB
U0NJSUxpdGVyYWwoIi9wcm9jL21lbWluZm8iKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShmaWxl
UG9saWN5LCBBU0NJSUxpdGVyYWwoIi9wcm9jL3N0YXQiKSwgUmVhZCk7CisgICAgQUREX1BPTElD
WShmaWxlUG9saWN5LCBBU0NJSUxpdGVyYWwoIi9ydW4vcmVzb2x2Y29uZi9yZXNvbHYuY29uZiIp
LCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Zhci9s
aWIvZGJ1cy9tYWNoaW5lLWlkIiksIFJlYWQpOworCisgICAgY2hhciogaG9tZURpciA9IGdldGVu
digiSE9NRSIpOworICAgIGlmIChob21lRGlyKSB7CisgICAgICAgIC8vIFZpZGVvIHBsYXliYWNr
IHJlcXVpcmVzIGFjY2VzcyB0byB0aGUgcm9vdCBvZiB0aGUgdXNlciBjYWNoZSBkaXIgd2hpY2gK
KyAgICAgICAgLy8gaXMgbm90IHJpZ2h0LiBXZSBuZWVkIHRvIGNoZWNrIHdpdGggdGhlc2UgZGly
ZWN0b3JpZXMgb24gZ3N0cmVhbWVyCisgICAgICAgIC8vIGNhbiBiZSBjb25maWd1cmVkLgorICAg
ICAgICBBRERfUE9MSUNZKGRpcmVjdG9yeVBvbGljeSwgU3RyaW5nOjpmcm9tVVRGOChob21lRGly
KSArICIvLmNhY2hlIiwgUmVhZEFuZFdyaXRlKTsKKyAgICAgICAgQUREX1BPTElDWShmaWxlUG9s
aWN5LCBTdHJpbmc6OmZyb21VVEY4KGhvbWVEaXIpICsgIi8uWGF1dGhvcml0eSIsIFJlYWQpOwor
ICAgIH0KKworICAgIFN5c2NhbGxQb2xpY3kgcG9saWN5OworICAgIHBvbGljeS5zZXREaXJlY3Rv
cnlQb2xpY3koZGlyZWN0b3J5UG9saWN5KTsKKyAgICBwb2xpY3kuc2V0RmlsZVBvbGljeShmaWxl
UG9saWN5KTsKKworICAgIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3ModGhpcywgcG9saWN5
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2Vj
Y29tcEZpbHRlcnNFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBG
aWx0ZXJzRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjg0Njk3ZGVhZTcyMjcxZjM5YWY3N2M1ZWNkZWI4ZDE5
YWNmMWM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZs
L1NlY2NvbXBGaWx0ZXJzRWZsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTZWNjb21wRmlsdGVyc0VmbF9oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJzRWZs
X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxXZWJLaXQyL1Nl
Y2NvbXBGaWx0ZXJzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21wRmls
dGVyc0VmbCA6IHB1YmxpYyBTZWNjb21wRmlsdGVycyB7CitwdWJsaWM6CisgICAgU2VjY29tcEZp
bHRlcnNFZmwoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFs
aXplKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc0VmbF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKaW5k
ZXggNWY0ODY1MGRhZTIwNmY1NWU1ZjE4M2VhZjYxZTQwYTA5MTliM2U5ZS4uNjkzZmYzOGYyNDll
Mjk0NGNmZTUzODJmZjVhMzNkYmRkODI4NjkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcApAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQogCiAjaW5jbHVkZSAiUHJv
eHlSZXNvbHZlclNvdXAuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc0VmbC5oIgogI2luY2x1
ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWZyZWV0Lmg+CkBA
IC02MSw2ICs2MiwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV0tfRVhQT1JUIGludCBXZWJQ
cm9jZXNzTWFpbkVmbChpbnQgYXJnYywgY2hhciogYXJndltdKQogeworI2lmIEVOQUJMRShTRUND
T01QX0ZJTFRFUlMpCisgICAgeworICAgICAgICBTZWNjb21wRmlsdGVyc0VmbCBzZWNjb21wRmls
dGVyczsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgLy8gV2ViUHJvY2VzcyBzaG91bGQgYmUgbGF1bmNoZWQgd2l0aCBhbiBvcHRpb24u
CiAgICAgaWYgKGFyZ2MgIT0gMikKICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1F0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTU0
ZGQ5ODA4OGUyMDg0NjVjYmNhMjI0OGRmOGNiZmJmMjNmNTkwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1F0LmNwcApAQCAtMCww
ICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNlY2NvbXBGaWx0ZXJzUXQuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMp
CisKKyNpbmNsdWRlICJRdERlZmF1bHREYXRhTG9jYXRpb24uaCIKKyNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2luY2x1
ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvU3lzY2FsbFBv
bGljeS5oPgorCisjZGVmaW5lIFBPTElDWShwb2xpY3ksIGlkKSBwb2xpY3kjI2lkCisjZGVmaW5l
IFVOSVFVRV9QT0xJQ1koaWQpIFBPTElDWSh1bmlxdWVQb2xpY3ksIGlkKQorI2RlZmluZSBBRERf
UE9MSUNZKHBvbGljeU1hcCwgcGF0aCwgcGVybWlzc2lvbikgeyBcCisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIFVOSVFVRV9QT0xJQ1koX19MSU5FX18pLCAocGF0aCkpOyBcCisgICAg
cG9saWN5TWFwLnNldChVTklRVUVfUE9MSUNZKF9fTElORV9fKSwgU3lzY2FsbFBvbGljeTo6cGVy
bWlzc2lvbik7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJzUXQ6OlNl
Y2NvbXBGaWx0ZXJzUXQoKQorICAgIDogU2VjY29tcEZpbHRlcnMoQWxsb3cpCit7CisgICAgLy8g
VE9ETzogV2Ugc2hvdWxkIGJsb2NrIGFsbCB0aGUgc3lzY2FsbHMgYW5kIHdoaXRlbGlzdAorICAg
IC8vIHdoYXQgd2UgbmVlZCArIHRyYXAgd2hhdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgYnJv
a2VyLgorfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzUXQ6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
CisgICAgYWRkUnVsZSgib3BlbiIsIFRyYXApOworICAgIGFkZFJ1bGUoIm9wZW5hdCIsIFRyYXAp
OworICAgIGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7CisKKyAgICBTeXNjYWxsUG9saWN5OjpQZXJt
aXNzaW9uTWFwIGRpcmVjdG9yeVBvbGljeTsKKyAgICBBRERfUE9MSUNZKGRpcmVjdG9yeVBvbGlj
eSwgQVNDSUlMaXRlcmFsKCIvIiksIE5vdEFsbG93ZWQpOworICAgIEFERF9QT0xJQ1koZGlyZWN0
b3J5UG9saWN5LCBBU0NJSUxpdGVyYWwoIi9ldGMvc3NsL2NlcnRzIiksIFJlYWQpOworICAgIEFE
RF9QT0xJQ1koZGlyZWN0b3J5UG9saWN5LCBBU0NJSUxpdGVyYWwoIi9saWIiKSwgUmVhZCk7Cisg
ICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIiKSwg
UmVhZCk7CisgICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Vz
ci9zaGFyZSIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGRpcmVjdG9yeVBvbGljeSwgQVNDSUlM
aXRlcmFsKCIvZGV2IiksIFJlYWRBbmRXcml0ZSk7CisgICAgQUREX1BPTElDWShkaXJlY3RvcnlQ
b2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3J1bi9zaG0iKSwgUmVhZEFuZFdyaXRlKTsKKyAgICBBRERf
UE9MSUNZKGRpcmVjdG9yeVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvdG1wIiksIFJlYWRBbmRXcml0
ZSk7CisgICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Byb2Mv
IikgKyBTdHJpbmc6Om51bWJlcihRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvblBpZCgpKSwg
UmVhZEFuZFdyaXRlKTsKKworICAgIC8vIFRoaXMgaXMgbWlzc2luZyB0aGUgYXBwbGljYXRpb24g
bmFtZSAoaS5lLiBNaW5pQnJvd3NlcikuIFdlIHNob3VsZAorICAgIC8vIGFjdHVhbGx5IGdldCB0
aGlzIGZyb20gdGhlIGVtYmVkZGVyIGF0IHNvbWUgcG9pbnQuCisgICAgQUREX1BPTElDWShkaXJl
Y3RvcnlQb2xpY3ksIFFEaXI6OmhvbWVQYXRoKCkgKyBRU3RyaW5nTGl0ZXJhbCgiLy5sb2NhbC9z
aGFyZS9Ob2tpYSIpLCBSZWFkQW5kV3JpdGUpOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIFF0
IGRldmVsb3BlcnMgbWlnaHQgaGF2ZSBhIGN1c3RvbSBsb2NhdGlvbiBmb3IgUXQgbGlicmFyaWVz
IGFuZCBwbHVnaW5zLgorICAgIGNvbnN0IGNoYXIqIHBhdGggPSBnZXRlbnYoIlFURElSIik7Cisg
ICAgaWYgKHBhdGgpIHsKKyAgICAgICAgUUZpbGVJbmZvIHF0ZGlyKFFTdHJpbmc6OmZyb21VdGY4
KHBhdGgpKTsKKyAgICAgICAgQUREX1BPTElDWShkaXJlY3RvcnlQb2xpY3ksIHF0ZGlyLmNhbm9u
aWNhbFBhdGgoKSwgUmVhZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBTeXNjYWxsUG9saWN5OjpQ
ZXJtaXNzaW9uTWFwIGZpbGVQb2xpY3k7CisgICAgQUREX1BPTElDWShmaWxlUG9saWN5LCBBU0NJ
SUxpdGVyYWwoIi9ldGMvZ2FpLmNvbmYiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShmaWxlUG9s
aWN5LCBBU0NJSUxpdGVyYWwoIi9ldGMvZ3JvdXAiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShm
aWxlUG9saWN5LCBBU0NJSUxpdGVyYWwoIi9ldGMvaG9zdC5jb25mIiksIFJlYWQpOworICAgIEFE
RF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2hvc3RzIiksIFJlYWQpOwor
ICAgIEFERF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2xkLnNvLmNhY2hl
IiksIFJlYWQpOworICAgIEFERF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFsKCIvZXRj
L2xvY2FsdGltZSIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0
ZXJhbCgiL2V0Yy9uc3N3aXRjaC5jb25mIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1koZmlsZVBv
bGljeSwgQVNDSUlMaXRlcmFsKCIvZXRjL3Bhc3N3ZCIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZ
KGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3Byb2MvbWVtaW5mbyIpLCBSZWFkKTsKKyAgICBB
RERfUE9MSUNZKGZpbGVQb2xpY3ksIEFTQ0lJTGl0ZXJhbCgiL3J1bi9yZXNvbHZjb25mL3Jlc29s
di5jb25mIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1koZmlsZVBvbGljeSwgQVNDSUlMaXRlcmFs
KCIvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWShmaWxl
UG9saWN5LCBRRGlyOjpob21lUGF0aCgpICsgUVN0cmluZ0xpdGVyYWwoIi8uWGF1dGhvcml0eSIp
LCBSZWFkKTsKKworICAgIFN5c2NhbGxQb2xpY3kgcG9saWN5OworICAgIHBvbGljeS5zZXREaXJl
Y3RvcnlQb2xpY3koZGlyZWN0b3J5UG9saWN5KTsKKyAgICBwb2xpY3kuc2V0RmlsZVBvbGljeShm
aWxlUG9saWN5KTsKKworICAgIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3ModGhpcywgcG9s
aWN5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9T
ZWNjb21wRmlsdGVyc1F0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBG
aWx0ZXJzUXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODRjNzI4NTI5MWViNWJlNTg0YmRkZDViNjZkMGVlODJm
Yjg1N2U4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9T
ZWNjb21wRmlsdGVyc1F0LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTZWNjb21wRmlsdGVyc1F0X2gKKyNkZWZpbmUgU2VjY29tcEZpbHRlcnNRdF9oCisK
KyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21w
RmlsdGVycy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2VjY29tcEZpbHRlcnNR
dCA6IHB1YmxpYyBTZWNjb21wRmlsdGVycyB7CitwdWJsaWM6CisgICAgU2VjY29tcEZpbHRlcnNR
dCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBf
RklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJzUXRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAK
aW5kZXggMTdhZDg1MzdkMzQ4NDExY2ZkMjFmNTg2ZDRhNDNlYmNiOTdmODA5Mi4uZmI1ODc2MjQ0
NTlhN2YwYjIwNTUwZDQzZGNjMDcyZGEyNDdkNzM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvcXQvTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCkBAIC0y
NCw2ICsyNCw5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVyc1F0
Lmg+CiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogCiAjaWYgZGVmaW5lZChRVF9OT19XSURHRVRTKQpA
QCAtODIsNiArODUsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIH0K
ICNlbmRpZgogCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICB7CisgICAgICAgIFdl
YktpdDo6U2VjY29tcEZpbHRlcnNRdCBzZWNjb21wRmlsdGVyczsKKyAgICAgICAgc2VjY29tcEZp
bHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gSGFzIHRvIGJlIGRv
bmUgYmVmb3JlIFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiBjYXNlCiAgICAgLy8gUUFw
cGxpY2F0aW9uIGl0c2VsZiBwcm9kdWNlcyBkZWJ1ZyBvdXRwdXQuCiAgICAgUUJ5dGVBcnJheSBz
dXBwcmVzc091dHB1dCA9IHFnZXRlbnYoIlFUX1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19P
VVRQVVQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMThmMDIyOTE1
Y2U2ODczMDY3ZWQ5OTE4NzI2M2FiNzUzY2YxYzAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJpZ2h0
IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6CisjCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
IyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENv
cnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyMgICBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0CisjICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjIFRyeSB0
byBmaW5kIGxpYnNlY2NvbXAgaW5jbHVkZSBhbmQgbGlicmFyeSBkaXJlY3Rvcmllcy4KKyMKKyMg
QWZ0ZXIgc3VjY2Vzc2Z1bCBkaXNjb3ZlcnksIHRoaXMgd2lsbCBzZXQgZm9yIGluY2x1c2lvbiB3
aGVyZSBuZWVkZWQ6CisjIExJQlNFQ0NPTVBfSU5DTFVERV9ESVJTIC0gY29udGFpbmcgdGhlIGxp
YnNlY2NvbXAgaGVhZGVycworIyBMSUJTRUNDT01QX0xJQlJBUklFUyAtIGNvbnRhaW5nIHRoZSBs
aWJzZWNjb21wIGxpYnJhcnkKKworaW5jbHVkZShGaW5kUGtnQ29uZmlnKQorCitwa2dfY2hlY2tf
bW9kdWxlcyhQQ19MSUJTRUNDT01QIGxpYnNlY2NvbXApCisKK2ZpbmRfcGF0aChMSUJTRUNDT01Q
X0lOQ0xVREVfRElSUyBOQU1FUyBzZWNjb21wLmgKKyAgICBISU5UUyAke1BDX0xJQlNFQ0NPTVBf
SU5DTFVERV9ESVJTfSAke1BDX0xJQlNFQ0NPTVBfSU5DTFVERURJUn0KKykKKworZmluZF9saWJy
YXJ5KExJQlNFQ0NPTVBfTElCUkFSSUVTIE5BTUVTIHNlY2NvbXAKKyAgICBISU5UUyAke1BDX0xJ
QlNFQ0NPTVBfTElCUkFSWV9ESVJTfSAke1BDX0xJQlNFQ0NPTVBfTElCRElSfQorKQorCitpbmNs
dWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorRklORF9QQUNLQUdFX0hBTkRMRV9T
VEFOREFSRF9BUkdTKHNlY2NvbXAgREVGQVVMVF9NU0cgTElCU0VDQ09NUF9JTkNMVURFX0RJUlMg
TElCU0VDQ09NUF9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDAzZjkwYzFkN2Jl
YjRiMTBhOGY0YWRhNTg2ZDUxYzU5ZDc2ZDczNmUuLjNkZjFjMWM5NjNlNzg5ZmFiZjkzZjI1MzA2
Y2ViNjgzMTc0MjIyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC03OCw2ICs3OCw3IEBAIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJ
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09MVVRJT05f
TUVESUFfUVVFUlkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
UkVHSU9OUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1NIQURPV19ET00gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfU0hBUkVEX1dPUktFUlMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBPTikKQEAgLTIxMiw2ICsyMTMsMTAgQEAgaWYgKEVO
QUJMRV9JTlNQRUNUT1IpCiAgICAgYWRkX2RlZmluaXRpb25zKC1EV0VCX0lOU1BFQ1RPUl9JTlNU
QUxMX0RJUj1cIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7V0VCX0lOU1BFQ1RPUl9ESVJ9XCIp
CiBlbmRpZiAoKQogCitpZiAoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUykKKyAgICBmaW5kX3BhY2th
Z2UoTGliU2VjY29tcCBSRVFVSVJFRCkKK2VuZGlmICgpCisKIHNldChDUEFDS19TT1VSQ0VfR0VO
RVJBVE9SIFRCWjIpCiAKICMgT3B0aW1pemUgYmluYXJ5IHNpemUgZm9yIHJlbGVhc2UgYnVpbGRz
IGJ5IHJlbW92aW5nIGRlYWQgc2VjdGlvbnMgb24gdW5peC9nY2MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJl
cy5jbWFrZQppbmRleCBlMWZjNjVkODRkNTAzZWQ5OTM0N2NlNzM5NDAyZTQxMjM4NmJhZmFkLi44
MDQ2NWM3Y2NkMjZkYzNmNGYyNjJiZjIwZmU0MmY4NzRjMGMwZThlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZl
YXR1cmVzLmNtYWtlCkBAIC0xMDMsNiArMTAzLDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJ
TikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVS
WSAiVG9nZ2xlIHJlc29sdXRpb24gbWVkaWEgcXVlcnkgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9SRVNPVVJDRV9USU1JTkcgIlRvZ2dsZSBSZXNvdXJjZSBU
aW1pbmcgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TQ1JJ
UFRFRF9TUEVFQ0ggIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQiIE9GRikKKyAg
ICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0VDQ09NUF9GSUxURVJTICJUb2dnbGUgTGlu
dXggc2VjY29tcCBmaWx0ZXJzIGZvciB0aGUgV2ViUHJvY2VzcyBzdXBwb3J0IiBPRkYpCiAgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBTaGFkb3cgRE9N
IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBUkVEX1dP
UktFUlMgIlRvZ2dsZSBTaGFyZWRXb3JrZXJzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfU1BFTExDSEVDSyAiVG9nZ2xlIFNwZWxsY2hlY2tpbmcgc3VwcG9y
dCAocmVxdWlyZXMgRW5jaGFudCkiIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZp
Zy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggOTc0YzgxZTg2MjZm
N2JjZWY0OGMwOGI5YjQyYWE3YjE1YmE3ZGZjYS4uZDMxOWQxYzA1NDc0Y2Q0MWUwNmMwZDZjYTBl
ODIxMjFmMzBmN2MzNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysr
IGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTk3LDYgKzk3LDcgQEAKICNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZCiAjY21ha2VkZWZpbmUwMSBFTkFC
TEVfUkVTT1VSQ0VfVElNSU5HCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0NSSVBURURfU1BFRUNI
CisjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0VDQ09NUF9GSUxURVJTCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9MTElORwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUzMTNlNGQ4OTc0MGYzNWRlNDM3NmM0
MjY3YjQyM2Q4ODVmNzQ5MjUuLjBhOTI3YjI2MDU1ZTU0OTBlMjg3YmJhMzBkN2Y4OTc5ZDE2N2Yz
ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNCBAQAorMjAxMy0wMS0yNCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlh
Z28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9wIFdlYlByb2Nlc3MgY2Fw
YWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyB0byB2ZXJpZnkg
aWYgdGhlIGhhbmRsaW5nIG9mIHRoZSBvcGVuLCBvcGVuYXQsIGNyZWF0IHN5c2NhbGwKKyAgICAg
ICAgaXMgYmVpbmcgZG9uZSByaWdodC4gV2UgY2hlY2sgaWYgdGhlIFJlYWQvV3JpdGUvUmVhZEFu
ZFdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgIGFyZSByZXNwZWN0ZWQsIGlmIHRoZSBjYW5vbmlj
YWwgcGF0aCBpcyBiZWluZyByZXNvbHZlZCBhbmQgaWYKKyAgICAgICAgdGhlIHBlcm1pc3Npb25z
IGFyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRvcG1vc3QgcGFyZW50IGRpcmVjdG9yeSB3aXRoIGEK
KyAgICAgICAgcG9saWN5IHNldCB3aGVuIHRoZSBkaXJlY3RvcnkgYmVpbmcgb3BlbmVkIGhhcyBu
byBwb2xpY3kuCisKKyAgICAgICAgV2UgYWxzbyB0ZXN0IGlmIGFueSBhdHRlbXB0IG9mIGJsb2Nr
aW5nIFNJR1NZUyBpcyBzaWxlbnRseSBpZ25vcmVkLgorICAgICAgICBTSUdTWVMgY2Fubm90IGJl
IGJsb2NrZWQgYmVjYXVzZSBpbiBpdCdzIGhhbmRsZXIgaXMgd2hlcmUgd2UgaG9vaworICAgICAg
ICBzeXNjYWxscyB0byB0aGUgYnJva2VyIHByb2Nlc3MuCisKKyAgICAgICAgQWxzbyBhZGRlZCBs
aWJzZWNjb21wIHRvIEVGTCdzIGpoYnVpbGQgdG8gbWFrZSB0aGUgbGlmZSBvZiBkZXZlbG9wZXJz
CisgICAgICAgIHdpbGxpbmcgdG8gaGVscCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bUVmbC5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29t
cEZpbHRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEkpOgorICAgICAgICAo
U2VjY29tcEVudmlyb25tZW50KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY2NvbXBFbnZp
cm9ubWVudDo6U2V0VXApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmlyb25t
ZW50OjpUZWFyRG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBlZmwvamhidWlsZC5tb2R1bGVzOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJpOgorCiAyMDEzLTAxLTI0ICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MDU2MS4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCA2ZDMyZTA2ZTU5OTllMDMwNTIw
Nzg0NWQ5MjU3ZTU3ODRhMDI5OWI3Li4zZDdjOGQ4NGUwOGRlZWE0MmJmZDQxMDYwMzU4OGNkZmI0
MjJkNzdhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC0xMjUs
NiArMTI1LDcgQEAgbXkgKAogICAgICRyZXF1ZXN0QW5pbWF0aW9uRnJhbWVTdXBwb3J0LAogICAg
ICRyZXNvdXJjZVRpbWluZ1N1cHBvcnQsCiAgICAgJHNjcmlwdGVkU3BlZWNoU3VwcG9ydCwKKyAg
ICAkc2VjY29tcEZpbHRlcnNTdXBwb3J0LAogICAgICRzaGFkb3dET01TdXBwb3J0LAogICAgICRz
aGFyZWRXb3JrZXJzU3VwcG9ydCwKICAgICAkc3FsRGF0YWJhc2VTdXBwb3J0LApAQCAtMzkwLDYg
KzM5MSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAicmVxdWVzdC1hbmlt
YXRpb24tZnJhbWUiLCBkZXNjID0+ICJUb2dnbGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgc3Vw
cG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSIs
IGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSB8fCBpc0d0aygpIHx8IGlzRWZsKCkgfHwg
aXNCbGFja0JlcnJ5KCkpLCB2YWx1ZSA9PiBcJHJlcXVlc3RBbmltYXRpb25GcmFtZVN1cHBvcnQg
fSwKIAorICAgIHsgb3B0aW9uID0+ICJzZWNjb21wLWZpbHRlcnMiLCBkZXNjID0+ICJUb2dnbGUg
U2VjY29tcCBGaWx0ZXIgc2FuZGJveCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TRUNDT01Q
X0ZJTFRFUlMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc2VjY29tcEZpbHRlcnNTdXBwb3J0
IH0sCisKICAgICB7IG9wdGlvbiA9PiAic2NyaXB0ZWQtc3BlZWNoIiwgZGVzYyA9PiAiVG9nZ2xl
IFNjcmlwdGVkIFNwZWVjaCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NDUklQ
VEVEX1NQRUVDSCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzY3JpcHRlZFNwZWVjaFN1cHBv
cnQgfSwKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFr
ZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggY2ZkOTMyN2Zi
M2E4MzlhYzNjYWUxMTFhZjc0NjhhZTZjN2NlN2ExZC4uYjgyNjc2NGQwODYwNjIwZGVlODA3MjY3
NDM5OWFiNjRiMGNhYmVlZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC04Nyw2ICs4NywxMiBAQCBzZXQodGVzdF93ZWJraXQyX2FwaV9CSU5BUklFUwogICAgIFdpbGxT
ZW5kU3VibWl0RXZlbnQKICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlz
dChBUFBFTkQgdGVzdF93ZWJraXQyX2FwaV9CSU5BUklFUworICAgICAgICBTZWNjb21wRmlsdGVy
cworICAgICkKK2VuZGlmICgpCisKIHNldCh0ZXN0X3dlYmtpdDJfYXBpX2ZhaWxfQklOQVJJRVMK
ICAgICBDYW5IYW5kbGVSZXF1ZXN0CiAgICAgRG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNyYXNo
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29tcEZp
bHRlcnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0
ZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMDQ4M2UxNTUzYmMzMDRhZTFlZWQxYTM3MWU5OTMxNTdlZGJi
MjZjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L1NlY2NvbXBGaWx0ZXJzLmNwcApAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wQnJva2Vy
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wRmlsdGVycy5oPgorI2luY2x1ZGUgPFdlYktp
dDIvU3lzY2FsbFBvbGljeS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwu
aD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgcm9vdERpciwgKEFTQ0lJTGl0ZXJhbCgiLyIpKSk7CitERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgaG9tZURpciwgKFN0cmluZyhnZXRlbnYoIkhPTUUiKSkpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1c3JEaXIsIChBU0NJSUxpdGVyYWwoIi91c3IiKSkp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzclNiaW5EaXIsIChBU0NJSUxpdGVyYWwo
Ii91c3Ivc2JpbiIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpclJlYWQs
IChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQiKSkpOwor
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJXcml0ZSwgKEFTQ0lJTGl0ZXJhbCgi
L3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0V3JpdGUiKSkpOworREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHRlc3REaXJSZWFkQW5kV3JpdGUsIChBU0NJSUxpdGVyYWwoIi90bXAvV2Vi
S2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZSIpKSk7CitERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgdGVzdERpck5vdEFsbG93ZWQsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0
U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHRlc3RGaWxlTm90QWxsb3dlZCwgKHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RG
aWxlUG9saWN5IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3RGaWxlUmVhZEFu
ZFdyaXRlLCAodGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlUG9saWN5IikpOworCitzdGF0
aWMgY29uc3QgbW9kZV90IGRlZmF1bHRNb2RlID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lYVVNS
OworCitjbGFzcyBTZWNjb21wRW52aXJvbm1lbnQgOiBwdWJsaWMgdGVzdGluZzo6RW52aXJvbm1l
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBB
U1NFUlRfVFJVRSghaG9tZURpci5pc0VtcHR5KCkpOworCisgICAgICAgIG1rZGlyKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzIiwgZGVmYXVsdE1vZGUpOworICAgICAgICBta2Rpcih0ZXN0RGly
UmVhZC51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJX
cml0ZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJS
ZWFkQW5kV3JpdGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAgICBta2Rpcih0
ZXN0RGlyTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisKKyAgICAgICAg
Ly8gQ3JlYXRlIGEgZmlsZSBmb3IgdGhlIFJlYWQgb25seSBhbmQgTm90QWxsb3dlZCBkaXJlY3Rv
cnkgYmVmb3JlCisgICAgICAgIC8vIGxvYWRpbmcgdGhlIGZpbHRlcnMuCisgICAgICAgIFN0cmlu
ZyBmaWxlID0gdGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlIjsKKyAgICAgICAgaW50IGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAg
ICAgICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOworICAgICAgICBmaWxlID0gdGVzdERpck5v
dEFsbG93ZWQgKyAiL3Rlc3RGaWxlIjsKKyAgICAgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgICAgICBBU1NFUlRfTkUo
Y2xvc2UoZmQpLCAtMSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGZpbGVzIGZvciB0aGUgZmlsZSBw
b2xpY3kgdGVzdHMuIEZpbGUgcG9saWNpZXMgcHJlY2VkZXMgdGhlCisgICAgICAgIC8vIGRpcmVj
dG9yeSBwb2xpY3kuIEluIHRoaXMgY2FzZSwgd2UgY3JlYXRlIGEgZmlsZSB3aXRoIHJlYWQgYW5k
IHdyaXRlCisgICAgICAgIC8vIHBvbGljaWVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5v
dCBhbGxvd2VkLCBhbmQgdmljZSB2ZXJzYS4gCisgICAgICAgIGZkID0gb3Blbih0ZXN0RmlsZU5v
dEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwor
ICAgICAgICBBU1NFUlRfTkUoY2xvc2UoZmQpLCAtMSk7CisgICAgICAgIGZkID0gb3Blbih0ZXN0
RmlsZVJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0
TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKworICAgICAgICBTeXNj
YWxsUG9saWN5OjpQZXJtaXNzaW9uTWFwIGRpcmVjdG9yeVBvbGljeTsKKyAgICAgICAgZGlyZWN0
b3J5UG9saWN5LnNldChyb290RGlyLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKKyAgICAg
ICAgZGlyZWN0b3J5UG9saWN5LnNldCh1c3JEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAg
ICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHVzclNiaW5EaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFs
bG93ZWQpOworICAgICAgICBkaXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJSZWFkLCBTeXNjYWxs
UG9saWN5OjpSZWFkKTsKKyAgICAgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0ZXN0RGlyV3JpdGUs
IFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKKyAgICAgICAgZGlyZWN0b3J5UG9saWN5LnNldCh0ZXN0
RGlyUmVhZEFuZFdyaXRlLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgICAgICBk
aXJlY3RvcnlQb2xpY3kuc2V0KHRlc3REaXJOb3RBbGxvd2VkLCBTeXNjYWxsUG9saWN5OjpOb3RB
bGxvd2VkKTsKKworICAgICAgICBTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uTWFwIGZpbGVQb2xp
Y3k7CisgICAgICAgIGZpbGVQb2xpY3kuc2V0KHRlc3RGaWxlTm90QWxsb3dlZCwgU3lzY2FsbFBv
bGljeTo6Tm90QWxsb3dlZCk7CisgICAgICAgIGZpbGVQb2xpY3kuc2V0KHRlc3RGaWxlUmVhZEFu
ZFdyaXRlLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOworCisgICAgICAgIFNlY2NvbXBG
aWx0ZXJzIHNlY2NvbXBGaWx0ZXJzKFNlY2NvbXBGaWx0ZXJzOjpBbGxvdyk7CisgICAgICAgIHNl
Y2NvbXBGaWx0ZXJzLmFkZFJ1bGUoIm9wZW4iLCBTZWNjb21wRmlsdGVyczo6VHJhcCk7CisgICAg
ICAgIHNlY2NvbXBGaWx0ZXJzLmFkZFJ1bGUoIm9wZW5hdCIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFw
KTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgiY3JlYXQiLCBTZWNjb21wRmlsdGVy
czo6VHJhcCk7CisKKyAgICAgICAgU3lzY2FsbFBvbGljeSBwb2xpY3k7CisgICAgICAgIHBvbGlj
eS5zZXREaXJlY3RvcnlQb2xpY3koZGlyZWN0b3J5UG9saWN5KTsKKyAgICAgICAgcG9saWN5LnNl
dEZpbGVQb2xpY3koZmlsZVBvbGljeSk7CisKKyAgICAgICAgU2VjY29tcEJyb2tlcjo6bGF1bmNo
UHJvY2Vzcygmc2VjY29tcEZpbHRlcnMsIHBvbGljeSk7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJz
LmluaXRpYWxpemUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGhhdmUgdG8gbW92ZSB0byBhIHNlcGFyYXRlZCBwcm9j
ZXNzIGNyZWF0ZWQgYmVmb3JlIGxvYWRpbmcKKyAgICAgICAgLy8gdGhlIGZpbHRlcnMgd2hlbiB3
ZSBwdXQgdGhlIHJtZGlyL3VubGluayBwb2xpY2llcyBpbiBwbGFjZS4KKyAgICAgICAgdW5saW5r
KCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL3Rlc3RGaWxlIik7Cisg
ICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90
ZXN0RmlsZVBvbGljeSIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRl
cnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZSIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2Vi
S2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZTIiKTsKKyAgICAgICAg
dW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZp
bGUzIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVh
ZEFuZFdyaXRlL3Rlc3RGaWxlUG9saWN5Iik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRT
ZWNjb21wRmlsdGVycy90ZXN0V3JpdGUvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5rKCIvdG1w
L1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZS90ZXN0RmlsZTIiKTsKKyAgICAgICAgdW5s
aW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkL3Rlc3RGaWxlIik7CisgICAg
ICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkIik7Cisg
ICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUi
KTsKKyAgICAgICAgcm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFdyaXRlIik7
CisgICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkIik7Cisg
ICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzIik7CisgICAgfQorfTsKKwor
Ojp0ZXN0aW5nOjpFbnZpcm9ubWVudCogY29uc3QgZW52ID0gOjp0ZXN0aW5nOjpBZGRHbG9iYWxU
ZXN0RW52aXJvbm1lbnQobmV3IFNlY2NvbXBFbnZpcm9ubWVudCk7CisKK1RFU1QoV2ViS2l0Miwg
c2lncHJvY21hc2spCit7CisgICAgLy8gV2UgdGVzdCBoZXJlIHRoZSBtZWNoYW5pc20gaW5zdGFs
bGVkIHRvIHByZXZlbnQgU0lHU1lTIHRvIGJlIGJsb2NrZWQuIEFueQorICAgIC8vIGF0dGVtcCB0
byBhZGQgU0lHU1lTIHRvIHRoZSBzZXQgb2YgYmxvY2tlZCBzaWduYWxzIHdpbGwgYmUgc2lsZW50
bHkKKyAgICAvLyBpZ25vcmVkIChidXQgb3RoZXIgc2lnbmFscyB3aWxsIGJlIGJsb2NrZWQganVz
dCBmaW5lKS4KKyAgICBzaWdzZXRfdCBzZXQsIG9sZFNldDsKKyAgICBzaWdlbXB0eXNldCgmc2V0
KTsKKyAgICBzaWdhZGRzZXQoJnNldCwgU0lHU1lTKTsKKyAgICBzaWdhZGRzZXQoJnNldCwgU0lH
VVNSMSk7CisKKyAgICBBU1NFUlRfTkUoc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2V0LCAwKSwg
LTEpOworICAgIEFTU0VSVF9ORShzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIDAsICZvbGRTZXQpLCAt
MSk7CisgICAgQVNTRVJUX0ZBTFNFKHNpZ2lzbWVtYmVyKCZvbGRTZXQsIFNJR1NZUykpIDw8ICJT
SUdTWVMgc2hvdWxkIG5vdCBiZSBibG9ja2VkLiI7CisgICAgQVNTRVJUX1RSVUUoc2lnaXNtZW1i
ZXIoJm9sZFNldCwgU0lHVVNSMSkpIDw8ICJPdGhlciBzaWduYWxzIHNob3VsZCBiZSBibG9ja2Vk
IG5vcm1hbGx5LiI7CisKKyAgICBzaWdlbXB0eXNldCgmc2V0KTsKKyAgICBzaWdhZGRzZXQoJnNl
dCwgU0lHU1lTKTsKKyAgICBzaWdhZGRzZXQoJnNldCwgU0lHVVNSMik7CisKKyAgICBBU1NFUlRf
TkUoc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzZXQsICZvbGRTZXQpLCAtMSk7CisgICAgQVNT
RVJUX05FKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAwLCAmc2V0KSwgLTEpOworICAgIEFTU0VS
VF9GQUxTRShzaWdpc21lbWJlcigmc2V0LCBTSUdTWVMpKSA8PCAiU0lHU1lTIHNob3VsZCBub3Qg
YmUgYmxvY2tlZC4iOworICAgIEFTU0VSVF9UUlVFKHNpZ2lzbWVtYmVyKCZzZXQsIFNJR1VTUjIp
KSA8PCAiT3RoZXIgc2lnbmFscyBzaG91bGQgYmUgYmxvY2tlZCBub3JtYWxseS4iOworICAgIEFT
U0VSVF9GQUxTRShzaWdpc21lbWJlcigmb2xkU2V0LCBTSUdVU1IyKSk7CisKKyAgICBBU1NFUlRf
TkUoc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGRTZXQsIDApLCAtMSkgPDwgIlNob3VsZCBy
ZXN0b3JlIHRoZSBvbGQgc2lnbmFsIHNldCBqdXN0IGZpbmUuIjsKKyAgICBBU1NFUlRfTkUoc2ln
cHJvY21hc2soU0lHX1NFVE1BU0ssIDAsICZzZXQpLCAtMSk7CisgICAgQVNTRVJUX0ZBTFNFKHNp
Z2lzbWVtYmVyKCZzZXQsIFNJR1VTUjIpKSA8PCAiVGhlIHJlc3RvcmVkIHNldCBkb2Vzbid0IGhh
dmUgU0lHVVNSMi4iOworfQorCitURVNUKFdlYktpdDIsIG9wZW4pCit7CisgICAgLy8gUmVhZCBv
bmx5IGRpcmVjdG9yeS4KKyAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0Rmls
ZSI7CisgICAgaW50IGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRE9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7
CisKKyAgICBmaWxlID0gdGVzdERpclJlYWQgKyAiL1RoaXNGaWxlRG9lc05vdEV4aXN0IjsKKyAg
ICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKSA8PCAiU2hvdWxkIHJldHVybiBFTk9FTlQg
d2hlbiB0cnlpbmcgIiBcCisgICAgICAgICJ0byBvcGVuIGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4
aXQgYW5kIHRoZSBwZXJtaXNzaW9ucyBhcmUgT0suIjsKKworICAgIGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJu
byA9PSBFQUNDRVMpIDw8ICJTaG91bGQgcmV0dXJuIEVBQ0NFUyB3aGVuIHRyeWluZyAiIFwKKyAg
ICAgICAgInRvIG9wZW4gYSBmaWxlIHRoYXQgZG9lcyBub3QgZXhpdCBhbmQgdGhlIHBlcm1pc3Np
b25zIGFyZSBub3QgT0suIjsKKworICAgIC8vIFdyaXRlIG9ubHkgZGlyZWN0b3J5LgorICAgIGZp
bGUgPSB0ZXN0RGlyV3JpdGUgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBBU1NFUlRf
TkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCku
ZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVB
Q0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0x
KTsKKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBSZWFkIGFuIHdyaXRlIGRpcmVjdG9yeS4KKyAg
ICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGUiOworICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwor
ICAgIEFTU0VSVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3Blbihm
aWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAg
Y2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkp
OworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsK
KyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBOb3RBbGxvd2VkIGRpcmVjdG9yeS4KKyAgICBmaWxl
ID0gdGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBl
cnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19S
RE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisK
KyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNU
X1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworCisgICAgLy8gVGhlIC91c3Ig
ZGlyZWN0b3J5IGhlcmUgaGFzIHJlYWQgcGVybWlzc2lvbnMsIHNvIGl0J3Mgc3ViZGlyZWN0b3Jp
ZXMKKyAgICAvLyBzaG91bGQgcmVzb2x2ZSB0byB0aGUgL3VzciBwZXJtaXNzaW9ucyB1bmxlc3Mg
ZXhwbGljaXRseSBzcGVjaWZpZWQuCisgICAgZmlsZSA9IHVzckRpciArICIvYmluL2Jhc2VuYW1l
IjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQ
RUNUX05FKGZkLCAtMSkgPDwgIlN1YmRpcmVjdG9yaWVzIHNob3VsZCB3aXRoIG5vIHBvbGljeSBz
aG91bGQgIiBcCisgICAgICAgICJpbmhlcml0IHRoZSBwYXJlbnQncyBwb2xpY2llcy4iOworICAg
IGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSB1c3JTYmluRGlyICsgIi9hZGR1c2VyIjsKKyAgICBm
ZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX1RSVUUo
ZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGhh
dmUgIiBcCisgICAgICAgICJpdHMgb3duIHBvbGljeSBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQncy4i
OworCisgICAgLy8gQWNjZXNzIHRvIHRoZSByZXN0IG9mIHRoZSBmaWxlcyBzeXN0ZW0gaXMgYmxv
Y2tlZCBhbmQgc2hvdWxkCisgICAgLy8gbmV2ZXIgcmV0dXJuIGFueXRoaW5nIGVsc2Ugb3RoZXIg
dGhhbiBFQUNDRVMgcmVnYXJkbGVzcyBpZiB0aGUKKyAgICAvLyBmaWxlIGV4aXN0cyBvciBub3Qu
IFRoZSByZWFzb24gaXMgYmVjYXVzZSBpdCB3aWxsIGZhbGxiYWNrIHRvIHRoZQorICAgIC8vIHBv
bGljeSBvZiB0aGUgUm9vdCBkaXJlY3RvcnksIG1hcmtlZCBhcyBOb3RBbGxvd2VkLgorICAgIGZp
bGUgPSBob21lRGlyICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9UUlVFKGZk
ID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oIi9ldGMvcGFzc3dk
IiwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NF
Uyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4vZXRjL3Bh
c3N3ZCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAg
IEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0g
dGVzdERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4iICsgdGVzdERpclJlYWRBbmRXcml0ZSAr
ICIvLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NF
Uyk7CisKKyAgICAvLyBIZXJlIHdlIHRlc3QgZmlsZSBwb2xpY2llcy4gVGhlIGhhdmUgcHJlY2Vk
ZW5jZSBvdmVyIGRpcmVjdG9yeSBwb2xpY2llcy4KKyAgICAvLyBUaGUgZmlsZSBiZWxsb3cgbGl2
ZXMgaW5zaWRlIGEgZGlyZWN0b3J5IHdpdGggUmVhZEFuZFdyaXRlIHBvbGljeS4KKyAgICBmZCA9
IG9wZW4odGVzdEZpbGVOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVu
KHRlc3RGaWxlTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNU
X1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3Blbih0ZXN0
RmlsZU5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5k
V3JpdGUgKyAiLy4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlUG9s
aWN5IjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIC8vIFRoZSBu
ZXh0IGZpbGUgaXMgbG9jYXRlZCBpbnNpZGUgYSBkaXJlY3RvcnkgbWFya2VkIGFzIE5vdEFsbG93
ZWQsIGJ1dAorICAgIC8vIGl0IGhhcyBpdHMgb3duIGZpbGUgcG9saWN5IHRoYXQgcHJlY2VkZXMg
dGhlIGRpcmVjdG9yeSBwb2xpY3kuCisgICAgZmQgPSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRl
LnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBj
bG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4odGVzdEZpbGVSZWFkQW5kV3JpdGUudXRmOCgpLmRh
dGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsK
KworICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JE
V1IpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUg
PSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi8uLi8uLi8uLiIgKyB0ZXN0RGlyTm90QWxsb3dlZCAr
ICIvdGVzdEZpbGVQb2xpY3kiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9f
UkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7Cit9CisKK1RF
U1QoV2ViS2l0MiwgY3JlYXQpCit7CisgICAgLy8gUmVhZCBvbmx5IGRpcmVjdG9yeS4KKyAgICBT
dHJpbmcgZmlsZSA9IHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZTIiOworICAgIGludCBmZCA9IGNy
ZWF0KGZpbGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9UUlVFKGZk
ID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAvLyBXcml0ZSBvbmx5IGRpcmVjdG9y
eS4KKyAgICBmaWxlID0gdGVzdERpcldyaXRlICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0gY3Jl
YXQoZmlsZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX05FKGZkLCAt
MSk7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gUmVhZCBhbiB3cml0ZSBkaXJlY3RvcnkuCisg
ICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlMiI7CisgICAgZmQgPSBj
cmVhdChmaWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfTkUoZmQs
IC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBOb3RBbGxvd2VkIGRpcmVjdG9yeS4KKyAg
ICBmaWxlID0gdGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlMiI7CisgICAgZmQgPSBjcmVh
dChmaWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9
PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworfQorCitURVNUKFdlYktpdDIsIG9wZW5hdCkKK3sK
KyAgICBpbnQgZGlyRmQgPSBvcGVuKHRlc3REaXJSZWFkQW5kV3JpdGUudXRmOCgpLmRhdGEoKSwg
T19SRE9OTFkpOworICAgIEFTU0VSVF9ORShkaXJGZCwgLTEpOworCisgICAgaW50IGZkID0gb3Bl
bmF0KGRpckZkLCAidGVzdEZpbGUzIiwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwor
ICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbmF0
KGRpckZkLCAidGVzdEZpbGUzIiwgT19SRFdSKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAg
ICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlMyIsIE9fUkRP
TkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9
IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlMyIsIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQs
IC0xKTsKKworICAgIGZkID0gb3BlbmF0KGZkLCAidGVzdEZpbGUzIiwgT19XUk9OTFkpOworICAg
IEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVOT1RESVIpIDw8ICJTaG91bGQgcmV0
dXJuIEVOT1RESVIgd2hlbiB0aGUgZmQgaXMgYSBmaWxlLiI7CisgICAgY2xvc2UoZmQpOworCisg
ICAgU3RyaW5nIGZpbGUgPSAiLi4vLi4vLi4iICsgdGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVz
dEZpbGUzIjsKKyAgICBmZCA9IG9wZW5hdChkaXJGZCwgZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dS
T05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmls
ZSA9ICIuLi8uLi8uLiIgKyB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUzIjsKKyAgICBmZCA9IG9w
ZW5hdChkaXJGZCwgZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVh
ZEFuZFdyaXRlICsgIi90ZXN0RmlsZTMiOworICAgIGZkID0gb3BlbmF0KC0xLCBmaWxlLnV0Zjgo
KS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKSA8PCAiRGlyZWN0b3J5
IGZkIHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gdGhlIHBhdGggaXMgYWJzb2x1dGUuIjsKKyAgICBj
bG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW5hdCgtMSwgInRlc3RGaWxlMyIsIE9fV1JPTkxZKTsK
KyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQkFERikgPDwgIlNob3VsZCBy
ZXR1cm4gRUJBREYgd2hlbiB0aGUgZmQgaXMgaW52YWxpZC4iOworICAgIGNsb3NlKGRpckZkKTsK
KworICAgIGRpckZkID0gb3Blbih0ZXN0RGlyTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSk7CisgICAgRVhQRUNUX1RSVUUoZGlyRmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsK
KworICAgIGRpckZkID0gb3Blbih0ZXN0RGlyUmVhZC51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7
CisgICAgQVNTRVJUX05FKGRpckZkLCAtMSk7CisKKyAgICBmZCA9IG9wZW5hdChkaXJGZCwgInRl
c3RGaWxlMiIsIE9fUkRPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9U
UlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW5hdChkaXJG
ZCwgInRlc3RGaWxlIiwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVy
cm5vID09IEVBQ0NFUyk7CisgICAgY2xvc2UoZGlyRmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzIGIvVG9v
bHMvZWZsL2poYnVpbGQubW9kdWxlcwppbmRleCA5MGE4ZmI1ZDNkMTQxNjQyNmYyNmYyMDlmMmQ2
NWJmNGIxYTRiMWUyLi41ZTVkN2NjZDc4OWFhZDUzYTQ0Mjg3YmM2MDA3NDVkYTgxMTQ4MTRjIDEw
MDY0NAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2VmbC9qaGJ1
aWxkLm1vZHVsZXMKQEAgLTI0LDYgKzI0LDcgQEAKICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBs
dWdpbnMtZ29vZCIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KICAg
ICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNl
Y2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxlPgogCkBAIC01MSw2
ICs1Miw4IEBACiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdodGVubWVudC5vcmci
Lz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ3N0cmVhbWVyIgogICAgICAg
aHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIvPgorICA8cmVwb3Np
dG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAgIGhyZWY9ImdpdDov
L2dpdC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImNhaXJvIiBhdXRvZ2Vu
LXNoPSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0zNDYsNCArMzQ5LDEwIEBA
CiAgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWVmOGJlNjY1MDk2YjNhNGU2NDQyNGZiMzlkN2M1
ZGE1N2ZhYWFmOTVlOWZlYTZjMWJiNDQyOTVkNGZiMzJkNSIvPgogICA8L2F1dG90b29scz4gCiAK
KyAgPGF1dG90b29scyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAg
ICAgIDxicmFuY2ggbW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVw
bz0iZ2l0LmNvZGUuc2YubmV0IgorICAgICAgICAgIHRhZz0iNjlmYzIyMTAxYWZmYzVkZWZlOWJk
NTJiMzQzODRkNjNmMDlmNDFlYyIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+CmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaSBiL1Rv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4IGUzZTQwOGJlZGFi
ZTlhYTVhZTVkNDNhYjgyZDliYzdiYThkMWFiNzAuLjA5Y2NiYzExYzU5NjRiODFkZTViZDQ5NmUx
ZDM0N2Y2MTJkNTI2ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJpCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMu
cHJpCkBAIC05NCw2ICs5NCw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAgICAgRU5BQkxFX1JF
U09MVVRJT05fTUVESUFfUVVFUlk9MSBcCiAgICAgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FPTEgXAogICAgIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0g9MCBcCisgICAgRU5BQkxFX1NFQ0NP
TVBfRklMVEVSUz0wIFwKICAgICBFTkFCTEVfU0hBRE9XX0RPTT0wIFwKICAgICBFTkFCTEVfU0hB
UkVEX1dPUktFUlM9MSBcCiAgICAgRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MSBcCmRpZmYgLS1n
aXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggOWY5NzkzYzNhOGE5OWJkYWQ5NTQ0OGRh
YjQ5YzBjMDJmYjQ1MmE0Yy4uMzE0ZDE5MzY3NTMwZWViZDU4ODQxNWY4MmQzOTg2NTA1MTNlZWQ2
NCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDEzLTAxLTI0ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50
ZWwuY29tPgorCisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24g
TGludXggdXNpbmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBiaXRzIHRvIEVGTC9DTWFrZSBidWlsZHN5c3Rl
bSB0byBmaW5kIHRoZSBsaWJzZWNjb21wCisgICAgICAgIGxpYnJhcnkuCisKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJj
ZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRG
ZWF0dXJlcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZToKKwog
MjAxMy0wMS0yNCAgU29vLUh5dW4gQ2hvaSAgPHMuY2hvaUBoYWNrZXJzbGFiLmV1PgogCiAgICAg
ICAgIFtDTWFrZV0gUmVtb3ZlIHRoZSBkZWZpbml0aW9uIG9mIFdURl9QTEFURk9STV9XSU4gZnJv
bSB0aGUgYnVpbGQgc3lzdGVtCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186868</attachid>
            <date>2013-02-06 09:09:44 -0800</date>
            <delta_ts>2013-02-20 08:05:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130206191145.patch</filename>
            <type>text/plain</type>
            <size>106934</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjNTNiN2I2NjE5YTY3NGQxOWYyNmUz
NWRkNTdmOGJjZjc3MDUyMjcuLmJhMTBlZjQzMTE4MmVkN2JlMzA1YzhmMGYxOWQ4NmIxODY3OTk1
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjQgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm8gc2V0dXAgYSBo
YW5kbGVyIGZvciBTSUdTWVMgd2hlbiBTZWNjb21wIEZpbHRlcnMgYXJlIGVuYWJsZWQuCisgICAg
ICAgIFRoaXMgc2lnbmFsIG5lZWRzIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHNhbmRib3guCisKKyAg
ICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6CisKIDIwMTMtMDItMDQgIERhdmlkIEtpbHplciAg
PGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3J0IFdURiBYY29kZSBwcm9qZWN0IGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBiMjgxYjA3ZGMwYjE1NjMzNjJjNmRiMDcyYzY4ODI5OWFjNDkxNDJk
Li4wNWZlYzc5MjQ3MzUwNjFjZDkxMTVjMmZiYjI5NjBlMmZlOTY5MWYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTMtMDEtMjQgIFRoaWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhp
YWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNh
cGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAgICAgTWFrZSB0
aGUgREFUQV9ESVIgZ2xvYmFsIHNpbmNlIGl0IGlzIG5vdyBuZWVkIG9uIFdlYkNvcmUgYW5kIFdl
YktpdDIuCisgICAgICAgIEl0IGlzIG5vdyB1c2VkIHRvIHNldCBhIHNhbmRib3ggcG9saWN5IGZv
ciB0aGUgRUZMIHBvcnQuIAorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTMt
MDItMDQgIERhbiBDYXJuZXkgIDxkY2FybmV5QGdvb2dsZS5jb20+CiAKICAgICAgICAgW3Y4XSB1
c2UgdG9WOEZhc3QgaW4gaGFuZCBjb2RlZCBjYWxsYmFja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2YjJhNjYx
ZGUzNTRhNzZkN2VjZWI0NjAzZTkzZjlmY2Q0Zjc0N2JkLi43MDUwMGRhNDg3MGU1NzFjMTQ4ZWVm
OTBlOWNhN2Q0MDU0ZTQyY2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ0IEBACisyMDEzLTAx
LTI0ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgor
CisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNp
bmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEludHJvZHVjZSB0aGUgZm91bmRhdGlvbnMgb2YgdGhlIFNlY2NvbXBGaWx0ZXIt
YmFzZWQgc2FuZGJveC4gVGhlCisgICAgICAgIGhhcmRlbmluZyBvZiB0aGUgV2ViUHJvY2VzcyAo
YW5kIHBvdGVudGlhbGx5IFBsdWdpblByb2Nlc3MsIGV0YykKKyAgICAgICAgd29ya3MgYnkgYSBj
b21iaW5hdGlvbiBvZiB0aGUgdHdvIHRoaW5nczoKKworICAgICAgICAtIEJsb2NraW5nIHN5c2Nh
bGxzIHRoYXQgYXJlIG5vdCB1c2VkLCByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNrCisg
ICAgICAgIHN1cmZhY2UuCisgICAgICAgIC0gVHJhcHBpbmcgc2Vuc2l0aXZlIHN5c2NhbGxzIGFu
ZCBkZWxlZ2F0aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlc2UKKyAgICAgICAgc3lzY2FsbHMgdG8g
YSBzZXBhcmF0ZWQgdHJ1c3RlZCBwcm9jZXNzIHN1YmplY3QgdG8gYSBzZXQgb2YgcG9saWNpZXMu
CisKKyAgICAgICAgVGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gdHJhcHMgdGhlIG9wZW4oKS1m
YW1pbHkgb2Ygc3lzY2FsbHMgb24gV2ViS2l0CisgICAgICAgIEVGTCdzIGFuZCBRdCdzIFdlYlBy
b2Nlc3MsIGJ1dCBpdCBjb3VsZCBiZSBlYXNpbHkgdXNlZCBieSBhbnkgTGludXggcG9ydCwKKyAg
ICAgICAgc2luY2UgdGhlIGNvZGUgaXMgc3VwcG9zZSB0byBiZSBMaW51eC1jb21wbGlhbnQuIFRo
ZSBsaXN0IG9mIHN5c2NhbGxzIGhhbmRsZWQKKyAgICAgICAgYnkgdGhlIGJyb2tlciBwcm9jZXNz
IHNob3VsZCBkZWZpbml0ZWx5IGdyb3cgYXMgd2UgbWF0dXJlIHRoZQorICAgICAgICBpbXBsZW1l
bnRhdGlvbi4gT3RoZXIgc3lzY2FsbHMgbmVlZHMgdG8gYmUgaGFuZGxlZCB0byBnZXQgdGhpcyBz
YW5kYm94CisgICAgICAgIGZ1bGx5IGZ1bmN0aW9uYWwsIGxpa2UgdW5saW5rKCksIG1rZGlyKCks
IGV0Yy4KKworICAgICAgICBUaGUgYnJva2VyIHByb2Nlc3Mgc2hvdWxkIGJlIGluaXRpYWxpemVk
IGFzIGVhcmx5IGFzIHBvc3NpYmxlIG9uIHRoZQorICAgICAgICBzYW5kYm94ZWQgcHJvY2VzcyBt
YWluLCBiZWNhdXNlIGl0IG9ubHkgZG9lcyBhIGZvcmsoKSwgd2hpY2ggaXMgY2hlYXAKKyAgICAg
ICAgb24gTGludXguIFRoYXQgYWxzbyBhaW1zIHRvIG1pbmltaXplIHRoZSByZXNpZGVudCBtZW1v
cnkgZm9vdHByaW50IG9mCisgICAgICAgIHRoZSBicm9rZXIgcHJvY2Vzcy4KKworICAgICAgICBD
dXJyZW50bHkgdGhlIGJyb2tlciBzdXBwb3J0cyBvbmx5IGRpcmVjdG9yeSBwb2xpY2llcywgYnV0
IGZpbGUgcG9saWNpZXMKKyAgICAgICAgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVy
ZSB0byBtYWtlIG5hcnJvd2VyIHRoZSBmaWxlc3lzdGVtCisgICAgICAgIGV4cG9zZWQgdG8gdGhl
IFdlYlByb2Nlc3MuCisKKyAgICAgICAgT3BlbmluZyBvZiBmaWxlcyBmb3IgdXBsb2FkIGFuZCBz
YXZpbmcgZG93bmxvYWRzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LAorICAgICAgICBzaW5jZSBpdCBz
aG91bGQgYmUgaGFuZGxlZCB0byB0aGUgVUlQcm9jZXNzIGluIGEgc2ltaWxhciBmYXNoaW9uIGFz
CisgICAgICAgIHRoZSBNYWMgcG9ydCBkb2VzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2Fs
bDo6Y3JlYXRlRnJvbU9wZW5hdENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2Fs
bDo6Y3JlYXRlRnJvbUNyZWF0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
OjpPcGVuU3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpzZXRSZXN1bHQp
OgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZW5TeXNjYWxsOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6Ok9wZW5TeXNjYWxs
UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6On5PcGVuU3lzY2Fs
bFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsUmVzdWx0OjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZGVjb2RlKToKKyAgICAgICAgKiBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuaDogQWRkZWQuCisgICAgICAg
IChDb3JlSVBDKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChPcGVuU3lzY2FsbCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpzZXRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6
T3BlblN5c2NhbGw6OnNldEZsYWdzKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OnNl
dE1vZGUpOgorICAgICAgICAoT3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpP
cGVuU3lzY2FsbFJlc3VsdDo6ZmQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3Vs
dDo6ZXJyb3JOdW1iZXIpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
ZWNjb21wQnJva2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2Vj
Y29tcEJyb2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OnNlbmRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6cmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpzeXNTaWduYWxI
YW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6cmVnaXN0ZXJTeXNTaWduYWxIYW5kbGVyKToKKyAg
ICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNsaWVudDo6c2hhcmVkKToKKyAgICAgICAgKFdl
YktpdDo6U2VjY29tcEJyb2tlckNsaWVudDo6U2VjY29tcEJyb2tlckNsaWVudCk6CisgICAgICAg
IChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6On5TZWNjb21wQnJva2VyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNsaWVudDo6ZGlzcGF0Y2gpOgorICAgICAgICAo
V2ViS2l0OjpTZWNjb21wQnJva2VyQ2xpZW50OjpoYW5kbGVJZk9wZW5pbmdDUFVDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmVHJ5aW5nVG9CbG9j
a1N5c1NpZ25hbCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6cnVuTG9vcCk6CisgICAgICAgICogU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoU2VjY29tcEJyb2tlcik6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBC
cm9rZXI6OnNldFN5c2NhbGxQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2Vy
OjpTZWNjb21wQnJva2VyKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
U2VjY29tcEZpbHRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpTZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6
OlNlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNj
b21wRmlsdGVyczo6YWRkUnVsZSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpp
bml0aWFsaXplKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29t
cEZpbHRlcnMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VjY29tcEZp
bHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6Y29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6U3lzY2FsbDo6U3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxS
ZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3Vs
dDo6U3lzY2FsbFJlc3VsdCk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGwuaDogQWRkZWQuCisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChTeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6flN5c2NhbGwp
OgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjp0eXBlKToKKyAgICAgICAgKFdlYktpdDo6U3lz
Y2FsbDo6c2V0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OmNvbnRleHQpOgor
ICAgICAgICAoU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6
On5TeXNjYWxsUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6dHlwZSk6
CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnJlbW92ZVRyYWls
aW5nU2xhc2gpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9u
Rm9yUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxQb2xpY3k6OmFkZEZpbGVQZXJtaXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFBvbGljeTo6YWRkRGlyZWN0b3J5UGVybWlz
c2lvbik6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxQb2xpY3k6OmFkZERlZmF1bHRXZWJQcm9j
ZXNzUG9saWN5KToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2Fs
bFBvbGljeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTeXNjYWxsUG9s
aWN5KToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnNX
ZWJQcm9jZXNzRWZsOjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwpOgorICAgICAgICAoV2Vi
S2l0OjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vz
c0VmbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NR
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEZpbHRlcnNXZWJQcm9jZXNzUXQ6OlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KToKKyAgICAg
ICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQ6OnBsYXRmb3JtSW5pdGlhbGl6
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wRmlsdGVyc1dlYlBy
b2Nlc3NRdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAx
My0wMi0wNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNv
cnQgV2ViS2l0MiBYY29kZSBwcm9qZWN0IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXggNGE0
NjgxYjRlYWZlNjFhNWQ0NzUzOTNiYjQzNDE0OWRiNmEwNzkzZi4uY2U1OWQ0YzQ0NzM4YjBiYTgx
NGY0YTQ2NzIyZjhiNWFlZmVjMjkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0
aW9ucy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTM0OSw3ICsz
NDksMTEgQEAgc3RhdGljIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXJzRm9yRmF0YWxFcnJvcnMo
dm9pZCAoKmhhbmRsZXIpKGludCkpCiAgICAgc2lnbmFsKFNJR0ZQRSwgaGFuZGxlcik7IC8vICAg
IDg6IGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbi4KICAgICBzaWduYWwoU0lHQlVTLCBoYW5kbGVy
KTsgLy8gICAxMDogYnVzIGVycm9yLgogICAgIHNpZ25hbChTSUdTRUdWLCBoYW5kbGVyKTsgLy8g
IDExOiBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgorI2lmICFFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQorICAgIC8vIERvIG5vdCBvdmVycmlkZSB0aGUgc2lnbmFsIGhhbmRsZXIgbmVlZGVkIGJ5IHRo
ZSBTZWNjb21wCisgICAgLy8gRmlsdGVycyBzYW5kYm94LiBUaGUgc2FuZGJveCBpbnN0YWxscyBp
dHMgb3duIGhhbmRsZXIuCiAgICAgc2lnbmFsKFNJR1NZUywgaGFuZGxlcik7IC8vICAgMTI6IGJh
ZCBhcmd1bWVudCB0byBzeXN0ZW0gY2FsbC4KKyNlbmRpZgogICAgIHNpZ25hbChTSUdQSVBFLCBo
YW5kbGVyKTsgLy8gIDEzOiB3cml0ZSBvbiBhIHBpcGUgd2l0aCBubyByZWFkZXIuCiAgICAgc2ln
bmFsKFNJR1hDUFUsIGhhbmRsZXIpOyAvLyAgMjQ6IGV4Y2VlZGVkIENQVSB0aW1lIGxpbWl0Lgog
ICAgIHNpZ25hbChTSUdYRlNaLCBoYW5kbGVyKTsgLy8gIDI1OiBleGNlZWRlZCBmaWxlIHNpemUg
bGltaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDViMTY4ZDM5OWYyMTE4OGFhOTUz
NzY3MDNlMDIyY2NjZWZjMmE3YWEuLmZjMmM4YjlkMjNjYTlkNzY0OTkxYTdiNmNhMzY1YjRlYjlh
ZmVhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zNTQsOCArMzU0LDYgQEAgaWYg
KFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKLWFkZF9kZWZp
bml0aW9ucygtRERBVEFfRElSPSIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0RBVEFfSU5TVEFM
TF9ESVJ9IikKLQogaWYgKEVOQUJMRV9XRUJfQVVESU8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9h
dWRpby9nc3RyZWFtZXIiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGI4N2U5NzljNTE3
NjQ1NWExZDMxNDhhYzg2ZGVjNWNlOGIxOWI3N2UuLjUwZTYxZGUyMDllOWMzZGE3MzZjZDZlMDA3
Y2Q4ZjNhZjM4MjYxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNiw2ICsyNiwx
MiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvZWZsL1Byb2Nlc3NF
eGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAK
IAorICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5jcHAKKyAgICBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAKKyAgICBTaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwCisgICAgU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0
ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCisKICAgICBTaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxl
ckxpbnV4LmNwcAogCiAgICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uY3Bw
CkBAIC0xNDIsNiArMTQ4LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL2VmbC9XZWJJbnNwZWN0b3JFZmwuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL2VmbC9XZWJQYWdlRWZsLmNwcAogCisgICAgV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZp
bHRlcnNXZWJQcm9jZXNzRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWlu
RWZsLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjQ0
LDYgKzI1MSwyMSBAQCBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7U1FM
SVRFX0xJQlJBUklFU30KICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgbGlz
dChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJQlJBUklF
U30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICR7TElCU0VDQ09NUF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgIyBJZiBidWls
ZGluZyB3aXRoIGpoYnVpbGQsIGFkZCB0aGUgcm9vdCBidWlsZCBkaXJlY3RvcnkgdG8gdGhlCisg
ICAgIyBmaWxlc3lzdGVtIGFjY2VzcyBwb2xpY3kuCisgICAgaWYgKElTX0RJUkVDVE9SWSAke0NN
QUtFX1NPVVJDRV9ESVJ9L1dlYktpdEJ1aWxkL0RlcGVuZGVuY2llcykKKyAgICAgICAgYWRkX2Rl
ZmluaXRpb25zKC1EU09VUkNFX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKKyAgICBlbmRp
ZiAoKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9FQ09SRV9YKQogICAgIGxpc3QoQVBQRU5EIFdl
YlByb2Nlc3NfTElCUkFSSUVTCiAgICAgICAgICR7RUNPUkVfWF9MSUJSQVJJRVN9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2Nh
bGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5T
eXNjYWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWEyMmY4MDExYmJjOWNiOGE5NTA5YTg4MjBjOGFkODg2
OGRmNzNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TeXNjYWxsLmgi
CisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDxzeXMvc3Rh
dC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ09NUElM
RV9BU1NFUlQoIU9fUkRPTkxZLCBPX1JET05MWSk7CitDT01QSUxFX0FTU0VSVChPX1dST05MWSA9
PSAxLCBPX1dST05MWSk7CitDT01QSUxFX0FTU0VSVChPX1JEV1IgPT0gMiwgT19SRFJXKTsKKwor
UGFzc093blB0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbU9wZW5hdENvbnRleHQo
bWNvbnRleHRfdCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8T3BlblN5c2NhbGw+IG9wZW4gPSBh
ZG9wdFB0cihuZXcgT3BlblN5c2NhbGwoMCkpOworCisgICAgb3Blbi0+c2V0RmxhZ3MoY29udGV4
dC0+Z3JlZ3NbUkVHX0FSRzJdKTsKKyAgICBvcGVuLT5zZXRNb2RlKGNvbnRleHQtPmdyZWdzW1JF
R19BUkczXSk7CisgICAgb3Blbi0+c2V0Q29udGV4dChjb250ZXh0KTsKKworICAgIGludCBmZCA9
IGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXTsKKyAgICBjaGFyKiBwYXRoID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdKTsKKworICAgIGlmIChwYXRoWzBd
ID09ICcvJykgeworICAgICAgICBvcGVuLT5zZXRQYXRoKHBhdGgpOworICAgICAgICByZXR1cm4g
b3Blbi5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7CisgICAg
aWYgKGZzdGF0KGZkLCAmcGF0aFN0YXQpID09IC0xKSB7CisgICAgICAgIGNvbnRleHQtPmdyZWdz
W1JFR19TWVNDQUxMXSA9IC1lcnJubzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKCFTX0lTRElSKHBhdGhTdGF0LnN0X21vZGUpKSB7CisgICAgICAgIGNvbnRleHQt
PmdyZWdzW1JFR19TWVNDQUxMXSA9IC1FTk9URElSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBjaGFyIGZkTGlua1BhdGhbMzJdOworICAgIHNucHJpbnRmKGZkTGlua1Bh
dGgsIHNpemVvZihmZExpbmtQYXRoKSwgIi9wcm9jL3NlbGYvZmQvJWQiLCBmZCk7CisKKyAgICBj
aGFyIGZkUGF0aFtQQVRIX01BWF07CisgICAgc3NpemVfdCBzaXplID0gcmVhZGxpbmsoZmRMaW5r
UGF0aCwgZmRQYXRoLCBzaXplb2YoZmRQYXRoKSAtIDEpOworICAgIGlmIChzaXplID09IC0xKSB7
CisgICAgICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1lcnJubzsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gVGhlICIrIDIiIGhlcmUgc3RhbmRzIGZv
ciB0aGUgJy8nIGFuZCBudWxsIHRlcm1pbmF0b3IuCisgICAgaWYgKHNpemUgKyBzdHJsZW4ocGF0
aCkgKyAyID4gUEFUSF9NQVgpIHsKKyAgICAgICAgY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExd
ID0gLUVOQU1FVE9PTE9ORzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
c3ByaW50ZigmZmRQYXRoW3NpemVdLCAiLyVzIiwgcGF0aCk7CisgICAgb3Blbi0+c2V0UGF0aChm
ZFBhdGgpOworCisgICAgcmV0dXJuIG9wZW4ucmVsZWFzZSgpOworfQorCitQYXNzT3duUHRyPFN5
c2NhbGw+IE9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tQ3JlYXRDb250ZXh0KG1jb250ZXh0X3QqIGNv
bnRleHQpCit7CisgICAgT3BlblN5c2NhbGwqIG9wZW4gPSBuZXcgT3BlblN5c2NhbGwoMCk7CisK
KyAgICBvcGVuLT5zZXRQYXRoKENTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29udGV4
dC0+Z3JlZ3NbUkVHX0FSRzBdKSkpOworICAgIG9wZW4tPnNldEZsYWdzKE9fQ1JFQVQgfCBPX1dS
T05MWSB8IE9fVFJVTkMpOworICAgIG9wZW4tPnNldE1vZGUoY29udGV4dC0+Z3JlZ3NbUkVHX0FS
RzFdKTsKKyAgICBvcGVuLT5zZXRDb250ZXh0KGNvbnRleHQpOworCisgICAgcmV0dXJuIGFkb3B0
UHRyKG9wZW4pOworfQorCitPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwobWNvbnRleHRfdCogY29u
dGV4dCkKKyAgICA6IFN5c2NhbGwoX19OUl9vcGVuLCBjb250ZXh0KQorICAgICwgbV9mbGFncygw
KQorICAgICwgbV9tb2RlKDApCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhdGggPSBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQt
PmdyZWdzW1JFR19BUkcwXSkpOworICAgIG1fZmxhZ3MgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJH
MV07CisgICAgbV9tb2RlID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzJdOworfQorCit2b2lkIE9w
ZW5TeXNjYWxsOjpzZXRSZXN1bHQoY29uc3QgU3lzY2FsbFJlc3VsdCogcmVzdWx0KQoreworICAg
IEFTU0VSVChjb250ZXh0KCkgJiYgcmVzdWx0LT50eXBlKCkgPT0gdHlwZSgpKTsKKworICAgIGNv
bnN0IE9wZW5TeXNjYWxsUmVzdWx0KiBvcGVuUmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgT3Bl
blN5c2NhbGxSZXN1bHQqPihyZXN1bHQpOworCisgICAgaWYgKG9wZW5SZXN1bHQtPmZkKCkgPj0g
MCkKKyAgICAgICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSBkdXAob3BlblJlc3Vs
dC0+ZmQoKSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0KCktPmdyZWdzW1JFR19TWVNDQUxM
XSA9IC1vcGVuUmVzdWx0LT5lcnJvck51bWJlcigpOworfQorCitQYXNzT3duUHRyPFN5c2NhbGxS
ZXN1bHQ+IE9wZW5TeXNjYWxsOjpleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkK
K3sKKyAgICBpZiAoIXN0cm5jbXAoIi9wcm9jL3NlbGYvIiwgbV9wYXRoLmRhdGEoKSwgMTEpKSB7
CisgICAgICAgIFN0cmluZyByZXNvbHZlZFNlbGZQYXRoID0gQVNDSUlMaXRlcmFsKCIvcHJvYy8i
KSArIFN0cmluZzo6bnVtYmVyKGdldHBwaWQoKSkgKyAmbV9wYXRoLmRhdGEoKVsxMF07CisgICAg
ICAgIG1fcGF0aCA9IHJlc29sdmVkU2VsZlBhdGgudXRmOCgpLmRhdGEoKTsKKyAgICB9CisKKyAg
ICBTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uIHBlcm1pc3Npb24gPSBTeXNjYWxsUG9saWN5OjpO
b3RBbGxvd2VkOworICAgIGlmIChtX2ZsYWdzICYgT19SRFdSKQorICAgICAgICBwZXJtaXNzaW9u
ID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5
c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZWxzZSBpZiAobV9mbGFncyAmIE9fV1JP
TkxZKQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVy
bWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKKyAgICBlbHNlCisg
ICAgICAgIHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9u
PihwZXJtaXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisKKyAgICAvLyBDcmVhdGUgYSBm
aWxlIGltcGxpZXMgd3JpdGUgcGVybWlzc2lvbiBvbiB0aGUgZGlyZWN0b3J5LgorICAgIGlmICht
X2ZsYWdzICYgT19DUkVBVCB8fCBtX2ZsYWdzICYgT19FWENMKQorICAgICAgICBwZXJtaXNzaW9u
ID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5
c2NhbGxQb2xpY3k6OldyaXRlKTsKKworICAgIGlmICghcG9saWN5Lmhhc1Blcm1pc3Npb25Gb3JQ
YXRoKG1fcGF0aC5kYXRhKCksIHBlcm1pc3Npb24pKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE9wZW5TeXNjYWxsUmVzdWx0KC0xLCBFQUNDRVMpKTsKKworICAgIC8vIFBlcm1pc3Npb24g
Z3JhbnRlZCwgZXhlY3V0ZSB0aGUgc3lzY2FsbC4gVGhlIHN5c2NhbGwgbWlnaHQgc3RpbGwKKyAg
ICAvLyBmYWlsIGJlY2F1c2Ugb2YgaGFyZCBwZXJtaXNzaW9ucyBlbmZvcmNlZCBieSB0aGUgZmls
ZXN5c3RlbSBhbmQKKyAgICAvLyB0aGluZ3MgbGlrZSB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3Qu
CisgICAgaW50IGZkID0gb3BlbihtX3BhdGguZGF0YSgpLCBtX2ZsYWdzLCBtX21vZGUpOworICAg
IGludCBlcnJvck51bWJlciA9IGZkID09IC0xID8gZXJybm8gOiAwOworCisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdChmZCwgZXJyb3JOdW1iZXIpKTsKK30KKwordm9p
ZCBPcGVuU3lzY2FsbDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyLmVuY29kZSh0eXBlKCkpOworICAgIGVuY29kZXIuZW5jb2Rl
KG1fcGF0aCk7CisgICAgZW5jb2Rlci5lbmNvZGUobV9mbGFncyk7CisgICAgZW5jb2Rlci5lbmNv
ZGUobV9tb2RlKTsKK30KKworYm9vbCBPcGVuU3lzY2FsbDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlcikKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShtX3BhdGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9mbGFn
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUo
bV9tb2RlKTsKK30KKworT3BlblN5c2NhbGxSZXN1bHQ6Ok9wZW5TeXNjYWxsUmVzdWx0KGludCBm
ZCwgaW50IGVycm9yTnVtYmVyKQorICAgIDogU3lzY2FsbFJlc3VsdChfX05SX29wZW4pCisgICAg
LCBtX2ZkKGZkKQorICAgICwgbV9lcnJvck51bWJlcihlcnJvck51bWJlcikKK3sKK30KKworT3Bl
blN5c2NhbGxSZXN1bHQ6On5PcGVuU3lzY2FsbFJlc3VsdCgpCit7CisgICAgaWYgKG1fZmQgPj0g
MCkKKyAgICAgICAgY2xvc2UobV9mZCk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGxSZXN1bHQ6OmVu
Y29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2Rlci5lbmNvZGUodHlwZSgpKTsKKworICAgIGlmIChtX2ZkID49IDApIHsKKyAgICAgICAgQ29y
ZUlQQzo6QXR0YWNobWVudCBhdHRhY2htZW50KG1fZmQpOworICAgICAgICBlbmNvZGVyLmFkZEF0
dGFjaG1lbnQoYXR0YWNobWVudCk7CisgICAgfQorCisgICAgZW5jb2Rlci5lbmNvZGUobV9lcnJv
ck51bWJlcik7Cit9CisKK2Jvb2wgT3BlblN5c2NhbGxSZXN1bHQ6OmRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIGludCBmZCkKK3sKKyAgICBpZiAoZmQgPj0gMCkKKyAg
ICAgICAgbV9mZCA9IGZkOworCisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShtX2Vycm9yTnVt
YmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzAzNTg4ZTQ2ZjYyN2M0
OGM4NzYwMjUwYTc2MjQ2NDk3NjI2NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcGVuU3lzY2FsbF9oCisjZGVmaW5l
IE9wZW5TeXNjYWxsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRl
ICJTeXNjYWxsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
Q29yZUlQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1bWVudEVuY29kZXI7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBPcGVuU3lzY2FsbCA6IHB1YmxpYyBT
eXNjYWxsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVG
cm9tT3BlbmF0Q29udGV4dChtY29udGV4dF90Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lz
Y2FsbD4gY3JlYXRlRnJvbUNyZWF0Q29udGV4dChtY29udGV4dF90Kik7CisKKyAgICBleHBsaWNp
dCBPcGVuU3lzY2FsbChtY29udGV4dF90Kik7CisKKyAgICB2b2lkIHNldFBhdGgoY29uc3QgQ1N0
cmluZyYgcGF0aCkgeyBtX3BhdGggPSBwYXRoOyB9OworICAgIHZvaWQgc2V0RmxhZ3MoY29uc3Qg
aW50IGZsYWdzKSB7IG1fZmxhZ3MgPSBmbGFnczsgfTsKKyAgICB2b2lkIHNldE1vZGUoY29uc3Qg
bW9kZV90IG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfTsKKworICAgIC8vIFN5c2NhbGwgaW1wbGVt
ZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0
Kik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IGV4ZWN1dGUoY29uc3Qg
U3lzY2FsbFBvbGljeSYpOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKworcHJpdmF0ZToKKyAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICBpbnQg
bV9mbGFnczsKKyAgICBtb2RlX3QgbV9tb2RlOworfTsKKworY2xhc3MgT3BlblN5c2NhbGxSZXN1
bHQgOiBwdWJsaWMgU3lzY2FsbFJlc3VsdCB7CitwdWJsaWM6CisgICAgT3BlblN5c2NhbGxSZXN1
bHQoaW50IGZkLCBpbnQgZXJyb3JOdW1iZXIpOworICAgIH5PcGVuU3lzY2FsbFJlc3VsdCgpOwor
CisgICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gbV9mZDsgfQorICAgIGludCBlcnJvck51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JOdW1iZXI7IH0KKworICAgIC8vIFN5c2NhbGxSZXN1
bHQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciosIGludCBmZCk7CisKK3ByaXZhdGU6CisgICAgaW50IG1fZmQ7CisgICAg
aW50IG1fZXJyb3JOdW1iZXI7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIE9wZW5TeXNjYWxsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
ZWNjb21wQnJva2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmls
dGVycy9TZWNjb21wQnJva2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWEyNjQ4MGUwMjc1ZjhiYjI3YzJj
ZGYxNDAxODhhMjEwMzU4NmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCkBAIC0wLDAgKzEsMzc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEJyb2tl
ci5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzLmgiCisjaW5jbHVkZSAiU3lzY2FsbC5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisKKyNpZm5kZWYgU1lTX1NFQ0NPTVAKKyNkZWZpbmUgU1lTX1NFQ0NP
TVAgMQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2
Oworc3RhdGljIGNvbnN0IGNoYXIgY3B1Q291bnRQYXRoW10gPSAiL3N5cy9kZXZpY2VzL3N5c3Rl
bS9jcHUvb25saW5lIjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBCcm9r
ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBTZWNjb21wQnJva2VyQ2xpZW50JiBzaGFy
ZWQoaW50IHNvY2tldD0tMSk7CisgICAgflNlY2NvbXBCcm9rZXJDbGllbnQoKTsKKworICAgIHZv
aWQgZGlzcGF0Y2goU3lzY2FsbCopIGNvbnN0OworCisgICAgYm9vbCBoYW5kbGVJZk9wZW5pbmdD
UFVDb3VudChtY29udGV4dF90KikgY29uc3Q7CisgICAgYm9vbCBoYW5kbGVJZlRyeWluZ1RvQmxv
Y2tTeXNTaWduYWwodWNvbnRleHRfdCopIGNvbnN0OworCitwcml2YXRlOgorICAgIFNlY2NvbXBC
cm9rZXJDbGllbnQoaW50IHNvY2tldCk7CisKKyAgICBpbnQgbV9zb2NrZXQ7CisgICAgaW50IG1f
bmNwdXM7CisKKyAgICBtdXRhYmxlIE11dGV4IG1fc29ja2V0TG9jazsKK307CisKK3N0YXRpYyBz
c2l6ZV90IHNlbmRNZXNzYWdlKGludCBzb2NrZXQsIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBp
bnQgZmQ9LTEpCit7CisgICAgQVNTRVJUKHNpemUgPD0gbWVzc2FnZU1heFNpemUpOworCisgICAg
c3RydWN0IG1zZ2hkciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1l
c3NhZ2UpKTsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgbWVtc2V0KCZpb3YsIDAsIHNp
emVvZihpb3YpKTsKKyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuID0g
c2l6ZTsKKworICAgIG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92
bGVuID0gMTsKKworICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKKyAg
ICBpZiAoZmQgPj0gMCkgeworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gY29udHJvbDsK
KyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKKyAgICAg
ICAgbWVtc2V0KG1lc3NhZ2UubXNnX2NvbnRyb2wsIDAsIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4p
OworCisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhEUigmbWVzc2Fn
ZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOworICAgICAgICBjbXNn
LT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IENNU0df
TEVOKHNpemVvZihmZCkpOworCisgICAgICAgIG1lbW1vdmUoQ01TR19EQVRBKGNtc2cpLCAmZmQs
IHNpemVvZihmZCkpOworICAgIH0KKworICAgIHJldHVybiBzZW5kbXNnKHNvY2tldCwgJm1lc3Nh
Z2UsIDApOworfQorCitzdGF0aWMgc3NpemVfdCByZWNlaXZlTWVzc2FnZShpbnQgc29ja2V0LCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50KiBmZCA9IDApCit7CisgICAgc3RydWN0IG1zZ2hk
ciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKKwor
ICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsK
KyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKKworICAg
IG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKKwor
ICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKKyAgICBtZXNzYWdlLm1z
Z19jb250cm9sID0gY29udHJvbDsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9m
KGNvbnRyb2wpOworICAgIG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1z
Z19jb250cm9sbGVuKTsKKworICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY3Ztc2coc29j
a2V0LCAmbWVzc2FnZSwgMCk7CisKKyAgICBpZiAoZmQgJiYgcmVjZWl2ZWRCeXRlcyA+IDApIHsK
KyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsK
KyAgICAgICAgaWYgKGNtc2cgJiYgY21zZy0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNt
c2ctPmNtc2dfdHlwZSA9PSBTQ01fUklHSFRTKQorICAgICAgICAgICAgbWVtY3B5KGZkLCBDTVNH
X0RBVEEoY21zZyksIHNpemVvZigqZmQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmZk
ID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJlY2VpdmVkQnl0ZXMgPj0gMCA/IHJlY2VpdmVk
Qnl0ZXMgOiAtZXJybm87Cit9CisKK3N0YXRpYyB2b2lkIHN5c1NpZ25hbEhhbmRsZXIoaW50IHNp
Z25hbCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBkYXRhKQoreworICAgIGlmIChzaWduYWwgIT0g
U0lHU1lTIHx8IGluZm8tPnNpX2NvZGUgIT0gU1lTX1NFQ0NPTVApCisgICAgICAgIENSQVNIKCk7
CisKKyAgICB1Y29udGV4dF90KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KGRh
dGEpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIFNlY2NvbXBC
cm9rZXJDbGllbnQqIGNsaWVudCA9ICZTZWNjb21wQnJva2VyQ2xpZW50OjpzaGFyZWQoKTsKKwor
ICAgIGlmIChjbGllbnQtPmhhbmRsZUlmT3BlbmluZ0NQVUNvdW50KCZjb250ZXh0LT51Y19tY29u
dGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2xpZW50LT5oYW5kbGVJZlRyeWluZ1Rv
QmxvY2tTeXNTaWduYWwoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAgIE93blB0cjxT
eXNjYWxsPiBzeXNjYWxsID0gU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQoJmNvbnRleHQtPnVj
X21jb250ZXh0KTsKKyAgICBjbGllbnQtPmRpc3BhdGNoKHN5c2NhbGwuZ2V0KCkpOworfQorCitz
dGF0aWMgdm9pZCByZWdpc3RlclN5c1NpZ25hbEhhbmRsZXIoKQoreworICAgIHN0cnVjdCBzaWdh
Y3Rpb24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7Cisg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZzeXNTaWduYWxIYW5kbGVyOworICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9OT0RFRkVSOworCisgICAgaWYgKHNpZ2FjdGlvbihT
SUdTWVMsICZhY3Rpb24sIDApIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHNpZ3NldF90
IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywgU0lH
U1lTKTsKKworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApIDwgMCkK
KyAgICAgICAgQ1JBU0goKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudCYgU2VjY29tcEJyb2tl
ckNsaWVudDo6c2hhcmVkKGludCBzb2NrZXQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
ZWNjb21wQnJva2VyQ2xpZW50LCBicm9rZXJDbGllbnQsIChzb2NrZXQpKTsKKworICAgIHJldHVy
biBicm9rZXJDbGllbnQ7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBCcm9rZXJD
bGllbnQoaW50IHNvY2tldCkKKyAgICA6IG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fbmNwdXMo
b3BlbihjcHVDb3VudFBhdGgsIE9fUkRPTkxZKSkKK3sKKyAgICBBU1NFUlQobV9zb2NrZXQgPj0g
MCAmJiBtX25jcHVzID49IDApOworfQorCitTZWNjb21wQnJva2VyQ2xpZW50Ojp+U2VjY29tcEJy
b2tlckNsaWVudCgpCit7CisgICAgY2xvc2UobV9zb2NrZXQpOworICAgIGNsb3NlKG1fbmNwdXMp
OworfQorCit2b2lkIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmRpc3BhdGNoKFN5c2NhbGwqIHN5c2Nh
bGwpIGNvbnN0Cit7CisgICAgaWYgKCFzeXNjYWxsKQorICAgICAgICByZXR1cm47CisKKyAgICBP
d25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBlbmNvZGVyID0gQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoKnN5c2NhbGwpOworCisg
ICAgY2hhciBidWZmZXJbbWVzc2FnZU1heFNpemVdOworICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRl
cyA9IDA7CisgICAgaW50IGZkID0gLTE7CisKKyAgICBtX3NvY2tldExvY2subG9jaygpOworCisg
ICAgaWYgKHNlbmRNZXNzYWdlKG1fc29ja2V0LCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+
YnVmZmVyU2l6ZSgpKSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICByZWNlaXZlZEJ5dGVzID0gcmVjZWl2ZU1lc3NhZ2UobV9zb2NrZXQsICZidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAmZmQpOworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA+IDAp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyAhPSAtRUlO
VFIpCisgICAgICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIG1fc29ja2V0TG9jay51bmxv
Y2soKTsKKworICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudERlY29kZXI+IGRlY29kZXIgPSBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXI6OmNyZWF0ZSgoY29uc3QgdWludDhfdCopIGJ1ZmZlciwg
cmVjZWl2ZWRCeXRlcyk7CisgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IFN5c2Nh
bGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVyKGRlY29kZXIuZ2V0KCksIGZkKTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHN5c2NhbGwtPnNldFJlc3VsdChyZXN1
bHQuZ2V0KCkpOworfQorCitib29sIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmT3Blbmlu
Z0NQVUNvdW50KG1jb250ZXh0X3QqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRleHQt
PmdyZWdzW1JFR19TWVNDQUxMXSAhPSBfX05SX29wZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNvbnN0IGNoYXIgKnBhdGggPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0
LT5ncmVnc1tSRUdfQVJHMF0pOworICAgIGlmIChzdHJjbXAoY3B1Q291bnRQYXRoLCBwYXRoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTWFsbG9jIHdpbGwgc29tZXRpbWVzIGNo
ZWNrIHRoZSBudW1iZXIgb2YgQ1BVcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0KKyAgICAvLyBieSBv
cGVuaW5nIGEgc3BlY2lhbCBmaWxlLiBJZiBpdCBkb2VzIHRoYXQgaW4gdGhlIG1pZGRsZSBvZiB0
aGUgU0lHU1lTCisgICAgLy8gc2lnbmFsIGhhbmRsZXIsIGl0IG1pZ2h0IHRyaWdnZXIgYSByZWN1
cnNpdmUgYXR0ZW1wdCBvZiBwcm94eWluZyB0aGUKKyAgICAvLyBvcGVuKCkgc3lzY2FsbCB0byB0
aGUgYnJva2VyLiBCZWNhdXNlIG9mIHRoYXQsIHdlIGNhY2hlIHRoaXMgcmVzb3VyY2UuCisgICAg
Y29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExdID0gZHVwKG1fbmNwdXMpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZUcnlpbmdUb0Js
b2NrU3lzU2lnbmFsKHVjb250ZXh0X3QqIHVjb250ZXh0KSBjb25zdAoreworICAgIC8vIFdlIHNo
b3VsZCBwcm9iYWJseSBkbyB0aGUgc2FtZSB0aGluZyBpZiBhIHByb2Nlc3MgdHJpZXMgdG8gb3Zl
cnJpZGUgdGhlCisgICAgLy8gU0lHU1lTIHNpZ25hbCBoYW5kbGUsIGJ1dCB0aGlzIGlzIHZlcnkg
dW5saWtlbHkgdG8gaGFwcGVuLgorICAgIGJvb2wgc2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAg
bWNvbnRleHRfdCBtY29udGV4dCA9IHVjb250ZXh0LT51Y19tY29udGV4dDsKKyNpZiBDUFUoWDg2
KQorICAgIGlmIChtY29udGV4dC5ncmVnc1tSRUdfU1lTQ0FMTF0gPT0gX19OUl9zaWdwcm9jbWFz
aykKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChtY29udGV4
dC5ncmVnc1tSRUdfU1lTQ0FMTF0gPT0gX19OUl9ydF9zaWdwcm9jbWFzaykKKyAgICAgICAgc2hv
dWxkSGFuZGxlID0gdHJ1ZTsKKworICAgIGlmICghc2hvdWxkSGFuZGxlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpbnQgaG93ID0gbWNvbnRleHQuZ3JlZ3NbUkVHX0FSRzBdOworICAg
IHNpZ3NldF90KiBzZXQgPSByZWludGVycHJldF9jYXN0PHNpZ3NldF90Kj4obWNvbnRleHQuZ3Jl
Z3NbUkVHX0FSRzFdKTsKKyAgICBzaWdzZXRfdCogb2xkU2V0ID0gcmVpbnRlcnByZXRfY2FzdDxz
aWdzZXRfdCo+KG1jb250ZXh0LmdyZWdzW1JFR19BUkcyXSk7CisKKyAgICBpZiAob2xkU2V0KQor
ICAgICAgICBtZW1jcHkob2xkU2V0LCAmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNpemVvZihzaWdz
ZXRfdCkpOworCisgICAgaWYgKGhvdyA9PSBTSUdfU0VUTUFTSykKKyAgICAgICAgbWVtY3B5KCZ1
Y29udGV4dC0+dWNfc2lnbWFzaywgc2V0LCBzaXplb2Yoc2lnc2V0X3QpKTsKKyAgICBlbHNlCisg
ICAgICAgIHNpZ29yc2V0KCZ1Y29udGV4dC0+dWNfc2lnbWFzaywgc2V0LCAmdWNvbnRleHQtPnVj
X3NpZ21hc2spOworCisgICAgc2lnZGVsc2V0KCZ1Y29udGV4dC0+dWNfc2lnbWFzaywgU0lHU1lT
KTsKKyAgICBtY29udGV4dC5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAwOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlcjo6bGF1bmNoUHJvY2VzcyhTZWNjb21wRmlsdGVy
cyogZmlsdGVycywgY29uc3QgU3lzY2FsbFBvbGljeSYgcG9saWN5KQoreworICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGUgc2lncHJvY21hc2sgZmlsdGVycyBiZWxsb3cgYXJlIG5lZWRl
ZCBieSBoYW5kbGVJZlRyeWluZ1RvQmxvY2tTeXNTaWduYWwoKQorICAgIC8vIHNvIHdlIGNhbiBw
cmV2ZW50IHRoZSBydW5uaW5nIHByb2Nlc3NlcyBmcm9tIGJsb2NraW5nIFNJR1NZUy4KKyNpZiBD
UFUoWDg2KQorICAgIGZpbHRlcnMtPmFkZFJ1bGUoInNpZ3Byb2NtYXNrIiwgU2VjY29tcEZpbHRl
cnM6OlRyYXAsCisgICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX0JMT0NLLAor
ICAgICAgICAxLCBTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwsIDApOworICAgIGZpbHRlcnMtPmFk
ZFJ1bGUoInNpZ3Byb2NtYXNrIiwgU2VjY29tcEZpbHRlcnM6OlRyYXAsCisgICAgICAgIDAsIFNl
Y2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX1NFVE1BU0ssCisgICAgICAgIDEsIFNlY2NvbXBGaWx0
ZXJzOjpOb3RFcXVhbCwgMCk7CisjZW5kaWYKKyAgICBmaWx0ZXJzLT5hZGRSdWxlKCJydF9zaWdw
cm9jbWFzayIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNjb21wRmlsdGVy
czo6RXF1YWwsIFNJR19CTE9DSywKKyAgICAgICAgMSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFs
LCAwKTsKKyAgICBmaWx0ZXJzLT5hZGRSdWxlKCJydF9zaWdwcm9jbWFzayIsIFNlY2NvbXBGaWx0
ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNjb21wRmlsdGVyczo6RXF1YWwsIFNJR19TRVRNQVNL
LAorICAgICAgICAxLCBTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwsIDApOworCisgICAgU2VjY29t
cEJyb2tlciBzZWNjb21wQnJva2VyOworICAgIHNlY2NvbXBCcm9rZXIuc2V0U3lzY2FsbFBvbGlj
eShwb2xpY3kpOworICAgIHNlY2NvbXBCcm9rZXIuaW5pdGlhbGl6ZSgpOworCisgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOworfQorCit2b2lkIFNlY2NvbXBCcm9rZXI6OmluaXRpYWxpemUoKQorewor
ICAgIGludCBzb2NrZXRzWzJdOworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RS
RUFNLCAwLCBzb2NrZXRzKSA8IDApCisgICAgICAgIENSQVNIKCk7CisKKyAgICBwaWRfdCBwaWQg
PSBmb3JrKCk7CisgICAgaWYgKHBpZCkgeyAvLyBXZWJQcm9jZXNzLgorICAgICAgICBjbG9zZShz
b2NrZXRzWzFdKTsKKyAgICAgICAgU2VjY29tcEJyb2tlckNsaWVudDo6c2hhcmVkKHNvY2tldHNb
MF0pOworICAgICAgICByZWdpc3RlclN5c1NpZ25hbEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgeyAv
LyBCcm9rZXIuCisgICAgICAgIC8vIFRPRE86IFRoZSBicm9rZXIgc2hvdWxkIHNldHVwIHNlY2Nv
bXAgZmlsdGVycworICAgICAgICAvLyBmb3IgaXRzZWxmIGFuZCBibG9jayBldmVyeXRoaW5nIGVs
c2Ugb3RoZXIgdGhhbgorICAgICAgICAvLyB0aGUgbWluaW1hbCBzZXQgb2Ygc3lzY2FsbHMgbmVl
ZGVkIHRvIGV4ZWN1dGUgdGhlCisgICAgICAgIC8vIHN5c2NhbGxzIGl0IGlzIHN1cHBvc2UgdG8g
cHJveHkuCisgICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOworICAgICAgICBydW5Mb29wKHNvY2tl
dHNbMV0pOworICAgIH0KK30KKworTk9fUkVUVVJOIHZvaWQgU2VjY29tcEJyb2tlcjo6cnVuTG9v
cChpbnQgc29ja2V0KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgaSA9IFNUREVSUl9GSUxF
Tk8gKyAxOworI2Vsc2UKKyAgICBpbnQgaSA9IDA7CisjZW5kaWYKKyAgICAvLyBDbG9zZSBhbGwg
aW5oZXJpdGVkIGZpbGUgZGVzY3JpcHRvcnMgb3RoZXIKKyAgICAvLyB0aGFuIHRoZSBzb2NrZXQg
dG8gdGhlIHNhbmRib3hlZCBwcm9jZXNzLgorICAgIGZvciAoOyBpIDwgRkRfU0VUU0laRTsgKytp
KQorICAgICAgICBpZiAoaSAhPSBzb2NrZXQpCisgICAgICAgICAgICBjbG9zZShpKTsKKworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKKyAg
ICAgICAgc3NpemVfdCByZWNlaXZlZEJ5dGVzID0gcmVjZWl2ZU1lc3NhZ2Uoc29ja2V0LCAmYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzID09IC1FSU5U
UikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzIDw9
IDApCisgICAgICAgICAgICBleGl0KHJlY2VpdmVkQnl0ZXMgPyBFWElUX0ZBSUxVUkUgOiBFWElU
X1NVQ0NFU1MpOworCisgICAgICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudERlY29kZXI+IGRl
Y29kZXIgPSBDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6OmNyZWF0ZSgoY29uc3QgdWludDhfdCop
IGJ1ZmZlciwgcmVjZWl2ZWRCeXRlcyk7CisgICAgICAgIE93blB0cjxTeXNjYWxsPiBzeXNjYWxs
ID0gU3lzY2FsbDo6Y3JlYXRlRnJvbURlY29kZXIoZGVjb2Rlci5nZXQoKSk7CisgICAgICAgIGlm
ICghc3lzY2FsbCkKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKworICAgICAgICBP
d25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0ID0gc3lzY2FsbC0+ZXhlY3V0ZShtX3BvbGljeSk7
CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwor
CisgICAgICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IGVuY29kZXIgPSBDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXI6OmNyZWF0ZSgpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
KnJlc3VsdCk7CisKKyAgICAgICAgVmVjdG9yPENvcmVJUEM6OkF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnRzID0gZW5jb2Rlci0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgICAgIGludCBmZCA9IGF0
dGFjaG1lbnRzLnNpemUoKSA9PSAxID8gYXR0YWNobWVudHNbMF0uZmlsZURlc2NyaXB0b3IoKSA6
IC0xOworCisgICAgICAgIC8vIFRoZSBjbGllbnQgaXMgZG93biwgdGhlIGJyb2tlciBzaG91bGQg
Z28gYXdheS4KKyAgICAgICAgaWYgKHNlbmRNZXNzYWdlKHNvY2tldCwgZW5jb2Rlci0+YnVmZmVy
KCksIGVuY29kZXItPmJ1ZmZlclNpemUoKSwgZmQpIDwgMCkKKyAgICAgICAgICAgIGV4aXQoRVhJ
VF9TVUNDRVNTKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE3NWM4NmI3NGU3ZjdlMjQ5NjFjODc4Y2E2YTI3YzA1NGNlZjg4NjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJy
b2tlci5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Vj
Y29tcEJyb2tlcl9oCisjZGVmaW5lIFNlY2NvbXBCcm9rZXJfaAorCisjaWYgRU5BQkxFKFNFQ0NP
TVBfRklMVEVSUykKKworI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisjaW5jbHVkZSAiU3lz
Y2FsbC5oIgorI2luY2x1ZGUgIlN5c2NhbGxQb2xpY3kuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
U2VjY29tcEJyb2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjY29tcEJyb2tlcik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBsYXVuY2hQcm9jZXNzKFNlY2NvbXBGaWx0ZXJz
KiwgY29uc3QgU3lzY2FsbFBvbGljeSYpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
dm9pZCBzZXRTeXNjYWxsUG9saWN5KGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkgeyBtX3Bv
bGljeSA9IHBvbGljeTsgfQorCitwcml2YXRlOgorICAgIFNlY2NvbXBCcm9rZXIoKSB7IH0KKwor
ICAgIHZvaWQgcnVuTG9vcChpbnQgc29ja2V0KTsKKworICAgIFN5c2NhbGxQb2xpY3kgbV9wb2xp
Y3k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUND
T01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wQnJva2VyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZp
bHRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0OTFiZDE2N2QxZDMxODE5YTZjYWNjNGQxYmRiMDBkNTBj
M2JiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRl
cnMuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNjb21w
QnJva2VyLmgiCisjaW5jbHVkZSA8c2VjY29tcC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVy
czo6QWxsb3cgPT0gU0NNUF9BQ1RfQUxMT1csIEFsbG93KTsKK0NPTVBJTEVfQVNTRVJUKFNlY2Nv
bXBGaWx0ZXJzOjpLaWxsID09IFNDTVBfQUNUX0tJTEwsIEtpbGwpOworQ09NUElMRV9BU1NFUlQo
U2VjY29tcEZpbHRlcnM6OlRyYXAgPT0gU0NNUF9BQ1RfVFJBUCwgVHJhcCk7CisKK0NPTVBJTEVf
QVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpOb3RTZXQgPT0gc3RhdGljX2Nhc3Q8U2VjY29tcEZpbHRl
cnM6Ok9wZXJhdG9yPihfU0NNUF9DTVBfTUlOKSwgTm90U2V0KTsKK0NPTVBJTEVfQVNTRVJUKFNl
Y2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCA9PSBzdGF0aWNfY2FzdDxTZWNjb21wRmlsdGVyczo6T3Bl
cmF0b3I+KFNDTVBfQ01QX05FKSwgTm90RXF1YWwpOworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZp
bHRlcnM6OkVxdWFsID09IHN0YXRpY19jYXN0PFNlY2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oU0NN
UF9DTVBfRVEpLCBFcXVhbCk7CisKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihzY21wX2RhdHVtX3Qp
ID09IHNpemVvZihsb25nIGxvbmcpLCBzY21wX2RhdHVtX3QpOworCitTZWNjb21wRmlsdGVyczo6
U2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pCisgICAgOiBtX2NvbnRleHQoc2Vj
Y29tcF9pbml0KGRlZmF1bHRBY3Rpb24pKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sK
KyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworU2VjY29tcEZpbHRl
cnM6On5TZWNjb21wRmlsdGVycygpCit7CisgICAgc2VjY29tcF9yZWxlYXNlKG1fY29udGV4dCk7
Cit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUoY29uc3QgY2hhciogc3lzY2FsbE5h
bWUsIEFjdGlvbiBhY3Rpb24sCisgICAgdW5zaWduZWQgYXJnTnVtMSwgT3BlcmF0b3Igb3BlcmF0
b3IxLCBsb25nIGxvbmcgZGF0YTEsCisgICAgdW5zaWduZWQgYXJnTnVtMiwgT3BlcmF0b3Igb3Bl
cmF0b3IyLCBsb25nIGxvbmcgZGF0YTIpCit7CisgICAgaW50IHN5c2NhbGwgPSBzZWNjb21wX3N5
c2NhbGxfcmVzb2x2ZV9uYW1lKHN5c2NhbGxOYW1lKTsKKyAgICBpZiAoc3lzY2FsbCA9PSBfX05S
X1NDTVBfRVJST1IpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpbnQgcmVzdWx0OworICAgIGlm
IChvcGVyYXRvcjIgIT0gTm90U2V0KQorICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRk
KG1fY29udGV4dCwgYWN0aW9uLCBzeXNjYWxsLCAyLAorICAgICAgICAgICAgU0NNUF9DTVAoYXJn
TnVtMSwgc3RhdGljX2Nhc3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjEpLCBkYXRhMSwgMCksCisg
ICAgICAgICAgICBTQ01QX0NNUChhcmdOdW0yLCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9w
ZXJhdG9yMiksIGRhdGEyLCAwKSk7CisgICAgZWxzZSBpZiAob3BlcmF0b3IxICE9IE5vdFNldCkK
KyAgICAgICAgcmVzdWx0ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwgc3lz
Y2FsbCwgMSwKKyAgICAgICAgICAgIFNDTVBfQ01QKGFyZ051bTEsIHN0YXRpY19jYXN0PHNjbXBf
Y29tcGFyZT4ob3BlcmF0b3IxKSwgZGF0YTEsIDApKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3Vs
dCA9IHNlY2NvbXBfcnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDApOworCisg
ICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIENSQVNIKCk7Cit9CisKK3ZvaWQgU2VjY29tcEZp
bHRlcnM6OmluaXRpYWxpemUoKQoreworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJbXBsZW1lbnQgdGhpcyBpcyBub3QgcmVxdWlyZWQgaW4gY2FzZSB3
ZSBhcmUganVzdAorICAgIC8vIHNldHRpbmcgZmlsdGVycy4gVGhpcyBpcyBhIGdvb2QgcGxhY2Ug
dG8gY3JlYXRlIHRoZQorICAgIC8vIGJyb2tlciBhbmQgc3lzY2FsbCBwb2xpY3kgb3RoZXJ3aXNl
LgorICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgaWYgKHNlY2NvbXBfbG9hZChtX2Nv
bnRleHQpIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01Q
X0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9T
ZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0OWUxZmI2MmU2ZDgw
MzY1ZjFhMmE5MDZjOTU3NGVkYWRlOGY0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuaApAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBGaWx0ZXJzX2gK
KyNkZWZpbmUgU2VjY29tcEZpbHRlcnNfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgU2VjY29tcEZpbHRlcnMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlY2NvbXBG
aWx0ZXJzKTsKKworcHVibGljOgorICAgIGVudW0gQWN0aW9uIHsKKyAgICAgICAgQWxsb3cgPSAw
eDdmZmYwMDAwVSwKKyAgICAgICAgS2lsbCAgPSAweDAwMDAwMDAwVSwKKyAgICAgICAgVHJhcCAg
PSAweDAwMDMwMDAwVQorICAgIH07CisKKyAgICBlbnVtIE9wZXJhdG9yIHsKKyAgICAgICAgTm90
U2V0ICAgPSAwLAorICAgICAgICBOb3RFcXVhbCA9IDEsCisgICAgICAgIEVxdWFsICAgID0gNAor
ICAgIH07CisKKyAgICBleHBsaWNpdCBTZWNjb21wRmlsdGVycyhBY3Rpb24gZGVmYXVsdEFjdGlv
bik7CisgICAgdmlydHVhbCB+U2VjY29tcEZpbHRlcnMoKTsKKworICAgIHZvaWQqIGNvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH07CisKKyAgICB2b2lkIGFkZFJ1bGUoY29uc3QgY2hhciog
c3lzY2FsbE5hbWUsIEFjdGlvbiwKKyAgICAgICAgdW5zaWduZWQgYXJnTnVtMSA9IDAsIE9wZXJh
dG9yIG9wZXJhdG9yMSA9IE5vdFNldCwgbG9uZyBsb25nIGRhdGExID0gMCwKKyAgICAgICAgdW5z
aWduZWQgYXJnTnVtMiA9IDAsIE9wZXJhdG9yIG9wZXJhdG9yMiA9IE5vdFNldCwgbG9uZyBsb25n
IGRhdGEyID0gMCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCkgeyB9CisKKyAgICB0eXBlZGVmIHZvaWQg
KkhBTkRMRTsKKworICAgIEhBTkRMRSBtX2NvbnRleHQ7CisgICAgYm9vbCBtX2luaXRpYWxpemVk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFkZTgwMmIwZDE2OTMyYjA2MTliM2NkYjU5NmY2NmE0MWUyZTY1NjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lz
Y2FsbC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9G
SUxURVJTKQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJPcGVuU3lz
Y2FsbC5oIgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bh
c3NPd25QdHI8U3lzY2FsbD4gU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQobWNvbnRleHRfdCog
Y29udGV4dCkKK3sKKyAgICBzd2l0Y2ggKGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSkgewor
ICAgIGNhc2UgX19OUl9vcGVuOgorICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5TeXNj
YWxsKGNvbnRleHQpKTsKKyAgICBjYXNlIF9fTlJfb3BlbmF0OgorICAgICAgICByZXR1cm4gT3Bl
blN5c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KGNvbnRleHQpOworICAgIGNhc2UgX19O
Ul9jcmVhdDoKKyAgICAgICAgcmV0dXJuIE9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tQ3JlYXRDb250
ZXh0KGNvbnRleHQpOworICAgIGRlZmF1bHQ6CisjaWZuZGVmIE5ERUJVRworICAgICAgICBjaGFy
KiBzeXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbnVtX2FyY2goU0NNUF9BUkNIX05B
VElWRSwgY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExdKTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTZWNjb21wQnJva2VyQ2xpZW50OiBzeXNjYWxsIG5vdCBoYW5kbGVkICclcycuXG4iLCBz
eXNjYWxsKTsKKyAgICAgICAgZnJlZShzeXNjYWxsKTsKKyNlbmRpZgorICAgICAgICBDUkFTSCgp
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzT3duUHRyPFN5c2NhbGw+
IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlcikKK3sKKyAgICBpbnQgdHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBPd25QdHI8U3lzY2FsbD4gc3lzY2FsbDsK
KyAgICBpZiAodHlwZSA9PSBfX05SX29wZW4pCisgICAgICAgIHN5c2NhbGwgPSBhZG9wdFB0cihu
ZXcgT3BlblN5c2NhbGwoMCkpOworCisgICAgaWYgKCFzeXNjYWxsLT5kZWNvZGUoZGVjb2Rlcikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN5c2NhbGwucmVsZWFzZSgp
OworfQorCitTeXNjYWxsOjpTeXNjYWxsKGludCB0eXBlLCBtY29udGV4dF90KiBjb250ZXh0KQor
ICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKK30KKworUGFz
c093blB0cjxTeXNjYWxsUmVzdWx0PiBTeXNjYWxsUmVzdWx0OjpjcmVhdGVGcm9tRGVjb2RlcihD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIGludCBmZCkKK3sKKyAgICBpbnQgdHlw
ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBPd25QdHI8U3lzY2FsbFJlc3VsdD4gcmVzdWx0OworICAgIGlmICh0eXBlID09
IF9fTlJfb3BlbikKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsUmVz
dWx0KC0xLCAwKSk7CisKKyAgICBpZiAoIXJlc3VsdC0+ZGVjb2RlKGRlY29kZXIsIGZkKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
KworU3lzY2FsbFJlc3VsdDo6U3lzY2FsbFJlc3VsdChpbnQgdHlwZSkKKyAgICA6IG1fdHlwZSh0
eXBlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2VjY29tcEZpbHRlcnMvU3lzY2FsbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL1N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2YxMDViMzAxNDc4ZDRkNDNlMDc5
NDc5OTM2OTRlZmUzYjI3OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuaApAQCAtMCwwICsxLDExMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTeXNjYWxsX2gKKyNkZWZpbmUgU3lzY2FsbF9oCisK
KyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaWYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUg
UkVHX1NZU0NBTEwgUkVHX1JBWAorI2RlZmluZSBSRUdfQVJHMCAgICBSRUdfUkRJCisjZGVmaW5l
IFJFR19BUkcxICAgIFJFR19SU0kKKyNkZWZpbmUgUkVHX0FSRzIgICAgUkVHX1JEWAorI2RlZmlu
ZSBSRUdfQVJHMyAgICBSRUdfUjEwCisjZWxpZiBDUFUoWDg2KQorI2RlZmluZSBSRUdfU1lTQ0FM
TCBSRUdfRUFYCisjZGVmaW5lIFJFR19BUkcwICAgIFJFR19FQlgKKyNkZWZpbmUgUkVHX0FSRzEg
ICAgUkVHX0VDWAorI2RlZmluZSBSRUdfQVJHMiAgICBSRUdfRURYCisjZGVmaW5lIFJFR19BUkcz
ICAgIFJFR19FU0kKKyNlbHNlCisjZXJyb3IgIkNQVSBub3Qgc3VwcG9ydGVkLiIKKyNlbmRpZgor
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNv
ZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3lzY2FsbFJlc3VsdDsKK2Ns
YXNzIFN5c2NhbGxQb2xpY3k7CisKK2NsYXNzIFN5c2NhbGwgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN5c2NhbGwpOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+U3lzY2FsbCgpIHsgfQor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lzY2FsbD4gY3JlYXRlRnJvbUNvbnRleHQobWNvbnRl
eHRfdCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGw+IGNyZWF0ZUZyb21EZWNvZGVy
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworCisgICAgaW50IHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKworICAgIHZvaWQgc2V0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0
KSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KKyAgICBtY29udGV4dF90KiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0KGNv
bnN0IFN5c2NhbGxSZXN1bHQqKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFN5c2NhbGxS
ZXN1bHQ+IGV4ZWN1dGUoY29uc3QgU3lzY2FsbFBvbGljeSYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopID0gMDsKKworcHJvdGVj
dGVkOgorICAgIFN5c2NhbGwoaW50IHR5cGUsIG1jb250ZXh0X3QqKTsKKworcHJpdmF0ZToKKyAg
ICBpbnQgbV90eXBlOworICAgIG1jb250ZXh0X3QqIG1fY29udGV4dDsKK307CisKK2NsYXNzIFN5
c2NhbGxSZXN1bHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN5c2NhbGxSZXN1bHQpOwor
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3lzY2FsbFJlc3VsdCgpIHsgfQorCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U3lzY2FsbFJlc3VsdD4gY3JlYXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiwgaW50IGZkKTsKKworICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciosIGludCBmZD0tMSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgU3lzY2FsbFJl
c3VsdChpbnQgdHlwZSk7CisKK3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2VuZGlmIC8vIFN5c2NhbGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4
MzU4YWUwMGZlNDNmZGQzNzliNDJhNDg1NWZmMzIyOTI5ZTU4N2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGlj
eS5jcHAKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisKKyNpZiBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgor
I2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9z
dGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFN0cmlu
ZyByZW1vdmVUcmFpbGluZ1NsYXNoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAocGF0
aC5lbmRzV2l0aCgnLycpKQorICAgICAgICByZXR1cm4gcGF0aC5sZWZ0KHBhdGgubGVuZ3RoKCkg
LSAxKTsKKworICAgIHJldHVybiBwYXRoOworfQorCitib29sIFN5c2NhbGxQb2xpY3k6Omhhc1Bl
cm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIFBlcm1pc3Npb24gcGVybWlzc2lvbikg
Y29uc3QKK3sKKyAgICAvLyBUaGUgcm9vdCBkaXJlY3RvcnkgcG9saWN5IG5lZWRzIHRvIGJlIHNl
dCBiZWNhdXNlIGl0IGlzIHRoZQorICAgIC8vIHVsdGltYXRlIGZhbGxiYWNrIHdoZW4gcmV3aW5k
aW5nIGRpcmVjdG9yaWVzLgorICAgIEFTU0VSVChtX2RpcmVjdG9yeVBlcm1pc3Npb24uY29udGFp
bnMoIi8iKSk7CisKKyAgICBpZiAocGVybWlzc2lvbiA9PSBOb3RBbGxvd2VkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjaGFyKiBiYXNlUGF0aCA9IHN0cmR1cChwYXRoKTsKKyAgICBj
aGFyKiBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShiYXNlUGF0aCk7CisK
KyAgICB3aGlsZSAoY2Fub25pY2FsUGF0aCkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBwYXRoU3Rh
dDsKKyAgICAgICAgaWYgKHN0YXQoY2Fub25pY2FsUGF0aCwgJnBhdGhTdGF0KSA9PSAtMSkgewor
ICAgICAgICAgICAgZnJlZShiYXNlUGF0aCk7CisgICAgICAgICAgICBmcmVlKGNhbm9uaWNhbFBh
dGgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KFNfSVNESVIocGF0aFN0YXQuc3RfbW9kZSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBQZXJtaXNzaW9uTWFwOjpjb25zdF9pdGVyYXRvciBwb2xpY3kgPSBtX2ZpbGVQZXJtaXNzaW9u
LmZpbmQoU3RyaW5nKGNhbm9uaWNhbFBhdGgpKTsKKyAgICAgICAgaWYgKHBvbGljeSAhPSBtX2Zp
bGVQZXJtaXNzaW9uLmVuZCgpKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgaWYgKChw
ZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgIT0gcGVybWlzc2lvbikKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlNlY2NvbXBCcm9rZXI6IGFjY2VzcyBkZW5pZWQgdG8gJXNcbiIs
IHBhdGgpOworI2VuZGlmCisgICAgICAgICAgICBmcmVlKGJhc2VQYXRoKTsKKyAgICAgICAgICAg
IGZyZWUoY2Fub25pY2FsUGF0aCk7CisgICAgICAgICAgICByZXR1cm4gKHBlcm1pc3Npb24gJiBw
b2xpY3ktPnZhbHVlKSA9PSBwZXJtaXNzaW9uOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
bm90IGEgZGlyZWN0b3J5IG5laXRoZXIgYSBmaWxlIHdpdGggYSBwb2xpY3kgZGVmaW5lZCwKKyAg
ICAgICAgLy8gd2Ugc2V0IGNhbm9uaWNhbFBhdGggdG8gemVybyB0byBmb3JjZSBhIHJld2luZCB0
byB0aGUgcGFyZW50CisgICAgICAgIC8vIGRpcmVjdG9yeS4KKyAgICAgICAgZnJlZShjYW5vbmlj
YWxQYXRoKTsKKyAgICAgICAgY2Fub25pY2FsUGF0aCA9IDA7CisgICAgfQorCisgICAgd2hpbGUg
KCFjYW5vbmljYWxQYXRoKSB7CisgICAgICAgIGNoYXIqIGN1cnJlbnRCYXNlRGlyZWN0b3J5ID0g
ZGlybmFtZShiYXNlUGF0aCk7CisgICAgICAgIGNhbm9uaWNhbFBhdGggPSBjYW5vbmljYWxpemVf
ZmlsZV9uYW1lKGN1cnJlbnRCYXNlRGlyZWN0b3J5KTsKKyAgICB9CisKKyAgICBQZXJtaXNzaW9u
TWFwOjpjb25zdF9pdGVyYXRvciBwb2xpY3kgPSBtX2RpcmVjdG9yeVBlcm1pc3Npb24uZmluZChT
dHJpbmcoY2Fub25pY2FsUGF0aCkpOworICAgIHdoaWxlIChwb2xpY3kgPT0gbV9kaXJlY3RvcnlQ
ZXJtaXNzaW9uLmVuZCgpKSB7CisgICAgICAgIGNoYXIqIGN1cnJlbnRCYXNlRGlyZWN0b3J5ID0g
ZGlybmFtZShjYW5vbmljYWxQYXRoKTsKKyAgICAgICAgcG9saWN5ID0gbV9kaXJlY3RvcnlQZXJt
aXNzaW9uLmZpbmQoU3RyaW5nKGN1cnJlbnRCYXNlRGlyZWN0b3J5KSk7CisgICAgfQorCisjaWZu
ZGVmIE5ERUJVRworICAgIGlmICgocGVybWlzc2lvbiAmIHBvbGljeS0+dmFsdWUpICE9IHBlcm1p
c3Npb24pCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VjY29tcEJyb2tlcjogYWNjZXNzIGRl
bmllZCB0byAlc1xuIiwgcGF0aCk7CisjZW5kaWYKKworICAgIGZyZWUoYmFzZVBhdGgpOworICAg
IGZyZWUoY2Fub25pY2FsUGF0aCk7CisKKyAgICByZXR1cm4gKHBlcm1pc3Npb24gJiBwb2xpY3kt
PnZhbHVlKSA9PSBwZXJtaXNzaW9uOworfQorCit2b2lkIFN5c2NhbGxQb2xpY3k6OmFkZEZpbGVQ
ZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgUGVybWlzc2lvbiBwZXJtaXNzaW9uKQorewor
ICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkgJiYgcGF0aC5zdGFydHNXaXRoKCcvJykgICYmICFw
YXRoLmVuZHNXaXRoKCcvJykgJiYgIXBhdGguY29udGFpbnMoIi8vIikpOworCisgICAgbV9maWxl
UGVybWlzc2lvbi5zZXQocGF0aCwgcGVybWlzc2lvbik7Cit9CisKK3ZvaWQgU3lzY2FsbFBvbGlj
eTo6YWRkRGlyZWN0b3J5UGVybWlzc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIFBlcm1pc3Npb24g
cGVybWlzc2lvbikKK3sKKyAgICBBU1NFUlQocGF0aC5zdGFydHNXaXRoKCcvJykgJiYgIXBhdGgu
Y29udGFpbnMoIi8vIikgJiYgKHBhdGgubGVuZ3RoKCkgPT0gMSB8fCAhcGF0aC5lbmRzV2l0aCgn
LycpKSk7CisKKyAgICBtX2RpcmVjdG9yeVBlcm1pc3Npb24uc2V0KHBhdGgsIHBlcm1pc3Npb24p
OworfQorCit2b2lkIFN5c2NhbGxQb2xpY3k6OmFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KGNv
bnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8g
RGlyZWN0b3JpZXMgc2V0dGluZ3MgY29taW5nIGZyb20gdGhlIFVJUHJvY2Vzcy4KKyAgICBpZiAo
IXBhcmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCByZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRl
cnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSksIFJlYWRBbmRXcml0ZSk7CisgICAgaWYgKCFw
YXJhbWV0ZXJzLmRhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgQUREX1BPTElD
WSh0aGlzLCBEaXJlY3RvcnksIHJlbW92ZVRyYWlsaW5nU2xhc2gocGFyYW1ldGVycy5kYXRhYmFz
ZURpcmVjdG9yeSksIFJlYWRBbmRXcml0ZSk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0
b3J5LCByZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
KSwgUmVhZEFuZFdyaXRlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKKyAgICAgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIHJlbW92ZVRy
YWlsaW5nU2xhc2gocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkpLCBSZWFkQW5kV3JpdGUp
OworICAgIGlmICghcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIHJlbW92ZVRyYWlsaW5nU2xhc2go
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5KSwgUmVhZEFuZFdyaXRlKTsKKyNpZiBV
U0UoU09VUCkKKyAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LmlzRW1wdHkoKSkKKyAgICAgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIHJlbW92ZVRy
YWlsaW5nU2xhc2gocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgpLCBSZWFk
QW5kV3JpdGUpOworI2VuZGlmCisKKyAgICAvLyBUaGUgcm9vdCBwb2xpY3kgd2lsbCBibG9jayBh
Y2Nlc3MgdG8gYW55IGRpcmVjdG9yeSBvcgorICAgIC8vIGZpbGUgdW5sZXNzIHdoaXRlIGxpc3Rl
ZCBiZWxsb3cgb3IgYnkgcGxhdGZvcm0uCisgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3Rvcnks
IEFTQ0lJTGl0ZXJhbCgiLyIpLCBOb3RBbGxvd2VkKTsKKworICAgIC8vIFNoYXJlZCBsaWJyYXJp
ZXMsIHBsdWdpbnMgYW5kIGZvbnRzLgorICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBB
U0NJSUxpdGVyYWwoIi9saWIiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3Rv
cnksIEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlz
LCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJhbCgiL3Vzci9zaGFyZSIpLCBSZWFkKTsKKworICAgIC8v
IFNTTCBDZXJ0aWZpY2F0ZXMuCisgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIEFTQ0lJ
TGl0ZXJhbCgiL2V0Yy9zc2wvY2VydHMiKSwgUmVhZCk7CisKKyAgICAvLyBGb250Y29uZmlnIGNh
Y2hlLgorICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9ldGMv
Zm9udHMiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIEFTQ0lJTGl0
ZXJhbCgiL3Zhci9jYWNoZS9mb250Y29uZmlnIiksIFJlYWQpOworCisgICAgLy8gQXVkaW8gZGV2
aWNlcywgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzLCBldGMuCisgICAgQUREX1BPTElDWSh0aGlz
LCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJhbCgiL2RldiIpLCBSZWFkQW5kV3JpdGUpOworCisgICAg
Ly8gVGVtcG9yYXJ5IGZpbGVzIGFuZCBwcm9jZXNzIHNlbGYgaW5mb3JtYXRpb24uCisgICAgQURE
X1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJhbCgiL3RtcCIpLCBSZWFkQW5kV3Jp
dGUpOworICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9wcm9j
LyIpICsgU3RyaW5nOjpudW1iZXIoZ2V0cGlkKCkpLCBSZWFkQW5kV3JpdGUpOworCisgICAgLy8g
SW4gc29tZSBkaXN0cm9zIC9kZXYvc2htIGlzIGEgc3ltYm9saWMgbGluayB0byAvcnVuL3NobSwg
YW5kIGluCisgICAgLy8gdGhpcyBjYXNlLCB0aGUgY2Fub25pY2FsIHBhdGggcmVzb2x2ZXIgd2ls
bCBmb2xsb3cgdGhlIGxpbmsuIElmCisgICAgLy8gaW5zaWRlIC9kZXYsIHRoZSBwb2xpY3kgaXMg
YWxyZWFkeSBzZXQuCisgICAgQUREX1BPTElDWSh0aGlzLCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJh
bCgiL3J1bi9zaG0iKSwgUmVhZEFuZFdyaXRlKTsKKworICAgIC8vIE5lZWRlZCBieSBnbGliYyBm
b3IgbmV0d29ya2luZyBhbmQgbG9jYWxlLgorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVND
SUlMaXRlcmFsKCIvZXRjL2dhaS5jb25mIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywg
RmlsZSwgQVNDSUlMaXRlcmFsKCIvZXRjL2hvc3QuY29uZiIpLCBSZWFkKTsKKyAgICBBRERfUE9M
SUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL2V0Yy9ob3N0cyIpLCBSZWFkKTsKKyAgICBB
RERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL2V0Yy9sb2NhbHRpbWUiKSwgUmVh
ZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9ldGMvbnNzd2l0
Y2guY29uZiIpLCBSZWFkKTsKKworICAgIC8vIE5lZWRlZCBmb3IgRE5TIHJlc29sdGlvbi4gSW4g
c29tZSBkaXN0cm9zLCB0aGUgcmVzb2x2LmNvbmYgaW5zaWRlCisgICAgLy8gL2V0YyBpcyBqdXN0
IGEgc3ltYm9saWMgbGluay4KKyAgICBBRERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJh
bCgiL2V0Yy9yZXNvbHYuY29uZiIpLCBSZWFkKQorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwg
QVNDSUlMaXRlcmFsKCIvcnVuL3Jlc29sdmNvbmYvcmVzb2x2LmNvbmYiKSwgUmVhZCkKKworICAg
IC8vIE5lZWRlZCB0byBjb252ZXJ0IHVpZCBhbmQgZ2lkIGludG8gbmFtZXMuCisgICAgQUREX1BP
TElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9ldGMvZ3JvdXAiKSwgUmVhZCk7CisgICAg
QUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9ldGMvcGFzc3dkIiksIFJlYWQp
OworCisgICAgLy8gTmVlZGVkIGJ5IHRoZSBsb2FkZXIuCisgICAgQUREX1BPTElDWSh0aGlzLCBG
aWxlLCBBU0NJSUxpdGVyYWwoIi9ldGMvbGQuc28uY2FjaGUiKSwgUmVhZCk7CisKKyAgICAvLyBO
ZWVkZWQgYnkgdmFyaW91cywgaW5jbHVkaW5nIHRvb2xraXRzLCBmb3Igb3B0aW1pemF0aW9ucyBi
YXNlZAorICAgIC8vIG9uIHRoZSBjdXJyZW50IGFtb3VudCBvZiBmcmVlIHN5c3RlbSBtZW1vcnku
CisgICAgQUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9wcm9jL2NwdWluZm8i
KSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9wcm9j
L2ZpbGVzeXN0ZW1zIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVNDSUlM
aXRlcmFsKCIvcHJvYy9tZW1pbmZvIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywgRmls
ZSwgQVNDSUlMaXRlcmFsKCIvcHJvYy9zdGF0IiksIFJlYWQpOworCisgICAgLy8gTmVlZGVkIGJ5
IEQtQnVzLgorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVNDSUlMaXRlcmFsKCIvdmFyL2xp
Yi9kYnVzL21hY2hpbmUtaWQiKSwgUmVhZCk7CisKKyAgICBjaGFyKiBob21lRGlyID0gZ2V0ZW52
KCJIT01FIik7CisgICAgaWYgKGhvbWVEaXIpIHsKKyAgICAgICAgLy8gWDExIGNvbm5lY3Rpb24g
dG9rZW4uCisgICAgICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgU3RyaW5nOjpmcm9tVVRGOCho
b21lRGlyKSArICIvLlhhdXRob3JpdHkiLCBSZWFkKTsKKyAgICAgICAgLy8gTWltZSB0eXBlIHJl
c29sdXRpb24uCisgICAgICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBTdHJpbmc6OmZy
b21VVEY4KGhvbWVEaXIpICsgICIvLmxvY2FsL3NoYXJlL21pbWUiLCBSZWFkKTsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmls
dGVycy9TeXNjYWxsUG9saWN5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvU3lzY2FsbFBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5Y2M5YzdkMmY2ZmZjMjI5ZDE5
NGRhZTk4MDBjZjkyOGI1NWFmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5oCkBAIC0wLDAgKzEsNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzY2FsbFBvbGljeV9oCisjZGVmaW5l
IFN5c2NhbGxQb2xpY3lfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjZGVmaW5lIFBPTElDWSh1bmlxdWVQb2xp
Y3ksIGlkKSB1bmlxdWVQb2xpY3kjI2lkCisjZGVmaW5lIFVOSVFVRV9QT0xJQ1koaWQpIFBPTElD
WSh1bmlxdWVQb2xpY3ksIGlkKQorI2RlZmluZSBBRERfUE9MSUNZKHBvbGljeSwgcG9saWN5VHlw
ZSwgcGF0aCwgcGVybWlzc2lvbikgeyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IFVOSVFVRV9QT0xJQ1koX19MSU5FX18pLCAocGF0aCkpOyBcCisgICAgKHBvbGljeSktPmFkZCMj
cG9saWN5VHlwZSMjUGVybWlzc2lvbihVTklRVUVfUE9MSUNZKF9fTElORV9fKSwgU3lzY2FsbFBv
bGljeTo6cGVybWlzc2lvbik7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CisKK2NsYXNzIFN5c2NhbGxQb2xpY3kgeworcHVibGlj
OgorICAgIGVudW0gUGVybWlzc2lvbiB7CisgICAgICAgIE5vdEFsbG93ZWQgICA9IDAsCisgICAg
ICAgIFJlYWQgICAgICAgICA9IDEsCisgICAgICAgIFdyaXRlICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgUmVhZEFuZFdyaXRlID0gUmVhZCB8IFdyaXRlCisgICAgfTsKKworICAgIGJvb2wgaGFz
UGVybWlzc2lvbkZvclBhdGgoY29uc3QgY2hhciogcGF0aCwgUGVybWlzc2lvbikgY29uc3Q7CisK
KyAgICB2b2lkIGFkZEZpbGVQZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgUGVybWlzc2lv
bik7CisgICAgdm9pZCBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwg
UGVybWlzc2lvbik7CisKKyAgICB2b2lkIGFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KGNvbnN0
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFBlcm1pc3Npb25NYXA7CisgICAgUGVybWlzc2lvbk1hcCBt
X2ZpbGVQZXJtaXNzaW9uOworICAgIFBlcm1pc3Npb25NYXAgbV9kaXJlY3RvcnlQZXJtaXNzaW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09N
UF9GSUxURVJTKQorCisjZW5kaWYgLy8gU3lzY2FsbFBvbGljeV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBj
NmUzMTYyZmY5ODRlZTE1OGIzNDYzZGVhMzg2M2U1NTlkMjUzYmM2Li44ZjVkY2MwNTZkOTZjMjcy
MzE3ZjQ2YWVkOWQ5YTM0ZWRjNjFhMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTg4Niw2ICs4ODYsMjUg
QEAgd2luMzIgewogICAgICAgICBQbGF0Zm9ybS9Db3JlSVBDL0JpbmFyeVNlbWFwaG9yZS5jcHAK
IH0KIAorZW5hYmxlPyhTRUNDT01QX0ZJTFRFUlMpIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAg
ICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmggXAorICAgICAgICBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5oIFwKKyAgICAgICAgU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmggXAorICAgICAgICBTaGFy
ZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbC5oIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuaCBcCisgICAgICAgIFdlYlByb2Nlc3MvcXQv
U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICAg
IFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5jcHAgXAorICAgICAgICBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAgXAorICAgICAgICBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwIFwKKyAgICAgICAg
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwIFwKKyAgICAgICAgU2hhcmVk
L2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwIFwKKyAgICAgICAgV2ViUHJv
Y2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5jcHAKKworICAgIERFRklORVMgKz0g
U09VUkNFX0RJUj1cXFwiJCR7Uk9PVF9XRUJLSVRfRElSfVxcXCIKK30KIAogZW5hYmxlPyhJTlNQ
RUNUT1JfU0VSVkVSKSB7CiAgICAgSEVBREVSUyArPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDVjMzVk
YTQxNGM4NzM5ODRlZWUwY2IyNTY0MjJmZTA5NjM4MjhmNzEuLjQwOTg4MzFmZDQxMDBiOGE2NTI4
ZjFkZGZlZjIwMTYyNWE1ZTE1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC04MiwzICs4Miw1IEBAIGxp
bnV4LSo6IHsKIGhhdmU/KFFUUVVJQ0spOiBRVCArPSBxbWwgcXVpY2sKIAogZW5hYmxlPyhHRU9M
T0NBVElPTik6IFFUICs9IGxvY2F0aW9uCisKK2VuYWJsZT8oU0VDQ09NUF9GSUxURVJTKTogUEtH
Q09ORklHICs9IGxpYnNlY2NvbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM4NDk5MWI5NzRkOWYyZDYwMWI1MTk4ZTY0ZWVhYjM2ZWE5Yzg2ZmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NFZmwuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuaCIKKwor
I2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNjb21wQnJva2VyLmg+CisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmw6OlNlY2NvbXBGaWx0ZXJzV2ViUHJv
Y2Vzc0VmbChjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQor
ICAgIDogU2VjY29tcEZpbHRlcnMoQWxsb3cpCit7CisgICAgbV9wb2xpY3kuYWRkRGVmYXVsdFdl
YlByb2Nlc3NQb2xpY3kocGFyYW1ldGVycyk7Cit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnNXZWJQ
cm9jZXNzRWZsOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworICAgIC8vIFRPRE86IFdlIHNob3Vs
ZCBibG9jayBhbGwgdGhlIHN5c2NhbGxzIGFuZCB3aGl0ZWxpc3QKKyAgICAvLyB3aGF0IHdlIG5l
ZWQgKyB0cmFwIHdoYXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGJyb2tlci4KKyAgICBhZGRS
dWxlKCJvcGVuIiwgVHJhcCk7CisgICAgYWRkUnVsZSgib3BlbmF0IiwgVHJhcCk7CisgICAgYWRk
UnVsZSgiY3JlYXQiLCBUcmFwKTsKKworICAgIC8vIE5lZWRlZCBieSBFZXplIG9uIE5ldHdvcmtT
dGF0ZU5vdGlmaWVyRWZsLgorICAgIEFERF9QT0xJQ1koJm1fcG9saWN5LCBEaXJlY3RvcnksIEFT
Q0lJTGl0ZXJhbCgiL3N5cy9idXMiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSgmbV9wb2xpY3ks
IERpcmVjdG9yeSwgQVNDSUlMaXRlcmFsKCIvc3lzL2NsYXNzIiksIFJlYWQpOworICAgIEFERF9Q
T0xJQ1koJm1fcG9saWN5LCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJhbCgiL3N5cy9kZXZpY2VzIiks
IFJlYWQpOworICAgIEFERF9QT0xJQ1koJm1fcG9saWN5LCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9l
dGMvdWRldi91ZGV2LmNvbmYiKSwgUmVhZCk7CisKKyNpZmRlZiBTT1VSQ0VfRElSCisgICAgLy8g
RGV2ZWxvcGVycyB1c2luZyBidWlsZC13ZWJraXQgLS1lZmwgZXhwZWN0IHNvbWUgbGlicmFyaWVz
IHRvIGJlIGxvYWRlZAorICAgIC8vIGZyb20gdGhlIGJ1aWxkIHJvb3QgZGlyZWN0b3J5IGFuZCB0
aGV5IGFsc28gbmVlZCBhY2Nlc3MgdG8gbGF5b3V0IHRlc3QKKyAgICAvLyBmaWxlcy4gVGhlIGNv
bnN0YW50IGlzIGRlZmluZWQgb25seSB3aGVuIGpoYnVpbGQgaXMgZGV0ZWN0ZWQsIHdoaWNoIGlz
CisgICAgLy8gYW4gaW5kaWNhdGlvbiBvZiBhIGRldmVsb3BtZW50IGJ1aWxkLgorICAgIGNoYXIq
IHNvdXJjZURpciA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoU09VUkNFX0RJUik7CisgICAgaWYg
KHNvdXJjZURpcikgeworICAgICAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBT
dHJpbmc6OmZyb21VVEY4KHNvdXJjZURpciksIFJlYWRBbmRXcml0ZSk7CisgICAgICAgIGZyZWUo
c291cmNlRGlyKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFBsYWNlIHdoZXJlIHRoZSB0aGVt
ZSBhbmQgaWNvbnMgYXJlIGluc3RhbGxlZC4KKyAgICBjaGFyKiBkYXRhRGlyID0gY2Fub25pY2Fs
aXplX2ZpbGVfbmFtZShEQVRBX0RJUik7CisgICAgaWYgKGRhdGFEaXIpIHsKKyAgICAgICAgQURE
X1BPTElDWSgmbV9wb2xpY3ksIERpcmVjdG9yeSwgU3RyaW5nOjpmcm9tVVRGOChkYXRhRGlyKSwg
UmVhZCk7CisgICAgICAgIGZyZWUoZGF0YURpcik7CisgICAgfQorCisjaWYgVVNFKEdTVFJFQU1F
UikKKyAgICAvLyBWaWRlbyBwbGF5YmFjayByZXF1aXJlcyBhY2Nlc3MgdG8gdGhlIHJvb3Qgb2Yg
dGhlIHVzZXIgY2FjaGUgZGlyIHdoaWNoCisgICAgLy8gaXMgbm90IHJpZ2h0LiBXZSBuZWVkIHRv
IGNoZWNrIHdpdGggdGhlc2UgZGlyZWN0b3JpZXMgb24gZ3N0cmVhbWVyCisgICAgLy8gY2FuIGJl
IGNvbmZpZ3VyZWQuCisgICAgY2hhciogaG9tZURpciA9IGdldGVudigiSE9NRSIpOworICAgIGlm
IChob21lRGlyKQorICAgICAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBTdHJp
bmc6OmZyb21VVEY4KGhvbWVEaXIpICsgIi8uY2FjaGUiLCBSZWFkQW5kV3JpdGUpOworI2VuZGlm
CisKKyAgICBTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9jZXNzKHRoaXMsIG1fcG9saWN5KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZp
bHRlcnNXZWJQcm9jZXNzRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNj
b21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTMyOTQ4NGMzYzYyN2U1YzMy
N2IzZGJmOWFjNWNmY2Q1YzlkZmZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmgKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NFZmxfaAorI2RlZmluZSBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmxfaAorCisjaWYgRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xpY3kuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CisKK2NsYXNzIFNlY2Nv
bXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbCA6IHB1YmxpYyBTZWNjb21wRmlsdGVycyB7CitwdWJsaWM6
CisgICAgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplKCk7CisKKyAgICBTeXNjYWxsUG9saWN5IG1fcG9saWN5OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5k
aWYgLy8gU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzEwOTBiMWJhYTI1ZjVlOTFhNjM4YmFiOGY3YWVhN2Y4N2IyODIxMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRl
cnNXZWJQcm9jZXNzUXQuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NR
dC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPFFGaWxlSW5m
bz4KKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBCcm9rZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1N5c2NhbGxQb2xpY3kuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc1F0OjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdChjb25zdCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogU2VjY29tcEZpbHRlcnMoQWxs
b3cpCit7CisgICAgbV9wb2xpY3kuYWRkRGVmYXVsdFdlYlByb2Nlc3NQb2xpY3kocGFyYW1ldGVy
cyk7Cit9CisKK3ZvaWQgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQ6OnBsYXRmb3JtSW5pdGlh
bGl6ZSgpCit7CisgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGJsb2NrIGFsbCB0aGUgc3lzY2FsbHMg
YW5kIHdoaXRlbGlzdAorICAgIC8vIHdoYXQgd2UgbmVlZCArIHRyYXAgd2hhdCBzaG91bGQgYmUg
aGFuZGxlZCBieSB0aGUgYnJva2VyLgorICAgIGFkZFJ1bGUoIm9wZW4iLCBUcmFwKTsKKyAgICBh
ZGRSdWxlKCJvcGVuYXQiLCBUcmFwKTsKKyAgICBhZGRSdWxlKCJjcmVhdCIsIFRyYXApOworCisg
ICAgLy8gUXQgZGV2ZWxvcGVycyBtaWdodCBoYXZlIGEgY3VzdG9tIGxvY2F0aW9uIGZvciBRdCBs
aWJyYXJpZXMgYW5kIHBsdWdpbnMuCisgICAgY29uc3QgY2hhciogcGF0aCA9IGdldGVudigiUVRE
SVIiKTsKKyAgICBpZiAocGF0aCkgeworICAgICAgICBRRmlsZUluZm8gcXREaXIoUVN0cmluZzo6
ZnJvbVV0ZjgocGF0aCkpOworICAgICAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5
LCBxdERpci5jYW5vbmljYWxGaWxlUGF0aCgpLCBSZWFkQW5kV3JpdGUpOworICAgIH0KKworICAg
IC8vIFdFQktJVF9URVNURk9OVFMgaXMgc2V0IHdoZW4gcnVubmluZyBsYXlvdXQgdGVzdHMuIFdl
IGFsc28gbmVlZCB0byBhZGQKKyAgICAvLyB0aGUgcm9vdCBvZiB0aGUgV2ViS2l0IHRyZWUgdG8g
dGhlIHNhbmRib3ggc28gd2UgY2FuIHJlYWQgdGhlIHRlc3RzIGFuZAorICAgIC8vIHdyaXRlIGJh
Y2sgdGhlIHJlc3VsdHMuCisgICAgcGF0aCA9IGdldGVudigiV0VCS0lUX1RFU1RGT05UUyIpOwor
ICAgIGlmIChwYXRoKSB7CisgICAgICAgIFFGaWxlSW5mbyBmb250RGlyKFFTdHJpbmc6OmZyb21V
dGY4KHBhdGgpKTsKKyAgICAgICAgQUREX1BPTElDWSgmbV9wb2xpY3ksIERpcmVjdG9yeSwgZm9u
dERpci5jYW5vbmljYWxGaWxlUGF0aCgpLCBSZWFkKTsKKworICAgICAgICBRRmlsZUluZm8gc291
cmNlRGlyKFFTdHJpbmc6OmZyb21VdGY4KFNPVVJDRV9ESVIpKTsKKyAgICAgICAgQUREX1BPTElD
WSgmbV9wb2xpY3ksIERpcmVjdG9yeSwgc291cmNlRGlyLmNhbm9uaWNhbEZpbGVQYXRoKCksIFJl
YWRBbmRXcml0ZSk7CisgICAgfQorCisgICAgU2VjY29tcEJyb2tlcjo6bGF1bmNoUHJvY2Vzcyh0
aGlzLCBtX3BvbGljeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjVl
N2E4ODI5ODRiODYyYzJiYzc5YzIyNmQzMzkyZWFlNDA4ZGYzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5o
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjY29tcEZp
bHRlcnNXZWJQcm9jZXNzUXRfaAorI2RlZmluZSBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdF9o
CisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8V2ViS2l0Mi9TZWNj
b21wRmlsdGVycy5oPgorI2luY2x1ZGUgPFdlYktpdDIvU3lzY2FsbFBvbGljeS5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKKwor
Y2xhc3MgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQgOiBwdWJsaWMgU2VjY29tcEZpbHRlcnMg
eworcHVibGljOgorICAgIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CisKKyAgICBTeXNjYWxsUG9saWN5IG1fcG9saWN5OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQorCisjZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCmluZGV4IDM3Yzc2MjBhMTlmN2Iw
YTc4OGIwNTM4ODM1ODQ3MzQ5OWNkMWU1NzMuLjBmYzExZDc4YWI0Y2FhOGZhNjc1ODdlMTQ3NTYz
ODI3YjE0ODVlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nl
c3NRdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgog
I2luY2x1ZGUgIlF0QnVpbHRpbkJ1bmRsZS5oIgogI2luY2x1ZGUgIlF0TmV0d29ya0FjY2Vzc01h
bmFnZXIuaCIKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5oIgogI2luY2x1
ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKIApAQCAtMTM3LDYgKzEzOCwxMyBAQCBzdGF0aWMgdm9pZCBwYXJlbnRQcm9jZXNz
RGllZENhbGxiYWNrKHZvaWQqKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6
ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVy
cywgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKQogeworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisgICAgeworICAgICAgICBXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0IHNl
Y2NvbXBGaWx0ZXJzKHBhcmFtZXRlcnMpOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFs
aXplKCk7CisgICAgfQorI2VuZGlmCisKICAgICBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3
IFF0TmV0d29ya0FjY2Vzc01hbmFnZXIodGhpcyk7CiAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpICYmICFwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNOdWxsKCkpOwogICAgIFdlYkNvcmU6OlNoYXJlZENvb2tpZUphclF0KiBq
YXIgPSBXZWJDb3JlOjpTaGFyZWRDb29raWVKYXJRdDo6Y3JlYXRlKHBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZURpcmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NTb3VwLmNwcAppbmRleCBhYWVmOTY1OTM4MmY3YTAzNGVhOWYxNTYwYzcxNmUz
NTM1NWFhNWJjLi45ODA1MDgxMGZiZjE1OWQ0NGUyOTAzMDBlNzk3ZDY4Y2QxODMyMWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAK
QEAgLTI5LDYgKzI5LDEwIEBACiAKICNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFCTEVfUkVRVUVT
VF9BUEkKIAorI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJTZWNjb21wRmlsdGVyc1dlYlBy
b2Nlc3NFZmwuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KQEAgLTE2NCw2ICsxNjgsMTUgQEAgc3RhdGljIHZvaWQgbGFuZ3VhZ2VD
aGFuZ2VkKHZvaWQqKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgQ29y
ZUlQQzo6TWVzc2FnZURlY29kZXImKQogeworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisg
ICAgeworI2lmIFBMQVRGT1JNKEVGTCkKKyAgICAgICAgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNz
RWZsIHNlY2NvbXBGaWx0ZXJzKHBhcmFtZXRlcnMpOworI2VuZGlmCisgICAgICAgIHNlY2NvbXBG
aWx0ZXJzLmluaXRpYWxpemUoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICghcGFyYW1ldGVy
cy5sYW5ndWFnZXMuaXNFbXB0eSgpKQogICAgICAgICBzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1
YWdlKHBhcmFtZXRlcnMubGFuZ3VhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0Zp
bmRMaWJTZWNjb21wLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUxOGYwMjI5MTVjZTY4NzMwNjdlZDk5MTg3MjYzYWI3NTNjZjFjMDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UKQEAgLTAsMCAr
MSw0NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMK
KyMgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heQorIyAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyMgICBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyMKKyMgVHJ5IHRvIGZpbmQgbGlic2VjY29tcCBpbmNsdWRlIGFuZCBsaWJyYXJ5
IGRpcmVjdG9yaWVzLgorIworIyBBZnRlciBzdWNjZXNzZnVsIGRpc2NvdmVyeSwgdGhpcyB3aWxs
IHNldCBmb3IgaW5jbHVzaW9uIHdoZXJlIG5lZWRlZDoKKyMgTElCU0VDQ09NUF9JTkNMVURFX0RJ
UlMgLSBjb250YWluZyB0aGUgbGlic2VjY29tcCBoZWFkZXJzCisjIExJQlNFQ0NPTVBfTElCUkFS
SUVTIC0gY29udGFpbmcgdGhlIGxpYnNlY2NvbXAgbGlicmFyeQorCitpbmNsdWRlKEZpbmRQa2dD
b25maWcpCisKK3BrZ19jaGVja19tb2R1bGVzKFBDX0xJQlNFQ0NPTVAgbGlic2VjY29tcCkKKwor
ZmluZF9wYXRoKExJQlNFQ0NPTVBfSU5DTFVERV9ESVJTIE5BTUVTIHNlY2NvbXAuaAorICAgIEhJ
TlRTICR7UENfTElCU0VDQ09NUF9JTkNMVURFX0RJUlN9ICR7UENfTElCU0VDQ09NUF9JTkNMVURF
RElSfQorKQorCitmaW5kX2xpYnJhcnkoTElCU0VDQ09NUF9MSUJSQVJJRVMgTkFNRVMgc2VjY29t
cAorICAgIEhJTlRTICR7UENfTElCU0VDQ09NUF9MSUJSQVJZX0RJUlN9ICR7UENfTElCU0VDQ09N
UF9MSUJESVJ9CispCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitG
SU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1Moc2VjY29tcCBERUZBVUxUX01TRyBMSUJT
RUNDT01QX0lOQ0xVREVfRElSUyBMSUJTRUNDT01QX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UKaW5kZXggYmQxYjdlMjkwODI0NDVmNmZkYThlNTU4ZmU1NWZkYjUwY2MzZmZlOS4uZmEwZmVi
ODZiNGFkMzViYjczOWFhMDQyMmNmODY4MTQzYjU3NmUzNiAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UK
QEAgLTQ3LDYgKzQ3LDggQEAgc2V0KERBVEFfSU5TVEFMTF9ESVIgInNoYXJlLyR7V2ViS2l0X0xJ
QlJBUllfTkFNRX0tJHtQUk9KRUNUX1ZFUlNJT05fTUFKT1J9IiBDQUMKIHNldChUSEVNRV9CSU5B
UllfRElSICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRGVmYXVsdFRo
ZW1lKQogZmlsZShNQUtFX0RJUkVDVE9SWSAke1RIRU1FX0JJTkFSWV9ESVJ9KQogCithZGRfZGVm
aW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RB
TExfRElSfSIpCisKIHNldChWRVJTSU9OX1NDUklQVCAiLVdsLC0tdmVyc2lvbi1zY3JpcHQsJHtD
TUFLRV9NT0RVTEVfUEFUSH0vZWZsc3ltYm9scy5maWx0ZXIiKQogCiBXRUJLSVRfT1BUSU9OX0JF
R0lOKCkKQEAgLTgyLDYgKzg0LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSBPTikKIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRUdJT05TIE9OKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FIE9OKQorV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyBPRkYpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIE9OKQpA
QCAtMjEzLDYgKzIxNiwxMCBAQCBpZiAoRU5BQkxFX0lOU1BFQ1RPUikKICAgICBhZGRfZGVmaW5p
dGlvbnMoLURXRUJfSU5TUEVDVE9SX0lOU1RBTExfRElSPVwiJHtDTUFLRV9JTlNUQUxMX1BSRUZJ
WH0vJHtXRUJfSU5TUEVDVE9SX0RJUn1cIikKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfU0VDQ09N
UF9GSUxURVJTKQorICAgIGZpbmRfcGFja2FnZShMaWJTZWNjb21wIFJFUVVJUkVEKQorZW5kaWYg
KCkKKwogc2V0KENQQUNLX1NPVVJDRV9HRU5FUkFUT1IgVEJaMikKIAogIyBPcHRpbWl6ZSBiaW5h
cnkgc2l6ZSBmb3IgcmVsZWFzZSBidWlsZHMgYnkgcmVtb3ZpbmcgZGVhZCBzZWN0aW9ucyBvbiB1
bml4L2djYwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIv
U291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IDY2NjFlNDQ5MzAxMTU3YmVk
YTg1YjAyYWQyMDJhODhmNTAwZDVlNDcuLmFlMzUxMDU4ODYzZDVlZTUxMjkxNzcxMDQwYjI5MzYw
N2NmN2FjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQor
KysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKQEAgLTEwMyw2ICsxMDMsNyBA
QCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZICJUb2dnbGUgcmVzb2x1dGlvbiBtZWRpYSBxdWVy
eSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFU09VUkNF
X1RJTUlORyAiVG9nZ2xlIFJlc291cmNlIFRpbWluZyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVkIFNw
ZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
RUNDT01QX0ZJTFRFUlMgIlRvZ2dsZSBMaW51eCBzZWNjb21wIGZpbHRlcnMgZm9yIHRoZSBXZWJQ
cm9jZXNzIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hB
RE9XX0RPTSAiVG9nZ2xlIFNoYWRvdyBET00gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9TSEFSRURfV09SS0VSUyAiVG9nZ2xlIFNoYXJlZFdvcmtlcnMgc3Vw
cG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TUEVMTENIRUNLICJU
b2dnbGUgU3BlbGxjaGVja2luZyBzdXBwb3J0IChyZXF1aXJlcyBFbmNoYW50KSIgT0ZGKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZQppbmRleCBmYmY3ZGE5MTllZGU1OTlmNGJmMjI4ODYzMjk1NTFhNDE5YzM2ZWQ1Li4y
ZWY3OTIwZjE5ZjMwOTZhNTUyNmUzMzE4ZDllMjZhZDVmMzNiYTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQpA
QCAtOTcsNiArOTcsNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1JFU09MVVRJT05fTUVESUFf
UVVFUlkKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9SRVNPVVJDRV9USU1JTkcKICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gKKyNjbWFrZWRlZmluZTAxIEVOQUJMRV9TRUNDT01Q
X0ZJTFRFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFET1dfRE9NCiAjY21ha2VkZWZpbmUw
MSBFTkFCTEVfU0hBUkVEX1dPUktFUlMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TTU9PVEhfU0NS
T0xMSU5HCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggOTA5ZDI1ZDg1YjdkNzk0MjBlOGQzZmZkZjJkNDBmMGZlMjQ1ZjA0NC4uYzUwMDQ3NDljZTlh
M2FjNmVlY2QyY2NjOGRlMDhlNjQ4NzE0MTlhYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTAxLTI0ICBUaGlh
Z28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgorCisgICAgICAg
IFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNpbmcgc2VjY29t
cCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCB1bml0IHRlc3RzIHRvIHZlcmlmeSBpZiB0aGUgaGFuZGxpbmcgb2YgdGhlIG9wZW4sIG9w
ZW5hdCwgY3JlYXQgc3lzY2FsbAorICAgICAgICBpcyBiZWluZyBkb25lIHJpZ2h0LiBXZSBjaGVj
ayBpZiB0aGUgUmVhZC9Xcml0ZS9SZWFkQW5kV3JpdGUgcGVybWlzc2lvbnMKKyAgICAgICAgYXJl
IHJlc3BlY3RlZCwgaWYgdGhlIGNhbm9uaWNhbCBwYXRoIGlzIGJlaW5nIHJlc29sdmVkIGFuZCBp
ZgorICAgICAgICB0aGUgcGVybWlzc2lvbnMgYXJlIGZhbGxpbmcgYmFjayB0byB0aGUgdG9wbW9z
dCBwYXJlbnQgZGlyZWN0b3J5IHdpdGggYQorICAgICAgICBwb2xpY3kgc2V0IHdoZW4gdGhlIGRp
cmVjdG9yeSBiZWluZyBvcGVuZWQgaGFzIG5vIHBvbGljeS4KKworICAgICAgICBXZSBhbHNvIHRl
c3QgaWYgYW55IGF0dGVtcHQgb2YgYmxvY2tpbmcgU0lHU1lTIGlzIHNpbGVudGx5IGlnbm9yZWQu
CisgICAgICAgIFNJR1NZUyBjYW5ub3QgYmUgYmxvY2tlZCBiZWNhdXNlIGluIGl0J3MgaGFuZGxl
ciBpcyB3aGVyZSB3ZSBob29rCisgICAgICAgIHN5c2NhbGxzIHRvIHRoZSBicm9rZXIgcHJvY2Vz
cy4KKworICAgICAgICBBbHNvIGFkZGVkIGxpYnNlY2NvbXAgdG8gRUZMJ3MgamhidWlsZCB0byBt
YWtlIHRoZSBsaWZlIG9mIGRldmVsb3BlcnMKKyAgICAgICAgd2lsbGluZyB0byBoZWxwIGVhc2ll
ci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSSk6CisgICAgICAgIChTZWNjb21wRW52aXJvbm1lbnQpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmlyb25tZW50OjpTZXRVcCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1lbnQ6OlRlYXJEb3duKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c3RyZXNzVGVzdCk6Cisg
ICAgICAgICogZWZsL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2ZlYXR1cmVzLnByaToKKwogMjAxMy0wMi0wNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBkdXBsaWNhdGUgZW50cnkgZnJvbSBEdW1w
UmVuZGVyVHJlZSBYY29kZSBwcm9qZWN0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0KaW5kZXggODhlZjM0MmM2ZDVkY2Q1N2M5YjdlMDU4ZDhjNTdjNzYwYjZmYTFhYy4uM2Uz
M2U2MzEzMzY0OWFjMjhhNDMxZTU5NzE4ZjVjMmZjMTI0NTI5MyAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTI1LDYgKzEyNSw3IEBAIG15ICgKICAgICAkcmVx
dWVzdEFuaW1hdGlvbkZyYW1lU3VwcG9ydCwKICAgICAkcmVzb3VyY2VUaW1pbmdTdXBwb3J0LAog
ICAgICRzY3JpcHRlZFNwZWVjaFN1cHBvcnQsCisgICAgJHNlY2NvbXBGaWx0ZXJzU3VwcG9ydCwK
ICAgICAkc2hhZG93RE9NU3VwcG9ydCwKICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAg
JHNxbERhdGFiYXNlU3VwcG9ydCwKQEAgLTM5MSw2ICszOTIsOSBAQCBteSBAZmVhdHVyZXMgPSAo
CiAgICAgeyBvcHRpb24gPT4gInJlcXVlc3QtYW5pbWF0aW9uLWZyYW1lIiwgZGVzYyA9PiAiVG9n
Z2xlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUiLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2Vi
S2l0KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgpIHx8IGlzQmxhY2tCZXJyeSgpKSwgdmFsdWUgPT4g
XCRyZXF1ZXN0QW5pbWF0aW9uRnJhbWVTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAic2Vj
Y29tcC1maWx0ZXJzIiwgZGVzYyA9PiAiVG9nZ2xlIFNlY2NvbXAgRmlsdGVyIHNhbmRib3giLAor
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU0VDQ09NUF9GSUxURVJTIiwgZGVmYXVsdCA9PiAwLCB2
YWx1ZSA9PiBcJHNlY2NvbXBGaWx0ZXJzU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gInNj
cmlwdGVkLXNwZWVjaCIsIGRlc2MgPT4gIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggc3VwcG9ydCIs
CiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0giLCBkZWZhdWx0ID0+IDAs
IHZhbHVlID0+IFwkc2NyaXB0ZWRTcGVlY2hTdXBwb3J0IH0sCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtRWZsLmNtYWtlCmluZGV4IGNmZDkzMjdmYjNhODM5YWMzY2FlMTExYWY3NDY4YWU2Yzdj
ZTdhMWQuLjhlYzMyMjExMTZhNDVjZWIxOWFjN2MyYTczNzMzMGIzNmE0ZmY5NWIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODcsNiArODcsMTUgQEAgc2V0KHRlc3Rf
d2Via2l0Ml9hcGlfQklOQVJJRVMKICAgICBXaWxsU2VuZFN1Ym1pdEV2ZW50CiApCiAKKyMgU2Vj
Y29tcCBmaWx0ZXJzIGlzIGFuIGludGVybmFsIEFQSSBhbmQgaXRzIHN5bWJvbHMKKyMgYXJlIG5v
dCAoYW5kIHNob3VsZCBub3QpIGJlIGV4cG9zZWQgYnkgZGVmYXVsdC4gV2UKKyMgY2FuIG9ubHkg
dGVzdCBpdCB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBjb3JlLgoraWYgKEVOQUJMRV9TRUNDT01QX0ZJ
TFRFUlMgQU5EIFNIQVJFRF9DT1JFKQorICAgIGxpc3QoQVBQRU5EIHRlc3Rfd2Via2l0Ml9hcGlf
QklOQVJJRVMKKyAgICAgICAgU2VjY29tcEZpbHRlcnMKKyAgICApCitlbmRpZiAoKQorCiBzZXQo
dGVzdF93ZWJraXQyX2FwaV9mYWlsX0JJTkFSSUVTCiAgICAgQ2FuSGFuZGxlUmVxdWVzdAogICAg
IERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DcmFzaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg1ZDU3
YzY3YmZkZjVkYmU2ODlhYjQ2M2Y4NzY0Mjk2YzdmMDU2NQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAs
MCArMSw0MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2Vj
Y29tcEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xpY3kuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgor
I2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9z
dGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK0RFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCByb290RGlyLCAoQVNDSUlMaXRlcmFsKCIvIikpKTsKK0RFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBob21lRGlyLCAoU3RyaW5nKGdldGVudigiSE9NRSIpKSkpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzckRpciwgKEFTQ0lJTGl0ZXJhbCgiL3VzciIpKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdXNyU2JpbkRpciwgKEFTQ0lJTGl0ZXJhbCgiL3Vz
ci9zYmluIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZCwgKEFT
Q0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIpKSk7CitERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpcldyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1w
L1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZSIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdGVzdERpclJlYWRBbmRXcml0ZSwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRT
ZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCB0ZXN0RGlyTm90QWxsb3dlZCwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZCIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgdGVzdEZpbGVOb3RBbGxvd2VkLCAodGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGVQ
b2xpY3kiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdEZpbGVSZWFkQW5kV3Jp
dGUsICh0ZXN0RGlyTm90QWxsb3dlZCArICIvdGVzdEZpbGVQb2xpY3kiKSk7CisKK3N0YXRpYyBj
b25zdCBtb2RlX3QgZGVmYXVsdE1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVhVU1I7CisK
K2NsYXNzIFNlY2NvbXBFbnZpcm9ubWVudCA6IHB1YmxpYyB0ZXN0aW5nOjpFbnZpcm9ubWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9UUlVFKCFob21lRGlyLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbWtkaXIoIi90bXAvV2ViS2l0
U2VjY29tcEZpbHRlcnMiLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJSZWFk
LnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtkaXIodGVzdERpcldyaXRl
LnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtkaXIodGVzdERpclJlYWRB
bmRXcml0ZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3RE
aXJOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKworICAgICAgICAvLyBD
cmVhdGUgYSBmaWxlIGZvciB0aGUgUmVhZCBvbmx5IGFuZCBOb3RBbGxvd2VkIGRpcmVjdG9yeSBi
ZWZvcmUKKyAgICAgICAgLy8gbG9hZGluZyB0aGUgZmlsdGVycy4KKyAgICAgICAgU3RyaW5nIGZp
bGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOworICAgICAgICBpbnQgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgICAg
ICBBU1NFUlRfTkUoY2xvc2UoZmQpLCAtMSk7CisgICAgICAgIGZpbGUgPSB0ZXN0RGlyTm90QWxs
b3dlZCArICIvdGVzdEZpbGUiOworICAgICAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9z
ZShmZCksIC0xKTsKKworICAgICAgICAvLyBDcmVhdGUgZmlsZXMgZm9yIHRoZSBmaWxlIHBvbGlj
eSB0ZXN0cy4gRmlsZSBwb2xpY2llcyBwcmVjZWRlcyB0aGUKKyAgICAgICAgLy8gZGlyZWN0b3J5
IHBvbGljeS4gSW4gdGhpcyBjYXNlLCB3ZSBjcmVhdGUgYSBmaWxlIHdpdGggcmVhZCBhbmQgd3Jp
dGUKKyAgICAgICAgLy8gcG9saWNpZXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGFs
bG93ZWQsIGFuZCB2aWNlIHZlcnNhLiAKKyAgICAgICAgZmQgPSBvcGVuKHRlc3RGaWxlTm90QWxs
b3dlZC51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAg
ICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKyAgICAgICAgZmQgPSBvcGVuKHRlc3RGaWxl
UmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2Rl
KTsKKyAgICAgICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOworCisgICAgICAgIFN5c2NhbGxQ
b2xpY3kgcG9saWN5OworICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihyb290
RGlyLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVj
dG9yeVBlcm1pc3Npb24odXNyRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICAgICAgcG9s
aWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24odXNyU2JpbkRpciwgU3lzY2FsbFBvbGljeTo6Tm90
QWxsb3dlZCk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKHRlc3REaXJS
ZWFkLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVjdG9yeVBl
cm1pc3Npb24odGVzdERpcldyaXRlLCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisgICAgICAgIHBv
bGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKHRlc3REaXJSZWFkQW5kV3JpdGUsIFN5c2NhbGxQ
b2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNz
aW9uKHRlc3REaXJOb3RBbGxvd2VkLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKKyAgICAg
ICAgcG9saWN5LmFkZEZpbGVQZXJtaXNzaW9uKHRlc3RGaWxlTm90QWxsb3dlZCwgU3lzY2FsbFBv
bGljeTo6Tm90QWxsb3dlZCk7CisgICAgICAgIHBvbGljeS5hZGRGaWxlUGVybWlzc2lvbih0ZXN0
RmlsZVJlYWRBbmRXcml0ZSwgU3lzY2FsbFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKKworICAgICAg
ICBTZWNjb21wRmlsdGVycyBzZWNjb21wRmlsdGVycyhTZWNjb21wRmlsdGVyczo6QWxsb3cpOwor
ICAgICAgICBzZWNjb21wRmlsdGVycy5hZGRSdWxlKCJvcGVuIiwgU2VjY29tcEZpbHRlcnM6OlRy
YXApOworICAgICAgICBzZWNjb21wRmlsdGVycy5hZGRSdWxlKCJvcGVuYXQiLCBTZWNjb21wRmls
dGVyczo6VHJhcCk7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmFkZFJ1bGUoImNyZWF0IiwgU2Vj
Y29tcEZpbHRlcnM6OlRyYXApOworCisgICAgICAgIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nl
c3MoJnNlY2NvbXBGaWx0ZXJzLCBwb2xpY3kpOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0
aWFsaXplKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgd2lsbCBoYXZlIHRvIG1vdmUgdG8gYSBzZXBhcmF0ZWQgcHJvY2VzcyBj
cmVhdGVkIGJlZm9yZSBsb2FkaW5nCisgICAgICAgIC8vIHRoZSBmaWx0ZXJzIHdoZW4gd2UgcHV0
IHRoZSBybWRpci91bmxpbmsgcG9saWNpZXMgaW4gcGxhY2UuCisgICAgICAgIHVubGluaygiL3Rt
cC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZSIpOworICAgICAg
ICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQvdGVzdEZp
bGVQb2xpY3kiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rl
c3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNl
Y2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUyIik7CisgICAgICAgIHVubGlu
aygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlL3Rlc3RGaWxlMyIp
OworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRX
cml0ZS90ZXN0RmlsZVBvbGljeSIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29t
cEZpbHRlcnMvdGVzdFdyaXRlL3Rlc3RGaWxlIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJL
aXRTZWNjb21wRmlsdGVycy90ZXN0V3JpdGUvdGVzdEZpbGUyIik7CisgICAgICAgIHVubGluaygi
L3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZC90ZXN0RmlsZSIpOworICAgICAgICBy
bWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZCIpOworICAgICAg
ICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlIik7Cisg
ICAgICAgIHJtZGlyKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZSIpOworICAg
ICAgICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIpOworICAgICAg
ICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIpOworICAgIH0KK307CisKKzo6dGVz
dGluZzo6RW52aXJvbm1lbnQqIGNvbnN0IGVudiA9IDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVu
dmlyb25tZW50KG5ldyBTZWNjb21wRW52aXJvbm1lbnQpOworCitURVNUKFdlYktpdDIsIHNpZ3By
b2NtYXNrKQoreworICAgIC8vIFdlIHRlc3QgaGVyZSB0aGUgbWVjaGFuaXNtIGluc3RhbGxlZCB0
byBwcmV2ZW50IFNJR1NZUyB0byBiZSBibG9ja2VkLiBBbnkKKyAgICAvLyBhdHRlbXAgdG8gYWRk
IFNJR1NZUyB0byB0aGUgc2V0IG9mIGJsb2NrZWQgc2lnbmFscyB3aWxsIGJlIHNpbGVudGx5Cisg
ICAgLy8gaWdub3JlZCAoYnV0IG90aGVyIHNpZ25hbHMgd2lsbCBiZSBibG9ja2VkIGp1c3QgZmlu
ZSkuCisgICAgc2lnc2V0X3Qgc2V0LCBvbGRTZXQ7CisgICAgc2lnZW1wdHlzZXQoJnNldCk7Cisg
ICAgc2lnYWRkc2V0KCZzZXQsIFNJR1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjEp
OworCisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgMCksIC0xKTsK
KyAgICBBU1NFUlRfTkUoc2lncHJvY21hc2soU0lHX0JMT0NLLCAwLCAmb2xkU2V0KSwgLTEpOwor
ICAgIEFTU0VSVF9GQUxTRShzaWdpc21lbWJlcigmb2xkU2V0LCBTSUdTWVMpKSA8PCAiU0lHU1lT
IHNob3VsZCBub3QgYmUgYmxvY2tlZC4iOworICAgIEFTU0VSVF9UUlVFKHNpZ2lzbWVtYmVyKCZv
bGRTZXQsIFNJR1VTUjEpKSA8PCAiT3RoZXIgc2lnbmFscyBzaG91bGQgYmUgYmxvY2tlZCBub3Jt
YWxseS4iOworCisgICAgc2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJ
R1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjIpOworCisgICAgQVNTRVJUX05FKHNp
Z3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2V0LCAmb2xkU2V0KSwgLTEpOworICAgIEFTU0VSVF9O
RShzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgMCwgJnNldCksIC0xKTsKKyAgICBBU1NFUlRfRkFM
U0Uoc2lnaXNtZW1iZXIoJnNldCwgU0lHU1lTKSkgPDwgIlNJR1NZUyBzaG91bGQgbm90IGJlIGJs
b2NrZWQuIjsKKyAgICBBU1NFUlRfVFJVRShzaWdpc21lbWJlcigmc2V0LCBTSUdVU1IyKSkgPDwg
Ik90aGVyIHNpZ25hbHMgc2hvdWxkIGJlIGJsb2NrZWQgbm9ybWFsbHkuIjsKKyAgICBBU1NFUlRf
RkFMU0Uoc2lnaXNtZW1iZXIoJm9sZFNldCwgU0lHVVNSMikpOworCisgICAgQVNTRVJUX05FKHNp
Z3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkU2V0LCAwKSwgLTEpIDw8ICJTaG91bGQgcmVzdG9y
ZSB0aGUgb2xkIHNpZ25hbCBzZXQganVzdCBmaW5lLiI7CisgICAgQVNTRVJUX05FKHNpZ3Byb2Nt
YXNrKFNJR19TRVRNQVNLLCAwLCAmc2V0KSwgLTEpOworICAgIEFTU0VSVF9GQUxTRShzaWdpc21l
bWJlcigmc2V0LCBTSUdVU1IyKSkgPDwgIlRoZSByZXN0b3JlZCBzZXQgZG9lc24ndCBoYXZlIFNJ
R1VTUjIuIjsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuKQoreworICAgIC8vIFJlYWQgb25seSBk
aXJlY3RvcnkuCisgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOwor
ICAgIGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYg
ZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9f
UkRPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisg
ICAgZmlsZSA9IHRlc3REaXJSZWFkICsgIi9UaGlzRmlsZURvZXNOb3RFeGlzdCI7CisgICAgZmQg
PSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZk
ID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgPDwgIlNob3VsZCByZXR1cm4gRU5PRU5UIHdoZW4g
dHJ5aW5nICIgXAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGl0IGFu
ZCB0aGUgcGVybWlzc2lvbnMgYXJlIE9LLiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCku
ZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKSA8PCAiU2hvdWxkIHJldHVybiBFQUNDRVMgd2hlbiB0cnlpbmcgIiBcCisgICAgICAg
ICJ0byBvcGVuIGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXQgYW5kIHRoZSBwZXJtaXNzaW9ucyBh
cmUgbm90IE9LLiI7CisKKyAgICAvLyBXcml0ZSBvbmx5IGRpcmVjdG9yeS4KKyAgICBmaWxlID0g
dGVzdERpcldyaXRlICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgQVNTRVJUX05FKGZk
LCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMp
OworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVY
UEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4o
ZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7Cisg
ICAgY2xvc2UoZmQpOworCisgICAgLy8gUmVhZCBhbiB3cml0ZSBkaXJlY3RvcnkuCisgICAgZmls
ZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBB
U1NFUlRfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3Nl
KGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAg
ICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAg
Y2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRl
c3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgp
LmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8g
PT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZ
KTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAg
ZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKworICAgIC8vIFRoZSAvdXNyIGRpcmVj
dG9yeSBoZXJlIGhhcyByZWFkIHBlcm1pc3Npb25zLCBzbyBpdCdzIHN1YmRpcmVjdG9yaWVzCisg
ICAgLy8gc2hvdWxkIHJlc29sdmUgdG8gdGhlIC91c3IgcGVybWlzc2lvbnMgdW5sZXNzIGV4cGxp
Y2l0bHkgc3BlY2lmaWVkLgorICAgIGZpbGUgPSB1c3JEaXIgKyAiL2Jpbi9iYXNlbmFtZSI7Cisg
ICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9O
RShmZCwgLTEpIDw8ICJTdWJkaXJlY3RvcmllcyBzaG91bGQgd2l0aCBubyBwb2xpY3kgc2hvdWxk
ICIgXAorICAgICAgICAiaW5oZXJpdCB0aGUgcGFyZW50J3MgcG9saWNpZXMuIjsKKyAgICBjbG9z
ZShmZCk7CisKKyAgICBmaWxlID0gdXNyU2JpbkRpciArICIvYWRkdXNlciI7CisgICAgZmQgPSBv
cGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09
IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlRoaXMgZGlyZWN0b3J5IHNob3VsZCBoYXZlICIg
XAorICAgICAgICAiaXRzIG93biBwb2xpY3kgaW5zdGVhZCBvZiB0aGUgcGFyZW50J3MuIjsKKwor
ICAgIC8vIEFjY2VzcyB0byB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgc3lzdGVtIGlzIGJsb2NrZWQg
YW5kIHNob3VsZAorICAgIC8vIG5ldmVyIHJldHVybiBhbnl0aGluZyBlbHNlIG90aGVyIHRoYW4g
RUFDQ0VTIHJlZ2FyZGxlc3MgaWYgdGhlCisgICAgLy8gZmlsZSBleGlzdHMgb3Igbm90LiBUaGUg
cmVhc29uIGlzIGJlY2F1c2UgaXQgd2lsbCBmYWxsYmFjayB0byB0aGUKKyAgICAvLyBwb2xpY3kg
b2YgdGhlIFJvb3QgZGlyZWN0b3J5LCBtYXJrZWQgYXMgTm90QWxsb3dlZC4KKyAgICBmaWxlID0g
aG9tZURpciArICIvdGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCks
IE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9f
UkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwor
CisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2Qi
OworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRlc3RE
aXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4u
Ly4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9f
UkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwor
CisgICAgLy8gSGVyZSB3ZSB0ZXN0IGZpbGUgcG9saWNpZXMuIFRoZSBoYXZlIHByZWNlZGVuY2Ug
b3ZlciBkaXJlY3RvcnkgcG9saWNpZXMuCisgICAgLy8gVGhlIGZpbGUgYmVsbG93IGxpdmVzIGlu
c2lkZSBhIGRpcmVjdG9yeSB3aXRoIFJlYWRBbmRXcml0ZSBwb2xpY3kuCisgICAgZmQgPSBvcGVu
KHRlc3RGaWxlTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNU
X1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3Blbih0ZXN0
RmlsZU5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4odGVzdEZpbGVO
b3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0g
LTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVhZEFuZFdyaXRl
ICsgIi8uLi8uLi8uLiIgKyB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZVBvbGljeSI7
CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAvLyBUaGUgbmV4dCBm
aWxlIGlzIGxvY2F0ZWQgaW5zaWRlIGEgZGlyZWN0b3J5IG1hcmtlZCBhcyBOb3RBbGxvd2VkLCBi
dXQKKyAgICAvLyBpdCBoYXMgaXRzIG93biBmaWxlIHBvbGljeSB0aGF0IHByZWNlZGVzIHRoZSBk
aXJlY3RvcnkgcG9saWN5LgorICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRBbmRXcml0ZS51dGY4
KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2Uo
ZmQpOworCisgICAgZmQgPSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCks
IE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAg
ICBmZCA9IG9wZW4odGVzdEZpbGVSZWFkQW5kV3JpdGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsK
KyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmaWxlID0gdGVz
dERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4iICsgdGVzdERpck5vdEFsbG93ZWQgKyAiL3Rl
c3RGaWxlUG9saWN5IjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05M
WSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworfQorCitURVNUKFdl
YktpdDIsIGNyZWF0KQoreworICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisgICAgU3RyaW5n
IGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUyIjsKKyAgICBpbnQgZmQgPSBjcmVhdChm
aWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgLy8gV3JpdGUgb25seSBkaXJlY3RvcnkuCisg
ICAgZmlsZSA9IHRlc3REaXJXcml0ZSArICIvdGVzdEZpbGUyIjsKKyAgICBmZCA9IGNyZWF0KGZp
bGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOwor
ICAgIGNsb3NlKGZkKTsKKworICAgIC8vIFJlYWQgYW4gd3JpdGUgZGlyZWN0b3J5LgorICAgIGZp
bGUgPSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0gY3JlYXQo
ZmlsZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7
CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAgZmls
ZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0gY3JlYXQoZmls
ZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEg
JiYgZXJybm8gPT0gRUFDQ0VTKTsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuYXQpCit7CisgICAg
aW50IGRpckZkID0gb3Blbih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIE9fUkRP
TkxZKTsKKyAgICBBU1NFUlRfTkUoZGlyRmQsIC0xKTsKKworICAgIGludCBmZCA9IG9wZW5hdChk
aXJGZCwgInRlc3RGaWxlMyIsIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBF
WFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW5hdChkaXJG
ZCwgInRlc3RGaWxlMyIsIE9fUkRXUik7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xv
c2UoZmQpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZTMiLCBPX1JET05MWSk7
CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVu
YXQoZGlyRmQsICJ0ZXN0RmlsZTMiLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7
CisKKyAgICBmZCA9IG9wZW5hdChmZCwgInRlc3RGaWxlMyIsIE9fV1JPTkxZKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9URElSKSA8PCAiU2hvdWxkIHJldHVybiBF
Tk9URElSIHdoZW4gdGhlIGZkIGlzIGEgZmlsZS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIFN0
cmluZyBmaWxlID0gIi4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxl
MyI7CisgICAgZmQgPSBvcGVuYXQoZGlyRmQsIGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkp
OworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSAi
Li4vLi4vLi4iICsgdGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlMyI7CisgICAgZmQgPSBvcGVuYXQo
ZGlyRmQsIGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZk
ID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRX
cml0ZSArICIvdGVzdEZpbGUzIjsKKyAgICBmZCA9IG9wZW5hdCgtMSwgZmlsZS51dGY4KCkuZGF0
YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIkRpcmVjdG9yeSBmZCBz
aG91bGQgYmUgaWdub3JlZCB3aGVuIHRoZSBwYXRoIGlzIGFic29sdXRlLiI7CisgICAgY2xvc2Uo
ZmQpOworCisgICAgZmQgPSBvcGVuYXQoLTEsICJ0ZXN0RmlsZTMiLCBPX1dST05MWSk7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUJBREYpIDw8ICJTaG91bGQgcmV0dXJu
IEVCQURGIHdoZW4gdGhlIGZkIGlzIGludmFsaWQuIjsKKyAgICBjbG9zZShkaXJGZCk7CisKKyAg
ICBkaXJGZCA9IG9wZW4odGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkp
OworICAgIEVYUEVDVF9UUlVFKGRpckZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAg
ICBkaXJGZCA9IG9wZW4odGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAg
IEFTU0VSVF9ORShkaXJGZCwgLTEpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0Rmls
ZTIiLCBPX1JET05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0
ZXN0RmlsZSIsIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9
PSBFQUNDRVMpOworICAgIGNsb3NlKGRpckZkKTsKK30KKworc3RhdGljIHZvaWQqIHN0cmVzc1Rl
c3Qodm9pZCopCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDA7ICsraSkgeworICAgICAg
ICBpbnQgZmQgPSBvcGVuKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkL3Rlc3RG
aWxlIiwgT19SRFdSKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKTsKKworICAgICAgICBmZCA9IG9wZW4oIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMv
dGVzdFJlYWQvdGVzdEZpbGUiLCBPX1JET05MWSk7CisgICAgICAgIEVYUEVDVF9ORShmZCwgLTEp
OworICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgZmQgPSBvcGVuKCIvdG1wL1dlYktpdFNl
Y2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL3Rlc3RGaWxlIiwgT19SRE9OTFkpOworICAgICAg
ICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgICAgIGZk
ID0gY3JlYXQoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQvU2hvbGRO
b3RCZUFsbG93ZWQiLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAgICAgaW50IGRpckZkID0gb3BlbigiL3RtcC9X
ZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIsIE9fUkRPTkxZKTsKKyAgICAgICAgRVhQRUNU
X05FKGRpckZkLCAtMSk7CisKKyAgICAgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZSIs
IE9fUkRPTkxZKTsKKyAgICAgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgICAgIGNsb3NlKGZk
KTsKKyAgICAgICAgY2xvc2UoZGlyRmQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisj
aWZuZGVmIE5ERUJVRworVEVTVChXZWJLaXQyLCBESVNBQkxFRF90aHJlYWRpbmcpCisjZWxzZQor
VEVTVChXZWJLaXQyLCB0aHJlYWRpbmcpCisjZW5kaWYKK3sKKyAgICAvLyBUZXN0cyBpZiBjb25j
dXJyZW50IHN5c2NhbGwgZXhlY3V0aW9uIHdvcmtzIGZpbmUuIEl0IGNhbiBiZQorICAgIC8vIGFs
c28gdXNlZCBmb3IgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQgbGVhayBkZXRlY3Rpb24uIFRoZSB0
ZXN0CisgICAgLy8gaXMgZGlzYWJsZWQgb24gRGVidWcgbW9kZSBiZWNhdXNlIGl0IGNhbiBiZSB3
YXkgdG9vIHZlcmJvc2UuCisgICAgcHRocmVhZF90IHRocmVhZHNbNV07CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemVvZih0aHJlYWRzKSAvIHNpemVvZihwdGhyZWFkX3QpOyArK2kpCisg
ICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCAwLCBzdHJlc3NUZXN0LCAwKTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHRocmVhZHMpIC8gc2l6ZW9mKHB0aHJlYWRf
dCk7ICsraSkKKyAgICAgICAgcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5t
b2R1bGVzIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwppbmRleCA5MGE4ZmI1ZDNkMTQxNjQy
NmYyNmYyMDlmMmQ2NWJmNGIxYTRiMWUyLi4zN2RlMjM2Zjc1ZDZjYTZmM2NlNTU3ZjI4MzQ2MWU2
M2QwNDE5NjkzIDEwMDY0NAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rv
b2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKQEAgLTI0LDYgKzI0LDcgQEAKICAgICAgIDxkZXAgcGFj
a2FnZT0iZ3N0LXBsdWdpbnMtZ29vZCIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lu
cy1iYWQiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImxpYnNlY2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxl
PgogCkBAIC01MSw2ICs1Miw4IEBACiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdo
dGVubWVudC5vcmciLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ3N0cmVh
bWVyIgogICAgICAgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIv
PgorICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAg
IGhyZWY9ImdpdDovL2dpdC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImNh
aXJvIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0zNDYs
NCArMzQ5LDEwIEBACiAgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWVmOGJlNjY1MDk2YjNhNGU2
NDQyNGZiMzlkN2M1ZGE1N2ZhYWFmOTVlOWZlYTZjMWJiNDQyOTVkNGZiMzJkNSIvPgogICA8L2F1
dG90b29scz4gCiAKKyAgPGF1dG90b29scyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29u
ZmlndXJlIj4KKyAgICAgIDxicmFuY2ggbW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisg
ICAgICAgICAgcmVwbz0iZ2l0LmNvZGUuc2YubmV0IgorICAgICAgICAgIHRhZz0iYmJkN2NhMDdh
N2M3NmQ1Y2Q4ODRkYmRkZWM1ODM4NWUxYjc0MzlkMiIvPgorICA8L2F1dG90b29scz4KKwogPC9t
b2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByaSBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4
IDBiYzE2OGUyZjQyZmIzZjgxYjViNDliMzI3Yzk0MDk4MTdmMzI0MjUuLmQxNDcxZDhhNGFlMzdj
YzU4ZGJlNzY3Mjc2NmEyY2ZmMzAyZWU1M2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJpCkBAIC05NCw2ICs5NCw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAg
ICAgRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlk9MSBcCiAgICAgRU5BQkxFX1JFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FPTEgXAogICAgIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0g9MCBcCisgICAg
RU5BQkxFX1NFQ0NPTVBfRklMVEVSUz0wIFwKICAgICBFTkFCTEVfU0hBRE9XX0RPTT0wIFwKICAg
ICBFTkFCTEVfU0hBUkVEX1dPUktFUlM9MSBcCiAgICAgRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9
MSBcCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggM2I3MDU3MDU0MzFl
MTg0Mjk2YzkwZmMzZDAwYmFhZDljMTQyNzIyYS4uOWY3ZjdkYjRiOWM5OTczY2MyMDg2YmFjY2Ji
NzliYmU3NzY3YzkyNiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDEzLTAxLTI0ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFn
by5zYW50b3NAaW50ZWwuY29tPgorCisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBh
YmlsaXRpZXMgb24gTGludXggdXNpbmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBiaXRzIHRvIEVGTC9DTWFr
ZSBidWlsZHN5c3RlbSB0byBmaW5kIHRoZSBsaWJzZWNjb21wCisgICAgICAgIGxpYnJhcnkuCisK
KyAgICAgICAgKiBTb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2U6IEFkZGVkLgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9j
bWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZToKKwogMjAxMy0wMi0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBbQ01ha2VdIEFkb3B0IHRoZSBXaW5DRSBwb3J0IHRvIG5ldyBDTWFr
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189320</attachid>
            <date>2013-02-20 08:06:02 -0800</date>
            <delta_ts>2013-03-20 06:06:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130220180800.patch</filename>
            <type>text/plain</type>
            <size>106901</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE3YzJhODYzYjlkOTA2YjIwODBiYWU0
MmFjNWZiNTk5ZGM2ODM0NTguLjIwYjQ0ZjVmNzY5OTQ0NjNkMDU1ZDgyZmRmNDNiYTU1MDc4NmY4
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDItMjAgIFRoaWFnbyBNYXJjb3MgUC4gU2Fu
dG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IHNldHVwIGEg
aGFuZGxlciBmb3IgU0lHU1lTIHdoZW4gU2VjY29tcCBGaWx0ZXJzIGFyZSBlbmFibGVkLgorICAg
ICAgICBUaGlzIHNpZ25hbCBuZWVkcyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBzYW5kYm94LgorCisg
ICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorCiAyMDEzLTAyLTE5ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTQzNDAwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY0MjBkYjMzNTliNDc0MTU0MmZjNzc0NTAw
ZjhjN2U4MWE3N2FhNmIuLmUyN2MyM2M5OTE1ZGFmMTVlNzg1ZTg2ODVjNGI5NjA2YjBiN2RlZjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMi0yMCAgVGhpYWdvIE1hcmNvcyBQ
LiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9w
IFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKwor
ICAgICAgICBNYWtlIHRoZSBEQVRBX0RJUiBnbG9iYWwgc2luY2UgaXQgaXMgbm93IG5lZWRlZCBm
b3IgV2ViQ29yZSBhbmQgV2ViS2l0Mi4KKyAgICAgICAgSXQgaXMgbm93IHVzZWQgdG8gc2V0IGEg
c2FuZGJveCBwb2xpY3kgZm9yIHRoZSBFRkwgcG9ydC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorCiAyMDEzLTAyLTE5ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1vdmUgd29ya3NwYWNlIHNwZWNpZmljIGNv
ZGUgZnJvbSBGaWxlTWFwcGluZyB0byB3b3Jrc3BhY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzY0NGNkMmFm
OTIyYTU0OTFhMDg1ZDMwNmM4MTJlMjRhOTAwNmQ0Ni4uZWMxMmE3YTk5NThhNWNiZDRhN2ZmMzE4
YjI1NTYxMmQ5ZTAwYjMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxMy0wMi0y
MCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KKwor
ICAgICAgICBbV0syXSBEcm9wIFdlYlByb2Nlc3MgY2FwYWJpbGl0aWVzIG9uIExpbnV4IHVzaW5n
IHNlY2NvbXAgZmlsdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODk4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbnRyb2R1Y2UgdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBTZWNjb21wRmlsdGVyLWJh
c2VkIHNhbmRib3guIFRoZQorICAgICAgICBoYXJkZW5pbmcgb2YgdGhlIFdlYlByb2Nlc3MgKGFu
ZCBwb3RlbnRpYWxseSBQbHVnaW5Qcm9jZXNzLCBldGMpCisgICAgICAgIHdvcmtzIGJ5IGEgY29t
YmluYXRpb24gb2YgdGhlIHR3byB0aGluZ3M6CisKKyAgICAgICAgLSBCbG9ja2luZyBzeXNjYWxs
cyB0aGF0IGFyZSBub3QgdXNlZCwgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGF0dGFjaworICAg
ICAgICBzdXJmYWNlLgorICAgICAgICAtIFRyYXBwaW5nIHNlbnNpdGl2ZSBzeXNjYWxscyBhbmQg
ZGVsZWdhdGluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlCisgICAgICAgIHN5c2NhbGxzIHRvIGEg
c2VwYXJhdGVkIHRydXN0ZWQgcHJvY2VzcyBzdWJqZWN0IHRvIGEgc2V0IG9mIHBvbGljaWVzLgor
CisgICAgICAgIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIHRyYXBzIHRoZSBvcGVuKCktZmFt
aWx5IG9mIHN5c2NhbGxzIG9uIFdlYktpdAorICAgICAgICBFRkwncyBhbmQgUXQncyBXZWJQcm9j
ZXNzLCBidXQgaXQgY291bGQgYmUgZWFzaWx5IHVzZWQgYnkgYW55IExpbnV4IHBvcnQsCisgICAg
ICAgIHNpbmNlIHRoZSBjb2RlIGlzIHN1cHBvc2UgdG8gYmUgTGludXgtY29tcGxpYW50LiBUaGUg
bGlzdCBvZiBzeXNjYWxscyBoYW5kbGVkCisgICAgICAgIGJ5IHRoZSBicm9rZXIgcHJvY2VzcyBz
aG91bGQgZGVmaW5pdGVseSBncm93IGFzIHdlIG1hdHVyZSB0aGUKKyAgICAgICAgaW1wbGVtZW50
YXRpb24uIE90aGVyIHN5c2NhbGxzIG5lZWRzIHRvIGJlIGhhbmRsZWQgdG8gZ2V0IHRoaXMgc2Fu
ZGJveAorICAgICAgICBmdWxseSBmdW5jdGlvbmFsLCBsaWtlIHVubGluaygpLCBta2RpcigpLCBl
dGMuCisKKyAgICAgICAgVGhlIGJyb2tlciBwcm9jZXNzIHNob3VsZCBiZSBpbml0aWFsaXplZCBh
cyBlYXJseSBhcyBwb3NzaWJsZSBvbiB0aGUKKyAgICAgICAgc2FuZGJveGVkIHByb2Nlc3MgbWFp
bigpIGZ1bmN0aW9uLCBiZWNhdXNlIGl0IG9ubHkgZG9lcyBhIGZvcmsoKSwgd2hpY2gKKyAgICAg
ICAgaXMgY2hlYXAgb24gTGludXguIFRoYXQgYWxzbyBhaW1zIHRvIG1pbmltaXplIHRoZSByZXNp
ZGVudCBtZW1vcnkgZm9vdHByaW50CisgICAgICAgIG9mIHRoZSBicm9rZXIgcHJvY2Vzcy4KKwor
ICAgICAgICBPcGVuaW5nIG9mIGZpbGVzIGZvciB1cGxvYWQgYW5kIHNhdmluZyBkb3dubG9hZHMg
aXMgbm90IHN1cHBvcnRlZCB5ZXQsCisgICAgICAgIHNpbmNlIGl0IHNob3VsZCBiZSBoYW5kbGVk
IHRvIHRoZSBVSVByb2Nlc3MgaW4gYSBzaW1pbGFyIGZhc2hpb24gYXMKKyAgICAgICAgdGhlIE1h
YyBwb3J0IGRvZXMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tT3Bl
bmF0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tQ3Jl
YXRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6Ok9wZW5TeXNjYWxsKToK
KyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OnNldFJlc3VsdCk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZW5TeXNjYWxsOjpleGVjdXRlKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6
OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6T3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6fk9wZW5TeXNjYWxsUmVzdWx0KToKKyAgICAg
ICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
Ok9wZW5TeXNjYWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9PcGVuU3lzY2FsbC5oOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEMpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKE9wZW5TeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6
T3BlblN5c2NhbGw6OnNldFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6c2V0
RmxhZ3MpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6c2V0TW9kZSk6CisgICAgICAg
IChPcGVuU3lzY2FsbFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsUmVzdWx0
OjpmZCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsUmVzdWx0OjplcnJvck51bWJlcik6
CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wQnJva2VyQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpyZWNl
aXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OlNJR1NZU0hhbmRsZXIpOgorICAgICAgICAo
V2ViS2l0OjpyZWdpc3RlclNJR1NZU0hhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21w
QnJva2VyQ2xpZW50OjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyQ2xp
ZW50OjpTZWNjb21wQnJva2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tl
ckNsaWVudDo6flNlY2NvbXBCcm9rZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21w
QnJva2VyQ2xpZW50OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXJD
bGllbnQ6OmhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6
U2VjY29tcEJyb2tlckNsaWVudDo6aGFuZGxlSWZUcnlpbmdUb0Jsb2NrU0lHU1lTKToKKyAgICAg
ICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OlNlY2NvbXBCcm9rZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21w
QnJva2VyOjpydW5Mb29wKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
U2VjY29tcEJyb2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNj
b21wQnJva2VyKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6c2V0U3lzY2FsbFBv
bGljeSk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OlNlY2NvbXBCcm9rZXIpOgor
ICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRl
cnM6OlNlY2NvbXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6On5T
ZWNjb21wRmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjphZGRSdWxl
KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnM6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTZWNjb21wRmlsdGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpjb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEZpbHRlcnM6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OlN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6U3lzY2FsbDo6Y3JlYXRlRnJvbURlY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxs
OjpTeXNjYWxsKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURl
Y29kZXIpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0OjpTeXNjYWxsUmVzdWx0KToK
KyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbC5oOiBBZGRlZC4K
KyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFN5c2NhbGwp
OgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjp+U3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6
OlN5c2NhbGw6OnR5cGUpOgorICAgICAgICAoV2ViS2l0OjpTeXNjYWxsOjpzZXRDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6Y29udGV4dCk6CisgICAgICAgIChTeXNjYWxsUmVz
dWx0KToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6flN5c2NhbGxSZXN1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpTeXNjYWxsUmVzdWx0Ojp0eXBlKToKKyAgICAgICAgKiBTaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVtb3ZlVHJhaWxpbmdTbGFzaCk6CisgICAgICAg
IChXZWJLaXQ6OlN5c2NhbGxQb2xpY3k6Omhhc1Blcm1pc3Npb25Gb3JQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6U3lzY2FsbFBvbGljeTo6YWRkRmlsZVBlcm1pc3Npb24pOgorICAgICAgICAoV2Vi
S2l0OjpTeXNjYWxsUG9saWN5OjphZGREaXJlY3RvcnlQZXJtaXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6U3lzY2FsbFBvbGljeTo6YWRkRGVmYXVsdFdlYlByb2Nlc3NQb2xpY3kpOgorICAgICAg
ICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsUG9saWN5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFN5c2NhbGxQb2xpY3kpOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogV2ViS2l0Mi5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy9l
ZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmw6OlNlY2Nv
bXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2VmbC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NR
dDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21w
RmlsdGVyc1dlYlByb2Nlc3NRdDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nl
c3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorCiAyMDEzLTAyLTIwICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJd
IFBvcnQgRXdrUG9wdXBNZW51SXRlbSB0byB0aGUgQyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5k
ZXggYWQ4Y2U4NmI4NWQ2Yjg0OTRiNmNlMGE4MGY1NTk0ZjI0NjdmMDA4ZS4uNzE0NzBiN2YyYTdm
MzRkOWI5NWU3YmZiMWFiOGU3MDQ4ZDA2Mzc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
QXNzZXJ0aW9ucy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTM1
Miw3ICszNTIsMTEgQEAgc3RhdGljIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXJzRm9yRmF0YWxF
cnJvcnModm9pZCAoKmhhbmRsZXIpKGludCkpCiAgICAgc2lnbmFsKFNJR0ZQRSwgaGFuZGxlcik7
IC8vICAgIDg6IGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbi4KICAgICBzaWduYWwoU0lHQlVTLCBo
YW5kbGVyKTsgLy8gICAxMDogYnVzIGVycm9yLgogICAgIHNpZ25hbChTSUdTRUdWLCBoYW5kbGVy
KTsgLy8gIDExOiBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgorI2lmICFFTkFCTEUoU0VDQ09NUF9G
SUxURVJTKQorICAgIC8vIERvIG5vdCBvdmVycmlkZSB0aGUgc2lnbmFsIGhhbmRsZXIgbmVlZGVk
IGJ5IHRoZSBTZWNjb21wCisgICAgLy8gRmlsdGVycyBzYW5kYm94LiBUaGUgc2FuZGJveCBpbnN0
YWxscyBpdHMgb3duIGhhbmRsZXIuCiAgICAgc2lnbmFsKFNJR1NZUywgaGFuZGxlcik7IC8vICAg
MTI6IGJhZCBhcmd1bWVudCB0byBzeXN0ZW0gY2FsbC4KKyNlbmRpZgogICAgIHNpZ25hbChTSUdQ
SVBFLCBoYW5kbGVyKTsgLy8gIDEzOiB3cml0ZSBvbiBhIHBpcGUgd2l0aCBubyByZWFkZXIuCiAg
ICAgc2lnbmFsKFNJR1hDUFUsIGhhbmRsZXIpOyAvLyAgMjQ6IGV4Y2VlZGVkIENQVSB0aW1lIGxp
bWl0LgogICAgIHNpZ25hbChTSUdYRlNaLCBoYW5kbGVyKTsgLy8gIDI1OiBleGNlZWRlZCBmaWxl
IHNpemUgbGltaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGZlYWJjMjFlYmYzMGI0
MTEyZTM5YWMzZTRjOWZlM2EyNDEyYTg4YzYuLmJhMTliMGRhZjMyNzk1MmQ4MmFlMjk4ZWVhYWU5
OTkyNjg2N2YyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zNTgsOCArMzU4LDYg
QEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKLWFk
ZF9kZWZpbml0aW9ucygtRERBVEFfRElSPSIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0RBVEFf
SU5TVEFMTF9ESVJ9IikKLQogaWYgKEVOQUJMRV9XRUJfQVVESU8pCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdmYTRl
Yzk3NTFiNGY0MWYyODRjMTM4Yjg1OWFiYjkwODg1ZGRiY2UuLmY4NjgxNmFjOWZmMDllNjRkMTI3
MWNjNGE1NTdhMjQzYmY0OGQ0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNiw2
ICsyNiwxMiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvZWZsL1By
b2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAgICBTaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9y
eS5jcHAKIAorICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5jcHAK
KyAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAKKyAgICBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwCisgICAgU2hhcmVk
L2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xpbnV4L1NlY2Nv
bXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCisKICAgICBTaGFyZWQvbGludXgvV2ViTWVtb3J5
U2FtcGxlckxpbnV4LmNwcAogCiAgICAgU2hhcmVkL3NvdXAvUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8uY3BwCkBAIC0xNDcsNiArMTUzLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2VmbC9XZWJJbnNwZWN0b3JFZmwuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL2VmbC9XZWJQYWdlRWZsLmNwcAogCisgICAgV2ViUHJvY2Vzcy9lZmwvU2Vj
Y29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvZWZsL1dlYlByb2Nl
c3NNYWluRWZsLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApA
QCAtMjQ5LDYgKzI1NiwyMSBAQCBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAg
ICR7U1FMSVRFX0xJQlJBUklFU30KICkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisg
ICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtMSUJTRUNDT01QX0xJ
QlJBUklFU30KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgICAgICR7TElCU0VDQ09NUF9JTkNMVURFX0RJUlN9CisgICAgKQorCisgICAgIyBJ
ZiBidWlsZGluZyB3aXRoIGpoYnVpbGQsIGFkZCB0aGUgcm9vdCBidWlsZCBkaXJlY3RvcnkgdG8g
dGhlCisgICAgIyBmaWxlc3lzdGVtIGFjY2VzcyBwb2xpY3kuCisgICAgaWYgKElTX0RJUkVDVE9S
WSAke0NNQUtFX1NPVVJDRV9ESVJ9L1dlYktpdEJ1aWxkL0RlcGVuZGVuY2llcykKKyAgICAgICAg
YWRkX2RlZmluaXRpb25zKC1EU09VUkNFX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKKyAg
ICBlbmRpZiAoKQorZW5kaWYgKCkKKwogaWYgKEVOQUJMRV9FQ09SRV9YKQogICAgIGxpc3QoQVBQ
RU5EIFdlYlByb2Nlc3NfTElCUkFSSUVTCiAgICAgICAgICR7RUNPUkVfWF9MSUJSQVJJRVN9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3Bl
blN5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L09wZW5TeXNjYWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmNkNTQ3YTMzNjJjOTgwYjc1NTk0MTk2OWNh
NjQ2MTZjNGFjNDg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcApAQCAtMCwwICsxLDIxOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TeXNj
YWxsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiQXJndW1l
bnRDb2RlcnMuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNlY2NvbXAuaD4KKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Q09NUElMRV9BU1NFUlQoIU9fUkRPTkxZLCBPX1JET05MWSk7CitDT01QSUxFX0FTU0VSVChPX1dS
T05MWSA9PSAxLCBPX1dST05MWSk7CitDT01QSUxFX0FTU0VSVChPX1JEV1IgPT0gMiwgT19SRFJX
KTsKKworUGFzc093blB0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbU9wZW5hdENv
bnRleHQobWNvbnRleHRfdCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8T3BlblN5c2NhbGw+IG9w
ZW4gPSBhZG9wdFB0cihuZXcgT3BlblN5c2NhbGwoMCkpOworCisgICAgb3Blbi0+c2V0RmxhZ3Mo
Y29udGV4dC0+Z3JlZ3NbUkVHX0FSRzJdKTsKKyAgICBvcGVuLT5zZXRNb2RlKGNvbnRleHQtPmdy
ZWdzW1JFR19BUkczXSk7CisgICAgb3Blbi0+c2V0Q29udGV4dChjb250ZXh0KTsKKworICAgIGlu
dCBmZCA9IGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXTsKKyAgICBjaGFyKiBwYXRoID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdKTsKKworICAgIGlmIChw
YXRoWzBdID09ICcvJykgeworICAgICAgICBvcGVuLT5zZXRQYXRoKHBhdGgpOworICAgICAgICBy
ZXR1cm4gb3Blbi5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7
CisgICAgaWYgKGZzdGF0KGZkLCAmcGF0aFN0YXQpID09IC0xKSB7CisgICAgICAgIGNvbnRleHQt
PmdyZWdzW1JFR19TWVNDQUxMXSA9IC1lcnJubzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKCFTX0lTRElSKHBhdGhTdGF0LnN0X21vZGUpKSB7CisgICAgICAgIGNv
bnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1FTk9URElSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBjaGFyIGZkTGlua1BhdGhbMzJdOworICAgIHNucHJpbnRmKGZk
TGlua1BhdGgsIHNpemVvZihmZExpbmtQYXRoKSwgIi9wcm9jL3NlbGYvZmQvJWQiLCBmZCk7CisK
KyAgICBjaGFyIGZkUGF0aFtQQVRIX01BWF07CisgICAgc3NpemVfdCBzaXplID0gcmVhZGxpbmso
ZmRMaW5rUGF0aCwgZmRQYXRoLCBzaXplb2YoZmRQYXRoKSAtIDEpOworICAgIGlmIChzaXplID09
IC0xKSB7CisgICAgICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1lcnJubzsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gVGhlICIrIDIiIGhlcmUgc3Rh
bmRzIGZvciB0aGUgJy8nIGFuZCBudWxsIHRlcm1pbmF0b3IuCisgICAgaWYgKHNpemUgKyBzdHJs
ZW4ocGF0aCkgKyAyID4gUEFUSF9NQVgpIHsKKyAgICAgICAgY29udGV4dC0+Z3JlZ3NbUkVHX1NZ
U0NBTExdID0gLUVOQU1FVE9PTE9ORzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgc3ByaW50ZigmZmRQYXRoW3NpemVdLCAiLyVzIiwgcGF0aCk7CisgICAgb3Blbi0+c2V0
UGF0aChmZFBhdGgpOworCisgICAgcmV0dXJuIG9wZW4ucmVsZWFzZSgpOworfQorCitQYXNzT3du
UHRyPFN5c2NhbGw+IE9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tQ3JlYXRDb250ZXh0KG1jb250ZXh0
X3QqIGNvbnRleHQpCit7CisgICAgT3BlblN5c2NhbGwqIG9wZW4gPSBuZXcgT3BlblN5c2NhbGwo
MCk7CisKKyAgICBvcGVuLT5zZXRQYXRoKENTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Y29udGV4dC0+Z3JlZ3NbUkVHX0FSRzBdKSkpOworICAgIG9wZW4tPnNldEZsYWdzKE9fQ1JFQVQg
fCBPX1dST05MWSB8IE9fVFJVTkMpOworICAgIG9wZW4tPnNldE1vZGUoY29udGV4dC0+Z3JlZ3Nb
UkVHX0FSRzFdKTsKKyAgICBvcGVuLT5zZXRDb250ZXh0KGNvbnRleHQpOworCisgICAgcmV0dXJu
IGFkb3B0UHRyKG9wZW4pOworfQorCitPcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwobWNvbnRleHRf
dCogY29udGV4dCkKKyAgICA6IFN5c2NhbGwoX19OUl9vcGVuLCBjb250ZXh0KQorICAgICwgbV9m
bGFncygwKQorICAgICwgbV9tb2RlKDApCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3BhdGggPSBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNv
bnRleHQtPmdyZWdzW1JFR19BUkcwXSkpOworICAgIG1fZmxhZ3MgPSBjb250ZXh0LT5ncmVnc1tS
RUdfQVJHMV07CisgICAgbV9tb2RlID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzJdOworfQorCit2
b2lkIE9wZW5TeXNjYWxsOjpzZXRSZXN1bHQoY29uc3QgU3lzY2FsbFJlc3VsdCogcmVzdWx0KQor
eworICAgIEFTU0VSVChjb250ZXh0KCkgJiYgcmVzdWx0LT50eXBlKCkgPT0gdHlwZSgpKTsKKwor
ICAgIGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0KiBvcGVuUmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgT3BlblN5c2NhbGxSZXN1bHQqPihyZXN1bHQpOworCisgICAgaWYgKG9wZW5SZXN1bHQtPmZk
KCkgPj0gMCkKKyAgICAgICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSBkdXAob3Bl
blJlc3VsdC0+ZmQoKSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0KCktPmdyZWdzW1JFR19T
WVNDQUxMXSA9IC1vcGVuUmVzdWx0LT5lcnJvck51bWJlcigpOworfQorCitQYXNzT3duUHRyPFN5
c2NhbGxSZXN1bHQ+IE9wZW5TeXNjYWxsOjpleGVjdXRlKGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBv
bGljeSkKK3sKKyAgICBpZiAoIXN0cm5jbXAoIi9wcm9jL3NlbGYvIiwgbV9wYXRoLmRhdGEoKSwg
MTEpKSB7CisgICAgICAgIFN0cmluZyByZXNvbHZlZFNlbGZQYXRoID0gQVNDSUlMaXRlcmFsKCIv
cHJvYy8iKSArIFN0cmluZzo6bnVtYmVyKGdldHBwaWQoKSkgKyAmbV9wYXRoLmRhdGEoKVsxMF07
CisgICAgICAgIG1fcGF0aCA9IHJlc29sdmVkU2VsZlBhdGgudXRmOCgpLmRhdGEoKTsKKyAgICB9
CisKKyAgICBTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uIHBlcm1pc3Npb24gPSBTeXNjYWxsUG9s
aWN5OjpOb3RBbGxvd2VkOworICAgIGlmIChtX2ZsYWdzICYgT19SRFdSKQorICAgICAgICBwZXJt
aXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lv
biB8IFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAgZWxzZSBpZiAobV9mbGFncyAm
IE9fV1JPTkxZKQorICAgICAgICBwZXJtaXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGlj
eTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKKyAgICBl
bHNlCisgICAgICAgIHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJt
aXNzaW9uPihwZXJtaXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisKKyAgICAvLyBDcmVh
dGUgYSBmaWxlIGltcGxpZXMgd3JpdGUgcGVybWlzc2lvbiBvbiB0aGUgZGlyZWN0b3J5LgorICAg
IGlmIChtX2ZsYWdzICYgT19DUkVBVCB8fCBtX2ZsYWdzICYgT19FWENMKQorICAgICAgICBwZXJt
aXNzaW9uID0gc3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lv
biB8IFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKKworICAgIGlmICghcG9saWN5Lmhhc1Blcm1pc3Np
b25Gb3JQYXRoKG1fcGF0aC5kYXRhKCksIHBlcm1pc3Npb24pKQorICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IE9wZW5TeXNjYWxsUmVzdWx0KC0xLCBFQUNDRVMpKTsKKworICAgIC8vIFBlcm1p
c3Npb24gZ3JhbnRlZCwgZXhlY3V0ZSB0aGUgc3lzY2FsbC4gVGhlIHN5c2NhbGwgbWlnaHQgc3Rp
bGwKKyAgICAvLyBmYWlsIGJlY2F1c2Ugb2YgaGFyZCBwZXJtaXNzaW9ucyBlbmZvcmNlZCBieSB0
aGUgZmlsZXN5c3RlbSBhbmQKKyAgICAvLyB0aGluZ3MgbGlrZSBpZiB0aGUgZW50cnkgZG9lcyBu
b3QgZXhpc3QuCisgICAgaW50IGZkID0gb3BlbihtX3BhdGguZGF0YSgpLCBtX2ZsYWdzLCBtX21v
ZGUpOworICAgIGludCBlcnJvck51bWJlciA9IGZkID09IC0xID8gZXJybm8gOiAwOworCisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdChmZCwgZXJyb3JOdW1iZXIpKTsK
K30KKwordm9pZCBPcGVuU3lzY2FsbDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHR5cGUoKTsKKyAgICBlbmNvZGVyIDw8
IG1fcGF0aDsKKyAgICBlbmNvZGVyIDw8IG1fZmxhZ3M7CisgICAgZW5jb2RlciA8PCBtX21vZGU7
Cit9CisKK2Jvb2wgT3BlblN5c2NhbGw6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGRlY29kZXIpCit7CisgICAgLy8gbV90eXBlIGFscmVhZHkgZGVjb2RlZCBieSB0aGUgcGFyZW50
IGNsYXNzLgorCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9wYXRoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1fZmxhZ3MpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKG1fbW9kZSk7Cit9CisK
K09wZW5TeXNjYWxsUmVzdWx0OjpPcGVuU3lzY2FsbFJlc3VsdChpbnQgZmQsIGludCBlcnJvck51
bWJlcikKKyAgICA6IFN5c2NhbGxSZXN1bHQoX19OUl9vcGVuKQorICAgICwgbV9mZChmZCkKKyAg
ICAsIG1fZXJyb3JOdW1iZXIoZXJyb3JOdW1iZXIpCit7Cit9CisKK09wZW5TeXNjYWxsUmVzdWx0
Ojp+T3BlblN5c2NhbGxSZXN1bHQoKQoreworICAgIGlmIChtX2ZkID49IDApCisgICAgICAgIGNs
b3NlKG1fZmQpOworfQorCit2b2lkIE9wZW5TeXNjYWxsUmVzdWx0OjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgdHlwZSgp
OworCisgICAgaWYgKG1fZmQgPj0gMCkgeworICAgICAgICBDb3JlSVBDOjpBdHRhY2htZW50IGF0
dGFjaG1lbnQobV9mZCk7CisgICAgICAgIGVuY29kZXIuYWRkQXR0YWNobWVudChhdHRhY2htZW50
KTsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IG1fZXJyb3JOdW1iZXI7Cit9CisKK2Jvb2wgT3Bl
blN5c2NhbGxSZXN1bHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IGludCBmZCkKK3sKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgbV9mZCA9IGZkOworCisgICAg
cmV0dXJuIGRlY29kZXItPmRlY29kZShtX2Vycm9yTnVtYmVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2Nh
bGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jMzAzNTg4ZTQ2ZjYyN2M0OGM4NzYwMjUwYTc2MjQ2NDk3NjI2NDc0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL09wZW5TeXNjYWxsLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBPcGVuU3lzY2FsbF9oCisjZGVmaW5lIE9wZW5TeXNjYWxsX2gKKworI2lmIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBBcmd1bWVu
dERlY29kZXI7CitjbGFzcyBBcmd1bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBPcGVuU3lzY2FsbCA6IHB1YmxpYyBTeXNjYWxsIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9tT3BlbmF0Q29udGV4dChtY29udGV4
dF90Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lzY2FsbD4gY3JlYXRlRnJvbUNyZWF0Q29u
dGV4dChtY29udGV4dF90Kik7CisKKyAgICBleHBsaWNpdCBPcGVuU3lzY2FsbChtY29udGV4dF90
Kik7CisKKyAgICB2b2lkIHNldFBhdGgoY29uc3QgQ1N0cmluZyYgcGF0aCkgeyBtX3BhdGggPSBw
YXRoOyB9OworICAgIHZvaWQgc2V0RmxhZ3MoY29uc3QgaW50IGZsYWdzKSB7IG1fZmxhZ3MgPSBm
bGFnczsgfTsKKyAgICB2b2lkIHNldE1vZGUoY29uc3QgbW9kZV90IG1vZGUpIHsgbV9tb2RlID0g
bW9kZTsgfTsKKworICAgIC8vIFN5c2NhbGwgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0Kik7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPFN5c2NhbGxSZXN1bHQ+IGV4ZWN1dGUoY29uc3QgU3lzY2FsbFBvbGljeSYpOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKworcHJpdmF0
ZToKKyAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICBpbnQgbV9mbGFnczsKKyAgICBtb2RlX3QgbV9t
b2RlOworfTsKKworY2xhc3MgT3BlblN5c2NhbGxSZXN1bHQgOiBwdWJsaWMgU3lzY2FsbFJlc3Vs
dCB7CitwdWJsaWM6CisgICAgT3BlblN5c2NhbGxSZXN1bHQoaW50IGZkLCBpbnQgZXJyb3JOdW1i
ZXIpOworICAgIH5PcGVuU3lzY2FsbFJlc3VsdCgpOworCisgICAgaW50IGZkKCkgY29uc3QgeyBy
ZXR1cm4gbV9mZDsgfQorICAgIGludCBlcnJvck51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJy
b3JOdW1iZXI7IH0KKworICAgIC8vIFN5c2NhbGxSZXN1bHQgaW1wbGVtZW50YXRpb24uCisgICAg
dmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGludCBmZCk7
CisKK3ByaXZhdGU6CisgICAgaW50IG1fZmQ7CisgICAgaW50IG1fZXJyb3JOdW1iZXI7Cit9Owor
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKKworI2VuZGlmIC8vIE9wZW5TeXNjYWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NDhmZGZmZWUxZWIxN2FiMWU1ODA1MDYwMjZjMTFjN2Y4Yjc2NTgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NlY2NvbXBCcm9rZXIuY3BwCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgorCisjaWYgRU5BQkxFKFNFQ0NP
TVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiU3lz
Y2FsbC5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl
IDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZm5k
ZWYgU1lTX1NFQ0NPTVAKKyNkZWZpbmUgU1lTX1NFQ0NPTVAgMQorI2VuZGlmCisKK3N0YXRpYyBj
b25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0IGNoYXIgb25s
aW5lQ1BVQ291bnRQYXRoW10gPSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lIjsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBCcm9rZXJDbGllbnQgeworcHVibGlj
OgorICAgIHN0YXRpYyBTZWNjb21wQnJva2VyQ2xpZW50JiBzaGFyZWQoaW50IHNvY2tldCA9IC0x
KTsKKyAgICB+U2VjY29tcEJyb2tlckNsaWVudCgpOworCisgICAgdm9pZCBkaXNwYXRjaChTeXNj
YWxsKikgY29uc3Q7CisKKyAgICBib29sIGhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KG1j
b250ZXh0X3QqKSBjb25zdDsKKyAgICBib29sIGhhbmRsZUlmVHJ5aW5nVG9CbG9ja1NJR1NZUyh1
Y29udGV4dF90KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU2VjY29tcEJyb2tlckNsaWVudChp
bnQgc29ja2V0KTsKKworICAgIGludCBtX3NvY2tldDsKKyAgICBpbnQgbV9vbmxpbmVDUFVDb3Vu
dEZkOworCisgICAgbXV0YWJsZSBNdXRleCBtX3NvY2tldExvY2s7Cit9OworCitzdGF0aWMgc3Np
emVfdCBzZW5kTWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50
IGZkID0gLTEpCit7CisgICAgQVNTRVJUKHNpemUgPD0gbWVzc2FnZU1heFNpemUpOworCisgICAg
c3RydWN0IG1zZ2hkciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1l
c3NhZ2UpKTsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgbWVtc2V0KCZpb3YsIDAsIHNp
emVvZihpb3YpKTsKKyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuID0g
c2l6ZTsKKworICAgIG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92
bGVuID0gMTsKKworICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKKyAg
ICBpZiAoZmQgPj0gMCkgeworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gY29udHJvbDsK
KyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKKyAgICAg
ICAgbWVtc2V0KG1lc3NhZ2UubXNnX2NvbnRyb2wsIDAsIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4p
OworCisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhEUigmbWVzc2Fn
ZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOworICAgICAgICBjbXNn
LT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IENNU0df
TEVOKHNpemVvZihmZCkpOworCisgICAgICAgIG1lbW1vdmUoQ01TR19EQVRBKGNtc2cpLCAmZmQs
IHNpemVvZihmZCkpOworICAgIH0KKworICAgIHJldHVybiBzZW5kbXNnKHNvY2tldCwgJm1lc3Nh
Z2UsIDApOworfQorCitzdGF0aWMgc3NpemVfdCByZWNlaXZlTWVzc2FnZShpbnQgc29ja2V0LCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50KiBmZCA9IDApCit7CisgICAgc3RydWN0IG1zZ2hk
ciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKKwor
ICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsK
KyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKKworICAg
IG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKKwor
ICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKKyAgICBtZXNzYWdlLm1z
Z19jb250cm9sID0gY29udHJvbDsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9m
KGNvbnRyb2wpOworICAgIG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1z
Z19jb250cm9sbGVuKTsKKworICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY3Ztc2coc29j
a2V0LCAmbWVzc2FnZSwgMCk7CisKKyAgICBpZiAoZmQgJiYgcmVjZWl2ZWRCeXRlcyA+IDApIHsK
KyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsK
KyAgICAgICAgaWYgKGNtc2cgJiYgY21zZy0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNt
c2ctPmNtc2dfdHlwZSA9PSBTQ01fUklHSFRTKQorICAgICAgICAgICAgbWVtY3B5KGZkLCBDTVNH
X0RBVEEoY21zZyksIHNpemVvZigqZmQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmZk
ID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJlY2VpdmVkQnl0ZXMgPj0gMCA/IHJlY2VpdmVk
Qnl0ZXMgOiAtZXJybm87Cit9CisKK3N0YXRpYyB2b2lkIFNJR1NZU0hhbmRsZXIoaW50IHNpZ25h
bCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBkYXRhKQoreworICAgIGlmIChzaWduYWwgIT0gU0lH
U1lTIHx8IGluZm8tPnNpX2NvZGUgIT0gU1lTX1NFQ0NPTVApCisgICAgICAgIENSQVNIKCk7CisK
KyAgICB1Y29udGV4dF90KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KGRhdGEp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIFNlY2NvbXBCcm9r
ZXJDbGllbnQqIGNsaWVudCA9ICZTZWNjb21wQnJva2VyQ2xpZW50OjpzaGFyZWQoKTsKKworICAg
IGlmIChjbGllbnQtPmhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KCZjb250ZXh0LT51Y19t
Y29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2xpZW50LT5oYW5kbGVJZlRyeWlu
Z1RvQmxvY2tTSUdTWVMoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAgIE93blB0cjxT
eXNjYWxsPiBzeXNjYWxsID0gU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQoJmNvbnRleHQtPnVj
X21jb250ZXh0KTsKKyAgICBjbGllbnQtPmRpc3BhdGNoKHN5c2NhbGwuZ2V0KCkpOworfQorCitz
dGF0aWMgdm9pZCByZWdpc3RlclNJR1NZU0hhbmRsZXIoKQoreworICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7CisgICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZTSUdTWVNIYW5kbGVyOworICAgIGFjdGlvbi5zYV9mbGFn
cyA9IFNBX1NJR0lORk8gfCBTQV9OT0RFRkVSOworCisgICAgaWYgKHNpZ2FjdGlvbihTSUdTWVMs
ICZhY3Rpb24sIDApIDwgMCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHNpZ3NldF90IG1hc2s7
CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywgU0lHU1lTKTsK
KworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApIDwgMCkKKyAgICAg
ICAgQ1JBU0goKTsKK30KKworU2VjY29tcEJyb2tlckNsaWVudCYgU2VjY29tcEJyb2tlckNsaWVu
dDo6c2hhcmVkKGludCBzb2NrZXQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTZWNjb21w
QnJva2VyQ2xpZW50LCBicm9rZXJDbGllbnQsIChzb2NrZXQpKTsKKworICAgIHJldHVybiBicm9r
ZXJDbGllbnQ7Cit9CisKK1NlY2NvbXBCcm9rZXJDbGllbnQ6OlNlY2NvbXBCcm9rZXJDbGllbnQo
aW50IHNvY2tldCkKKyAgICA6IG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fb25saW5lQ1BVQ291
bnRGZChvcGVuKG9ubGluZUNQVUNvdW50UGF0aCwgT19SRE9OTFkpKQoreworICAgIEFTU0VSVCht
X3NvY2tldCA+PSAwICYmIG1fb25saW5lQ1BVQ291bnRGZCA+PSAwKTsKK30KKworU2VjY29tcEJy
b2tlckNsaWVudDo6flNlY2NvbXBCcm9rZXJDbGllbnQoKQoreworICAgIGNsb3NlKG1fc29ja2V0
KTsKKyAgICBjbG9zZShtX29ubGluZUNQVUNvdW50RmQpOworfQorCit2b2lkIFNlY2NvbXBCcm9r
ZXJDbGllbnQ6OmRpc3BhdGNoKFN5c2NhbGwqIHN5c2NhbGwpIGNvbnN0Cit7CisgICAgaWYgKCFz
eXNjYWxsKQorICAgICAgICByZXR1cm47CisKKyAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyPiBlbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGUoKnN5c2NhbGwpOworCisgICAgY2hhciBidWZmZXJbbWVzc2FnZU1h
eFNpemVdOworICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IDA7CisgICAgaW50IGZkID0gLTE7
CisKKyAgICBtX3NvY2tldExvY2subG9jaygpOworCisgICAgaWYgKHNlbmRNZXNzYWdlKG1fc29j
a2V0LCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpKSA8IDApCisgICAg
ICAgIENSQVNIKCk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICByZWNlaXZlZEJ5dGVz
ID0gcmVjZWl2ZU1lc3NhZ2UobV9zb2NrZXQsICZidWZmZXIsIHNpemVvZihidWZmZXIpLCAmZmQp
OworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA+IDApCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyAhPSAtRUlOVFIpCisgICAgICAgICAgICBDUkFTSCgp
OworICAgIH0KKworICAgIG1fc29ja2V0TG9jay51bmxvY2soKTsKKworICAgIE93blB0cjxDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXI+IGRlY29kZXIgPSBDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6
OmNyZWF0ZSgoY29uc3QgdWludDhfdCopIGJ1ZmZlciwgcmVjZWl2ZWRCeXRlcyk7CisgICAgT3du
UHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IFN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNv
ZGVyKGRlY29kZXIuZ2V0KCksIGZkKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgQ1JBU0go
KTsKKworICAgIHN5c2NhbGwtPnNldFJlc3VsdChyZXN1bHQuZ2V0KCkpOworfQorCitib29sIFNl
Y2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KG1jb250ZXh0
X3QqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxM
XSAhPSBfX05SX29wZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIg
KnBhdGggPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF0p
OworICAgIGlmIChzdHJjbXAob25saW5lQ1BVQ291bnRQYXRoLCBwYXRoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gTWFsbG9jIHdpbGwgZXZlbnR1YWxseSBjaGVjayB0aGUgbnVt
YmVyIG9mIG9ubGluZSBDUFVzIChpLmUgYmVpbmcKKyAgICAvLyBzY2hlZHVsZWQpIHByZXNlbnQg
b24gdGhlIHN5c3RlbSBieSBvcGVuaW5nIGEgc3BlY2lhbCBmaWxlLiBJZiBpdCBkb2VzCisgICAg
Ly8gdGhhdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBTSUdTWVMgc2lnbmFsIGhhbmRsZXIsIGl0IG1p
Z2h0IHRyaWdnZXIgYQorICAgIC8vIHJlY3Vyc2l2ZSBhdHRlbXB0IG9mIHByb3h5aW5nIHRoZSBv
cGVuKCkgc3lzY2FsbCB0byB0aGUgYnJva2VyLgorICAgIC8vIEJlY2F1c2Ugb2YgdGhhdCwgd2Ug
Y2FjaGUgdGhpcyByZXNvdXJjZS4KKyAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSBk
dXAobV9vbmxpbmVDUFVDb3VudEZkKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNl
Y2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmVHJ5aW5nVG9CbG9ja1NJR1NZUyh1Y29udGV4dF90
KiB1Y29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkgZG8gdGhlIHNh
bWUgdGhpbmcgaWYgYSBwcm9jZXNzIHRyaWVzIHRvIG92ZXJyaWRlIHRoZQorICAgIC8vIFNJR1NZ
UyBzaWduYWwgaGFuZGxlLCBidXQgdGhpcyBpcyB2ZXJ5IHVubGlrZWx5IHRvIGhhcHBlbi4KKyAg
ICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIG1jb250ZXh0X3QgbWNvbnRleHQgPSB1
Y29udGV4dC0+dWNfbWNvbnRleHQ7CisjaWYgQ1BVKFg4NikKKyAgICBpZiAobWNvbnRleHQuZ3Jl
Z3NbUkVHX1NZU0NBTExdID09IF9fTlJfc2lncHJvY21hc2spCisgICAgICAgIHNob3VsZEhhbmRs
ZSA9IHRydWU7CisjZW5kaWYKKyAgICBpZiAobWNvbnRleHQuZ3JlZ3NbUkVHX1NZU0NBTExdID09
IF9fTlJfcnRfc2lncHJvY21hc2spCisgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisKKyAg
ICBpZiAoIXNob3VsZEhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGhv
dyA9IG1jb250ZXh0LmdyZWdzW1JFR19BUkcwXTsKKyAgICBzaWdzZXRfdCogc2V0ID0gcmVpbnRl
cnByZXRfY2FzdDxzaWdzZXRfdCo+KG1jb250ZXh0LmdyZWdzW1JFR19BUkcxXSk7CisgICAgc2ln
c2V0X3QqIG9sZFNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2lnc2V0X3QqPihtY29udGV4dC5ncmVn
c1tSRUdfQVJHMl0pOworCisgICAgaWYgKG9sZFNldCkKKyAgICAgICAgbWVtY3B5KG9sZFNldCwg
JnVjb250ZXh0LT51Y19zaWdtYXNrLCBzaXplb2Yoc2lnc2V0X3QpKTsKKworICAgIGlmIChob3cg
PT0gU0lHX1NFVE1BU0spCisgICAgICAgIG1lbWNweSgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNl
dCwgc2l6ZW9mKHNpZ3NldF90KSk7CisgICAgZWxzZQorICAgICAgICBzaWdvcnNldCgmdWNvbnRl
eHQtPnVjX3NpZ21hc2ssIHNldCwgJnVjb250ZXh0LT51Y19zaWdtYXNrKTsKKworICAgIHNpZ2Rl
bHNldCgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIFNJR1NZUyk7CisgICAgbWNvbnRleHQuZ3JlZ3Nb
UkVHX1NZU0NBTExdID0gMDsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNlY2NvbXBC
cm9rZXI6OmxhdW5jaFByb2Nlc3MoU2VjY29tcEZpbHRlcnMqIGZpbHRlcnMsIGNvbnN0IFN5c2Nh
bGxQb2xpY3kmIHBvbGljeSkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNl
OworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHNp
Z3Byb2NtYXNrIGZpbHRlcnMgYmVsbG93IGFyZSBuZWVkZWQgYnkgaGFuZGxlSWZUcnlpbmdUb0Js
b2NrU0lHU1lTKCkKKyAgICAvLyBzbyB3ZSBjYW4gcHJldmVudCB0aGUgcnVubmluZyBwcm9jZXNz
ZXMgZnJvbSBibG9ja2luZyBTSUdTWVMuCisjaWYgQ1BVKFg4NikKKyAgICBmaWx0ZXJzLT5hZGRS
dWxlKCJzaWdwcm9jbWFzayIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNj
b21wRmlsdGVyczo6RXF1YWwsIFNJR19CTE9DSywKKyAgICAgICAgMSwgU2VjY29tcEZpbHRlcnM6
Ok5vdEVxdWFsLCAwKTsKKyAgICBmaWx0ZXJzLT5hZGRSdWxlKCJzaWdwcm9jbWFzayIsIFNlY2Nv
bXBGaWx0ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNjb21wRmlsdGVyczo6RXF1YWwsIFNJR19T
RVRNQVNLLAorICAgICAgICAxLCBTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwsIDApOworI2VuZGlm
CisgICAgZmlsdGVycy0+YWRkUnVsZSgicnRfc2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6
VHJhcCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVxdWFsLCBTSUdfQkxPQ0ssCisgICAg
ICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCwgMCk7CisgICAgZmlsdGVycy0+YWRkUnVs
ZSgicnRfc2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKKyAgICAgICAgMCwgU2Vj
Y29tcEZpbHRlcnM6OkVxdWFsLCBTSUdfU0VUTUFTSywKKyAgICAgICAgMSwgU2VjY29tcEZpbHRl
cnM6Ok5vdEVxdWFsLCAwKTsKKworICAgIFNlY2NvbXBCcm9rZXIgc2VjY29tcEJyb2tlcjsKKyAg
ICBzZWNjb21wQnJva2VyLnNldFN5c2NhbGxQb2xpY3kocG9saWN5KTsKKyAgICBzZWNjb21wQnJv
a2VyLmluaXRpYWxpemUoKTsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKK30KKwordm9pZCBT
ZWNjb21wQnJva2VyOjppbml0aWFsaXplKCkKK3sKKyAgICBpbnQgc29ja2V0c1syXTsKKyAgICBp
ZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKQorICAg
ICAgICBDUkFTSCgpOworCisgICAgcGlkX3QgcGlkID0gZm9yaygpOworICAgIGlmIChwaWQpIHsg
Ly8gV2ViUHJvY2Vzcy4KKyAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7CisgICAgICAgIFNlY2Nv
bXBCcm9rZXJDbGllbnQ6OnNoYXJlZChzb2NrZXRzWzBdKTsKKyAgICAgICAgcmVnaXN0ZXJTSUdT
WVNIYW5kbGVyKCk7CisgICAgfSBlbHNlIHsgLy8gQnJva2VyLgorICAgICAgICAvLyBUT0RPOiBU
aGUgYnJva2VyIHNob3VsZCBzZXR1cCBzZWNjb21wIGZpbHRlcnMKKyAgICAgICAgLy8gZm9yIGl0
c2VsZiBhbmQgYmxvY2sgZXZlcnl0aGluZyBlbHNlIG90aGVyIHRoYW4KKyAgICAgICAgLy8gdGhl
IG1pbmltYWwgc2V0IG9mIHN5c2NhbGxzIG5lZWRlZCB0byBleGVjdXRlIHRoZQorICAgICAgICAv
LyBzeXNjYWxscyBpdCBpcyBzdXBwb3NlIHRvIHByb3h5LgorICAgICAgICBjbG9zZShzb2NrZXRz
WzBdKTsKKyAgICAgICAgcnVuTG9vcChzb2NrZXRzWzFdKTsKKyAgICB9Cit9CisKK05PX1JFVFVS
TiB2b2lkIFNlY2NvbXBCcm9rZXI6OnJ1bkxvb3AoaW50IHNvY2tldCkKK3sKKyNpZm5kZWYgTkRF
QlVHCisgICAgaW50IGkgPSBTVERFUlJfRklMRU5PICsgMTsKKyNlbHNlCisgICAgaW50IGkgPSAw
OworI2VuZGlmCisgICAgLy8gQ2xvc2UgYWxsIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIG90
aGVyCisgICAgLy8gdGhhbiB0aGUgc29ja2V0IHRvIHRoZSBzYW5kYm94ZWQgcHJvY2Vzcy4KKyAg
ICBmb3IgKDsgaSA8IEZEX1NFVFNJWkU7ICsraSkKKyAgICAgICAgaWYgKGkgIT0gc29ja2V0KQor
ICAgICAgICAgICAgY2xvc2UoaSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFy
IGJ1ZmZlclttZXNzYWdlTWF4U2l6ZV07CisgICAgICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9
IHJlY2VpdmVNZXNzYWdlKHNvY2tldCwgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAg
ICBpZiAocmVjZWl2ZWRCeXRlcyA9PSAtRUlOVFIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA8PSAwKQorICAgICAgICAgICAgZXhpdChyZWNlaXZl
ZEJ5dGVzID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTKTsKKworICAgICAgICBPd25QdHI8
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyPiBkZWNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyOjpjcmVhdGUoKGNvbnN0IHVpbnQ4X3QqKSBidWZmZXIsIHJlY2VpdmVkQnl0ZXMpOworICAg
ICAgICBPd25QdHI8U3lzY2FsbD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVy
KGRlY29kZXIuZ2V0KCkpOworICAgICAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgICAgICBleGl0
KEVYSVRfRkFJTFVSRSk7CisKKyAgICAgICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9
IHN5c2NhbGwtPmV4ZWN1dGUobV9wb2xpY3kpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKworICAgICAgICBPd25QdHI8Q29yZUlQQzo6QXJn
dW1lbnRFbmNvZGVyPiBlbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUo
KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKCpyZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxD
b3JlSVBDOjpBdHRhY2htZW50PiBhdHRhY2htZW50cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2ht
ZW50cygpOworICAgICAgICBpbnQgZmQgPSBhdHRhY2htZW50cy5zaXplKCkgPT0gMSA/IGF0dGFj
aG1lbnRzWzBdLmZpbGVEZXNjcmlwdG9yKCkgOiAtMTsKKworICAgICAgICAvLyBUaGUgY2xpZW50
IGlzIGRvd24sIHRoZSBicm9rZXIgc2hvdWxkIGdvIGF3YXkuCisgICAgICAgIGlmIChzZW5kTWVz
c2FnZShzb2NrZXQsIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCksIGZk
KSA8IDApCisgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2Vj
Y29tcEJyb2tlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NlY2NvbXBCcm9rZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzVjODZiNzRlN2Y3ZTI0OTYxYzg3OGNhNmEy
N2MwNTRjZWY4ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlY2NvbXBCcm9rZXJfaAorI2RlZmluZSBTZWNjb21w
QnJva2VyX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJTZWNj
b21wRmlsdGVycy5oIgorI2luY2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNsdWRlICJTeXNjYWxsUG9s
aWN5LmgiCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBCcm9rZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNlY2NvbXBCcm9rZXIpOworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQg
bGF1bmNoUHJvY2VzcyhTZWNjb21wRmlsdGVycyosIGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgc2V0U3lzY2FsbFBvbGljeShjb25zdCBT
eXNjYWxsUG9saWN5JiBwb2xpY3kpIHsgbV9wb2xpY3kgPSBwb2xpY3k7IH0KKworcHJpdmF0ZToK
KyAgICBTZWNjb21wQnJva2VyKCkgeyB9CisKKyAgICB2b2lkIHJ1bkxvb3AoaW50IHNvY2tldCk7
CisKKyAgICBTeXNjYWxsUG9saWN5IG1fcG9saWN5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjZW5kaWYgLy8gU2Vj
Y29tcEJyb2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDkxYmQx
NjdkMWQzMTgxOWE2Y2FjYzRkMWJkYjAwZDUwYzNiYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmNw
cApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9G
SUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgorI2luY2x1ZGUgPHNlY2NvbXAu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Q09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OkFsbG93ID09IFNDTVBfQUNUX0FMTE9XLCBB
bGxvdyk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6S2lsbCA9PSBTQ01QX0FDVF9L
SUxMLCBLaWxsKTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpUcmFwID09IFNDTVBf
QUNUX1RSQVAsIFRyYXApOworCitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90U2V0
ID09IHN0YXRpY19jYXN0PFNlY2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oX1NDTVBfQ01QX01JTiks
IE5vdFNldCk7CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwgPT0gc3Rh
dGljX2Nhc3Q8U2VjY29tcEZpbHRlcnM6Ok9wZXJhdG9yPihTQ01QX0NNUF9ORSksIE5vdEVxdWFs
KTsKK0NPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCA9PSBzdGF0aWNfY2FzdDxT
ZWNjb21wRmlsdGVyczo6T3BlcmF0b3I+KFNDTVBfQ01QX0VRKSwgRXF1YWwpOworCitDT01QSUxF
X0FTU0VSVChzaXplb2Yoc2NtcF9kYXR1bV90KSA9PSBzaXplb2YobG9uZyBsb25nKSwgc2NtcF9k
YXR1bV90KTsKKworU2VjY29tcEZpbHRlcnM6OlNlY2NvbXBGaWx0ZXJzKEFjdGlvbiBkZWZhdWx0
QWN0aW9uKQorICAgIDogbV9jb250ZXh0KHNlY2NvbXBfaW5pdChkZWZhdWx0QWN0aW9uKSkKKyAg
ICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK1NlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRlcnMoKQoreworICAg
IHNlY2NvbXBfcmVsZWFzZShtX2NvbnRleHQpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjph
ZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24gYWN0aW9uLAorICAgIHVuc2ln
bmVkIGFyZ051bTEsIE9wZXJhdG9yIG9wZXJhdG9yMSwgbG9uZyBsb25nIGRhdGExLAorICAgIHVu
c2lnbmVkIGFyZ051bTIsIE9wZXJhdG9yIG9wZXJhdG9yMiwgbG9uZyBsb25nIGRhdGEyKQorewor
ICAgIGludCBzeXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbmFtZShzeXNjYWxsTmFt
ZSk7CisgICAgaWYgKHN5c2NhbGwgPT0gX19OUl9TQ01QX0VSUk9SKQorICAgICAgICBDUkFTSCgp
OworCisgICAgaW50IHJlc3VsdDsKKyAgICBpZiAob3BlcmF0b3IyICE9IE5vdFNldCkKKyAgICAg
ICAgcmVzdWx0ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwgc3lzY2FsbCwg
MiwKKyAgICAgICAgICAgIFNDTVBfQ01QKGFyZ051bTEsIHN0YXRpY19jYXN0PHNjbXBfY29tcGFy
ZT4ob3BlcmF0b3IxKSwgZGF0YTEsIDApLAorICAgICAgICAgICAgU0NNUF9DTVAoYXJnTnVtMiwg
c3RhdGljX2Nhc3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjIpLCBkYXRhMiwgMCkpOworICAgIGVs
c2UgaWYgKG9wZXJhdG9yMSAhPSBOb3RTZXQpCisgICAgICAgIHJlc3VsdCA9IHNlY2NvbXBfcnVs
ZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDEsCisgICAgICAgICAgICBTQ01QX0NN
UChhcmdOdW0xLCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9wZXJhdG9yMSksIGRhdGExLCAw
KSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRkKG1fY29udGV4
dCwgYWN0aW9uLCBzeXNjYWxsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICBD
UkFTSCgpOworfQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wbGVtZW50IHRo
aXMgaXMgbm90IHJlcXVpcmVkIGluIGNhc2Ugd2UgYXJlIGp1c3QKKyAgICAvLyBzZXR0aW5nIGZp
bHRlcnMuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKKyAgICAvLyBicm9rZXIg
YW5kIHN5c2NhbGwgcG9saWN5IG90aGVyd2lzZS4KKyAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
KworICAgIGlmIChzZWNjb21wX2xvYWQobV9jb250ZXh0KSA8IDApCisgICAgICAgIENSQVNIKCk7
CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kNDllMWZiNjJlNmQ4MDM2NWYxYTJhOTA2Yzk1NzRlZGFkZThmNGFmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0
ZXJzL1NlY2NvbXBGaWx0ZXJzLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJzX2gKKwor
I2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wRmlsdGVycyk7CisKK3B1YmxpYzoKKyAgICBlbnVt
IEFjdGlvbiB7CisgICAgICAgIEFsbG93ID0gMHg3ZmZmMDAwMFUsCisgICAgICAgIEtpbGwgID0g
MHgwMDAwMDAwMFUsCisgICAgICAgIFRyYXAgID0gMHgwMDAzMDAwMFUKKyAgICB9OworCisgICAg
ZW51bSBPcGVyYXRvciB7CisgICAgICAgIE5vdFNldCAgID0gMCwKKyAgICAgICAgTm90RXF1YWwg
PSAxLAorICAgICAgICBFcXVhbCAgICA9IDQKKyAgICB9OworCisgICAgZXhwbGljaXQgU2VjY29t
cEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pOworICAgIHZpcnR1YWwgflNlY2NvbXBGaWx0
ZXJzKCk7CisKKyAgICB2b2lkKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OworCisg
ICAgdm9pZCBhZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24sCisgICAgICAg
IHVuc2lnbmVkIGFyZ051bTEgPSAwLCBPcGVyYXRvciBvcGVyYXRvcjEgPSBOb3RTZXQsIGxvbmcg
bG9uZyBkYXRhMSA9IDAsCisgICAgICAgIHVuc2lnbmVkIGFyZ051bTIgPSAwLCBPcGVyYXRvciBv
cGVyYXRvcjIgPSBOb3RTZXQsIGxvbmcgbG9uZyBkYXRhMiA9IDApOworCisgICAgdm9pZCBpbml0
aWFsaXplKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICpIQU5ETEU7CisKKyAgICBIQU5ETEUgbV9jb250
ZXh0OworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2Nv
bXBGaWx0ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TeXNjYWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGU4MDJiMGQxNjkzMmIwNjE5YjNj
ZGI1OTZmNjZhNDFlMmU2NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzY2Fs
bC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzLmgiCisjaW5jbHVkZSAiT3BlblN5c2NhbGwuaCIKKyNpbmNsdWRlIDxzZWNjb21wLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFN5c2NhbGw+IFN5c2NhbGw6OmNy
ZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQpCit7CisgICAgc3dpdGNoIChjb250
ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0pIHsKKyAgICBjYXNlIF9fTlJfb3BlbjoKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbChjb250ZXh0KSk7CisgICAgY2FzZSBfX05S
X29wZW5hdDoKKyAgICAgICAgcmV0dXJuIE9wZW5TeXNjYWxsOjpjcmVhdGVGcm9tT3BlbmF0Q29u
dGV4dChjb250ZXh0KTsKKyAgICBjYXNlIF9fTlJfY3JlYXQ6CisgICAgICAgIHJldHVybiBPcGVu
U3lzY2FsbDo6Y3JlYXRlRnJvbUNyZWF0Q29udGV4dChjb250ZXh0KTsKKyAgICBkZWZhdWx0Ogor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgY2hhciogc3lzY2FsbCA9IHNlY2NvbXBfc3lzY2FsbF9y
ZXNvbHZlX251bV9hcmNoKFNDTVBfQVJDSF9OQVRJVkUsIGNvbnRleHQtPmdyZWdzW1JFR19TWVND
QUxMXSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VjY29tcEJyb2tlckNsaWVudDogc3lz
Y2FsbCBub3QgaGFuZGxlZCAnJXMnLlxuIiwgc3lzY2FsbCk7CisgICAgICAgIGZyZWUoc3lzY2Fs
bCk7CisjZW5kaWYKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2RlcihD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7CisgICAgaW50IHR5cGU7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGw7CisgICAgaWYgKHR5cGUgPT0gX19OUl9vcGVuKQor
ICAgICAgICBzeXNjYWxsID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsKDApKTsKKworICAgIGlm
ICghc3lzY2FsbC0+ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBzeXNjYWxsLnJlbGVhc2UoKTsKK30KKworU3lzY2FsbDo6U3lzY2FsbChpbnQg
dHlwZSwgbWNvbnRleHRfdCogY29udGV4dCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCit7Cit9CisKK1Bhc3NPd25QdHI8U3lzY2FsbFJlc3VsdD4gU3lzY2Fs
bFJlc3VsdDo6Y3JlYXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBpbnQgZmQpCit7CisgICAgaW50IHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
dHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgT3duUHRyPFN5c2NhbGxSZXN1
bHQ+IHJlc3VsdDsKKyAgICBpZiAodHlwZSA9PSBfX05SX29wZW4pCisgICAgICAgIHJlc3VsdCA9
IGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwgMCkpOworCisgICAgaWYgKCFyZXN1
bHQtPmRlY29kZShkZWNvZGVyLCBmZCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1N5c2NhbGxSZXN1bHQ6OlN5c2NhbGxSZXN1
bHQoaW50IHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODNmMTA1YjMwMTQ3OGQ0ZDQzZTA3OTQ3OTkzNjk0ZWZlM2IyNzkwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNj
YWxsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lz
Y2FsbF9oCisjZGVmaW5lIFN5c2NhbGxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KworI2lmIENQVShYODZfNjQpCisjZGVmaW5lIFJFR19TWVNDQUxMIFJFR19SQVgKKyNkZWZpbmUg
UkVHX0FSRzAgICAgUkVHX1JESQorI2RlZmluZSBSRUdfQVJHMSAgICBSRUdfUlNJCisjZGVmaW5l
IFJFR19BUkcyICAgIFJFR19SRFgKKyNkZWZpbmUgUkVHX0FSRzMgICAgUkVHX1IxMAorI2VsaWYg
Q1BVKFg4NikKKyNkZWZpbmUgUkVHX1NZU0NBTEwgUkVHX0VBWAorI2RlZmluZSBSRUdfQVJHMCAg
ICBSRUdfRUJYCisjZGVmaW5lIFJFR19BUkcxICAgIFJFR19FQ1gKKyNkZWZpbmUgUkVHX0FSRzIg
ICAgUkVHX0VEWAorI2RlZmluZSBSRUdfQVJHMyAgICBSRUdfRVNJCisjZWxzZQorI2Vycm9yICJD
UFUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50
RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFN5c2NhbGxSZXN1bHQ7CitjbGFzcyBTeXNjYWxsUG9saWN5OworCitjbGFzcyBT
eXNjYWxsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsKTsKKworcHVibGljOgor
ICAgIHZpcnR1YWwgflN5c2NhbGwoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2Nh
bGw+IGNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0X3QqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsK
KworICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2b2lkIHNl
dENvbnRleHQobWNvbnRleHRfdCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9Cisg
ICAgbWNvbnRleHRfdCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0KikgPSAwOworICAg
IHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRlKGNvbnN0IFN5c2NhbGxQ
b2xpY3kmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNjYWxsKGludCB0eXBlLCBt
Y29udGV4dF90Kik7CisKK3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsKKyAgICBtY29udGV4dF90
KiBtX2NvbnRleHQ7Cit9OworCitjbGFzcyBTeXNjYWxsUmVzdWx0IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTeXNjYWxsUmVzdWx0KTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2Nh
bGxSZXN1bHQoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5c2NhbGxSZXN1bHQ+IGNy
ZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGludCBmZCk7CisKKyAg
ICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmlydHVhbCB2b2lk
IGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQ9LTEpID0gMDsK
KworcHJvdGVjdGVkOgorICAgIFN5c2NhbGxSZXN1bHQoaW50IHR5cGUpOworCitwcml2YXRlOgor
ICAgIGludCBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsUG9s
aWN5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNj
YWxsUG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjViOGZkNmU4NGU0ZDRkNmQzNWExOGJhNDMyMGNi
M2MwZTNhMWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzY2FsbFBv
bGljeS5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIldlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0YXRpYyBTdHJpbmcgcmVtb3ZlVHJhaWxpbmdTbGFzaChjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoJy8nKSkKKyAgICAgICAgcmV0
dXJuIHBhdGgubGVmdChwYXRoLmxlbmd0aCgpIC0gMSk7CisKKyAgICByZXR1cm4gcGF0aDsKK30K
KworYm9vbCBTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aChjb25zdCBjaGFyKiBw
YXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pIGNvbnN0Cit7CisgICAgLy8gVGhlIHJvb3QgZGly
ZWN0b3J5IHBvbGljeSBuZWVkcyB0byBiZSBzZXQgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAvLyB1
bHRpbWF0ZSBmYWxsYmFjayB3aGVuIHJld2luZGluZyBkaXJlY3Rvcmllcy4KKyAgICBBU1NFUlQo
bV9kaXJlY3RvcnlQZXJtaXNzaW9uLmNvbnRhaW5zKCIvIikpOworCisgICAgaWYgKHBlcm1pc3Np
b24gPT0gTm90QWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2hhciogYmFz
ZVBhdGggPSBzdHJkdXAocGF0aCk7CisgICAgY2hhciogY2Fub25pY2FsUGF0aCA9IGNhbm9uaWNh
bGl6ZV9maWxlX25hbWUoYmFzZVBhdGgpOworCisgICAgd2hpbGUgKGNhbm9uaWNhbFBhdGgpIHsK
KyAgICAgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7CisgICAgICAgIGlmIChzdGF0KGNhbm9uaWNh
bFBhdGgsICZwYXRoU3RhdCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGZyZWUoYmFzZVBhdGgpOwor
ICAgICAgICAgICAgZnJlZShjYW5vbmljYWxQYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTX0lTRElSKHBhdGhTdGF0LnN0X21vZGUpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgUGVybWlzc2lvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgcG9saWN5ID0gbV9maWxlUGVybWlzc2lvbi5maW5kKFN0cmluZyhjYW5vbmljYWxQYXRoKSk7
CisgICAgICAgIGlmIChwb2xpY3kgIT0gbV9maWxlUGVybWlzc2lvbi5lbmQoKSkgeworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgICAgIGlmICgocGVybWlzc2lvbiAmIHBvbGljeS0+dmFsdWUpICE9
IHBlcm1pc3Npb24pCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZWNjb21wQnJv
a2VyOiBhY2Nlc3MgZGVuaWVkIHRvICVzXG4iLCBwYXRoKTsKKyNlbmRpZgorICAgICAgICAgICAg
ZnJlZShiYXNlUGF0aCk7CisgICAgICAgICAgICBmcmVlKGNhbm9uaWNhbFBhdGgpOworICAgICAg
ICAgICAgcmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgPT0gcGVybWlzc2lvbjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5vdCBhIGRpcmVjdG9yeSBuZWl0aGVyIGEgZmls
ZSB3aXRoIGEgcG9saWN5IGRlZmluZWQsCisgICAgICAgIC8vIHdlIHNldCBjYW5vbmljYWxQYXRo
IHRvIHplcm8gdG8gZm9yY2UgYSByZXdpbmQgdG8gdGhlIHBhcmVudAorICAgICAgICAvLyBkaXJl
Y3RvcnkuCisgICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7CisgICAgICAgIGNhbm9uaWNhbFBh
dGggPSAwOworICAgIH0KKworICAgIHdoaWxlICghY2Fub25pY2FsUGF0aCkgeworICAgICAgICBj
aGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoYmFzZVBhdGgpOworICAgICAgICBj
YW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShjdXJyZW50QmFzZURpcmVjdG9y
eSk7CisgICAgfQorCisgICAgUGVybWlzc2lvbk1hcDo6Y29uc3RfaXRlcmF0b3IgcG9saWN5ID0g
bV9kaXJlY3RvcnlQZXJtaXNzaW9uLmZpbmQoU3RyaW5nKGNhbm9uaWNhbFBhdGgpKTsKKyAgICB3
aGlsZSAocG9saWN5ID09IG1fZGlyZWN0b3J5UGVybWlzc2lvbi5lbmQoKSkgeworICAgICAgICBj
aGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoY2Fub25pY2FsUGF0aCk7CisgICAg
ICAgIHBvbGljeSA9IG1fZGlyZWN0b3J5UGVybWlzc2lvbi5maW5kKFN0cmluZyhjdXJyZW50QmFz
ZURpcmVjdG9yeSkpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoKHBlcm1pc3Np
b24gJiBwb2xpY3ktPnZhbHVlKSAhPSBwZXJtaXNzaW9uKQorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlNlY2NvbXBCcm9rZXI6IGFjY2VzcyBkZW5pZWQgdG8gJXNcbiIsIHBhdGgpOworI2VuZGlm
CisKKyAgICBmcmVlKGJhc2VQYXRoKTsKKyAgICBmcmVlKGNhbm9uaWNhbFBhdGgpOworCisgICAg
cmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgPT0gcGVybWlzc2lvbjsKK30KKwor
dm9pZCBTeXNjYWxsUG9saWN5OjphZGRGaWxlUGVybWlzc2lvbihjb25zdCBTdHJpbmcmIHBhdGgs
IFBlcm1pc3Npb24gcGVybWlzc2lvbikKK3sKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpICYm
IHBhdGguc3RhcnRzV2l0aCgnLycpICAmJiAhcGF0aC5lbmRzV2l0aCgnLycpICYmICFwYXRoLmNv
bnRhaW5zKCIvLyIpKTsKKworICAgIG1fZmlsZVBlcm1pc3Npb24uc2V0KHBhdGgsIHBlcm1pc3Np
b24pOworfQorCit2b2lkIFN5c2NhbGxQb2xpY3k6OmFkZERpcmVjdG9yeVBlcm1pc3Npb24oY29u
c3QgU3RyaW5nJiBwYXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pCit7CisgICAgQVNTRVJUKHBh
dGguc3RhcnRzV2l0aCgnLycpICYmICFwYXRoLmNvbnRhaW5zKCIvLyIpICYmIChwYXRoLmxlbmd0
aCgpID09IDEgfHwgIXBhdGguZW5kc1dpdGgoJy8nKSkpOworCisgICAgbV9kaXJlY3RvcnlQZXJt
aXNzaW9uLnNldChwYXRoLCBwZXJtaXNzaW9uKTsKK30KKwordm9pZCBTeXNjYWxsUG9saWN5Ojph
ZGREZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIC8vIERpcmVjdG9yaWVzIHNldHRpbmdzIGNvbWluZyBm
cm9tIHRoZSBVSVByb2Nlc3MuCisgICAgaWYgKCFwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVE
aXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBBRERfUE9MSUNZKHRoaXMsIERpcmVjdG9yeSwg
cmVtb3ZlVHJhaWxpbmdTbGFzaChwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnkp
LCBSZWFkQW5kV3JpdGUpOworICAgIGlmICghcGFyYW1ldGVycy5kYXRhYmFzZURpcmVjdG9yeS5p
c0VtcHR5KCkpCisgICAgICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCByZW1vdmVUcmFp
bGluZ1NsYXNoKHBhcmFtZXRlcnMuZGF0YWJhc2VEaXJlY3RvcnkpLCBSZWFkQW5kV3JpdGUpOwor
ICAgIGlmICghcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBBRERfUE9MSUNZKHRoaXMsIERpcmVjdG9yeSwgcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSksIFJlYWRBbmRXcml0ZSk7CisgICAgaWYgKCFw
YXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIEFERF9QT0xJ
Q1kodGhpcywgRGlyZWN0b3J5LCByZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5KSwgUmVhZEFuZFdyaXRlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY29va2ll
U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIEFERF9QT0xJQ1kodGhpcywgRGly
ZWN0b3J5LCByZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVj
dG9yeSksIFJlYWRBbmRXcml0ZSk7CisjaWYgVVNFKFNPVVApCisgICAgaWYgKCFwYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIEFERF9QT0xJ
Q1kodGhpcywgRGlyZWN0b3J5LCByZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoKSwgUmVhZEFuZFdyaXRlKTsKKyNlbmRpZgorCisgICAgLy8g
VGhlIHJvb3QgcG9saWN5IHdpbGwgYmxvY2sgYWNjZXNzIHRvIGFueSBkaXJlY3Rvcnkgb3IKKyAg
ICAvLyBmaWxlIHVubGVzcyB3aGl0ZSBsaXN0ZWQgYmVsbG93IG9yIGJ5IHBsYXRmb3JtLgorICAg
IEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi8iKSwgTm90QWxsb3dl
ZCk7CisKKyAgICAvLyBTaGFyZWQgbGlicmFyaWVzLCBwbHVnaW5zIGFuZCBmb250cy4KKyAgICBB
RERfUE9MSUNZKHRoaXMsIERpcmVjdG9yeSwgQVNDSUlMaXRlcmFsKCIvbGliIiksIFJlYWQpOwor
ICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi91c3IvbGliIiks
IFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi91
c3Ivc2hhcmUiKSwgUmVhZCk7CisKKyAgICAvLyBTU0wgQ2VydGlmaWNhdGVzLgorICAgIEFERF9Q
T0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9ldGMvc3NsL2NlcnRzIiksIFJl
YWQpOworCisgICAgLy8gRm9udGNvbmZpZyBjYWNoZS4KKyAgICBBRERfUE9MSUNZKHRoaXMsIERp
cmVjdG9yeSwgQVNDSUlMaXRlcmFsKCIvZXRjL2ZvbnRzIiksIFJlYWQpOworICAgIEFERF9QT0xJ
Q1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi92YXIvY2FjaGUvZm9udGNvbmZpZyIp
LCBSZWFkKTsKKworICAgIC8vIEF1ZGlvIGRldmljZXMsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y
cywgZXRjLgorICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9k
ZXYiKSwgUmVhZEFuZFdyaXRlKTsKKworICAgIC8vIFRlbXBvcmFyeSBmaWxlcyBhbmQgcHJvY2Vz
cyBzZWxmIGluZm9ybWF0aW9uLgorICAgIEFERF9QT0xJQ1kodGhpcywgRGlyZWN0b3J5LCBBU0NJ
SUxpdGVyYWwoIi90bXAiKSwgUmVhZEFuZFdyaXRlKTsKKyAgICBBRERfUE9MSUNZKHRoaXMsIERp
cmVjdG9yeSwgQVNDSUlMaXRlcmFsKCIvcHJvYy8iKSArIFN0cmluZzo6bnVtYmVyKGdldHBpZCgp
KSwgUmVhZEFuZFdyaXRlKTsKKworICAgIC8vIEluIHNvbWUgZGlzdHJvcyAvZGV2L3NobSBpcyBh
IHN5bWJvbGljIGxpbmsgdG8gL3J1bi9zaG0sIGFuZCBpbgorICAgIC8vIHRoaXMgY2FzZSwgdGhl
IGNhbm9uaWNhbCBwYXRoIHJlc29sdmVyIHdpbGwgZm9sbG93IHRoZSBsaW5rLiBJZgorICAgIC8v
IGluc2lkZSAvZGV2LCB0aGUgcG9saWN5IGlzIGFscmVhZHkgc2V0LgorICAgIEFERF9QT0xJQ1ko
dGhpcywgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9ydW4vc2htIiksIFJlYWRBbmRXcml0ZSk7
CisKKyAgICAvLyBOZWVkZWQgYnkgZ2xpYmMgZm9yIG5ldHdvcmtpbmcgYW5kIGxvY2FsZS4KKyAg
ICBBRERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL2V0Yy9nYWkuY29uZiIpLCBS
ZWFkKTsKKyAgICBBRERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL2V0Yy9ob3N0
LmNvbmYiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwo
Ii9ldGMvaG9zdHMiKSwgUmVhZCk7CisgICAgQUREX1BPTElDWSh0aGlzLCBGaWxlLCBBU0NJSUxp
dGVyYWwoIi9ldGMvbG9jYWx0aW1lIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywgRmls
ZSwgQVNDSUlMaXRlcmFsKCIvZXRjL25zc3dpdGNoLmNvbmYiKSwgUmVhZCk7CisKKyAgICAvLyBO
ZWVkZWQgZm9yIEROUyByZXNvbHRpb24uIEluIHNvbWUgZGlzdHJvcywgdGhlIHJlc29sdi5jb25m
IGluc2lkZQorICAgIC8vIC9ldGMgaXMganVzdCBhIHN5bWJvbGljIGxpbmsuCisgICAgQUREX1BP
TElDWSh0aGlzLCBGaWxlLCBBU0NJSUxpdGVyYWwoIi9ldGMvcmVzb2x2LmNvbmYiKSwgUmVhZCkK
KyAgICBBRERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL3J1bi9yZXNvbHZjb25m
L3Jlc29sdi5jb25mIiksIFJlYWQpCisKKyAgICAvLyBOZWVkZWQgdG8gY29udmVydCB1aWQgYW5k
IGdpZCBpbnRvIG5hbWVzLgorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVNDSUlMaXRlcmFs
KCIvZXRjL2dyb3VwIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVNDSUlM
aXRlcmFsKCIvZXRjL3Bhc3N3ZCIpLCBSZWFkKTsKKworICAgIC8vIE5lZWRlZCBieSB0aGUgbG9h
ZGVyLgorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwgQVNDSUlMaXRlcmFsKCIvZXRjL2xkLnNv
LmNhY2hlIiksIFJlYWQpOworCisgICAgLy8gTmVlZGVkIGJ5IHZhcmlvdXMsIGluY2x1ZGluZyB0
b29sa2l0cywgZm9yIG9wdGltaXphdGlvbnMgYmFzZWQKKyAgICAvLyBvbiB0aGUgY3VycmVudCBh
bW91bnQgb2YgZnJlZSBzeXN0ZW0gbWVtb3J5LgorICAgIEFERF9QT0xJQ1kodGhpcywgRmlsZSwg
QVNDSUlMaXRlcmFsKCIvcHJvYy9jcHVpbmZvIiksIFJlYWQpOworICAgIEFERF9QT0xJQ1kodGhp
cywgRmlsZSwgQVNDSUlMaXRlcmFsKCIvcHJvYy9maWxlc3lzdGVtcyIpLCBSZWFkKTsKKyAgICBB
RERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL3Byb2MvbWVtaW5mbyIpLCBSZWFk
KTsKKyAgICBBRERfUE9MSUNZKHRoaXMsIEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL3Byb2Mvc3RhdCIp
LCBSZWFkKTsKKworICAgIC8vIE5lZWRlZCBieSBELUJ1cy4KKyAgICBBRERfUE9MSUNZKHRoaXMs
IEZpbGUsIEFTQ0lJTGl0ZXJhbCgiL3Zhci9saWIvZGJ1cy9tYWNoaW5lLWlkIiksIFJlYWQpOwor
CisgICAgY2hhciogaG9tZURpciA9IGdldGVudigiSE9NRSIpOworICAgIGlmIChob21lRGlyKSB7
CisgICAgICAgIC8vIFgxMSBjb25uZWN0aW9uIHRva2VuLgorICAgICAgICBBRERfUE9MSUNZKHRo
aXMsIEZpbGUsIFN0cmluZzo6ZnJvbVVURjgoaG9tZURpcikgKyAiLy5YYXV0aG9yaXR5IiwgUmVh
ZCk7CisgICAgICAgIC8vIE1JTUUgdHlwZSByZXNvbHV0aW9uLgorICAgICAgICBBRERfUE9MSUNZ
KHRoaXMsIERpcmVjdG9yeSwgU3RyaW5nOjpmcm9tVVRGOChob21lRGlyKSArICAiLy5sb2NhbC9z
aGFyZS9taW1lIiwgUmVhZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yOWNjOWM3ZDJmNmZmYzIyOWQxOTRkYWU5ODAwY2Y5MjhiNTVhZmViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5
c2NhbGxQb2xpY3kuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFN5c2NhbGxQb2xpY3lfaAorI2RlZmluZSBTeXNjYWxsUG9saWN5X2gKKworI2lmIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworI2RlZmluZSBQT0xJQ1kodW5pcXVlUG9saWN5LCBpZCkgdW5pcXVlUG9saWN5IyNpZAorI2Rl
ZmluZSBVTklRVUVfUE9MSUNZKGlkKSBQT0xJQ1kodW5pcXVlUG9saWN5LCBpZCkKKyNkZWZpbmUg
QUREX1BPTElDWShwb2xpY3ksIHBvbGljeVR5cGUsIHBhdGgsIHBlcm1pc3Npb24pIHsgXAorICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBVTklRVUVfUE9MSUNZKF9fTElORV9fKSwgKHBh
dGgpKTsgXAorICAgIChwb2xpY3kpLT5hZGQjI3BvbGljeVR5cGUjI1Blcm1pc3Npb24oVU5JUVVF
X1BPTElDWShfX0xJTkVfXyksIFN5c2NhbGxQb2xpY3k6OnBlcm1pc3Npb24pOyB9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOworCitj
bGFzcyBTeXNjYWxsUG9saWN5IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBlcm1pc3Npb24geworICAg
ICAgICBOb3RBbGxvd2VkICAgPSAwLAorICAgICAgICBSZWFkICAgICAgICAgPSAxLAorICAgICAg
ICBXcml0ZSAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFJlYWRBbmRXcml0ZSA9IFJlYWQgfCBX
cml0ZQorICAgIH07CisKKyAgICBib29sIGhhc1Blcm1pc3Npb25Gb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgsIFBlcm1pc3Npb24pIGNvbnN0OworCisgICAgdm9pZCBhZGRGaWxlUGVybWlzc2lvbihj
b25zdCBTdHJpbmcmIHBhdGgsIFBlcm1pc3Npb24pOworICAgIHZvaWQgYWRkRGlyZWN0b3J5UGVy
bWlzc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIFBlcm1pc3Npb24pOworCisgICAgdm9pZCBhZGRE
ZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBQZXJtaXNz
aW9uTWFwOworICAgIFBlcm1pc3Npb25NYXAgbV9maWxlUGVybWlzc2lvbjsKKyAgICBQZXJtaXNz
aW9uTWFwIG1fZGlyZWN0b3J5UGVybWlzc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFN5c2Nh
bGxQb2xpY3lfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggY2U2YzA4MTJmYmZkYmRiZTQyNmZjMzAyNzAwZjQ0
YWJkYWQ4ZWFlZi4uOTVmZTYyY2RiZWM0ZWM3MDgyZjcwZWNkZjU5ZTdlODJlMjMzNzhlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCkBAIC04ODQsNiArODg0LDI1IEBAIHdpbjMyIHsKICAgICAgICAgUGxhdGZvcm0v
Q29yZUlQQy9CaW5hcnlTZW1hcGhvcmUuY3BwCiB9CiAKK2VuYWJsZT8oU0VDQ09NUF9GSUxURVJT
KSB7CisgICAgSEVBREVSUyArPSBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9PcGVuU3lzY2FsbC5oIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1Nl
Y2NvbXBCcm9rZXIuaCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNj
b21wRmlsdGVycy5oIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2Nh
bGwuaCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsUG9saWN5
LmggXAorICAgICAgICBXZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
T3BlblN5c2NhbGwuY3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1Nl
Y2NvbXBCcm9rZXIuY3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1Nl
Y2NvbXBGaWx0ZXJzLmNwcCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
eXNjYWxsLmNwcCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxs
UG9saWN5LmNwcCBcCisgICAgICAgIFdlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9j
ZXNzUXQuY3BwCisKKyAgICBERUZJTkVTICs9IFNPVVJDRV9ESVI9XFxcIiQke1JPT1RfV0VCS0lU
X0RJUn1cXFwiCit9CiAKIGVuYWJsZT8oSU5TUEVDVE9SX1NFUlZFUikgewogICAgIEhFQURFUlMg
Kz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnByaQppbmRleCA1YzM1ZGE0MTRjODczOTg0ZWVlMGNiMjU2NDIyZmUwOTYz
ODI4ZjcxLi40MDk4ODMxZmQ0MTAwYjhhNjUyOGYxZGRmZWYyMDE2MjVhNWUxNTYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnByaQpAQCAtODIsMyArODIsNSBAQCBsaW51eC0qOiB7CiBoYXZlPyhRVFFVSUNLKTogUVQg
Kz0gcW1sIHF1aWNrCiAKIGVuYWJsZT8oR0VPTE9DQVRJT04pOiBRVCArPSBsb2NhdGlvbgorCitl
bmFibGU/KFNFQ0NPTVBfRklMVEVSUyk6IFBLR0NPTkZJRyArPSBsaWJzZWNjb21wCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNX
ZWJQcm9jZXNzRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODQ5OTFiOTc0ZDlmMmQ2MDFiNTE5OGU2NGVl
YWIzNmVhOWM4NmZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmNwcApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjY29t
cEZpbHRlcnNXZWJQcm9jZXNzRWZsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQor
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPFdl
YktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2VjY29tcEZpbHRlcnNXZWJQcm9j
ZXNzRWZsOjpTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwoY29uc3QgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICA6IFNlY2NvbXBGaWx0ZXJzKEFsbG93KQor
eworICAgIG1fcG9saWN5LmFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KHBhcmFtZXRlcnMpOwor
fQorCit2b2lkIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbDo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKK3sKKyAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmxvY2sgYWxsIHRoZSBzeXNjYWxscyBhbmQg
d2hpdGVsaXN0CisgICAgLy8gd2hhdCB3ZSBuZWVkICsgdHJhcCB3aGF0IHNob3VsZCBiZSBoYW5k
bGVkIGJ5IHRoZSBicm9rZXIuCisgICAgYWRkUnVsZSgib3BlbiIsIFRyYXApOworICAgIGFkZFJ1
bGUoIm9wZW5hdCIsIFRyYXApOworICAgIGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7CisKKyAgICAv
LyBOZWVkZWQgYnkgRWV6ZSBvbiBOZXR3b3JrU3RhdGVOb3RpZmllckVmbC4KKyAgICBBRERfUE9M
SUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoIi9zeXMvYnVzIiksIFJlYWQp
OworICAgIEFERF9QT0xJQ1koJm1fcG9saWN5LCBEaXJlY3RvcnksIEFTQ0lJTGl0ZXJhbCgiL3N5
cy9jbGFzcyIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBB
U0NJSUxpdGVyYWwoIi9zeXMvZGV2aWNlcyIpLCBSZWFkKTsKKyAgICBBRERfUE9MSUNZKCZtX3Bv
bGljeSwgRmlsZSwgQVNDSUlMaXRlcmFsKCIvZXRjL3VkZXYvdWRldi5jb25mIiksIFJlYWQpOwor
CisjaWZkZWYgU09VUkNFX0RJUgorICAgIC8vIERldmVsb3BlcnMgdXNpbmcgYnVpbGQtd2Via2l0
IC0tZWZsIGV4cGVjdCBzb21lIGxpYnJhcmllcyB0byBiZSBsb2FkZWQKKyAgICAvLyBmcm9tIHRo
ZSBidWlsZCByb290IGRpcmVjdG9yeSBhbmQgdGhleSBhbHNvIG5lZWQgYWNjZXNzIHRvIGxheW91
dCB0ZXN0CisgICAgLy8gZmlsZXMuIFRoZSBjb25zdGFudCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBq
aGJ1aWxkIGlzIGRldGVjdGVkLCB3aGljaCBpcworICAgIC8vIGFuIGluZGljYXRpb24gb2YgYSBk
ZXZlbG9wbWVudCBidWlsZC4KKyAgICBjaGFyKiBzb3VyY2VEaXIgPSBjYW5vbmljYWxpemVfZmls
ZV9uYW1lKFNPVVJDRV9ESVIpOworICAgIGlmIChzb3VyY2VEaXIpIHsKKyAgICAgICAgQUREX1BP
TElDWSgmbV9wb2xpY3ksIERpcmVjdG9yeSwgU3RyaW5nOjpmcm9tVVRGOChzb3VyY2VEaXIpLCBS
ZWFkQW5kV3JpdGUpOworICAgICAgICBmcmVlKHNvdXJjZURpcik7CisgICAgfQorI2VuZGlmCisK
KyAgICAvLyBQbGFjZSB3aGVyZSB0aGUgdGhlbWUgYW5kIGljb25zIGFyZSBpbnN0YWxsZWQuCisg
ICAgY2hhciogZGF0YURpciA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoREFUQV9ESVIpOworICAg
IGlmIChkYXRhRGlyKSB7CisgICAgICAgIEFERF9QT0xJQ1koJm1fcG9saWN5LCBEaXJlY3Rvcnks
IFN0cmluZzo6ZnJvbVVURjgoZGF0YURpciksIFJlYWQpOworICAgICAgICBmcmVlKGRhdGFEaXIp
OworICAgIH0KKworI2lmIFVTRShHU1RSRUFNRVIpCisgICAgLy8gVmlkZW8gcGxheWJhY2sgcmVx
dWlyZXMgYWNjZXNzIHRvIHRoZSByb290IG9mIHRoZSB1c2VyIGNhY2hlIGRpciB3aGljaAorICAg
IC8vIGlzIG5vdCByaWdodC4gV2UgbmVlZCB0byBjaGVjayB3aXRoIHRoZXNlIGRpcmVjdG9yaWVz
IG9uIGdzdHJlYW1lcgorICAgIC8vIGNhbiBiZSBjb25maWd1cmVkLgorICAgIGNoYXIqIGhvbWVE
aXIgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBpZiAoaG9tZURpcikKKyAgICAgICAgQUREX1BPTElD
WSgmbV9wb2xpY3ksIERpcmVjdG9yeSwgU3RyaW5nOjpmcm9tVVRGOChob21lRGlyKSArICIvLmNh
Y2hlIiwgUmVhZEFuZFdyaXRlKTsKKyNlbmRpZgorCisgICAgU2VjY29tcEJyb2tlcjo6bGF1bmNo
UHJvY2Vzcyh0aGlzLCBtX3BvbGljeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmUzMjk0ODRjM2M2MjdlNWMzMjdiM2RiZjlhYzVjZmNkNWM5ZGZmZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc0VmbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gKKyNkZWZpbmUgU2VjY29tcEZpbHRl
cnNXZWJQcm9jZXNzRWZsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNs
dWRlIDxXZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TeXNjYWxs
UG9saWN5Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOworCitjbGFzcyBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwgOiBwdWJs
aWMgU2VjY29tcEZpbHRlcnMgeworcHVibGljOgorICAgIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vz
c0VmbChjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgU3lzY2FsbFBvbGlj
eSBtX3BvbGljeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vz
c0VmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBG
aWx0ZXJzV2ViUHJvY2Vzc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2Vj
Y29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyOTY0OTZkY2QyNGQyYjI3
NWIzYWVkM2M2NjkzYmM2NDhiYWJjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmNwcApAQCAtMCwwICsx
LDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCisKKyNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UUxpYnJhcnlJbmZvPgor
I2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvU3lz
Y2FsbFBvbGljeS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2VjY29tcEZpbHRlcnNXZWJQ
cm9jZXNzUXQ6OlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KGNvbnN0IFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgOiBTZWNjb21wRmlsdGVycyhBbGxvdykK
K3sKKyAgICBtX3BvbGljeS5hZGREZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShwYXJhbWV0ZXJzKTsK
K30KKwordm9pZCBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdDo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKK3sKKyAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmxvY2sgYWxsIHRoZSBzeXNjYWxscyBhbmQg
d2hpdGVsaXN0CisgICAgLy8gd2hhdCB3ZSBuZWVkICsgdHJhcCB3aGF0IHNob3VsZCBiZSBoYW5k
bGVkIGJ5IHRoZSBicm9rZXIuCisgICAgYWRkUnVsZSgib3BlbiIsIFRyYXApOworICAgIGFkZFJ1
bGUoIm9wZW5hdCIsIFRyYXApOworICAgIGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7CisKKyAgICAv
LyBRdCBkaXJlY3Rvcmllcy4KKyAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBR
TGlicmFyeUluZm86OmxvY2F0aW9uKFFMaWJyYXJ5SW5mbzo6TGlicmFyaWVzUGF0aCksIFJlYWQp
OworICAgIEFERF9QT0xJQ1koJm1fcG9saWN5LCBEaXJlY3RvcnksIFFMaWJyYXJ5SW5mbzo6bG9j
YXRpb24oUUxpYnJhcnlJbmZvOjpQbHVnaW5zUGF0aCksIFJlYWQpOworCisgICAgLy8gV0VCS0lU
X1RFU1RGT05UUyBpcyBzZXQgd2hlbiBydW5uaW5nIGxheW91dCB0ZXN0cy4gV2UgYWxzbyBuZWVk
IHRvIGFkZAorICAgIC8vIHRoZSByb290IG9mIHRoZSBXZWJLaXQgdHJlZSB0byB0aGUgc2FuZGJv
eCBzbyB3ZSBjYW4gcmVhZCB0aGUgdGVzdHMgYW5kCisgICAgLy8gd3JpdGUgYmFjayB0aGUgcmVz
dWx0cy4KKyAgICBjb25zdCBjaGFyKiBwYXRoID0gZ2V0ZW52KCJXRUJLSVRfVEVTVEZPTlRTIik7
CisgICAgaWYgKHBhdGgpIHsKKyAgICAgICAgUUZpbGVJbmZvIGZvbnREaXIoUVN0cmluZzo6ZnJv
bVV0ZjgocGF0aCkpOworICAgICAgICBBRERfUE9MSUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBm
b250RGlyLmNhbm9uaWNhbEZpbGVQYXRoKCksIFJlYWQpOworCisgICAgICAgIFFGaWxlSW5mbyBz
b3VyY2VEaXIoUVN0cmluZzo6ZnJvbVV0ZjgoU09VUkNFX0RJUikpOworICAgICAgICBBRERfUE9M
SUNZKCZtX3BvbGljeSwgRGlyZWN0b3J5LCBzb3VyY2VEaXIuY2Fub25pY2FsRmlsZVBhdGgoKSwg
UmVhZEFuZFdyaXRlKTsKKyAgICB9CisKKyAgICBTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9jZXNz
KHRoaXMsIG1fcG9saWN5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZm
NWU3YTg4Mjk4NGI4NjJjMmJjNzljMjI2ZDMzOTJlYWU0MDhkZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0
LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWNjb21w
RmlsdGVyc1dlYlByb2Nlc3NRdF9oCisjZGVmaW5lIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0
X2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxXZWJLaXQyL1Nl
Y2NvbXBGaWx0ZXJzLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TeXNjYWxsUG9saWN5Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwor
CitjbGFzcyBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdCA6IHB1YmxpYyBTZWNjb21wRmlsdGVy
cyB7CitwdWJsaWM6CisgICAgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQoY29uc3QgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemUoKTsKKworICAgIFN5c2NhbGxQb2xpY3kgbV9wb2xpY3k7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKaW5kZXggMzdjNzYyMGExOWY3
YjBhNzg4YjA1Mzg4MzU4NDczNDk5Y2QxZTU3My4uMGZjMTFkNzhhYjRjYWE4ZmE2NzU4N2UxNDc1
NjM4MjdiMTQ4NWUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9X
ZWJQcm9jZXNzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJv
Y2Vzc1F0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgi
CiAjaW5jbHVkZSAiUXRCdWlsdGluQnVuZGxlLmgiCiAjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNz
TWFuYWdlci5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmgiCiAjaW5j
bHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIgogCkBAIC0xMzcsNiArMTM4LDEzIEBAIHN0YXRpYyB2b2lkIHBhcmVudFByb2Nl
c3NEaWVkQ2FsbGJhY2sodm9pZCopCiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFs
aXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCiB7CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKKyAgICB7CisgICAgICAgIFdlYktpdDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQg
c2VjY29tcEZpbHRlcnMocGFyYW1ldGVycyk7CisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmluaXRp
YWxpemUoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fbmV0d29ya0FjY2Vzc01hbmFnZXIgPSBu
ZXcgUXROZXR3b3JrQWNjZXNzTWFuYWdlcih0aGlzKTsKICAgICBBU1NFUlQoIXBhcmFtZXRlcnMu
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkgJiYgIXBhcmFtZXRlcnMuY29va2llU3Rv
cmFnZURpcmVjdG9yeS5pc051bGwoKSk7CiAgICAgV2ViQ29yZTo6U2hhcmVkQ29va2llSmFyUXQq
IGphciA9IFdlYkNvcmU6OlNoYXJlZENvb2tpZUphclF0OjpjcmVhdGUocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3Nv
dXAvV2ViUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGFhZWY5NjU5MzgyZjdhMDM0ZWE5ZjE1NjBjNzE2
ZTM1MzU1YWE1YmMuLjk4MDUwODEwZmJmMTU5ZDQ0ZTI5MDMwMGU3OTdkNjhjZDE4MzIxZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNw
cApAQCAtMjksNiArMjksMTAgQEAKIAogI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFV
RVNUX0FQSQogCisjaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzV2Vi
UHJvY2Vzc0VmbC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgpAQCAtMTY0LDYgKzE2OCwxNSBAQCBzdGF0aWMgdm9pZCBsYW5ndWFn
ZUNoYW5nZWQodm9pZCopCiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2Vi
UHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBD
b3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCiB7CisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
KyAgICB7CisjaWYgUExBVEZPUk0oRUZMKQorICAgICAgICBTZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NFZmwgc2VjY29tcEZpbHRlcnMocGFyYW1ldGVycyk7CisjZW5kaWYKKyAgICAgICAgc2VjY29t
cEZpbHRlcnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFwYXJhbWV0
ZXJzLmxhbmd1YWdlcy5pc0VtcHR5KCkpCiAgICAgICAgIHNldFNvdXBTZXNzaW9uQWNjZXB0TGFu
Z3VhZ2UocGFyYW1ldGVycy5sYW5ndWFnZXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
RmluZExpYlNlY2NvbXAuY21ha2UgYi9Tb3VyY2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2UK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTE4ZjAyMjkxNWNlNjg3MzA2N2VkOTkxODcyNjNhYjc1M2NmMWMwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQpAQCAtMCww
ICsxLDQ2IEBACisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhp
cworIyAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMgbWF5CisjICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgIHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisj
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorIworIyBUcnkgdG8gZmluZCBsaWJzZWNjb21wIGluY2x1ZGUgYW5kIGxpYnJh
cnkgZGlyZWN0b3JpZXMuCisjCisjIEFmdGVyIHN1Y2Nlc3NmdWwgZGlzY292ZXJ5LCB0aGlzIHdp
bGwgc2V0IGZvciBpbmNsdXNpb24gd2hlcmUgbmVlZGVkOgorIyBMSUJTRUNDT01QX0lOQ0xVREVf
RElSUyAtIGNvbnRhaW5nIHRoZSBsaWJzZWNjb21wIGhlYWRlcnMKKyMgTElCU0VDQ09NUF9MSUJS
QVJJRVMgLSBjb250YWluZyB0aGUgbGlic2VjY29tcCBsaWJyYXJ5CisKK2luY2x1ZGUoRmluZFBr
Z0NvbmZpZykKKworcGtnX2NoZWNrX21vZHVsZXMoUENfTElCU0VDQ09NUCBsaWJzZWNjb21wKQor
CitmaW5kX3BhdGgoTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgTkFNRVMgc2VjY29tcC5oCisgICAg
SElOVFMgJHtQQ19MSUJTRUNDT01QX0lOQ0xVREVfRElSU30gJHtQQ19MSUJTRUNDT01QX0lOQ0xV
REVESVJ9CispCisKK2ZpbmRfbGlicmFyeShMSUJTRUNDT01QX0xJQlJBUklFUyBOQU1FUyBzZWNj
b21wCisgICAgSElOVFMgJHtQQ19MSUJTRUNDT01QX0xJQlJBUllfRElSU30gJHtQQ19MSUJTRUND
T01QX0xJQkRJUn0KKykKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykK
K0ZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhzZWNjb21wIERFRkFVTFRfTVNHIExJ
QlNFQ0NPTVBfSU5DTFVERV9ESVJTIExJQlNFQ0NPTVBfTElCUkFSSUVTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5j
bWFrZQppbmRleCA4ZmRmMGMzZTQ5MmVkOWQ4OWI2Nzk4N2JkYjhhNGM0MTNiZGE2ZDZmLi40YjM2
YTc5ZWFjMWM0ZmM3ZjExNTA1MGFiMTI0YjhkZjYzMjZlYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFr
ZQpAQCAtNDYsNiArNDYsOCBAQCBzZXQoREFUQV9JTlNUQUxMX0RJUiAic2hhcmUvJHtXZWJLaXRf
TElCUkFSWV9OQU1FfS0ke1BST0pFQ1RfVkVSU0lPTl9NQUpPUn0iIENBQwogc2V0KFRIRU1FX0JJ
TkFSWV9ESVIgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EZWZhdWx0
VGhlbWUpCiBmaWxlKE1BS0VfRElSRUNUT1JZICR7VEhFTUVfQklOQVJZX0RJUn0pCiAKK2FkZF9k
ZWZpbml0aW9ucygtRERBVEFfRElSPSIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0RBVEFfSU5T
VEFMTF9ESVJ9IikKKwogc2V0KFZFUlNJT05fU0NSSVBUICItV2wsLS12ZXJzaW9uLXNjcmlwdCwk
e0NNQUtFX01PRFVMRV9QQVRIfS9lZmxzeW1ib2xzLmZpbHRlciIpCiAKIFdFQktJVF9PUFRJT05f
QkVHSU4oKQpAQCAtODEsNiArODMsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04pCitXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VDQ09NUF9GSUxURVJTIE9GRikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFET1dfRE9NIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTIE9O
KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NQRUxMQ0hFQ0sgT04p
CkBAIC0yMTIsNiArMjE1LDEwIEBAIGlmIChFTkFCTEVfSU5TUEVDVE9SKQogICAgIGFkZF9kZWZp
bml0aW9ucygtRFdFQl9JTlNQRUNUT1JfSU5TVEFMTF9ESVI9XCIke0NNQUtFX0lOU1RBTExfUFJF
RklYfS8ke1dFQl9JTlNQRUNUT1JfRElSfVwiKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9TRUND
T01QX0ZJTFRFUlMpCisgICAgZmluZF9wYWNrYWdlKExpYlNlY2NvbXAgUkVRVUlSRUQpCitlbmRp
ZiAoKQorCiBzZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUiBUQloyKQogCiAjIE9wdGltaXplIGJp
bmFyeSBzaXplIGZvciByZWxlYXNlIGJ1aWxkcyBieSByZW1vdmluZyBkZWFkIHNlY3Rpb25zIG9u
IHVuaXgvZ2NjCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2Ug
Yi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXggN2NkNjdmYjYyYjkzODdm
M2RiZjZiMTM4ZWUwNmEzYjhlN2ZkMDZjMi4uYzQyYWZmZGI5M2Q4ZGRlMzc5NDJkODYzZGJjYjkz
YzhmYzg4NDZlMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMTA0LDYgKzEwNCw3
IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgIlRvZ2dsZSByZXNvbHV0aW9uIG1lZGlhIHF1
ZXJ5IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUkVTT1VS
Q0VfVElNSU5HICJUb2dnbGUgUmVzb3VyY2UgVGltaW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0NSSVBURURfU1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQg
U3BlZWNoIEFQSSBzdXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxF
X1NFQ0NPTVBfRklMVEVSUyAiVG9nZ2xlIExpbnV4IHNlY2NvbXAgZmlsdGVycyBmb3IgdGhlIFdl
YlByb2Nlc3Mgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
SEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBz
dXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sg
IlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZp
Zy5oLmNtYWtlCmluZGV4IDk1YmVlMGRjODM2Mjk1NjhkMGMxMTcyYmQ0NWRmMzQwZWZlZDBjNmQu
LmE2ZDhhZjE1Nzc4MTFjZmJkZWM4YjZkNmQ4Y2E3YWUzMmI1ODIyOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtl
CkBAIC05OCw2ICs5OCw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfUkVTT0xVVElPTl9NRURJ
QV9RVUVSWQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1JFU09VUkNFX1RJTUlORwogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX1NDUklQVEVEX1NQRUVDSAorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NFQ0NP
TVBfRklMVEVSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQURPV19ET00KICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NNT09USF9T
Q1JPTExJTkcKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA4NzJlOTM2YjNlNTliMTdjN2YwYmMxY2VmMzA1MzI4NjgyMDVhY2EwLi41ZWVhNTcyZmRm
MDlkNzU0MGI5NjkxZTY5YmJjNGY2ODFkZTZkMzE0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTMtMDItMjAgIFRo
aWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisKKyAgICAg
ICAgW1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2luZyBzZWNj
b21wIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg5ODc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHVuaXQgdGVzdHMgdG8gdmVyaWZ5IGlmIHRoZSBoYW5kbGluZyBvZiB0aGUgb3Blbiwg
b3BlbmF0LCBjcmVhdCBzeXNjYWxsCisgICAgICAgIGlzIGJlaW5nIGRvbmUgcmlnaHQuIFdlIGNo
ZWNrIGlmIHRoZSBSZWFkL1dyaXRlL1JlYWRBbmRXcml0ZSBwZXJtaXNzaW9ucworICAgICAgICBh
cmUgcmVzcGVjdGVkLCBpZiB0aGUgY2Fub25pY2FsIHBhdGggaXMgYmVpbmcgcmVzb2x2ZWQgYW5k
IGlmCisgICAgICAgIHRoZSBwZXJtaXNzaW9ucyBhcmUgZmFsbGluZyBiYWNrIHRvIHRoZSB0b3Bt
b3N0IHBhcmVudCBkaXJlY3Rvcnkgd2l0aCBhCisgICAgICAgIHBvbGljeSBzZXQgd2hlbiB0aGUg
ZGlyZWN0b3J5IGJlaW5nIG9wZW5lZCBoYXMgbm8gcG9saWN5LgorCisgICAgICAgIFdlIGFsc28g
dGVzdCBpZiBhbnkgYXR0ZW1wdCBvZiBibG9ja2luZyBTSUdTWVMgaXMgc2lsZW50bHkgaWdub3Jl
ZC4KKyAgICAgICAgU0lHU1lTIGNhbm5vdCBiZSBibG9ja2VkIGJlY2F1c2UgaW4gaXQncyBoYW5k
bGVyIGlzIHdoZXJlIHdlIGhvb2sKKyAgICAgICAgc3lzY2FsbHMgdG8gdGhlIGJyb2tlciBwcm9j
ZXNzLgorCisgICAgICAgIEFsc28gYWRkZWQgbGlic2VjY29tcCB0byBFRkwncyBqaGJ1aWxkIHRv
IG1ha2UgdGhlIGxpZmUgb2YgZGV2ZWxvcGVycworICAgICAgICB3aWxsaW5nIHRvIGhlbHAgZWFz
aWVyLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNwcDogQWRkZWQuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJKToKKyAgICAgICAgKFNlY2NvbXBFbnZpcm9ubWVudCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpTZWNjb21wRW52aXJvbm1lbnQ6OlNldFVwKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlNlY2NvbXBFbnZpcm9ubWVudDo6VGVhckRvd24pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzdHJlc3NUZXN0KToK
KyAgICAgICAgKiBlZmwvamhidWlsZC5tb2R1bGVzOgorICAgICAgICAqIHFtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZmVhdHVyZXMucHJpOgorCiAyMDEzLTAyLTIwICBUYWthc2hpIFRveW9zaGltYSAg
PHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbXlzZWxm
IHRvIHdhdGNoIGxpc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmlu
ZGV4IDBkMWMwMzIzZmNhYzdhNDE4ZmU4NDQyMmZjYmQyNTJhYmE3OWZiNDcuLmYyMjMzZGVkNzIw
ZTYwNjY5NjkzZDMxZDA0NDYxYTZiYmJmZDZiZmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
RmVhdHVyZUxpc3QucG0KQEAgLTEyMyw2ICsxMjMsNyBAQCBteSAoCiAgICAgJHJlcXVlc3RBbmlt
YXRpb25GcmFtZVN1cHBvcnQsCiAgICAgJHJlc291cmNlVGltaW5nU3VwcG9ydCwKICAgICAkc2Ny
aXB0ZWRTcGVlY2hTdXBwb3J0LAorICAgICRzZWNjb21wRmlsdGVyc1N1cHBvcnQsCiAgICAgJHNo
YWRvd0RPTVN1cHBvcnQsCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAgICRzcWxEYXRh
YmFzZVN1cHBvcnQsCkBAIC0zOTIsNiArMzkzLDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsg
b3B0aW9uID0+ICJyZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZSIsIGRlc2MgPT4gIlRvZ2dsZSBSZXF1
ZXN0IEFuaW1hdGlvbiBGcmFtZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1JF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8
IGlzR3RrKCkgfHwgaXNFZmwoKSB8fCBpc0JsYWNrQmVycnkoKSksIHZhbHVlID0+IFwkcmVxdWVz
dEFuaW1hdGlvbkZyYW1lU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gInNlY2NvbXAtZmls
dGVycyIsIGRlc2MgPT4gIlRvZ2dsZSBTZWNjb21wIEZpbHRlciBzYW5kYm94IiwKKyAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4g
XCRzZWNjb21wRmlsdGVyc1N1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJzY3JpcHRlZC1z
cGVlY2giLCBkZXNjID0+ICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIHN1cHBvcnQiLAogICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfU0NSSVBURURfU1BFRUNIIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9
PiBcJHNjcmlwdGVkU3BlZWNoU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCAzYmNiODliNmU5MjI4MTdlNjg4YzQzMDA2N2I5MGE0OTQzODQxMGE4Li43
OTM5NTNlYTk2ZDA3OTlmNzUzZDMwMjQ5YTM2OWQxNjhiYjkzYjZkIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTg4LDYgKzg4LDE1IEBAIHNldCh0ZXN0X3dlYmtpdDJf
YXBpX0JJTkFSSUVTCiAgICAgV2lsbFNlbmRTdWJtaXRFdmVudAogKQogCisjIFNlY2NvbXAgZmls
dGVycyBpcyBhbiBpbnRlcm5hbCBBUEkgYW5kIGl0cyBzeW1ib2xzCisjIGFyZSBub3QgKGFuZCBz
aG91bGQgbm90KSBiZSBleHBvc2VkIGJ5IGRlZmF1bHQuIFdlCisjIGNhbiBvbmx5IHRlc3QgaXQg
d2hlbiBidWlsZGluZyBzaGFyZWQgY29yZS4KK2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTIEFO
RCBTSEFSRURfQ09SRSkKKyAgICBsaXN0KEFQUEVORCB0ZXN0X3dlYmtpdDJfYXBpX0JJTkFSSUVT
CisgICAgICAgIFNlY2NvbXBGaWx0ZXJzCisgICAgKQorZW5kaWYgKCkKKwogc2V0KHRlc3Rfd2Vi
a2l0Ml9hcGlfZmFpbF9CSU5BUklFUwogICAgIENhbkhhbmRsZVJlcXVlc3QKICAgICBET01XaW5k
b3dFeHRlbnNpb25CYXNpYwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg1ZDU3YzY3YmZkZjVkYmU2ODlh
YjQ2M2Y4NzY0Mjk2YzdmMDU2NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCArMSw0MjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYktp
dDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEZpbHRlcnMuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xpY3kuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25h
bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCByb290
RGlyLCAoQVNDSUlMaXRlcmFsKCIvIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBo
b21lRGlyLCAoU3RyaW5nKGdldGVudigiSE9NRSIpKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHVzckRpciwgKEFTQ0lJTGl0ZXJhbCgiL3VzciIpKSk7CitERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgdXNyU2JpbkRpciwgKEFTQ0lJTGl0ZXJhbCgiL3Vzci9zYmluIikpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZCwgKEFTQ0lJTGl0ZXJhbCgiL3Rt
cC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdGVzdERpcldyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dlYktpdFNlY2NvbXBG
aWx0ZXJzL3Rlc3RXcml0ZSIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERp
clJlYWRBbmRXcml0ZSwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90
ZXN0UmVhZEFuZFdyaXRlIikpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGly
Tm90QWxsb3dlZCwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0
Tm90QWxsb3dlZCIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdEZpbGVOb3RB
bGxvd2VkLCAodGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGVQb2xpY3kiKSk7CitERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdEZpbGVSZWFkQW5kV3JpdGUsICh0ZXN0RGlyTm90
QWxsb3dlZCArICIvdGVzdEZpbGVQb2xpY3kiKSk7CisKK3N0YXRpYyBjb25zdCBtb2RlX3QgZGVm
YXVsdE1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVhVU1I7CisKK2NsYXNzIFNlY2NvbXBF
bnZpcm9ubWVudCA6IHB1YmxpYyB0ZXN0aW5nOjpFbnZpcm9ubWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9UUlVFKCFob21lRGly
LmlzRW1wdHkoKSk7CisKKyAgICAgICAgbWtkaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMi
LCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJSZWFkLnV0ZjgoKS5kYXRhKCks
IGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtkaXIodGVzdERpcldyaXRlLnV0ZjgoKS5kYXRhKCks
IGRlZmF1bHRNb2RlKTsKKyAgICAgICAgbWtkaXIodGVzdERpclJlYWRBbmRXcml0ZS51dGY4KCku
ZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJOb3RBbGxvd2VkLnV0
ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKworICAgICAgICAvLyBDcmVhdGUgYSBmaWxlIGZv
ciB0aGUgUmVhZCBvbmx5IGFuZCBOb3RBbGxvd2VkIGRpcmVjdG9yeSBiZWZvcmUKKyAgICAgICAg
Ly8gbG9hZGluZyB0aGUgZmlsdGVycy4KKyAgICAgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVh
ZCArICIvdGVzdEZpbGUiOworICAgICAgICBpbnQgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEo
KSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgICAgICBBU1NFUlRfTkUoY2xv
c2UoZmQpLCAtMSk7CisgICAgICAgIGZpbGUgPSB0ZXN0RGlyTm90QWxsb3dlZCArICIvdGVzdEZp
bGUiOworICAgICAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NS
RUFULCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKwor
ICAgICAgICAvLyBDcmVhdGUgZmlsZXMgZm9yIHRoZSBmaWxlIHBvbGljeSB0ZXN0cy4gRmlsZSBw
b2xpY2llcyBwcmVjZWRlcyB0aGUKKyAgICAgICAgLy8gZGlyZWN0b3J5IHBvbGljeS4gSW4gdGhp
cyBjYXNlLCB3ZSBjcmVhdGUgYSBmaWxlIHdpdGggcmVhZCBhbmQgd3JpdGUKKyAgICAgICAgLy8g
cG9saWNpZXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGFsbG93ZWQsIGFuZCB2aWNl
IHZlcnNhLiAKKyAgICAgICAgZmQgPSBvcGVuKHRlc3RGaWxlTm90QWxsb3dlZC51dGY4KCkuZGF0
YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEFTU0VSVF9ORShj
bG9zZShmZCksIC0xKTsKKyAgICAgICAgZmQgPSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRlLnV0
ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgQVNT
RVJUX05FKGNsb3NlKGZkKSwgLTEpOworCisgICAgICAgIFN5c2NhbGxQb2xpY3kgcG9saWN5Owor
ICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihyb290RGlyLCBTeXNjYWxsUG9s
aWN5OjpOb3RBbGxvd2VkKTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24o
dXNyRGlyLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVjdG9y
eVBlcm1pc3Npb24odXNyU2JpbkRpciwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7CisgICAg
ICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKHRlc3REaXJSZWFkLCBTeXNjYWxsUG9s
aWN5OjpSZWFkKTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24odGVzdERp
cldyaXRlLCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3Rv
cnlQZXJtaXNzaW9uKHRlc3REaXJSZWFkQW5kV3JpdGUsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRX
cml0ZSk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKHRlc3REaXJOb3RB
bGxvd2VkLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKKyAgICAgICAgcG9saWN5LmFkZEZp
bGVQZXJtaXNzaW9uKHRlc3RGaWxlTm90QWxsb3dlZCwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dl
ZCk7CisgICAgICAgIHBvbGljeS5hZGRGaWxlUGVybWlzc2lvbih0ZXN0RmlsZVJlYWRBbmRXcml0
ZSwgU3lzY2FsbFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKKworICAgICAgICBTZWNjb21wRmlsdGVy
cyBzZWNjb21wRmlsdGVycyhTZWNjb21wRmlsdGVyczo6QWxsb3cpOworICAgICAgICBzZWNjb21w
RmlsdGVycy5hZGRSdWxlKCJvcGVuIiwgU2VjY29tcEZpbHRlcnM6OlRyYXApOworICAgICAgICBz
ZWNjb21wRmlsdGVycy5hZGRSdWxlKCJvcGVuYXQiLCBTZWNjb21wRmlsdGVyczo6VHJhcCk7Cisg
ICAgICAgIHNlY2NvbXBGaWx0ZXJzLmFkZFJ1bGUoImNyZWF0IiwgU2VjY29tcEZpbHRlcnM6OlRy
YXApOworCisgICAgICAgIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3MoJnNlY2NvbXBGaWx0
ZXJzLCBwb2xpY3kpOworICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFsaXplKCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
d2lsbCBoYXZlIHRvIG1vdmUgdG8gYSBzZXBhcmF0ZWQgcHJvY2VzcyBjcmVhdGVkIGJlZm9yZSBs
b2FkaW5nCisgICAgICAgIC8vIHRoZSBmaWx0ZXJzIHdoZW4gd2UgcHV0IHRoZSBybWRpci91bmxp
bmsgcG9saWNpZXMgaW4gcGxhY2UuCisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21w
RmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZSIpOworICAgICAgICB1bmxpbmsoIi90bXAv
V2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQvdGVzdEZpbGVQb2xpY3kiKTsKKyAg
ICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUv
dGVzdEZpbGUiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rl
c3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUyIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRT
ZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlL3Rlc3RGaWxlMyIpOworICAgICAgICB1bmxp
bmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZVBv
bGljeSIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFdy
aXRlL3Rlc3RGaWxlIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVy
cy90ZXN0V3JpdGUvdGVzdEZpbGUyIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0UmVhZC90ZXN0RmlsZSIpOworICAgICAgICBybWRpcigiL3RtcC9XZWJL
aXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZCIpOworICAgICAgICBybWRpcigiL3RtcC9X
ZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlIik7CisgICAgICAgIHJtZGlyKCIv
dG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZSIpOworICAgICAgICBybWRpcigiL3Rt
cC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIpOworICAgICAgICBybWRpcigiL3RtcC9X
ZWJLaXRTZWNjb21wRmlsdGVycyIpOworICAgIH0KK307CisKKzo6dGVzdGluZzo6RW52aXJvbm1l
bnQqIGNvbnN0IGVudiA9IDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25tZW50KG5ldyBT
ZWNjb21wRW52aXJvbm1lbnQpOworCitURVNUKFdlYktpdDIsIHNpZ3Byb2NtYXNrKQoreworICAg
IC8vIFdlIHRlc3QgaGVyZSB0aGUgbWVjaGFuaXNtIGluc3RhbGxlZCB0byBwcmV2ZW50IFNJR1NZ
UyB0byBiZSBibG9ja2VkLiBBbnkKKyAgICAvLyBhdHRlbXAgdG8gYWRkIFNJR1NZUyB0byB0aGUg
c2V0IG9mIGJsb2NrZWQgc2lnbmFscyB3aWxsIGJlIHNpbGVudGx5CisgICAgLy8gaWdub3JlZCAo
YnV0IG90aGVyIHNpZ25hbHMgd2lsbCBiZSBibG9ja2VkIGp1c3QgZmluZSkuCisgICAgc2lnc2V0
X3Qgc2V0LCBvbGRTZXQ7CisgICAgc2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2lnYWRkc2V0KCZz
ZXQsIFNJR1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjEpOworCisgICAgQVNTRVJU
X05FKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgMCksIC0xKTsKKyAgICBBU1NFUlRfTkUo
c2lncHJvY21hc2soU0lHX0JMT0NLLCAwLCAmb2xkU2V0KSwgLTEpOworICAgIEFTU0VSVF9GQUxT
RShzaWdpc21lbWJlcigmb2xkU2V0LCBTSUdTWVMpKSA8PCAiU0lHU1lTIHNob3VsZCBub3QgYmUg
YmxvY2tlZC4iOworICAgIEFTU0VSVF9UUlVFKHNpZ2lzbWVtYmVyKCZvbGRTZXQsIFNJR1VTUjEp
KSA8PCAiT3RoZXIgc2lnbmFscyBzaG91bGQgYmUgYmxvY2tlZCBub3JtYWxseS4iOworCisgICAg
c2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1NZUyk7CisgICAgc2ln
YWRkc2V0KCZzZXQsIFNJR1VTUjIpOworCisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19T
RVRNQVNLLCAmc2V0LCAmb2xkU2V0KSwgLTEpOworICAgIEFTU0VSVF9ORShzaWdwcm9jbWFzayhT
SUdfU0VUTUFTSywgMCwgJnNldCksIC0xKTsKKyAgICBBU1NFUlRfRkFMU0Uoc2lnaXNtZW1iZXIo
JnNldCwgU0lHU1lTKSkgPDwgIlNJR1NZUyBzaG91bGQgbm90IGJlIGJsb2NrZWQuIjsKKyAgICBB
U1NFUlRfVFJVRShzaWdpc21lbWJlcigmc2V0LCBTSUdVU1IyKSkgPDwgIk90aGVyIHNpZ25hbHMg
c2hvdWxkIGJlIGJsb2NrZWQgbm9ybWFsbHkuIjsKKyAgICBBU1NFUlRfRkFMU0Uoc2lnaXNtZW1i
ZXIoJm9sZFNldCwgU0lHVVNSMikpOworCisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19T
RVRNQVNLLCAmb2xkU2V0LCAwKSwgLTEpIDw8ICJTaG91bGQgcmVzdG9yZSB0aGUgb2xkIHNpZ25h
bCBzZXQganVzdCBmaW5lLiI7CisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNL
LCAwLCAmc2V0KSwgLTEpOworICAgIEFTU0VSVF9GQUxTRShzaWdpc21lbWJlcigmc2V0LCBTSUdV
U1IyKSkgPDwgIlRoZSByZXN0b3JlZCBzZXQgZG9lc24ndCBoYXZlIFNJR1VTUjIuIjsKK30KKwor
VEVTVChXZWJLaXQyLCBvcGVuKQoreworICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisgICAg
U3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUiOworICAgIGludCBmZCA9IG9w
ZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VT
KTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZIHwgT19DUkVB
VCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVB
Q0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Cisg
ICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmlsZSA9IHRlc3RE
aXJSZWFkICsgIi9UaGlzRmlsZURvZXNOb3RFeGlzdCI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRm
OCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5v
ID09IEVOT0VOVCkgPDwgIlNob3VsZCByZXR1cm4gRU5PRU5UIHdoZW4gdHJ5aW5nICIgXAorICAg
ICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGl0IGFuZCB0aGUgcGVybWlzc2lv
bnMgYXJlIE9LLiI7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05M
WSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKSA8PCAiU2hv
dWxkIHJldHVybiBFQUNDRVMgd2hlbiB0cnlpbmcgIiBcCisgICAgICAgICJ0byBvcGVuIGEgZmls
ZSB0aGF0IGRvZXMgbm90IGV4aXQgYW5kIHRoZSBwZXJtaXNzaW9ucyBhcmUgbm90IE9LLiI7CisK
KyAgICAvLyBXcml0ZSBvbmx5IGRpcmVjdG9yeS4KKyAgICBmaWxlID0gdGVzdERpcldyaXRlICsg
Ii90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkg
fCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgQVNTRVJUX05FKGZkLCAtMSk7CisgICAgY2xv
c2UoZmQpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAg
ICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBv
cGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09
IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0
YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOwor
CisgICAgLy8gUmVhZCBhbiB3cml0ZSBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJSZWFk
QW5kV3JpdGUgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBBU1NFUlRfTkUoZmQsIC0x
KTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBP
X1JEV1IpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQs
IC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisg
ICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJOb3RBbGxvd2Vk
ICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9O
TFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYg
ZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9f
UkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKwor
ICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1Rf
VFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKGZpbGUu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVy
cm5vID09IEVBQ0NFUyk7CisKKworICAgIC8vIFRoZSAvdXNyIGRpcmVjdG9yeSBoZXJlIGhhcyBy
ZWFkIHBlcm1pc3Npb25zLCBzbyBpdCdzIHN1YmRpcmVjdG9yaWVzCisgICAgLy8gc2hvdWxkIHJl
c29sdmUgdG8gdGhlIC91c3IgcGVybWlzc2lvbnMgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVk
LgorICAgIGZpbGUgPSB1c3JEaXIgKyAiL2Jpbi9iYXNlbmFtZSI7CisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJT
dWJkaXJlY3RvcmllcyBzaG91bGQgd2l0aCBubyBwb2xpY3kgc2hvdWxkICIgXAorICAgICAgICAi
aW5oZXJpdCB0aGUgcGFyZW50J3MgcG9saWNpZXMuIjsKKyAgICBjbG9zZShmZCk7CisKKyAgICBm
aWxlID0gdXNyU2JpbkRpciArICIvYWRkdXNlciI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgp
LmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09
IEVBQ0NFUykgPDwgIlRoaXMgZGlyZWN0b3J5IHNob3VsZCBoYXZlICIgXAorICAgICAgICAiaXRz
IG93biBwb2xpY3kgaW5zdGVhZCBvZiB0aGUgcGFyZW50J3MuIjsKKworICAgIC8vIEFjY2VzcyB0
byB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgc3lzdGVtIGlzIGJsb2NrZWQgYW5kIHNob3VsZAorICAg
IC8vIG5ldmVyIHJldHVybiBhbnl0aGluZyBlbHNlIG90aGVyIHRoYW4gRUFDQ0VTIHJlZ2FyZGxl
c3MgaWYgdGhlCisgICAgLy8gZmlsZSBleGlzdHMgb3Igbm90LiBUaGUgcmVhc29uIGlzIGJlY2F1
c2UgaXQgd2lsbCBmYWxsYmFjayB0byB0aGUKKyAgICAvLyBwb2xpY3kgb2YgdGhlIFJvb3QgZGly
ZWN0b3J5LCBtYXJrZWQgYXMgTm90QWxsb3dlZC4KKyAgICBmaWxlID0gaG9tZURpciArICIvdGVz
dEZpbGUiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JF
QVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBF
QUNDRVMpOworCisgICAgZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRl
c3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUg
KyAiLy4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNz
d2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBF
WFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgLy8gSGVyZSB3
ZSB0ZXN0IGZpbGUgcG9saWNpZXMuIFRoZSBoYXZlIHByZWNlZGVuY2Ugb3ZlciBkaXJlY3Rvcnkg
cG9saWNpZXMuCisgICAgLy8gVGhlIGZpbGUgYmVsbG93IGxpdmVzIGluc2lkZSBhIGRpcmVjdG9y
eSB3aXRoIFJlYWRBbmRXcml0ZSBwb2xpY3kuCisgICAgZmQgPSBvcGVuKHRlc3RGaWxlTm90QWxs
b3dlZC51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEg
JiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3Blbih0ZXN0RmlsZU5vdEFsbG93ZWQu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVy
cm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4odGVzdEZpbGVOb3RBbGxvd2VkLnV0Zjgo
KS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi8uLi8uLi8uLiIg
KyB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZVBvbGljeSI7CisgICAgZmQgPSBvcGVu
KGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAvLyBUaGUgbmV4dCBmaWxlIGlzIGxvY2F0ZWQg
aW5zaWRlIGEgZGlyZWN0b3J5IG1hcmtlZCBhcyBOb3RBbGxvd2VkLCBidXQKKyAgICAvLyBpdCBo
YXMgaXRzIG93biBmaWxlIHBvbGljeSB0aGF0IHByZWNlZGVzIHRoZSBkaXJlY3RvcnkgcG9saWN5
LgorICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQg
PSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKKyAg
ICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW4odGVz
dEZpbGVSZWFkQW5kV3JpdGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfTkUo
ZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0
ZSArICIvLi4vLi4vLi4iICsgdGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlUG9saWN5IjsK
KyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNU
X05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworfQorCitURVNUKFdlYktpdDIsIGNyZWF0KQor
eworICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGly
UmVhZCArICIvdGVzdEZpbGUyIjsKKyAgICBpbnQgZmQgPSBjcmVhdChmaWxlLnV0ZjgoKS5kYXRh
KCksIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBF
QUNDRVMpOworCisgICAgLy8gV3JpdGUgb25seSBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3RE
aXJXcml0ZSArICIvdGVzdEZpbGUyIjsKKyAgICBmZCA9IGNyZWF0KGZpbGUudXRmOCgpLmRhdGEo
KSwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsK
KworICAgIC8vIFJlYWQgYW4gd3JpdGUgZGlyZWN0b3J5LgorICAgIGZpbGUgPSB0ZXN0RGlyUmVh
ZEFuZFdyaXRlICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0gY3JlYXQoZmlsZS51dGY4KCkuZGF0
YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQp
OworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJOb3RB
bGxvd2VkICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0gY3JlYXQoZmlsZS51dGY4KCkuZGF0YSgp
LCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFD
Q0VTKTsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuYXQpCit7CisgICAgaW50IGRpckZkID0gb3Bl
bih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKKyAgICBBU1NF
UlRfTkUoZGlyRmQsIC0xKTsKKworICAgIGludCBmZCA9IG9wZW5hdChkaXJGZCwgInRlc3RGaWxl
MyIsIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0x
KTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlMyIs
IE9fUkRXUik7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAg
ZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZTMiLCBPX1JET05MWSk7CisgICAgRVhQRUNUX05F
KGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0
RmlsZTMiLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisKKyAgICBmZCA9IG9w
ZW5hdChmZCwgInRlc3RGaWxlMyIsIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFTk9URElSKSA8PCAiU2hvdWxkIHJldHVybiBFTk9URElSIHdoZW4gdGhl
IGZkIGlzIGEgZmlsZS4iOworICAgIGNsb3NlKGZkKTsKKworICAgIFN0cmluZyBmaWxlID0gIi4u
Ly4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlMyI7CisgICAgZmQgPSBv
cGVuYXQoZGlyRmQsIGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9O
RShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGZpbGUgPSAiLi4vLi4vLi4iICsgdGVz
dERpclJlYWQgKyAiL3Rlc3RGaWxlMyI7CisgICAgZmQgPSBvcGVuYXQoZGlyRmQsIGZpbGUudXRm
OCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5v
ID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZp
bGUzIjsKKyAgICBmZCA9IG9wZW5hdCgtMSwgZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7
CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIkRpcmVjdG9yeSBmZCBzaG91bGQgYmUgaWdub3Jl
ZCB3aGVuIHRoZSBwYXRoIGlzIGFic29sdXRlLiI7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQg
PSBvcGVuYXQoLTEsICJ0ZXN0RmlsZTMiLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUJBREYpIDw8ICJTaG91bGQgcmV0dXJuIEVCQURGIHdoZW4gdGhl
IGZkIGlzIGludmFsaWQuIjsKKyAgICBjbG9zZShkaXJGZCk7CisKKyAgICBkaXJGZCA9IG9wZW4o
dGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9U
UlVFKGRpckZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBkaXJGZCA9IG9wZW4o
dGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEFTU0VSVF9ORShkaXJG
ZCwgLTEpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZTIiLCBPX1JET05MWSB8
IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJu
byA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZSIsIE9fV1JP
TkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworICAg
IGNsb3NlKGRpckZkKTsKK30KKworc3RhdGljIHZvaWQqIHN0cmVzc1Rlc3Qodm9pZCopCit7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDA7ICsraSkgeworICAgICAgICBpbnQgZmQgPSBvcGVu
KCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkL3Rlc3RGaWxlIiwgT19SRFdSKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAg
ICAgICBmZCA9IG9wZW4oIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQvdGVzdEZp
bGUiLCBPX1JET05MWSk7CisgICAgICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgICAgICBjbG9z
ZShmZCk7CisKKyAgICAgICAgZmQgPSBvcGVuKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rl
c3ROb3RBbGxvd2VkL3Rlc3RGaWxlIiwgT19SRE9OTFkpOworICAgICAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgICAgIGZkID0gY3JlYXQoIi90bXAv
V2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQvU2hvbGROb3RCZUFsbG93ZWQiLCBk
ZWZhdWx0TW9kZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVB
Q0NFUyk7CisKKyAgICAgICAgaW50IGRpckZkID0gb3BlbigiL3RtcC9XZWJLaXRTZWNjb21wRmls
dGVycy90ZXN0UmVhZCIsIE9fUkRPTkxZKTsKKyAgICAgICAgRVhQRUNUX05FKGRpckZkLCAtMSk7
CisKKyAgICAgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZSIsIE9fUkRPTkxZKTsKKyAg
ICAgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgY2xv
c2UoZGlyRmQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIE5ERUJVRwor
VEVTVChXZWJLaXQyLCBESVNBQkxFRF90aHJlYWRpbmcpCisjZWxzZQorVEVTVChXZWJLaXQyLCB0
aHJlYWRpbmcpCisjZW5kaWYKK3sKKyAgICAvLyBUZXN0cyBpZiBjb25jdXJyZW50IHN5c2NhbGwg
ZXhlY3V0aW9uIHdvcmtzIGZpbmUuIEl0IGNhbiBiZQorICAgIC8vIGFsc28gdXNlZCBmb3IgcGVy
Zm9ybWFuY2UgdGVzdGluZyBhbmQgbGVhayBkZXRlY3Rpb24uIFRoZSB0ZXN0CisgICAgLy8gaXMg
ZGlzYWJsZWQgb24gRGVidWcgbW9kZSBiZWNhdXNlIGl0IGNhbiBiZSB3YXkgdG9vIHZlcmJvc2Uu
CisgICAgcHRocmVhZF90IHRocmVhZHNbNV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emVvZih0aHJlYWRzKSAvIHNpemVvZihwdGhyZWFkX3QpOyArK2kpCisgICAgICAgIHB0aHJlYWRf
Y3JlYXRlKCZ0aHJlYWRzW2ldLCAwLCBzdHJlc3NUZXN0LCAwKTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZW9mKHRocmVhZHMpIC8gc2l6ZW9mKHB0aHJlYWRfdCk7ICsraSkKKyAgICAg
ICAgcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMv
ZWZsL2poYnVpbGQubW9kdWxlcwppbmRleCAzODQ1MDA0OTZlNmUyMDNlMGI0NmQ1ODRmNDRjMTAz
M2JkMmE5OGEwLi4wNDNjMDhmZDg3NWMxMjY0MTQyZmM5ZjUzOTJmYTk0ZjE1ZTg5OThkIDEwMDY0
NAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2VmbC9qaGJ1aWxk
Lm1vZHVsZXMKQEAgLTI0LDYgKzI0LDcgQEAKICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdp
bnMtZ29vZCIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KICAgICAg
IDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNlY2Nv
bXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxlPgogCkBAIC01MSw2ICs1
Miw4IEBACiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdodGVubWVudC5vcmciLz4K
ICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ3N0cmVhbWVyIgogICAgICAgaHJl
Zj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIvPgorICA8cmVwb3NpdG9y
eSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAgIGhyZWY9ImdpdDovL2dp
dC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImNhaXJvIiBhdXRvZ2VuLXNo
PSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0zNDYsNCArMzQ5LDEwIEBACiAg
ICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWVmOGJlNjY1MDk2YjNhNGU2NDQyNGZiMzlkN2M1ZGE1
N2ZhYWFmOTVlOWZlYTZjMWJiNDQyOTVkNGZiMzJkNSIvPgogICA8L2F1dG90b29scz4gCiAKKyAg
PGF1dG90b29scyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICAg
IDxicmFuY2ggbW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisgICAgICAgICAgcmVwbz0i
Z2l0LmNvZGUuc2YubmV0IgorICAgICAgICAgIHRhZz0iYmJkN2NhMDdhN2M3NmQ1Y2Q4ODRkYmRk
ZWM1ODM4NWUxYjc0MzlkMiIvPgorICA8L2F1dG90b29scz4KKwogPC9tb2R1bGVzZXQ+CmRpZmYg
LS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByaSBiL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4IDBjMjY5YWNlNDQwY2Yz
MTg5MzUyODFlNTM3ZmRjZGRhZjkzNWYxOGUuLjExYzFmZDc3YzczNWZhMzU4Yzc0ZTI3YTA2NWZm
NWFlZDA4ZDJmOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVh
dHVyZXMucHJpCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJp
CkBAIC05NSw2ICs5NSw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAgICAgRU5BQkxFX1JFU09M
VVRJT05fTUVESUFfUVVFUlk9MSBcCiAgICAgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
PTEgXAogICAgIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0g9MCBcCisgICAgRU5BQkxFX1NFQ0NPTVBf
RklMVEVSUz0wIFwKICAgICBFTkFCTEVfU0hBRE9XX0RPTT0wIFwKICAgICBFTkFCTEVfU0hBUkVE
X1dPUktFUlM9MSBcCiAgICAgRU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MSBcCmRpZmYgLS1naXQg
YS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMGJjZDA2OGFkNDcwZTRmZTlhMmM4MjIzODg2
Mjc2MmExNzg2NThmZC4uMTllNmM5MTZiOWRhNTM5YjhmNjgxN2E0ZmFjN2UzYzQ4ZjVkM2RkYiAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDEzLTAyLTIwICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwu
Y29tPgorCisgICAgICAgIFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGlu
dXggdXNpbmcgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBiaXRzIHRvIEVGTC9DTWFrZSBidWlsZHN5c3RlbSB0
byBmaW5kIHRoZSBsaWJzZWNjb21wCisgICAgICAgIGxpYnJhcnkuCisKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvRmluZExpYlNlY2NvbXAuY21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9j
bWFrZS9PcHRpb25zRWZsLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0
dXJlcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZToKKwogMjAx
My0wMi0xOSAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194031</attachid>
            <date>2013-03-20 06:07:08 -0700</date>
            <delta_ts>2013-04-09 01:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89875-20130320150901.patch</filename>
            <type>text/plain</type>
            <size>114439</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VkYTg5MDU5MGZjMzFk
YzUwNGFlZjY3MGQyZjczOWViYzc1ZmM3ZC4uYWM2N2QxMWYyMmE4Nzk5YzMzNGNkNTU0NjY3N2Mz
OWFhYmExYjJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAzLTIwICBUaGlh
Z28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgorCisgICAgICAg
IFtXSzJdIERyb3AgV2ViUHJvY2VzcyBjYXBhYmlsaXRpZXMgb24gTGludXggdXNpbmcgc2VjY29t
cCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTg3NQorCisgICAgICAgIE1ha2UgdGhlIERBVEFfRElSIGdsb2JhbCBzaW5jZSBpdCBpcyBu
b3cgbmVlZGVkIGZvciBXZWJDb3JlIGFuZCBXZWJLaXQyLgorICAgICAgICBJdCBpcyBub3cgdXNl
ZCB0byBzZXQgYSBzYW5kYm94IHBvbGljeSBmb3IgdGhlIEVGTCBwb3J0LgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMDMtMTkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxt
YXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBXcm9uZyBndWFyZCBVU0Uo
R0xYKSBpbiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDZlZWFjOWIy
YTE2NWQ0YTIyYjVlZmZkNzY1ZDIwMTU1YmQ2NDk3MmIuLjY1NGZhNTc2ZjE4OWUzOGZmNzg1OTM1
ZTU2MjU4YjhkODg2ZDk4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTEgQEAKKzIwMTMtMDMt
MjAgIFRoaWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CisK
KyAgICAgICAgW1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNhcGFiaWxpdGllcyBvbiBMaW51eCB1c2lu
ZyBzZWNjb21wIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg5ODc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW50cm9kdWNlIHRoZSBmb3VuZGF0aW9ucyBvZiB0aGUgU2VjY29tcEZpbHRlci1i
YXNlZCBzYW5kYm94LiBUaGUKKyAgICAgICAgaGFyZGVuaW5nIG9mIHRoZSBXZWJQcm9jZXNzIChh
bmQgcG90ZW50aWFsbHkgUGx1Z2luUHJvY2VzcywgZXRjKQorICAgICAgICB3b3JrcyBieSBhIGNv
bWJpbmF0aW9uIG9mIHRoZSB0d28gdGhpbmdzOgorCisgICAgICAgIC0gQmxvY2tpbmcgc3lzY2Fs
bHMgdGhhdCBhcmUgbm90IHVzZWQsIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBhdHRhY2sKKyAg
ICAgICAgc3VyZmFjZS4KKyAgICAgICAgLSBUcmFwcGluZyBzZW5zaXRpdmUgc3lzY2FsbHMgYW5k
IGRlbGVnYXRpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZQorICAgICAgICBzeXNjYWxscyB0byBh
IHNlcGFyYXRlZCB0cnVzdGVkIHByb2Nlc3Mgc3ViamVjdCB0byBhIHNldCBvZiBwb2xpY2llcy4K
KworICAgICAgICBUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiB0cmFwcyB0aGUgb3BlbigpLWZh
bWlseSBvZiBzeXNjYWxscyBvbiBXZWJLaXQKKyAgICAgICAgRUZMJ3MgYW5kIFF0J3MgV2ViUHJv
Y2VzcywgYnV0IGl0IGNvdWxkIGJlIGVhc2lseSB1c2VkIGJ5IGFueSBMaW51eCBwb3J0LAorICAg
ICAgICBzaW5jZSB0aGUgY29kZSBpcyBzdXBwb3NlIHRvIGJlIExpbnV4LWNvbXBsaWFudC4gVGhl
IGxpc3Qgb2Ygc3lzY2FsbHMgaGFuZGxlZAorICAgICAgICBieSB0aGUgYnJva2VyIHByb2Nlc3Mg
c2hvdWxkIGRlZmluaXRlbHkgZ3JvdyBhcyB3ZSBtYXR1cmUgdGhlCisgICAgICAgIGltcGxlbWVu
dGF0aW9uLiBPdGhlciBzeXNjYWxscyBuZWVkcyB0byBiZSBoYW5kbGVkIHRvIGdldCB0aGlzIHNh
bmRib3gKKyAgICAgICAgZnVsbHkgZnVuY3Rpb25hbCwgbGlrZSB1bmxpbmsoKSwgbWtkaXIoKSwg
ZXRjLgorCisgICAgICAgIFRoZSBicm9rZXIgcHJvY2VzcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQg
YXMgZWFybHkgYXMgcG9zc2libGUgb24gdGhlCisgICAgICAgIHNhbmRib3hlZCBwcm9jZXNzIG1h
aW4oKSBmdW5jdGlvbiwgYmVjYXVzZSBpdCBvbmx5IGRvZXMgYSBmb3JrKCksIHdoaWNoCisgICAg
ICAgIGlzIGNoZWFwIG9uIExpbnV4LiBUaGF0IGFsc28gYWltcyB0byBtaW5pbWl6ZSB0aGUgcmVz
aWRlbnQgbWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiB0aGUgYnJva2VyIHByb2Nlc3MuCisK
KyAgICAgICAgT3BlbmluZyBvZiBmaWxlcyBmb3IgdXBsb2FkIGFuZCBzYXZpbmcgZG93bmxvYWRz
IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LAorICAgICAgICBzaW5jZSBpdCBzaG91bGQgYmUgaGFuZGxl
ZCB0byB0aGUgVUlQcm9jZXNzIGluIGEgc2ltaWxhciBmYXNoaW9uIGFzCisgICAgICAgIHRoZSBN
YWMgcG9ydCBkb2VzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbU9w
ZW5hdENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbUNy
ZWF0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpPcGVuU3lzY2FsbCk6
CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsOjpzZXRSZXN1bHQpOgorICAgICAgICAoV2Vi
S2l0OjpPcGVuU3lzY2FsbDo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxs
OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbDo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6Ok9wZW5TeXNjYWxsUmVzdWx0KToKKyAgICAg
ICAgKFdlYktpdDo6T3BlblN5c2NhbGxSZXN1bHQ6On5PcGVuU3lzY2FsbFJlc3VsdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok9wZW5TeXNjYWxsUmVzdWx0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvT3BlblN5c2NhbGwuaDogQWRkZWQuCisgICAgICAgIChDb3JlSVBDKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChPcGVuU3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6
Ok9wZW5TeXNjYWxsOjpzZXRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OnNl
dEZsYWdzKToKKyAgICAgICAgKFdlYktpdDo6T3BlblN5c2NhbGw6OnNldE1vZGUpOgorICAgICAg
ICAoT3BlblN5c2NhbGxSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3Vs
dDo6ZmQpOgorICAgICAgICAoV2ViS2l0OjpPcGVuU3lzY2FsbFJlc3VsdDo6ZXJyb3JOdW1iZXIp
OgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VjY29tcEJyb2tlckNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6cmVj
ZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpTSUdTWVNIYW5kbGVyKToKKyAgICAgICAg
KFdlYktpdDo6cmVnaXN0ZXJTSUdTWVNIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlckNs
aWVudDo6U2VjY29tcEJyb2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9r
ZXJDbGllbnQ6On5TZWNjb21wQnJva2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29t
cEJyb2tlckNsaWVudDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2Vy
Q2xpZW50OjpoYW5kbGVJZk9wZW5pbmdPbmxpbmVDUFVDb3VudCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21w
QnJva2VyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEJyb2tlcjo6cnVu
TG9vcCk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9r
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VjY29tcEJyb2tlcik6
CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBCcm9rZXI6OnNldFN5c2NhbGxQb2xpY3kpOgorICAg
ICAgICAoV2ViS2l0OjpTZWNjb21wQnJva2VyOjpTZWNjb21wQnJva2VyKToKKyAgICAgICAgKiBT
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpTZWNjb21w
RmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjp+U2VjY29tcEZpbHRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyczo6YWRkUnVsZSk6CisgICAgICAg
IChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKToKKyAgICAgICAgKiBTaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoU2VjY29tcEZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTZWNj
b21wRmlsdGVyczo6Y29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlNlY2NvbXBGaWx0ZXJzOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9TaWdhY3Rpb25TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpTaWdhY3Rpb25TeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCk6CisgICAgICAg
ICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NpZ2FjdGlvblN5c2NhbGwuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2lnYWN0aW9uU3lzY2FsbCk6CisgICAgICAg
ICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NpZ3Byb2NtYXNrU3lzY2FsbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U2lncHJvY21hc2tTeXNj
YWxsOjpjcmVhdGVGcm9tQ29udGV4dCk6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL1NpZ3Byb2NtYXNrU3lzY2FsbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChTaWdwcm9jbWFza1N5c2NhbGwpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TeXNjYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OlN5c2NhbGw6OmNyZWF0ZUZyb21EZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6
U3lzY2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNv
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6U3lzY2FsbFJlc3VsdCk6Cisg
ICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuaDogQWRkZWQuCisg
ICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTeXNjYWxsKToK
KyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6flN5c2NhbGwpOgorICAgICAgICAoV2ViS2l0OjpT
eXNjYWxsOjp0eXBlKToKKyAgICAgICAgKFdlYktpdDo6U3lzY2FsbDo6c2V0Q29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN5c2NhbGw6OmNvbnRleHQpOgorICAgICAgICAoU3lzY2FsbFJlc3Vs
dCk6CisgICAgICAgIChXZWJLaXQ6OlN5c2NhbGxSZXN1bHQ6On5TeXNjYWxsUmVzdWx0KToKKyAg
ICAgICAgKFdlYktpdDo6U3lzY2FsbFJlc3VsdDo6dHlwZSk6CisgICAgICAgICogU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OnJlbW92ZVRyYWlsaW5nU2xhc2gpOgorICAgICAgICAo
V2ViS2l0OjpTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aCk6CisgICAgICAgIChX
ZWJLaXQ6OlN5c2NhbGxQb2xpY3k6OmFkZEZpbGVQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6U3lzY2FsbFBvbGljeTo6YWRkRGlyZWN0b3J5UGVybWlzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OlN5c2NhbGxQb2xpY3k6OmFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KToKKyAgICAgICAg
KiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChTeXNjYWxsUG9saWN5KToKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvZWZs
L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsOjpTZWNjb21w
RmlsdGVyc1dlYlByb2Nlc3NFZmwpOgorICAgICAgICAoV2ViS2l0OjpTZWNjb21wRmlsdGVyc1dl
YlByb2Nlc3NFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9l
ZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQ6
OlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KToKKyAgICAgICAgKFdlYktpdDo6U2VjY29tcEZp
bHRlcnNXZWJQcm9jZXNzUXQ6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9xdC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxMy0wMy0xOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2syXSBTaG91bGQgc3VwcG9y
dCBtdWx0aXBsZSBwYWdlIG92ZXJsYXlzLCBsaWtlIHRoZSBBUEkgc3VnZ2VzdHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggNTM1ZmJmZTVjODMwYjE1OWYzODU0ODhhMGI3YmU4ZDY5NjUy
N2Q0MC4uNGM1MjljZWU0MzYwOGUwYWFhNTllMmE1N2U5NTBhN2JmM2JkYjFkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTM2Miw4ICszNjIsNiBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQ
SElDUykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAotYWRkX2RlZmluaXRpb25zKC1EREFUQV9E
SVI9IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxMX0RJUn0iKQotCiBpZiAo
RU5BQkxFX1dFQl9BVURJTykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lciIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNzg0ZGNkMjY2Njg1NWRjNDA2YTBlMGEzNzll
ZTVmNjI3OTFkMDMxMi4uNTYwOGE5ZTAxMzZjMjE3NDRmZWQzNTA1N2QxMzM2M2I2NjM3MmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI3LDYgKzI3LDE0IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZs
LmNwcAogICAgIFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAogCisgICAgU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcAorICAgIFNoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TaWdhY3Rpb25TeXNjYWxsLmNwcAorICAgIFNoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy9TaWdwcm9jbWFza1N5c2NhbGwuY3BwCisgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCisgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NlY2NvbXBGaWx0ZXJzLmNwcAorICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNj
YWxsLmNwcAorICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsUG9saWN5LmNw
cAorCiAgICAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIAogICAgIFNo
YXJlZC9zb3VwL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcApAQCAtMTQ5LDYgKzE1Nyw3IEBA
IGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9lZmwv
V2ViSW5zcGVjdG9yRWZsLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9lZmwvV2ViUGFnZUVm
bC5jcHAKIAorICAgIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5j
cHAKICAgICBXZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKIAogICAgIFdlYlBy
b2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKQEAgLTI1NSw2ICsyNjQsMjEgQEAgbGlzdChB
UFBFTkQgV2ViUHJvY2Vzc19MSUJSQVJJRVMKICAgICAke1NRTElURV9MSUJSQVJJRVN9CiApCiAK
K2lmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQorICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfTElC
UkFSSUVTCisgICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9CisgICAgKQorICAgIGxpc3Qo
QVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0xJQlNFQ0NPTVBf
SU5DTFVERV9ESVJTfQorICAgICkKKworICAgICMgSWYgYnVpbGRpbmcgd2l0aCBqaGJ1aWxkLCBh
ZGQgdGhlIHJvb3QgYnVpbGQgZGlyZWN0b3J5IHRvIHRoZQorICAgICMgZmlsZXN5c3RlbSBhY2Nl
c3MgcG9saWN5LgorICAgIGlmIChJU19ESVJFQ1RPUlkgJHtDTUFLRV9TT1VSQ0VfRElSfS9XZWJL
aXRCdWlsZC9EZXBlbmRlbmNpZXMpCisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFNPVVJDRV9E
SVI9XCIke0NNQUtFX1NPVVJDRV9ESVJ9XCIpCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCisKIGlm
IChFTkFCTEVfRUNPUkVfWCkKICAgICBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwog
ICAgICAgICAke0VDT1JFX1hfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmJlNDkzOGNhOTI4NjI5MDM2MTFiZWZiZDRhNjkwZjBkOGQwMzljZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lz
Y2FsbC5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NP
TVBfRklMVEVSUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiU3lz
Y2FsbFBvbGljeS5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NPTVBJTEVfQVNTRVJUKCFPX1JET05MWSwg
T19SRE9OTFkpOworQ09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkpOworQ09N
UElMRV9BU1NFUlQoT19SRFdSID09IDIsIE9fUkRXUik7CisKK1Bhc3NPd25QdHI8U3lzY2FsbD4g
T3BlblN5c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KG1jb250ZXh0X3QqIGNvbnRleHQp
Cit7CisgICAgT3duUHRyPE9wZW5TeXNjYWxsPiBvcGVuID0gYWRvcHRQdHIobmV3IE9wZW5TeXNj
YWxsKDApKTsKKworICAgIG9wZW4tPnNldEZsYWdzKGNvbnRleHQtPmdyZWdzW1JFR19BUkcyXSk7
CisgICAgb3Blbi0+c2V0TW9kZShjb250ZXh0LT5ncmVnc1tSRUdfQVJHM10pOworICAgIG9wZW4t
PnNldENvbnRleHQoY29udGV4dCk7CisKKyAgICBpbnQgZmQgPSBjb250ZXh0LT5ncmVnc1tSRUdf
QVJHMF07CisgICAgY2hhciogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQt
PmdyZWdzW1JFR19BUkcxXSk7CisKKyAgICBpZiAocGF0aFswXSA9PSAnLycpIHsKKyAgICAgICAg
b3Blbi0+c2V0UGF0aChwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9wZW4ucmVsZWFzZSgpOworICAg
IH0KKworICAgIHN0cnVjdCBzdGF0IHBhdGhTdGF0OworICAgIGlmIChmc3RhdChmZCwgJnBhdGhT
dGF0KSA9PSAtMSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtZXJy
bm87CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghU19JU0RJUihw
YXRoU3RhdC5zdF9tb2RlKSkgeworICAgICAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0g
PSAtRU5PVERJUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgY2hhciBm
ZExpbmtQYXRoWzMyXTsKKyAgICBzbnByaW50ZihmZExpbmtQYXRoLCBzaXplb2YoZmRMaW5rUGF0
aCksICIvcHJvYy9zZWxmL2ZkLyVkIiwgZmQpOworCisgICAgY2hhciBmZFBhdGhbUEFUSF9NQVhd
OworICAgIHNzaXplX3Qgc2l6ZSA9IHJlYWRsaW5rKGZkTGlua1BhdGgsIGZkUGF0aCwgc2l6ZW9m
KGZkUGF0aCkgLSAxKTsKKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAgICBjb250ZXh0LT5n
cmVnc1tSRUdfU1lTQ0FMTF0gPSAtZXJybm87CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIFRoZSAiKyAyIiBoZXJlIHN0YW5kcyBmb3IgdGhlICcvJyBhbmQgbnVsbCB0
ZXJtaW5hdG9yLgorICAgIGlmIChzaXplICsgc3RybGVuKHBhdGgpICsgMiA+IFBBVEhfTUFYKSB7
CisgICAgICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1FTkFNRVRPT0xPTkc7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHNwcmludGYoJmZkUGF0aFtzaXpl
XSwgIi8lcyIsIHBhdGgpOworICAgIG9wZW4tPnNldFBhdGgoZmRQYXRoKTsKKworICAgIHJldHVy
biBvcGVuLnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6
Y3JlYXRlRnJvbUNyZWF0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0KQoreworICAgIE9wZW5T
eXNjYWxsKiBvcGVuID0gbmV3IE9wZW5TeXNjYWxsKDApOworCisgICAgb3Blbi0+c2V0UGF0aChD
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSkp
KTsKKyAgICBvcGVuLT5zZXRGbGFncyhPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DKTsKKyAg
ICBvcGVuLT5zZXRNb2RlKGNvbnRleHQtPmdyZWdzW1JFR19BUkcxXSk7CisgICAgb3Blbi0+c2V0
Q29udGV4dChjb250ZXh0KTsKKworICAgIHJldHVybiBhZG9wdFB0cihvcGVuKTsKK30KKworT3Bl
blN5c2NhbGw6Ok9wZW5TeXNjYWxsKG1jb250ZXh0X3QqIGNvbnRleHQpCisgICAgOiBTeXNjYWxs
KF9fTlJfb3BlbiwgY29udGV4dCkKKyAgICAsIG1fZmxhZ3MoMCkKKyAgICAsIG1fbW9kZSgwKQor
eworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0gQ1N0
cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdfQVJHMF0pKTsK
KyAgICBtX2ZsYWdzID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzFdOworICAgIG1fbW9kZSA9IGNv
bnRleHQtPmdyZWdzW1JFR19BUkcyXTsKK30KKwordm9pZCBPcGVuU3lzY2FsbDo6c2V0UmVzdWx0
KGNvbnN0IFN5c2NhbGxSZXN1bHQqIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpICYm
IHJlc3VsdC0+dHlwZSgpID09IHR5cGUoKSk7CisKKyAgICBjb25zdCBPcGVuU3lzY2FsbFJlc3Vs
dCogb3BlblJlc3VsdCA9IHN0YXRpY19jYXN0PGNvbnN0IE9wZW5TeXNjYWxsUmVzdWx0Kj4ocmVz
dWx0KTsKKworICAgIGlmIChvcGVuUmVzdWx0LT5mZCgpID49IDApCisgICAgICAgIGNvbnRleHQo
KS0+Z3JlZ3NbUkVHX1NZU0NBTExdID0gZHVwKG9wZW5SZXN1bHQtPmZkKCkpOworICAgIGVsc2UK
KyAgICAgICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSAtb3BlblJlc3VsdC0+ZXJy
b3JOdW1iZXIoKTsKK30KKworUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBPcGVuU3lzY2FsbDo6
ZXhlY3V0ZShjb25zdCBTeXNjYWxsUG9saWN5JiBwb2xpY3kpCit7CisgICAgaWYgKCFzdHJuY21w
KCIvcHJvYy9zZWxmLyIsIG1fcGF0aC5kYXRhKCksIDExKSkgeworICAgICAgICBTdHJpbmcgcmVz
b2x2ZWRTZWxmUGF0aCA9IEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihn
ZXRwcGlkKCkpICsgJm1fcGF0aC5kYXRhKClbMTBdOworICAgICAgICBtX3BhdGggPSByZXNvbHZl
ZFNlbGZQYXRoLnV0ZjgoKS5kYXRhKCk7CisgICAgfQorCisgICAgU3lzY2FsbFBvbGljeTo6UGVy
bWlzc2lvbiBwZXJtaXNzaW9uID0gU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZDsKKyAgICBpZiAo
bV9mbGFncyAmIE9fUkRXUikKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2Nh
bGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkQW5k
V3JpdGUpOworICAgIGVsc2UgaWYgKG1fZmxhZ3MgJiBPX1dST05MWSkKKyAgICAgICAgcGVybWlz
c2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24g
fCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7CisgICAgZWxzZQorICAgICAgICBwZXJtaXNzaW9uID0g
c3RhdGljX2Nhc3Q8U3lzY2FsbFBvbGljeTo6UGVybWlzc2lvbj4ocGVybWlzc2lvbiB8IFN5c2Nh
bGxQb2xpY3k6OlJlYWQpOworCisgICAgLy8gQ3JlYXRlIGEgZmlsZSBpbXBsaWVzIHdyaXRlIHBl
cm1pc3Npb24gb24gdGhlIGRpcmVjdG9yeS4KKyAgICBpZiAobV9mbGFncyAmIE9fQ1JFQVQgfHwg
bV9mbGFncyAmIE9fRVhDTCkKKyAgICAgICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2Nh
bGxQb2xpY3k6OlBlcm1pc3Npb24+KHBlcm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpXcml0ZSk7
CisKKyAgICBpZiAoIXBvbGljeS5oYXNQZXJtaXNzaW9uRm9yUGF0aChtX3BhdGguZGF0YSgpLCBw
ZXJtaXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3Vs
dCgtMSwgRUFDQ0VTKSk7CisKKyAgICAvLyBQZXJtaXNzaW9uIGdyYW50ZWQsIGV4ZWN1dGUgdGhl
IHN5c2NhbGwuIFRoZSBzeXNjYWxsIG1pZ2h0IHN0aWxsCisgICAgLy8gZmFpbCBiZWNhdXNlIG9m
IGhhcmQgcGVybWlzc2lvbnMgZW5mb3JjZWQgYnkgdGhlIGZpbGVzeXN0ZW0gYW5kCisgICAgLy8g
dGhpbmdzIGxpa2UgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LgorICAgIGludCBmZCA9IG9w
ZW4obV9wYXRoLmRhdGEoKSwgbV9mbGFncywgbV9tb2RlKTsKKyAgICBpbnQgZXJyb3JOdW1iZXIg
PSBmZCA9PSAtMSA/IGVycm5vIDogMDsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlblN5
c2NhbGxSZXN1bHQoZmQsIGVycm9yTnVtYmVyKSk7Cit9CisKK3ZvaWQgT3BlblN5c2NhbGw6OmVu
Y29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2RlciA8PCB0eXBlKCk7CisgICAgZW5jb2RlciA8PCBtX3BhdGg7CisgICAgZW5jb2RlciA8PCBt
X2ZsYWdzOworICAgIGVuY29kZXIgPDwgbV9tb2RlOworfQorCitib29sIE9wZW5TeXNjYWxsOjpk
ZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyKQoreworICAgIC8vIG1fdHlw
ZSBhbHJlYWR5IGRlY29kZWQgYnkgdGhlIHBhcmVudCBjbGFzcy4KKworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKG1fcGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShtX2ZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGRlY29kZXItPmRlY29kZShtX21vZGUpOworfQorCitPcGVuU3lzY2FsbFJlc3VsdDo6T3BlblN5
c2NhbGxSZXN1bHQoaW50IGZkLCBpbnQgZXJyb3JOdW1iZXIpCisgICAgOiBTeXNjYWxsUmVzdWx0
KF9fTlJfb3BlbikKKyAgICAsIG1fZmQoZmQpCisgICAgLCBtX2Vycm9yTnVtYmVyKGVycm9yTnVt
YmVyKQoreworfQorCitPcGVuU3lzY2FsbFJlc3VsdDo6fk9wZW5TeXNjYWxsUmVzdWx0KCkKK3sK
KyAgICBpZiAobV9mZCA+PSAwKQorICAgICAgICBjbG9zZShtX2ZkKTsKK30KKwordm9pZCBPcGVu
U3lzY2FsbFJlc3VsdDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHR5cGUoKTsKKworICAgIGlmIChtX2ZkID49IDApIHsK
KyAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCBhdHRhY2htZW50KG1fZmQpOworICAgICAgICBl
bmNvZGVyLmFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CisgICAgfQorCisgICAgZW5jb2RlciA8
PCBtX2Vycm9yTnVtYmVyOworfQorCitib29sIE9wZW5TeXNjYWxsUmVzdWx0OjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCit7CisgICAgaWYgKGZkID49
IDApCisgICAgICAgIG1fZmQgPSBmZDsKKworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUobV9l
cnJvck51bWJlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMwMzU4OGU0
NmY2MjdjNDhjODc2MDI1MGE3NjI0NjQ5NzYyNjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BlblN5c2NhbGxfaAor
I2RlZmluZSBPcGVuU3lzY2FsbF9oCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisj
aW5jbHVkZSAiU3lzY2FsbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRF
bmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgT3BlblN5c2NhbGwgOiBw
dWJsaWMgU3lzY2FsbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U3lzY2FsbD4g
Y3JlYXRlRnJvbU9wZW5hdENvbnRleHQobWNvbnRleHRfdCopOworICAgIHN0YXRpYyBQYXNzT3du
UHRyPFN5c2NhbGw+IGNyZWF0ZUZyb21DcmVhdENvbnRleHQobWNvbnRleHRfdCopOworCisgICAg
ZXhwbGljaXQgT3BlblN5c2NhbGwobWNvbnRleHRfdCopOworCisgICAgdm9pZCBzZXRQYXRoKGNv
bnN0IENTdHJpbmcmIHBhdGgpIHsgbV9wYXRoID0gcGF0aDsgfTsKKyAgICB2b2lkIHNldEZsYWdz
KGNvbnN0IGludCBmbGFncykgeyBtX2ZsYWdzID0gZmxhZ3M7IH07CisgICAgdm9pZCBzZXRNb2Rl
KGNvbnN0IG1vZGVfdCBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH07CisKKyAgICAvLyBTeXNjYWxs
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHQoY29uc3QgU3lzY2Fs
bFJlc3VsdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRl
KGNvbnN0IFN5c2NhbGxQb2xpY3kmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKik7CisKK3ByaXZhdGU6CisgICAgQ1N0cmluZyBtX3BhdGg7Cisg
ICAgaW50IG1fZmxhZ3M7CisgICAgbW9kZV90IG1fbW9kZTsKK307CisKK2NsYXNzIE9wZW5TeXNj
YWxsUmVzdWx0IDogcHVibGljIFN5c2NhbGxSZXN1bHQgeworcHVibGljOgorICAgIE9wZW5TeXNj
YWxsUmVzdWx0KGludCBmZCwgaW50IGVycm9yTnVtYmVyKTsKKyAgICB+T3BlblN5c2NhbGxSZXN1
bHQoKTsKKworICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmQ7IH0KKyAgICBpbnQgZXJy
b3JOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTnVtYmVyOyB9CisKKyAgICAvLyBTeXNj
YWxsUmVzdWx0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQpOworCitwcml2YXRlOgorICAgIGludCBtX2Zk
OworICAgIGludCBtX2Vycm9yTnVtYmVyOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBPcGVuU3lz
Y2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZp
bHRlcnMvU2VjY29tcEJyb2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE0NTQ1ZGQ1Njc0N2Fi
YTIwMjkyZjZkODljZTQ5ZGRkNjAzNzU0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcApAQCAtMCww
ICsxLDM1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY2Nv
bXBCcm9rZXIuaCIKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIlN5c2NhbGwuaCIKKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2VjY29tcC5oPgorI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIFNZU19TRUNDT01QCisjZGVmaW5lIFNZ
U19TRUNDT01QIDEKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1lc3NhZ2VNYXhTaXpl
ID0gNDA5NjsKK3N0YXRpYyBjb25zdCBjaGFyIG9ubGluZUNQVUNvdW50UGF0aFtdID0gIi9zeXMv
ZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSI7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBTZWNjb21wQnJva2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2VjY29tcEJyb2tl
ckNsaWVudCYgc2hhcmVkKGludCBzb2NrZXQgPSAtMSk7CisgICAgflNlY2NvbXBCcm9rZXJDbGll
bnQoKTsKKworICAgIHZvaWQgZGlzcGF0Y2goU3lzY2FsbCopIGNvbnN0OworCisgICAgYm9vbCBo
YW5kbGVJZk9wZW5pbmdPbmxpbmVDUFVDb3VudChtY29udGV4dF90KikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgU2VjY29tcEJyb2tlckNsaWVudChpbnQgc29ja2V0KTsKKworICAgIGludCBtX3Nv
Y2tldDsKKyAgICBpbnQgbV9vbmxpbmVDUFVDb3VudEZkOworCisgICAgbXV0YWJsZSBNdXRleCBt
X3NvY2tldExvY2s7Cit9OworCitzdGF0aWMgc3NpemVfdCBzZW5kTWVzc2FnZShpbnQgc29ja2V0
LCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IGZkID0gLTEpCit7CisgICAgQVNTRVJUKHNp
emUgPD0gbWVzc2FnZU1heFNpemUpOworCisgICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOworICAg
IG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKKworICAgIHN0cnVjdCBpb3Zl
YyBpb3Y7CisgICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKyAgICBpb3YuaW92X2Jh
c2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKKworICAgIG1lc3NhZ2UubXNnX2lv
diA9ICZpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKKworICAgIGNoYXIgY29udHJv
bFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKKyAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICBt
ZXNzYWdlLm1zZ19jb250cm9sID0gY29udHJvbDsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJv
bGxlbiA9IHNpemVvZihjb250cm9sKTsKKyAgICAgICAgbWVtc2V0KG1lc3NhZ2UubXNnX2NvbnRy
b2wsIDAsIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4pOworCisgICAgICAgIHN0cnVjdCBjbXNnaGRy
KiBjbXNnID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2
ZWwgPSBTT0xfU09DS0VUOworICAgICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwor
ICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihmZCkpOworCisgICAgICAg
IG1lbW1vdmUoQ01TR19EQVRBKGNtc2cpLCAmZmQsIHNpemVvZihmZCkpOworICAgIH0KKworICAg
IHJldHVybiBzZW5kbXNnKHNvY2tldCwgJm1lc3NhZ2UsIDApOworfQorCitzdGF0aWMgc3NpemVf
dCByZWNlaXZlTWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50
KiBmZCA9IDApCit7CisgICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOworICAgIG1lbXNldCgmbWVz
c2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAg
bWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOwor
ICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKKworICAgIG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7Cisg
ICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKKworICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNF
KHNpemVvZihmZCkpXTsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gY29udHJvbDsKKyAgICBt
ZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOworICAgIG1lbXNldChtZXNz
YWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1zZ19jb250cm9sbGVuKTsKKworICAgIHNzaXpl
X3QgcmVjZWl2ZWRCeXRlcyA9IHJlY3Ztc2coc29ja2V0LCAmbWVzc2FnZSwgMCk7CisKKyAgICBp
ZiAoZmQgJiYgcmVjZWl2ZWRCeXRlcyA+IDApIHsKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNt
c2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKKyAgICAgICAgaWYgKGNtc2cgJiYgY21zZy0+
Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNtc2ctPmNtc2dfdHlwZSA9PSBTQ01fUklHSFRT
KQorICAgICAgICAgICAgbWVtY3B5KGZkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZigqZmQpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmZkID0gLTE7CisgICAgfQorCisgICAgcmV0dXJu
IHJlY2VpdmVkQnl0ZXMgPj0gMCA/IHJlY2VpdmVkQnl0ZXMgOiAtZXJybm87Cit9CisKK3N0YXRp
YyB2b2lkIFNJR1NZU0hhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBk
YXRhKQoreworICAgIGlmIChzaWduYWwgIT0gU0lHU1lTIHx8IGluZm8tPnNpX2NvZGUgIT0gU1lT
X1NFQ0NPTVApCisgICAgICAgIENSQVNIKCk7CisKKyAgICB1Y29udGV4dF90KiB1Y29udGV4dCA9
IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPihkYXRhKTsKKyAgICBpZiAoIXVjb250ZXh0KQorICAg
ICAgICBDUkFTSCgpOworCisgICAgU2VjY29tcEJyb2tlckNsaWVudCogY2xpZW50ID0gJlNlY2Nv
bXBCcm9rZXJDbGllbnQ6OnNoYXJlZCgpOworCisgICAgaWYgKGNsaWVudC0+aGFuZGxlSWZPcGVu
aW5nT25saW5lQ1BVQ291bnQoJnVjb250ZXh0LT51Y19tY29udGV4dCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIGNyZWF0ZUZyb21Db250ZXh0IG1pZ2h0IHJldHVybiBhIG51bGxwdHIgaWYg
aXQgaXMgYWJsZSB0byByZXNvbHZlIHRoZQorICAgIC8vIHN5c2NhbGwgbG9jYWxseSB3aXRob3V0
IHNlbmRpbmcgaXQgdG8gdGhlIGJyb2tlciBwcm9jZXNzLiBJbiB0aGlzIGNhc2UsCisgICAgLy8g
d2UganVzdCByZXR1cm4uIEV4YW1wbGVzIG9mIGxvY2FsbHkgcmVzb2x2ZWQgc3lzY2FsbHMgYXJl
IHRoZSBvbmVzCisgICAgLy8gd2l0aCBjYWNoZWQgcmVzb3VyY2VzIGFuZCBpbnZhbGlkIGFyZ3Vt
ZW50cy4KKyAgICBPd25QdHI8U3lzY2FsbD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21D
b250ZXh0KHVjb250ZXh0KTsKKyAgICBpZiAoIXN5c2NhbGwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNsaWVudC0+ZGlzcGF0Y2goc3lzY2FsbC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJl
Z2lzdGVyU0lHU1lTSGFuZGxlcigpCit7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Cisg
ICAgbWVtc2V0KCZhY3Rpb24sIDAsIHNpemVvZihhY3Rpb24pKTsKKyAgICBhY3Rpb24uc2Ffc2ln
YWN0aW9uID0gJlNJR1NZU0hhbmRsZXI7CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5G
TyB8IFNBX05PREVGRVI7CisKKyAgICBpZiAoc2lnYWN0aW9uKFNJR1NZUywgJmFjdGlvbiwgMCkg
PCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgc2lnc2V0X3QgbWFzazsKKyAgICBzaWdlbXB0
eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTSUdTWVMpOworCisgICAgaWYgKHNp
Z3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCkgPCAwKQorICAgICAgICBDUkFTSCgpOwor
fQorCitTZWNjb21wQnJva2VyQ2xpZW50JiBTZWNjb21wQnJva2VyQ2xpZW50OjpzaGFyZWQoaW50
IHNvY2tldCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNlY2NvbXBCcm9rZXJDbGllbnQs
IGJyb2tlckNsaWVudCwgKHNvY2tldCkpOworCisgICAgcmV0dXJuIGJyb2tlckNsaWVudDsKK30K
KworU2VjY29tcEJyb2tlckNsaWVudDo6U2VjY29tcEJyb2tlckNsaWVudChpbnQgc29ja2V0KQor
ICAgIDogbV9zb2NrZXQoc29ja2V0KQorICAgICwgbV9vbmxpbmVDUFVDb3VudEZkKG9wZW4ob25s
aW5lQ1BVQ291bnRQYXRoLCBPX1JET05MWSkpCit7CisgICAgQVNTRVJUKG1fc29ja2V0ID49IDAg
JiYgbV9vbmxpbmVDUFVDb3VudEZkID49IDApOworfQorCitTZWNjb21wQnJva2VyQ2xpZW50Ojp+
U2VjY29tcEJyb2tlckNsaWVudCgpCit7CisgICAgY2xvc2UobV9zb2NrZXQpOworICAgIGNsb3Nl
KG1fb25saW5lQ1BVQ291bnRGZCk7Cit9CisKK3ZvaWQgU2VjY29tcEJyb2tlckNsaWVudDo6ZGlz
cGF0Y2goU3lzY2FsbCogc3lzY2FsbCkgY29uc3QKK3sKKyAgICBPd25QdHI8Q29yZUlQQzo6QXJn
dW1lbnRFbmNvZGVyPiBlbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUo
KTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoKnN5c2NhbGwpOworCisgICAgY2hhciBidWZmZXJbbWVz
c2FnZU1heFNpemVdOworICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IDA7CisgICAgaW50IGZk
ID0gLTE7CisKKyAgICBtX3NvY2tldExvY2subG9jaygpOworCisgICAgaWYgKHNlbmRNZXNzYWdl
KG1fc29ja2V0LCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpKSA8IDAp
CisgICAgICAgIENSQVNIKCk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICByZWNlaXZl
ZEJ5dGVzID0gcmVjZWl2ZU1lc3NhZ2UobV9zb2NrZXQsICZidWZmZXIsIHNpemVvZihidWZmZXIp
LCAmZmQpOworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyA+IDApCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBpZiAocmVjZWl2ZWRCeXRlcyAhPSAtRUlOVFIpCisgICAgICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIG1fc29ja2V0TG9jay51bmxvY2soKTsKKworICAgIE93blB0
cjxDb3JlSVBDOjpBcmd1bWVudERlY29kZXI+IGRlY29kZXIgPSBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXI6OmNyZWF0ZSgoY29uc3QgdWludDhfdCopIGJ1ZmZlciwgcmVjZWl2ZWRCeXRlcyk7Cisg
ICAgT3duUHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IFN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZy
b21EZWNvZGVyKGRlY29kZXIuZ2V0KCksIGZkKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
Q1JBU0goKTsKKworICAgIHN5c2NhbGwtPnNldFJlc3VsdChyZXN1bHQuZ2V0KCkpOworfQorCiti
b29sIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KG1j
b250ZXh0X3QqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRleHQtPmdyZWdzW1JFR19T
WVNDQUxMXSAhPSBfX05SX29wZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IGNoYXIgKnBhdGggPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb250ZXh0LT5ncmVnc1tSRUdf
QVJHMF0pOworICAgIGlmIChzdHJjbXAob25saW5lQ1BVQ291bnRQYXRoLCBwYXRoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTWFsbG9jIHdpbGwgZXZlbnR1YWxseSBjaGVjayB0
aGUgbnVtYmVyIG9mIG9ubGluZSBDUFVzIChpLmUgYmVpbmcKKyAgICAvLyBzY2hlZHVsZWQpIHBy
ZXNlbnQgb24gdGhlIHN5c3RlbSBieSBvcGVuaW5nIGEgc3BlY2lhbCBmaWxlLiBJZiBpdCBkb2Vz
CisgICAgLy8gdGhhdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBTSUdTWVMgc2lnbmFsIGhhbmRsZXIs
IGl0IG1pZ2h0IHRyaWdnZXIgYQorICAgIC8vIHJlY3Vyc2l2ZSBhdHRlbXB0IG9mIHByb3h5aW5n
IHRoZSBvcGVuKCkgc3lzY2FsbCB0byB0aGUgYnJva2VyLgorICAgIC8vIEJlY2F1c2Ugb2YgdGhh
dCwgd2UgY2FjaGUgdGhpcyByZXNvdXJjZS4KKyAgICBjb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FM
TF0gPSBkdXAobV9vbmxpbmVDUFVDb3VudEZkKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3MoU2VjY29tcEZpbHRlcnMqIGZpbHRlcnMs
IGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlIHNpZ3Byb2NtYXNrIGZpbHRlcnMgYmVsbG93IGFyZSBuZWVkZWQgdG8gdHJhcCBz
aWdwcm9jbWFzaygpCisgICAgLy8gc28gd2UgY2FuIHByZXZlbnQgdGhlIHJ1bm5pbmcgcHJvY2Vz
c2VzIGZyb20gYmxvY2tpbmcgU0lHU1lTLgorICAgIGZpbHRlcnMtPmFkZFJ1bGUoInNpZ3Byb2Nt
YXNrIiwgU2VjY29tcEZpbHRlcnM6OlRyYXAsCisgICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpF
cXVhbCwgU0lHX0JMT0NLLAorICAgICAgICAxLCBTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwsIDAp
OworICAgIGZpbHRlcnMtPmFkZFJ1bGUoInNpZ3Byb2NtYXNrIiwgU2VjY29tcEZpbHRlcnM6OlRy
YXAsCisgICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX1NFVE1BU0ssCisgICAg
ICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVhbCwgMCk7CisgICAgZmlsdGVycy0+YWRkUnVs
ZSgicnRfc2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKKyAgICAgICAgMCwgU2Vj
Y29tcEZpbHRlcnM6OkVxdWFsLCBTSUdfQkxPQ0ssCisgICAgICAgIDEsIFNlY2NvbXBGaWx0ZXJz
OjpOb3RFcXVhbCwgMCk7CisgICAgZmlsdGVycy0+YWRkUnVsZSgicnRfc2lncHJvY21hc2siLCBT
ZWNjb21wRmlsdGVyczo6VHJhcCwKKyAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVxdWFsLCBT
SUdfU0VUTUFTSywKKyAgICAgICAgMSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsLCAwKTsKKwor
ICAgIC8vIFRoZSBzaWdhY3Rpb24gZmlsdGVycyBiZWxsb3cgYXJlIG5lZWRlZCB0byB0cmFwIHNp
Z2FjdGlvbigpCisgICAgLy8gc28gd2UgY2FuIHByZXZlbnQgdGhlIHJ1bm5pbmcgcHJvY2Vzc2Vz
IGZyb20gaGFuZGxpbmcgU0lHU1lTLgorICAgIGZpbHRlcnMtPmFkZFJ1bGUoInNpZ2FjdGlvbiIs
IFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAorICAgICAgICAwLCBTZWNjb21wRmlsdGVyczo6RXF1YWws
IFNJR1NZUyk7CisgICAgZmlsdGVycy0+YWRkUnVsZSgicnRfc2lnYWN0aW9uIiwgU2VjY29tcEZp
bHRlcnM6OlRyYXAsCisgICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHU1lTKTsK
KworICAgIFNlY2NvbXBCcm9rZXIgc2VjY29tcEJyb2tlcjsKKyAgICBzZWNjb21wQnJva2VyLnNl
dFN5c2NhbGxQb2xpY3kocG9saWN5KTsKKyAgICBzZWNjb21wQnJva2VyLmluaXRpYWxpemUoKTsK
KworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKK30KKwordm9pZCBTZWNjb21wQnJva2VyOjppbml0
aWFsaXplKCkKK3sKKyAgICBpbnQgc29ja2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9V
TklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKQorICAgICAgICBDUkFTSCgpOworCisg
ICAgcGlkX3QgcGlkID0gZm9yaygpOworICAgIGlmIChwaWQpIHsgLy8gU2FuZGJveGVkIHByb2Nl
c3MuCisgICAgICAgIGNsb3NlKHNvY2tldHNbMV0pOworICAgICAgICBTZWNjb21wQnJva2VyQ2xp
ZW50OjpzaGFyZWQoc29ja2V0c1swXSk7CisgICAgICAgIHJlZ2lzdGVyU0lHU1lTSGFuZGxlcigp
OworICAgIH0gZWxzZSB7IC8vIEJyb2tlci4KKyAgICAgICAgLy8gVE9ETzogVGhlIGJyb2tlciBz
aG91bGQgc2V0dXAgc2VjY29tcCBmaWx0ZXJzCisgICAgICAgIC8vIGZvciBpdHNlbGYgYW5kIGJs
b2NrIGV2ZXJ5dGhpbmcgZWxzZSBvdGhlciB0aGFuCisgICAgICAgIC8vIHRoZSBtaW5pbWFsIHNl
dCBvZiBzeXNjYWxscyBuZWVkZWQgdG8gZXhlY3V0ZSB0aGUKKyAgICAgICAgLy8gc3lzY2FsbHMg
aXQgaXMgc3VwcG9zZSB0byBwcm94eS4KKyAgICAgICAgY2xvc2Uoc29ja2V0c1swXSk7CisgICAg
ICAgIHJ1bkxvb3Aoc29ja2V0c1sxXSk7CisgICAgfQorfQorCitOT19SRVRVUk4gdm9pZCBTZWNj
b21wQnJva2VyOjpydW5Mb29wKGludCBzb2NrZXQpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGlu
dCBpID0gU1RERVJSX0ZJTEVOTyArIDE7CisjZWxzZQorICAgIGludCBpID0gMDsKKyNlbmRpZgor
ICAgIC8vIENsb3NlIGFsbCBpbmhlcml0ZWQgZmlsZSBkZXNjcmlwdG9ycyBvdGhlcgorICAgIC8v
IHRoYW4gdGhlIHNvY2tldCB0byB0aGUgc2FuZGJveGVkIHByb2Nlc3MuCisgICAgZm9yICg7IGkg
PCBGRF9TRVRTSVpFOyArK2kpCisgICAgICAgIGlmIChpICE9IHNvY2tldCkKKyAgICAgICAgICAg
IGNsb3NlKGkpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgY2hhciBidWZmZXJbbWVz
c2FnZU1heFNpemVdOworICAgICAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMgPSByZWNlaXZlTWVz
c2FnZShzb2NrZXQsICZidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICAgICAgaWYgKHJlY2Vp
dmVkQnl0ZXMgPT0gLUVJTlRSKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlY2VpdmVkQnl0ZXMgPD0gMCkKKyAgICAgICAgICAgIGV4aXQocmVjZWl2ZWRCeXRlcyA/IEVY
SVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUyk7CisKKyAgICAgICAgT3duUHRyPENvcmVJUEM6OkFy
Z3VtZW50RGVjb2Rlcj4gZGVjb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6Y3JlYXRl
KChjb25zdCB1aW50OF90KikgYnVmZmVyLCByZWNlaXZlZEJ5dGVzKTsKKyAgICAgICAgT3duUHRy
PFN5c2NhbGw+IHN5c2NhbGwgPSBTeXNjYWxsOjpjcmVhdGVGcm9tRGVjb2RlcihkZWNvZGVyLmdl
dCgpKTsKKyAgICAgICAgaWYgKCFzeXNjYWxsKQorICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOworCisgICAgICAgIE93blB0cjxTeXNjYWxsUmVzdWx0PiByZXN1bHQgPSBzeXNjYWxsLT5l
eGVjdXRlKG1fcG9saWN5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBleGl0
KEVYSVRfRkFJTFVSRSk7CisKKyAgICAgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
cj4gZW5jb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6Y3JlYXRlKCk7CisgICAgICAg
IGVuY29kZXItPmVuY29kZSgqcmVzdWx0KTsKKworICAgICAgICBWZWN0b3I8Q29yZUlQQzo6QXR0
YWNobWVudD4gYXR0YWNobWVudHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKKyAg
ICAgICAgaW50IGZkID0gYXR0YWNobWVudHMuc2l6ZSgpID09IDEgPyBhdHRhY2htZW50c1swXS5m
aWxlRGVzY3JpcHRvcigpIDogLTE7CisKKyAgICAgICAgLy8gVGhlIGNsaWVudCBpcyBkb3duLCB0
aGUgYnJva2VyIHNob3VsZCBnbyBhd2F5LgorICAgICAgICBpZiAoc2VuZE1lc3NhZ2Uoc29ja2V0
LCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBmZCkgPCAwKQorICAg
ICAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJv
a2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTc1Yzg2Yjc0ZTdmN2UyNDk2MWM4NzhjYTZhMjdjMDU0Y2VmODg2
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy9TZWNjb21wQnJva2VyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTZWNjb21wQnJva2VyX2gKKyNkZWZpbmUgU2VjY29tcEJyb2tlcl9oCisK
KyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnMu
aCIKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisjaW5jbHVkZSAiU3lzY2FsbFBvbGljeS5oIgorI2lu
Y2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBTZWNjb21wQnJva2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZWNjb21wQnJva2VyKTsKKworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGxhdW5jaFByb2Nl
c3MoU2VjY29tcEZpbHRlcnMqLCBjb25zdCBTeXNjYWxsUG9saWN5Jik7CisKKyAgICB2b2lkIGlu
aXRpYWxpemUoKTsKKyAgICB2b2lkIHNldFN5c2NhbGxQb2xpY3koY29uc3QgU3lzY2FsbFBvbGlj
eSYgcG9saWN5KSB7IG1fcG9saWN5ID0gcG9saWN5OyB9CisKK3ByaXZhdGU6CisgICAgU2VjY29t
cEJyb2tlcigpIHsgfQorCisgICAgdm9pZCBydW5Mb29wKGludCBzb2NrZXQpOworCisgICAgU3lz
Y2FsbFBvbGljeSBtX3BvbGljeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBCcm9rZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NlY2NvbXBGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy9TZWNjb21wRmlsdGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ5MWJkMTY3ZDFkMzE4MTlh
NmNhY2M0ZDFiZGIwMGQ1MGMzYmJhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5jcHAKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTZWNjb21wRmlsdGVycy5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgIlNlY2NvbXBCcm9rZXIuaCIKKyNpbmNsdWRlIDxzZWNjb21wLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NPTVBJTEVfQVNT
RVJUKFNlY2NvbXBGaWx0ZXJzOjpBbGxvdyA9PSBTQ01QX0FDVF9BTExPVywgQWxsb3cpOworQ09N
UElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OktpbGwgPT0gU0NNUF9BQ1RfS0lMTCwgS2lsbCk7
CitDT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6VHJhcCA9PSBTQ01QX0FDVF9UUkFQLCBU
cmFwKTsKKworQ09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6Ok5vdFNldCA9PSBzdGF0aWNf
Y2FzdDxTZWNjb21wRmlsdGVyczo6T3BlcmF0b3I+KF9TQ01QX0NNUF9NSU4pLCBOb3RTZXQpOwor
Q09NUElMRV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsID09IHN0YXRpY19jYXN0PFNl
Y2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oU0NNUF9DTVBfTkUpLCBOb3RFcXVhbCk7CitDT01QSUxF
X0FTU0VSVChTZWNjb21wRmlsdGVyczo6RXF1YWwgPT0gc3RhdGljX2Nhc3Q8U2VjY29tcEZpbHRl
cnM6Ok9wZXJhdG9yPihTQ01QX0NNUF9FUSksIEVxdWFsKTsKKworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKHNjbXBfZGF0dW1fdCkgPT0gc2l6ZW9mKGxvbmcgbG9uZyksIHNjbXBfZGF0dW1fdCk7CisK
K1NlY2NvbXBGaWx0ZXJzOjpTZWNjb21wRmlsdGVycyhBY3Rpb24gZGVmYXVsdEFjdGlvbikKKyAg
ICA6IG1fY29udGV4dChzZWNjb21wX2luaXQoZGVmYXVsdEFjdGlvbikpCisgICAgLCBtX2luaXRp
YWxpemVkKGZhbHNlKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBDUkFTSCgpOwor
fQorCitTZWNjb21wRmlsdGVyczo6flNlY2NvbXBGaWx0ZXJzKCkKK3sKKyAgICBzZWNjb21wX3Jl
bGVhc2UobV9jb250ZXh0KTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyczo6YWRkUnVsZShjb25z
dCBjaGFyKiBzeXNjYWxsTmFtZSwgQWN0aW9uIGFjdGlvbiwKKyAgICB1bnNpZ25lZCBhcmdOdW0x
LCBPcGVyYXRvciBvcGVyYXRvcjEsIGxvbmcgbG9uZyBkYXRhMSwKKyAgICB1bnNpZ25lZCBhcmdO
dW0yLCBPcGVyYXRvciBvcGVyYXRvcjIsIGxvbmcgbG9uZyBkYXRhMikKK3sKKyAgICBpbnQgc3lz
Y2FsbCA9IHNlY2NvbXBfc3lzY2FsbF9yZXNvbHZlX25hbWUoc3lzY2FsbE5hbWUpOworICAgIGlm
IChzeXNjYWxsID09IF9fTlJfU0NNUF9FUlJPUikKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGlu
dCByZXN1bHQ7CisgICAgaWYgKG9wZXJhdG9yMiAhPSBOb3RTZXQpCisgICAgICAgIHJlc3VsdCA9
IHNlY2NvbXBfcnVsZV9hZGQobV9jb250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDIsCisgICAgICAg
ICAgICBTQ01QX0NNUChhcmdOdW0xLCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9wZXJhdG9y
MSksIGRhdGExLCAwKSwKKyAgICAgICAgICAgIFNDTVBfQ01QKGFyZ051bTIsIHN0YXRpY19jYXN0
PHNjbXBfY29tcGFyZT4ob3BlcmF0b3IyKSwgZGF0YTIsIDApKTsKKyAgICBlbHNlIGlmIChvcGVy
YXRvcjEgIT0gTm90U2V0KQorICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRkKG1fY29u
dGV4dCwgYWN0aW9uLCBzeXNjYWxsLCAxLAorICAgICAgICAgICAgU0NNUF9DTVAoYXJnTnVtMSwg
c3RhdGljX2Nhc3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjEpLCBkYXRhMSwgMCkpOworICAgIGVs
c2UKKyAgICAgICAgcmVzdWx0ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwg
c3lzY2FsbCwgMCk7CisKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgQ1JBU0goKTsKK30K
Kwordm9pZCBTZWNjb21wRmlsdGVyczo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKG1faW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEltcGxlbWVudCB0aGlzIGlzIG5vdCBy
ZXF1aXJlZCBpbiBjYXNlIHdlIGFyZSBqdXN0CisgICAgLy8gc2V0dGluZyBmaWx0ZXJzLiBUaGlz
IGlzIGEgZ29vZCBwbGFjZSB0byBjcmVhdGUgdGhlCisgICAgLy8gYnJva2VyIGFuZCBzeXNjYWxs
IHBvbGljeSBvdGhlcndpc2UuCisgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CisKKyAgICBpZiAo
c2VjY29tcF9sb2FkKG1fY29udGV4dCkgPCAwKQorICAgICAgICBDUkFTSCgpOworCisgICAgbV9p
bml0aWFsaXplZCA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDQ5ZTFmYjYyZTZkODAzNjVmMWEyYTkwNmM5NTc0ZWRhZGU4ZjRhZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21w
RmlsdGVycy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2VjY29tcEZpbHRlcnNfaAorI2RlZmluZSBTZWNjb21wRmlsdGVyc19oCisKKyNpZiBFTkFCTEUo
U0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBTZWNjb21wRmlsdGVycyB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2VjY29tcEZpbHRlcnMpOworCitwdWJsaWM6CisgICAgZW51bSBBY3Rpb24gewor
ICAgICAgICBBbGxvdyA9IDB4N2ZmZjAwMDBVLAorICAgICAgICBLaWxsICA9IDB4MDAwMDAwMDBV
LAorICAgICAgICBUcmFwICA9IDB4MDAwMzAwMDBVCisgICAgfTsKKworICAgIGVudW0gT3BlcmF0
b3IgeworICAgICAgICBOb3RTZXQgICA9IDAsCisgICAgICAgIE5vdEVxdWFsID0gMSwKKyAgICAg
ICAgRXF1YWwgICAgPSA0CisgICAgfTsKKworICAgIGV4cGxpY2l0IFNlY2NvbXBGaWx0ZXJzKEFj
dGlvbiBkZWZhdWx0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIH5TZWNjb21wRmlsdGVycygpOworCisg
ICAgdm9pZCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfTsKKworICAgIHZvaWQgYWRk
UnVsZShjb25zdCBjaGFyKiBzeXNjYWxsTmFtZSwgQWN0aW9uLAorICAgICAgICB1bnNpZ25lZCBh
cmdOdW0xID0gMCwgT3BlcmF0b3Igb3BlcmF0b3IxID0gTm90U2V0LCBsb25nIGxvbmcgZGF0YTEg
PSAwLAorICAgICAgICB1bnNpZ25lZCBhcmdOdW0yID0gMCwgT3BlcmF0b3Igb3BlcmF0b3IyID0g
Tm90U2V0LCBsb25nIGxvbmcgZGF0YTIgPSAwKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKSB7IH0KKwor
ICAgIHR5cGVkZWYgdm9pZCAqSEFORExFOworCisgICAgSEFORExFIG1fY29udGV4dDsKKyAgICBi
b29sIG1faW5pdGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTZWNjb21wRmlsdGVyc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
U2lnYWN0aW9uU3lzY2FsbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvU2lnYWN0aW9uU3lzY2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWMxMmYzMGMyOTUxNGY0
MTZjOGU0OWI0NTQ0NmMzZmYyNDc3MDNlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdhY3Rpb25TeXNjYWxsLmNwcApAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2lnYWN0aW9uU3lzY2FsbC5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVS
UykKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093
blB0cjxTeXNjYWxsPiBTaWdhY3Rpb25TeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dChtY29udGV4
dF90KiBjb250ZXh0KQoreworICAgIC8vIFdlIGp1c3QgaWdub3JlIGFueSBhdHRlbXB0IG9mIGlu
c3RhbGxpbmcgYSBoYW5kbGVyIGZvciBTSUdTWVMgc2luY2UgdGhpcworICAgIC8vIHNpZ25hbCBp
cyBuZWNlc3NhcnkgZm9yIHRoZSBzYW5kYm94IHRvIHdvcmsuCisgICAgQVNTRVJUKGNvbnRleHQg
JiYgY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzBdID09IFNJR1NZUyk7CisKKyAgICBjb250ZXh0LT5n
cmVnc1tSRUdfU1lTQ0FMTF0gPSAwOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdh
Y3Rpb25TeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMvU2lnYWN0aW9uU3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwNDc2ZDQ2ZjEwNzNkYTdkYWNhMzlm
NDljZDczYjBiY2E4NDA5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2lnYWN0aW9uU3lzY2FsbC5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2lnYWN0aW9uU3lzY2FsbF9oCisjZGVm
aW5lIFNpZ2FjdGlvblN5c2NhbGxfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgIlN5c2NhbGwuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBTaWdh
Y3Rpb25TeXNjYWxsIHsKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9t
Q29udGV4dChtY29udGV4dF90Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTaWdhY3Rpb25TeXNj
YWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmls
dGVycy9TaWdwcm9jbWFza1N5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1NpZ3Byb2NtYXNrU3lzY2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyYjgw
ZDhhM2ZkOGQzNWI2M2JjZDM1OGVlYTFlMTUzNzRmMWRkMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdwcm9jbWFza1N5c2Nh
bGwuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTaWdwcm9jbWFza1N5c2NhbGwuaCIKKworI2lmIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8U3lzY2FsbD4gU2lncHJvY21h
c2tTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCh1Y29udGV4dF90KiB1Y29udGV4dCkKK3sKKyAg
ICAvLyBUaGlzIHN5c2NhbGwgaXMgbmV2ZXIgcHJveGllZCB0byB0aGUgYnJva2VyIHByb2Nlc3Mg
YW5kIHJlc29sdmVkIGxvY2FsbHkuCisgICAgLy8gV2hhdCB3ZSBkbyBoZXJlIGlzIHNpbGVudGx5
IHJlbW92ZSBTSUdTWVMgZnJvbSB0aGUgc2lnbmFsIHNldCBzbyBubworICAgIC8vIHRocmVhZCB3
aWxsIGV2ZXIgYmUgYWJsZSB0byBibG9jayBpdC4KKyAgICBBU1NFUlQodWNvbnRleHQpOworCisg
ICAgbWNvbnRleHRfdCBtY29udGV4dCA9IHVjb250ZXh0LT51Y19tY29udGV4dDsKKyAgICBpbnQg
aG93ID0gbWNvbnRleHQuZ3JlZ3NbUkVHX0FSRzBdOworICAgIHNpZ3NldF90KiBzZXQgPSByZWlu
dGVycHJldF9jYXN0PHNpZ3NldF90Kj4obWNvbnRleHQuZ3JlZ3NbUkVHX0FSRzFdKTsKKyAgICBz
aWdzZXRfdCogb2xkU2V0ID0gcmVpbnRlcnByZXRfY2FzdDxzaWdzZXRfdCo+KG1jb250ZXh0Lmdy
ZWdzW1JFR19BUkcyXSk7CisKKyAgICBpZiAob2xkU2V0KQorICAgICAgICBtZW1jcHkob2xkU2V0
LCAmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNpemVvZihzaWdzZXRfdCkpOworCisgICAgaWYgKGhv
dyA9PSBTSUdfU0VUTUFTSykKKyAgICAgICAgbWVtY3B5KCZ1Y29udGV4dC0+dWNfc2lnbWFzaywg
c2V0LCBzaXplb2Yoc2lnc2V0X3QpKTsKKyAgICBlbHNlCisgICAgICAgIHNpZ29yc2V0KCZ1Y29u
dGV4dC0+dWNfc2lnbWFzaywgc2V0LCAmdWNvbnRleHQtPnVjX3NpZ21hc2spOworCisgICAgc2ln
ZGVsc2V0KCZ1Y29udGV4dC0+dWNfc2lnbWFzaywgU0lHU1lTKTsKKyAgICBtY29udGV4dC5ncmVn
c1tSRUdfU1lTQ0FMTF0gPSAwOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdwcm9j
bWFza1N5c2NhbGwuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9TaWdwcm9jbWFza1N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDA0NTNhMzZhNzQ1MTJjMjM3Y2Qy
NjZiYTRjNTBiYWQwYjlhYmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NpZ3Byb2NtYXNrU3lzY2FsbC5oCkBAIC0wLDAgKzEs
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2lncHJvY21hc2tTeXNjYWxsX2gK
KyNkZWZpbmUgU2lncHJvY21hc2tTeXNjYWxsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCisKKyNpbmNsdWRlICJTeXNjYWxsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1
Y3QgU2lncHJvY21hc2tTeXNjYWxsIHsKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBj
cmVhdGVGcm9tQ29udGV4dCh1Y29udGV4dF90Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTaWdw
cm9jbWFza1N5c2NhbGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzOWNhYjU1ODNlMjMyYzAx
YTk1NTBkMDhjNjhiYTQ3YzZkMGNhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbC5jcHAKQEAgLTAsMCArMSwxMDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
eXNjYWxsLmgiCisKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorCisjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgorI2luY2x1ZGUgIlNpZ2Fj
dGlvblN5c2NhbGwuaCIKKyNpbmNsdWRlICJTaWdwcm9jbWFza1N5c2NhbGwuaCIKKyNpbmNsdWRl
IDxzZWNjb21wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFN5c2NhbGw+
IFN5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KHVjb250ZXh0X3QqIHVjb250ZXh0KQoreworICAg
IG1jb250ZXh0X3QqIG1jb250ZXh0ID0gJnVjb250ZXh0LT51Y19tY29udGV4dDsKKworICAgIHN3
aXRjaCAobWNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSkgeworICAgIGNhc2UgX19OUl9vcGVu
OgorICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxsKG1jb250ZXh0KSk7Cisg
ICAgY2FzZSBfX05SX29wZW5hdDoKKyAgICAgICAgcmV0dXJuIE9wZW5TeXNjYWxsOjpjcmVhdGVG
cm9tT3BlbmF0Q29udGV4dChtY29udGV4dCk7CisgICAgY2FzZSBfX05SX2NyZWF0OgorICAgICAg
ICByZXR1cm4gT3BlblN5c2NhbGw6OmNyZWF0ZUZyb21DcmVhdENvbnRleHQobWNvbnRleHQpOwor
ICAgIGNhc2UgX19OUl9zaWdwcm9jbWFzazoKKyAgICBjYXNlIF9fTlJfcnRfc2lncHJvY21hc2s6
CisgICAgICAgIHJldHVybiBTaWdwcm9jbWFza1N5c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KHVj
b250ZXh0KTsKKyAgICBjYXNlIF9fTlJfc2lnYWN0aW9uOgorICAgIGNhc2UgX19OUl9ydF9zaWdh
Y3Rpb246CisgICAgICAgIHJldHVybiBTaWdhY3Rpb25TeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4
dChtY29udGV4dCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVh
dGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIpCit7CisgICAg
aW50IHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgT3duUHRyPFN5c2NhbGw+IHN5c2NhbGw7CisgICAgaWYgKHR5cGUg
PT0gX19OUl9vcGVuKQorICAgICAgICBzeXNjYWxsID0gYWRvcHRQdHIobmV3IE9wZW5TeXNjYWxs
KDApKTsKKworICAgIGlmICghc3lzY2FsbC0+ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzeXNjYWxsLnJlbGVhc2UoKTsKK30KKworU3lzY2Fs
bDo6U3lzY2FsbChpbnQgdHlwZSwgbWNvbnRleHRfdCogY29udGV4dCkKKyAgICA6IG1fdHlwZSh0
eXBlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1Bhc3NPd25QdHI8U3lzY2Fs
bFJlc3VsdD4gU3lzY2FsbFJlc3VsdDo6Y3JlYXRlRnJvbURlY29kZXIoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCit7CisgICAgaW50IHR5cGU7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUodHlwZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgT3du
UHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdDsKKyAgICBpZiAodHlwZSA9PSBfX05SX29wZW4pCisg
ICAgICAgIHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBPcGVuU3lzY2FsbFJlc3VsdCgtMSwgMCkpOwor
CisgICAgaWYgKCFyZXN1bHQtPmRlY29kZShkZWNvZGVyLCBmZCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1N5c2NhbGxSZXN1
bHQ6OlN5c2NhbGxSZXN1bHQoaW50IHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGwuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
eXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdmMGI0YjhiN2JmMDQ3YmQ5M2EzMzgzOWU3MDcwZGY5MWU5
NTYzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TeXNjYWxsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU3lzY2FsbF9oCisjZGVmaW5lIFN5c2NhbGxfaAorCisjaWYgRU5BQkxFKFNF
Q0NPTVBfRklMVEVSUykKKworI2lmIENQVShYODZfNjQpCisjZGVmaW5lIFJFR19TWVNDQUxMIFJF
R19SQVgKKyNkZWZpbmUgUkVHX0FSRzAgICAgUkVHX1JESQorI2RlZmluZSBSRUdfQVJHMSAgICBS
RUdfUlNJCisjZGVmaW5lIFJFR19BUkcyICAgIFJFR19SRFgKKyNkZWZpbmUgUkVHX0FSRzMgICAg
UkVHX1IxMAorI2VsaWYgQ1BVKFg4NikKKyNkZWZpbmUgUkVHX1NZU0NBTEwgUkVHX0VBWAorI2Rl
ZmluZSBSRUdfQVJHMCAgICBSRUdfRUJYCisjZGVmaW5lIFJFR19BUkcxICAgIFJFR19FQ1gKKyNk
ZWZpbmUgUkVHX0FSRzIgICAgUkVHX0VEWAorI2RlZmluZSBSRUdfQVJHMyAgICBSRUdfRVNJCisj
ZWxzZQorI2Vycm9yICJDUFUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHNp
Z25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsK
K2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFN5c2NhbGxSZXN1bHQ7CitjbGFzcyBTeXNjYWxsUG9s
aWN5OworCitjbGFzcyBTeXNjYWxsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxs
KTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflN5c2NhbGwoKSB7IH0KKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFN5c2NhbGw+IGNyZWF0ZUZyb21Db250ZXh0KHVjb250ZXh0X3QqKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKworICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKKyAgICB2b2lkIHNldENvbnRleHQobWNvbnRleHRfdCogY29udGV4dCkgeyBtX2NvbnRleHQg
PSBjb250ZXh0OyB9CisgICAgbWNvbnRleHRfdCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dDsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVz
dWx0KikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxTeXNjYWxsUmVzdWx0PiBleGVjdXRl
KGNvbnN0IFN5c2NhbGxQb2xpY3kmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBTeXNj
YWxsKGludCB0eXBlLCBtY29udGV4dF90Kik7CisKK3ByaXZhdGU6CisgICAgaW50IG1fdHlwZTsK
KyAgICBtY29udGV4dF90KiBtX2NvbnRleHQ7Cit9OworCitjbGFzcyBTeXNjYWxsUmVzdWx0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTeXNjYWxsUmVzdWx0KTsKKworcHVibGljOgorICAg
IHZpcnR1YWwgflN5c2NhbGxSZXN1bHQoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5
c2NhbGxSZXN1bHQ+IGNyZWF0ZUZyb21EZWNvZGVyKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcios
IGludCBmZCk7CisKKyAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBp
bnQgZmQ9LTEpID0gMDsKKworcHJvdGVjdGVkOgorICAgIFN5c2NhbGxSZXN1bHQoaW50IHR5cGUp
OworCitwcml2YXRlOgorICAgIGludCBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNj
YWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmls
dGVycy9TeXNjYWxsUG9saWN5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TeXNjYWxsUG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODljNGJiMDNmYTk2MmM1
OWIzZTI5MzVlMmEzMDgyMTFmYTRjZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCkBAIC0wLDAg
KzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3lzY2FsbFBvbGljeS5oIgorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKwor
I2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxsaWJn
ZW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBTdHJpbmcgcmVtb3ZlVHJhaWxp
bmdTbGFzaChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoJy8n
KSkKKyAgICAgICAgcmV0dXJuIHBhdGgubGVmdChwYXRoLmxlbmd0aCgpIC0gMSk7CisKKyAgICBy
ZXR1cm4gcGF0aDsKK30KKworYm9vbCBTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0
aChjb25zdCBjaGFyKiBwYXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pIGNvbnN0Cit7CisgICAg
Ly8gVGhlIHJvb3QgZGlyZWN0b3J5IHBvbGljeSBuZWVkcyB0byBiZSBzZXQgYmVjYXVzZSBpdCBp
cyB0aGUKKyAgICAvLyB1bHRpbWF0ZSBmYWxsYmFjayB3aGVuIHJld2luZGluZyBkaXJlY3Rvcmll
cy4KKyAgICBBU1NFUlQobV9kaXJlY3RvcnlQZXJtaXNzaW9uLmNvbnRhaW5zKCIvIikpOworCisg
ICAgaWYgKHBlcm1pc3Npb24gPT0gTm90QWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY2hhciogYmFzZVBhdGggPSBzdHJkdXAocGF0aCk7CisgICAgY2hhciogY2Fub25pY2Fs
UGF0aCA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoYmFzZVBhdGgpOworCisgICAgd2hpbGUgKGNh
bm9uaWNhbFBhdGgpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7CisgICAgICAgIGlm
IChzdGF0KGNhbm9uaWNhbFBhdGgsICZwYXRoU3RhdCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGZy
ZWUoYmFzZVBhdGgpOworICAgICAgICAgICAgZnJlZShjYW5vbmljYWxQYXRoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTX0lTRElSKHBhdGhT
dGF0LnN0X21vZGUpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgUGVybWlzc2lvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgcG9saWN5ID0gbV9maWxlUGVybWlzc2lvbi5maW5kKFN0cmluZyhj
YW5vbmljYWxQYXRoKSk7CisgICAgICAgIGlmIChwb2xpY3kgIT0gbV9maWxlUGVybWlzc2lvbi5l
bmQoKSkgeworICAgICAgICAgICAgZnJlZShiYXNlUGF0aCk7CisgICAgICAgICAgICBmcmVlKGNh
bm9uaWNhbFBhdGgpOworICAgICAgICAgICAgcmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52
YWx1ZSkgPT0gcGVybWlzc2lvbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5vdCBhIGRp
cmVjdG9yeSBuZWl0aGVyIGEgZmlsZSB3aXRoIGEgcG9saWN5IGRlZmluZWQsCisgICAgICAgIC8v
IHdlIHNldCBjYW5vbmljYWxQYXRoIHRvIHplcm8gdG8gZm9yY2UgYSByZXdpbmQgdG8gdGhlIHBh
cmVudAorICAgICAgICAvLyBkaXJlY3RvcnkuCisgICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7
CisgICAgICAgIGNhbm9uaWNhbFBhdGggPSAwOworICAgIH0KKworICAgIHdoaWxlICghY2Fub25p
Y2FsUGF0aCkgeworICAgICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUo
YmFzZVBhdGgpOworICAgICAgICBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFt
ZShjdXJyZW50QmFzZURpcmVjdG9yeSk7CisgICAgfQorCisgICAgUGVybWlzc2lvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgcG9saWN5ID0gbV9kaXJlY3RvcnlQZXJtaXNzaW9uLmZpbmQoU3RyaW5nKGNh
bm9uaWNhbFBhdGgpKTsKKyAgICB3aGlsZSAocG9saWN5ID09IG1fZGlyZWN0b3J5UGVybWlzc2lv
bi5lbmQoKSkgeworICAgICAgICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUo
Y2Fub25pY2FsUGF0aCk7CisgICAgICAgIHBvbGljeSA9IG1fZGlyZWN0b3J5UGVybWlzc2lvbi5m
aW5kKFN0cmluZyhjdXJyZW50QmFzZURpcmVjdG9yeSkpOworICAgIH0KKworICAgIGZyZWUoYmFz
ZVBhdGgpOworICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7CisKKyAgICByZXR1cm4gKHBlcm1pc3Np
b24gJiBwb2xpY3ktPnZhbHVlKSA9PSBwZXJtaXNzaW9uOworfQorCit2b2lkIFN5c2NhbGxQb2xp
Y3k6OmFkZEZpbGVQZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgUGVybWlzc2lvbiBwZXJt
aXNzaW9uKQoreworICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkgJiYgcGF0aC5zdGFydHNXaXRo
KCcvJykgICYmICFwYXRoLmVuZHNXaXRoKCcvJykgJiYgIXBhdGguY29udGFpbnMoIi8vIikpOwor
CisgICAgbV9maWxlUGVybWlzc2lvbi5zZXQocGF0aCwgcGVybWlzc2lvbik7Cit9CisKK3ZvaWQg
U3lzY2FsbFBvbGljeTo6YWRkRGlyZWN0b3J5UGVybWlzc2lvbihjb25zdCBTdHJpbmcmIHBhdGgs
IFBlcm1pc3Npb24gcGVybWlzc2lvbikKK3sKKyAgICBBU1NFUlQocGF0aC5zdGFydHNXaXRoKCcv
JykgJiYgIXBhdGguY29udGFpbnMoIi8vIikgJiYgKHBhdGgubGVuZ3RoKCkgPT0gMSB8fCAhcGF0
aC5lbmRzV2l0aCgnLycpKSk7CisKKyAgICBtX2RpcmVjdG9yeVBlcm1pc3Npb24uc2V0KHBhdGgs
IHBlcm1pc3Npb24pOworfQorCit2b2lkIFN5c2NhbGxQb2xpY3k6OmFkZERlZmF1bHRXZWJQcm9j
ZXNzUG9saWN5KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
Cit7CisgICAgLy8gRGlyZWN0b3JpZXMgc2V0dGluZ3MgY29taW5nIGZyb20gdGhlIFVJUHJvY2Vz
cy4KKyAgICBpZiAoIXBhcmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24ocmVtb3ZlVHJhaWxpbmdTbGFzaChw
YXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkpLCBSZWFkQW5kV3JpdGUpOworICAg
IGlmICghcGFyYW1ldGVycy5kYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIGFk
ZERpcmVjdG9yeVBlcm1pc3Npb24ocmVtb3ZlVHJhaWxpbmdTbGFzaChwYXJhbWV0ZXJzLmRhdGFi
YXNlRGlyZWN0b3J5KSwgUmVhZEFuZFdyaXRlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lv
bihyZW1vdmVUcmFpbGluZ1NsYXNoKHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSwg
UmVhZEFuZFdyaXRlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKKyAgICAgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihyZW1vdmVUcmFpbGluZ1Ns
YXNoKHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5KSwgUmVhZEFuZFdyaXRlKTsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IGFkZERpcmVjdG9yeVBlcm1pc3Npb24ocmVtb3ZlVHJhaWxpbmdTbGFzaChwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkpLCBSZWFkQW5kV3JpdGUpOworI2lmIFVTRShTT1VQKQorICAg
IGlmICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGguaXNFbXB0eSgpKQor
ICAgICAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKHJlbW92ZVRyYWlsaW5nU2xhc2gocGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgpLCBSZWFkQW5kV3JpdGUpOworI2VuZGlm
CisKKyAgICAvLyBUaGUgcm9vdCBwb2xpY3kgd2lsbCBibG9jayBhY2Nlc3MgdG8gYW55IGRpcmVj
dG9yeSBvcgorICAgIC8vIGZpbGUgdW5sZXNzIHdoaXRlIGxpc3RlZCBiZWxsb3cgb3IgYnkgcGxh
dGZvcm0uCisgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi8iKSwgTm90
QWxsb3dlZCk7CisKKyAgICAvLyBTaGFyZWQgbGlicmFyaWVzLCBwbHVnaW5zIGFuZCBmb250cy4K
KyAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2xpYiIpLCBSZWFkKTsK
KyAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIiKSwgUmVh
ZCk7CisgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi91c3Ivc2hhcmUi
KSwgUmVhZCk7CisKKyAgICAvLyBTU0wgQ2VydGlmaWNhdGVzLgorICAgIGFkZERpcmVjdG9yeVBl
cm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvZXRjL3NzbC9jZXJ0cyIpLCBSZWFkKTsKKworICAgIC8v
IEZvbnRjb25maWcgY2FjaGUuCisgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVy
YWwoIi9ldGMvZm9udHMiKSwgUmVhZCk7CisgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJ
SUxpdGVyYWwoIi92YXIvY2FjaGUvZm9udGNvbmZpZyIpLCBSZWFkKTsKKworICAgIC8vIEF1ZGlv
IGRldmljZXMsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycywgZXRjLgorICAgIGFkZERpcmVjdG9y
eVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvZGV2IiksIFJlYWRBbmRXcml0ZSk7CisKKyAgICAv
LyBUZW1wb3JhcnkgZmlsZXMgYW5kIHByb2Nlc3Mgc2VsZiBpbmZvcm1hdGlvbi4KKyAgICBhZGRE
aXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3RtcCIpLCBSZWFkQW5kV3JpdGUpOwor
ICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvcHJvYy8iKSArIFN0cmlu
Zzo6bnVtYmVyKGdldHBpZCgpKSwgUmVhZEFuZFdyaXRlKTsKKworICAgIC8vIEluIHNvbWUgZGlz
dHJvcyAvZGV2L3NobSBpcyBhIHN5bWJvbGljIGxpbmsgdG8gL3J1bi9zaG0sIGFuZCBpbgorICAg
IC8vIHRoaXMgY2FzZSwgdGhlIGNhbm9uaWNhbCBwYXRoIHJlc29sdmVyIHdpbGwgZm9sbG93IHRo
ZSBsaW5rLiBJZgorICAgIC8vIGluc2lkZSAvZGV2LCB0aGUgcG9saWN5IGlzIGFscmVhZHkgc2V0
LgorICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvcnVuL3NobSIpLCBS
ZWFkQW5kV3JpdGUpOworCisgICAgLy8gTmVlZGVkIGJ5IGdsaWJjIGZvciBuZXR3b3JraW5nIGFu
ZCBsb2NhbGUuCisgICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvZXRjL2dhaS5j
b25mIiksIFJlYWQpOworICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9o
b3N0LmNvbmYiKSwgUmVhZCk7CisgICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIv
ZXRjL2hvc3RzIiksIFJlYWQpOworICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgi
L2V0Yy9sb2NhbHRpbWUiKSwgUmVhZCk7CisgICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRl
cmFsKCIvZXRjL25zc3dpdGNoLmNvbmYiKSwgUmVhZCk7CisKKyAgICAvLyBOZWVkZWQgZm9yIERO
UyByZXNvbHRpb24uIEluIHNvbWUgZGlzdHJvcywgdGhlIHJlc29sdi5jb25mIGluc2lkZQorICAg
IC8vIC9ldGMgaXMganVzdCBhIHN5bWJvbGljIGxpbmsuCisgICAgYWRkRmlsZVBlcm1pc3Npb24o
QVNDSUlMaXRlcmFsKCIvZXRjL3Jlc29sdi5jb25mIiksIFJlYWQpOworICAgIGFkZEZpbGVQZXJt
aXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3J1bi9yZXNvbHZjb25mL3Jlc29sdi5jb25mIiksIFJlYWQp
OworCisgICAgLy8gTmVlZGVkIHRvIGNvbnZlcnQgdWlkIGFuZCBnaWQgaW50byBuYW1lcy4KKyAg
ICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9ldGMvZ3JvdXAiKSwgUmVhZCk7Cisg
ICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvZXRjL3Bhc3N3ZCIpLCBSZWFkKTsK
KworICAgIC8vIE5lZWRlZCBieSB0aGUgbG9hZGVyLgorICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFT
Q0lJTGl0ZXJhbCgiL2V0Yy9sZC5zby5jYWNoZSIpLCBSZWFkKTsKKworICAgIC8vIE5lZWRlZCBi
eSB2YXJpb3VzLCBpbmNsdWRpbmcgdG9vbGtpdHMsIGZvciBvcHRpbWl6YXRpb25zIGJhc2VkCisg
ICAgLy8gb24gdGhlIGN1cnJlbnQgYW1vdW50IG9mIGZyZWUgc3lzdGVtIG1lbW9yeS4KKyAgICBh
ZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9wcm9jL2NwdWluZm8iKSwgUmVhZCk7Cisg
ICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvcHJvYy9maWxlc3lzdGVtcyIpLCBS
ZWFkKTsKKyAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9wcm9jL21lbWluZm8i
KSwgUmVhZCk7CisgICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvcHJvYy9zdGF0
IiksIFJlYWQpOworCisgICAgLy8gTmVlZGVkIGJ5IEQtQnVzLgorICAgIGFkZEZpbGVQZXJtaXNz
aW9uKEFTQ0lJTGl0ZXJhbCgiL3Zhci9saWIvZGJ1cy9tYWNoaW5lLWlkIiksIFJlYWQpOworCisg
ICAgY2hhciogaG9tZURpciA9IGdldGVudigiSE9NRSIpOworICAgIGlmIChob21lRGlyKSB7Cisg
ICAgICAgIC8vIFgxMSBjb25uZWN0aW9uIHRva2VuLgorICAgICAgICBhZGRGaWxlUGVybWlzc2lv
bihTdHJpbmc6OmZyb21VVEY4KGhvbWVEaXIpICsgIi8uWGF1dGhvcml0eSIsIFJlYWQpOworICAg
ICAgICAvLyBNSU1FIHR5cGUgcmVzb2x1dGlvbi4KKyAgICAgICAgYWRkRGlyZWN0b3J5UGVybWlz
c2lvbihTdHJpbmc6OmZyb21VVEY4KGhvbWVEaXIpICsgICIvLmxvY2FsL3NoYXJlL21pbWUiLCBS
ZWFkKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsUG9saWN5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhZTBl
NDVkMmY4YzJlNzdkMDU4YWNiYzFjNzM1OTg2OWM2MjJmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2FsbFBvbGljeS5o
CkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzY2FsbFBv
bGljeV9oCisjZGVmaW5lIFN5c2NhbGxQb2xpY3lfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKKworY2xhc3Mg
U3lzY2FsbFBvbGljeSB7CitwdWJsaWM6CisgICAgZW51bSBQZXJtaXNzaW9uIHsKKyAgICAgICAg
Tm90QWxsb3dlZCAgID0gMCwKKyAgICAgICAgUmVhZCAgICAgICAgID0gMSwKKyAgICAgICAgV3Jp
dGUgICAgICAgID0gMSA8PCAxLAorICAgICAgICBSZWFkQW5kV3JpdGUgPSBSZWFkIHwgV3JpdGUK
KyAgICB9OworCisgICAgYm9vbCBoYXNQZXJtaXNzaW9uRm9yUGF0aChjb25zdCBjaGFyKiBwYXRo
LCBQZXJtaXNzaW9uKSBjb25zdDsKKworICAgIHZvaWQgYWRkRmlsZVBlcm1pc3Npb24oY29uc3Qg
U3RyaW5nJiBwYXRoLCBQZXJtaXNzaW9uKTsKKyAgICB2b2lkIGFkZERpcmVjdG9yeVBlcm1pc3Np
b24oY29uc3QgU3RyaW5nJiBwYXRoLCBQZXJtaXNzaW9uKTsKKworICAgIHZvaWQgYWRkRGVmYXVs
dFdlYlByb2Nlc3NQb2xpY3koY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwor
Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gUGVybWlzc2lvbk1h
cDsKKyAgICBQZXJtaXNzaW9uTWFwIG1fZmlsZVBlcm1pc3Npb247CisgICAgUGVybWlzc2lvbk1h
cCBtX2RpcmVjdG9yeVBlcm1pc3Npb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCisKKyNlbmRpZiAvLyBTeXNjYWxsUG9s
aWN5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCmluZGV4IDljOGI4MGMzNzFhMmU3Y2NjZTFhNTBjMzNlYTM1NzAxNDIx
MmZkNTIuLmI3NmY2NWFiMDFkMjA3ZjY5MDAyMmJiMjUzNGNjYTY0NTI0ZjExMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQpAQCAtODg3LDYgKzg4NywyOSBAQCB3aW4zMiB7CiAgICAgICAgIFBsYXRmb3JtL0NvcmVJ
UEMvQmluYXJ5U2VtYXBob3JlLmNwcAogfQogCitlbmFibGU/KFNFQ0NPTVBfRklMVEVSUykgewor
ICAgIEhFQURFUlMgKz0gXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3Bl
blN5c2NhbGwuaCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21w
QnJva2VyLmggXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZp
bHRlcnMuaCBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdhY3Rpb25T
eXNjYWxsLmggXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2lncHJvY21h
c2tTeXNjYWxsLmggXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lzY2Fs
bC5oIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3ku
aCBcCisgICAgICAgIFdlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaAor
CisgICAgU09VUkNFUyArPSBcCisgICAgICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9P
cGVuU3lzY2FsbC5jcHAgXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2Vj
Y29tcEJyb2tlci5jcHAgXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2Vj
Y29tcEZpbHRlcnMuY3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1Np
Z2FjdGlvblN5c2NhbGwuY3BwIFwKKyAgICAgICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NpZ3Byb2NtYXNrU3lzY2FsbC5jcHAgXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZp
bHRlcnMvU3lzY2FsbC5jcHAgXAorICAgICAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
U3lzY2FsbFBvbGljeS5jcHAgXAorICAgICAgICBXZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc1F0LmNwcAorCisgICAgREVGSU5FUyArPSBTT1VSQ0VfRElSPVxcXCIkJHtST09U
X1dFQktJVF9ESVJ9XFxcIgorfQogCiBlbmFibGU/KElOU1BFQ1RPUl9TRVJWRVIpIHsKICAgICBI
RUFERVJTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggMTZmNGY2MTdhNjYxMzVkZTA2Mjg2MWZlZmM0
ZjEyZDM4MGM0ZGQ4OC4uY2YxZDU0OWRkYTIxOGVlOWFmMGY0NTY2ZTQzMmE4NmNhZWI4OGYyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi5wcmkKQEAgLTgzLDMgKzgzLDUgQEAgbGludXgtKjogewogaGF2ZT8oUVRRVUlD
Syk6IFFUICs9IHFtbCBxdWljawogCiBoYXZlPyhxdGxvY2F0aW9uKTplbmFibGU/KEdFT0xPQ0FU
SU9OKTogUVQgKz0gbG9jYXRpb24KKworZW5hYmxlPyhTRUNDT01QX0ZJTFRFUlMpOiBQS0dDT05G
SUcgKz0gbGlic2VjY29tcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9l
ZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU4
ZjAxYmM2Y2YwNWU5OTg1ZjJkNzU3M2Y1M2IzZjU2YzVkNzEzNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0Vm
bC5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5oIgorCisjaWYg
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBCcm9rZXIuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbDo6U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNz
RWZsKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAg
OiBTZWNjb21wRmlsdGVycyhBbGxvdykKK3sKKyAgICBtX3BvbGljeS5hZGREZWZhdWx0V2ViUHJv
Y2Vzc1BvbGljeShwYXJhbWV0ZXJzKTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGJs
b2NrIGFsbCB0aGUgc3lzY2FsbHMgYW5kIHdoaXRlbGlzdAorICAgIC8vIHdoYXQgd2UgbmVlZCAr
IHRyYXAgd2hhdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgYnJva2VyLgorICAgIGFkZFJ1bGUo
Im9wZW4iLCBUcmFwKTsKKyAgICBhZGRSdWxlKCJvcGVuYXQiLCBUcmFwKTsKKyAgICBhZGRSdWxl
KCJjcmVhdCIsIFRyYXApOworCisgICAgLy8gTmVlZGVkIGJ5IEVlemUgb24gTmV0d29ya1N0YXRl
Tm90aWZpZXJFZmwuCisgICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxp
dGVyYWwoIi9zeXMvYnVzIiksIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworICAgIG1fcG9saWN5LmFk
ZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvc3lzL2NsYXNzIiksIFN5c2NhbGxQ
b2xpY3k6OlJlYWQpOworICAgIG1fcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlM
aXRlcmFsKCIvc3lzL2RldmljZXMiKSwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgbV9wb2xp
Y3kuYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvZXRjL3VkZXYvdWRldi5jb25mIiks
IFN5c2NhbGxQb2xpY3k6OlJlYWQpOworCisjaWZkZWYgU09VUkNFX0RJUgorICAgIC8vIERldmVs
b3BlcnMgdXNpbmcgYnVpbGQtd2Via2l0IC0tZWZsIGV4cGVjdCBzb21lIGxpYnJhcmllcyB0byBi
ZSBsb2FkZWQKKyAgICAvLyBmcm9tIHRoZSBidWlsZCByb290IGRpcmVjdG9yeSBhbmQgdGhleSBh
bHNvIG5lZWQgYWNjZXNzIHRvIGxheW91dCB0ZXN0CisgICAgLy8gZmlsZXMuIFRoZSBjb25zdGFu
dCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBqaGJ1aWxkIGlzIGRldGVjdGVkLCB3aGljaCBpcworICAg
IC8vIGFuIGluZGljYXRpb24gb2YgYSBkZXZlbG9wbWVudCBidWlsZC4KKyAgICBjaGFyKiBzb3Vy
Y2VEaXIgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKFNPVVJDRV9ESVIpOworICAgIGlmIChzb3Vy
Y2VEaXIpIHsKKyAgICAgICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihTdHJpbmc6
OmZyb21VVEY4KHNvdXJjZURpciksIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisgICAg
ICAgIGZyZWUoc291cmNlRGlyKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFBsYWNlIHdoZXJl
IHRoZSB0aGVtZSBhbmQgaWNvbnMgYXJlIGluc3RhbGxlZC4KKyAgICBjaGFyKiBkYXRhRGlyID0g
Y2Fub25pY2FsaXplX2ZpbGVfbmFtZShEQVRBX0RJUik7CisgICAgaWYgKGRhdGFEaXIpIHsKKyAg
ICAgICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihTdHJpbmc6OmZyb21VVEY4KGRh
dGFEaXIpLCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKKyAgICAgICAgZnJlZShkYXRhRGlyKTsKKyAg
ICB9CisKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgIC8vIFZpZGVvIHBsYXliYWNrIHJlcXVpcmVz
IGFjY2VzcyB0byB0aGUgcm9vdCBvZiB0aGUgdXNlciBjYWNoZSBkaXIgd2hpY2gKKyAgICAvLyBp
cyBub3QgcmlnaHQuIFdlIG5lZWQgdG8gY2hlY2sgd2l0aCB0aGVzZSBkaXJlY3RvcmllcyBvbiBn
c3RyZWFtZXIKKyAgICAvLyBjYW4gYmUgY29uZmlndXJlZC4KKyAgICBjaGFyKiBob21lRGlyID0g
Z2V0ZW52KCJIT01FIik7CisgICAgaWYgKGhvbWVEaXIpCisgICAgICAgIG1fcG9saWN5LmFkZERp
cmVjdG9yeVBlcm1pc3Npb24oU3RyaW5nOjpmcm9tVVRGOChob21lRGlyKSArICIvLmNhY2hlIiwg
U3lzY2FsbFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKKyNlbmRpZgorCisgICAgU2VjY29tcEJyb2tl
cjo6bGF1bmNoUHJvY2Vzcyh0aGlzLCBtX3BvbGljeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNz
RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmUzMjk0ODRjM2M2MjdlNWMzMjdiM2RiZjlhYzVjZmNkNWM5ZGZm
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2Nv
bXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gKKyNkZWZpbmUgU2Vj
Y29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gKKworI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMp
CisKKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmg+CisjaW5jbHVkZSA8V2ViS2l0
Mi9TeXNjYWxsUG9saWN5Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOworCitjbGFzcyBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NF
ZmwgOiBwdWJsaWMgU2VjY29tcEZpbHRlcnMgeworcHVibGljOgorICAgIFNlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc0VmbChjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgU3lz
Y2FsbFBvbGljeSBtX3BvbGljeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJz
V2ViUHJvY2Vzc0VmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NGI4Njdj
N2IwZWQ0YzExYjIzNGE3MTVhZjYxYjM2ZjQ2YjhjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmNwcApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQuaCIKKworI2lmIEVOQUJMRShT
RUNDT01QX0ZJTFRFUlMpCisKKyNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UUxpYnJh
cnlJbmZvPgorI2luY2x1ZGUgPFdlYktpdDIvU2VjY29tcEJyb2tlci5oPgorI2luY2x1ZGUgPFdl
YktpdDIvU3lzY2FsbFBvbGljeS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2VjY29tcEZp
bHRlcnNXZWJQcm9jZXNzUXQ6OlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0KGNvbnN0IFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgOiBTZWNjb21wRmlsdGVy
cyhBbGxvdykKK3sKKyAgICBtX3BvbGljeS5hZGREZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShwYXJh
bWV0ZXJzKTsKK30KKwordm9pZCBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdDo6cGxhdGZvcm1J
bml0aWFsaXplKCkKK3sKKyAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmxvY2sgYWxsIHRoZSBzeXNj
YWxscyBhbmQgd2hpdGVsaXN0CisgICAgLy8gd2hhdCB3ZSBuZWVkICsgdHJhcCB3aGF0IHNob3Vs
ZCBiZSBoYW5kbGVkIGJ5IHRoZSBicm9rZXIuCisgICAgYWRkUnVsZSgib3BlbiIsIFRyYXApOwor
ICAgIGFkZFJ1bGUoIm9wZW5hdCIsIFRyYXApOworICAgIGFkZFJ1bGUoImNyZWF0IiwgVHJhcCk7
CisKKyAgICAvLyBRdCBkaXJlY3Rvcmllcy4KKyAgICBtX3BvbGljeS5hZGREaXJlY3RvcnlQZXJt
aXNzaW9uKFFMaWJyYXJ5SW5mbzo6bG9jYXRpb24oUUxpYnJhcnlJbmZvOjpMaWJyYXJpZXNQYXRo
KSwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlz
c2lvbihRTGlicmFyeUluZm86OmxvY2F0aW9uKFFMaWJyYXJ5SW5mbzo6UGx1Z2luc1BhdGgpLCBT
eXNjYWxsUG9saWN5OjpSZWFkKTsKKworICAgIC8vIFdFQktJVF9URVNURk9OVFMgaXMgc2V0IHdo
ZW4gcnVubmluZyBsYXlvdXQgdGVzdHMuIFdlIGFsc28gbmVlZCB0byBhZGQKKyAgICAvLyB0aGUg
cm9vdCBvZiB0aGUgV2ViS2l0IHRyZWUgdG8gdGhlIHNhbmRib3ggc28gd2UgY2FuIHJlYWQgdGhl
IHRlc3RzIGFuZAorICAgIC8vIHdyaXRlIGJhY2sgdGhlIHJlc3VsdHMuCisgICAgY29uc3QgY2hh
ciogcGF0aCA9IGdldGVudigiV0VCS0lUX1RFU1RGT05UUyIpOworICAgIGlmIChwYXRoKSB7Cisg
ICAgICAgIFFGaWxlSW5mbyBmb250RGlyKFFTdHJpbmc6OmZyb21VdGY4KHBhdGgpKTsKKyAgICAg
ICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihmb250RGlyLmNhbm9uaWNhbEZpbGVQ
YXRoKCksIFN5c2NhbGxQb2xpY3k6OlJlYWQpOworCisgICAgICAgIFFGaWxlSW5mbyBzb3VyY2VE
aXIoUVN0cmluZzo6ZnJvbVV0ZjgoU09VUkNFX0RJUikpOworICAgICAgICBtX3BvbGljeS5hZGRE
aXJlY3RvcnlQZXJtaXNzaW9uKHNvdXJjZURpci5jYW5vbmljYWxGaWxlUGF0aCgpLCBTeXNjYWxs
UG9saWN5OjpSZWFkQW5kV3JpdGUpOworICAgIH0KKworICAgIFNlY2NvbXBCcm9rZXI6OmxhdW5j
aFByb2Nlc3ModGhpcywgbV9wb2xpY3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmY1ZTdhODgyOTg0Yjg2MmMyYmM3OWMyMjZkMzM5MmVhZTQwOGRmMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2VjY29tcEZpbHRlcnNXZWJQ
cm9jZXNzUXQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0X2gKKyNkZWZpbmUgU2VjY29tcEZpbHRlcnNXZWJQ
cm9jZXNzUXRfaAorCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKworI2luY2x1ZGUgPFdl
YktpdDIvU2VjY29tcEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1N5c2NhbGxQb2xpY3ku
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM7CisKK2NsYXNzIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0IDogcHVibGljIFNlY2Nv
bXBGaWx0ZXJzIHsKK3B1YmxpYzoKKyAgICBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NRdChjb25z
dCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgU3lzY2FsbFBvbGljeSBtX3BvbGlj
eTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFQ0NP
TVBfRklMVEVSUykKKworI2VuZGlmIC8vIFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc1F0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAppbmRleCAyMjEw
NjY1N2UxMjhhMmMzNzJlMWUzODM1NDNlNDMyNDU2ZGNkNTlkLi45YTY3ZWJmNDIxYWI1ZDQ1Y2M0
ZTU0ZTU0NDdjYjEyNTIzZTc2NmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9XZWJQcm9jZXNzUXQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGUuaCIKICNpbmNsdWRlICJRdEJ1aWx0aW5CdW5kbGUuaCIKICNpbmNsdWRlICJRdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzUXQu
aCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCiAKQEAgLTEzNiw2ICsxMzcsMTMgQEAgc3RhdGljIHZvaWQgcGFy
ZW50UHJvY2Vzc0RpZWRDYWxsYmFjayh2b2lkKikKIAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikKIHsKKyNpZiBFTkFCTEUoU0VD
Q09NUF9GSUxURVJTKQorICAgIHsKKyAgICAgICAgV2ViS2l0OjpTZWNjb21wRmlsdGVyc1dlYlBy
b2Nlc3NRdCBzZWNjb21wRmlsdGVycyhwYXJhbWV0ZXJzKTsKKyAgICAgICAgc2VjY29tcEZpbHRl
cnMuaW5pdGlhbGl6ZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgbV9uZXR3b3JrQWNjZXNzTWFu
YWdlciA9IG5ldyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHRoaXMpOwogCiAgICAgaWYgKCFwYXJh
bWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAppbmRleCAxYzlkMzMy
MmU1ODAwMWYyMjc2YWZhZGRlMTQ2YWQzMzkxZGUwMmNmLi5mMTgzMmY5OGM5OTE0NzFjODk2Njg0
YjA3NjZhYmQ3OWRmM2JjMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
c291cC9XZWJQcm9jZXNzU291cC5jcHAKQEAgLTI5LDYgKzI5LDEwIEBACiAKICNkZWZpbmUgTElC
U09VUF9VU0VfVU5TVEFCTEVfUkVRVUVTVF9BUEkKIAorI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNs
dWRlICJTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAi
V2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KQEAgLTE2NSw2ICsxNjksMTUg
QEAgc3RhdGljIHZvaWQgbGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqKQogCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycywgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKQogeworI2lmIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCisgICAgeworI2lmIFBMQVRGT1JNKEVGTCkKKyAgICAgICAg
U2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsIHNlY2NvbXBGaWx0ZXJzKHBhcmFtZXRlcnMpOwor
I2VuZGlmCisgICAgICAgIHNlY2NvbXBGaWx0ZXJzLmluaXRpYWxpemUoKTsKKyAgICB9CisjZW5k
aWYKKwogICAgIGlmICghcGFyYW1ldGVycy5sYW5ndWFnZXMuaXNFbXB0eSgpKQogICAgICAgICBz
ZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdlKHBhcmFtZXRlcnMubGFuZ3VhZ2VzKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlIGIvU291cmNlL2NtYWtl
L0ZpbmRMaWJTZWNjb21wLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxMjljOGI3MGY2MmNlYWFjM2M2YTc1
YTZmM2Q3YTNkM2M0OTAzYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZExp
YlNlY2NvbXAuY21ha2UKQEAgLTAsMCArMSw0NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMsIElu
dGVsIENvcnBvcmF0aW9uCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMK
KyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyMgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorIyAgIGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK
KyMgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMgVHJ5IHRvIGZpbmQgbGlic2Vj
Y29tcCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorIworIyBBZnRlciBzdWNjZXNz
ZnVsIGRpc2NvdmVyeSwgdGhpcyB3aWxsIHNldCBmb3IgaW5jbHVzaW9uIHdoZXJlIG5lZWRlZDoK
KyMgTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgLSBjb250YWluZyB0aGUgbGlic2VjY29tcCBoZWFk
ZXJzCisjIExJQlNFQ0NPTVBfTElCUkFSSUVTIC0gY29udGFpbmcgdGhlIGxpYnNlY2NvbXAgbGli
cmFyeQorCitpbmNsdWRlKEZpbmRQa2dDb25maWcpCisKK3BrZ19jaGVja19tb2R1bGVzKFBDX0xJ
QlNFQ0NPTVAgbGlic2VjY29tcCkKKworZmluZF9wYXRoKExJQlNFQ0NPTVBfSU5DTFVERV9ESVJT
IE5BTUVTIHNlY2NvbXAuaAorICAgIEhJTlRTICR7UENfTElCU0VDQ09NUF9JTkNMVURFX0RJUlN9
ICR7UENfTElCU0VDQ09NUF9JTkNMVURFRElSfQorKQorCitmaW5kX2xpYnJhcnkoTElCU0VDQ09N
UF9MSUJSQVJJRVMgTkFNRVMgc2VjY29tcAorICAgIEhJTlRTICR7UENfTElCU0VDQ09NUF9MSUJS
QVJZX0RJUlN9ICR7UENfTElCU0VDQ09NUF9MSUJESVJ9CispCisKK2luY2x1ZGUoRmluZFBhY2th
Z2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1Mo
c2VjY29tcCBERUZBVUxUX01TRyBMSUJTRUNDT01QX0lOQ0xVREVfRElSUyBMSUJTRUNDT01QX0xJ
QlJBUklFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggYTk1Y2NlZDQxNWY0ZDkzNDgwYTlkZGIy
OTM1ZjVkOWU2MmYwZTdlMC4uZDBlZmRmOGZjNGU5ODIzZWI1ZWQ1NWEwNWIzNDg2MDg3YzAxYWI5
OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTQ3LDYgKzQ3LDggQEAgc2V0KERBVEFfSU5TVEFM
TF9ESVIgInNoYXJlLyR7V2ViS2l0X0xJQlJBUllfTkFNRX0tJHtQUk9KRUNUX1ZFUlNJT05fTUFK
T1J9IiBDQUMKIHNldChUSEVNRV9CSU5BUllfRElSICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvRGVmYXVsdFRoZW1lKQogZmlsZShNQUtFX0RJUkVDVE9SWSAke1RIRU1F
X0JJTkFSWV9ESVJ9KQogCithZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNU
QUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElSfSIpCisKIHNldChWRVJTSU9OX1NDUklQVCAi
LVdsLC0tdmVyc2lvbi1zY3JpcHQsJHtDTUFLRV9NT0RVTEVfUEFUSH0vZWZsc3ltYm9scy5maWx0
ZXIiKQogCiBXRUJLSVRfT1BUSU9OX0JFR0lOKCkKQEAgLTgyLDYgKzg0LDcgQEAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfSU5GTyBPTikKIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFf
UVVFUlkgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0VDQ09NUF9GSUxURVJTIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9TSEFET1dfRE9NIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1NQRUxMQ0hFQ0sgT04pCkBAIC0yMTgsNiArMjIxLDEwIEBAIGlmIChFTkFC
TEVfSU5TUEVDVE9SKQogICAgIGFkZF9kZWZpbml0aW9ucygtRFdFQl9JTlNQRUNUT1JfSU5TVEFM
TF9ESVI9XCIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke1dFQl9JTlNQRUNUT1JfRElSfVwiKQog
ZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9TRUNDT01QX0ZJTFRFUlMpCisgICAgZmluZF9wYWNrYWdl
KExpYlNlY2NvbXAgUkVRVUlSRUQpCitlbmRpZiAoKQorCiBzZXQoQ1BBQ0tfU09VUkNFX0dFTkVS
QVRPUiBUQloyKQogCiAjIE9wdGltaXplIGJpbmFyeSBzaXplIGZvciByZWxlYXNlIGJ1aWxkcyBi
eSByZW1vdmluZyBkZWFkIHNlY3Rpb25zIG9uIHVuaXgvZ2NjCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMu
Y21ha2UKaW5kZXggNGU0ZWQxYWY2NzNmYmFlNGNhOTAzMjJmMTUwYjQyMmEwZDIzNDcyNi4uNzg2
ZmEwMjRjZWM0MWIxZTcwM2U5NjFlZWE3ZjNkMDFlOGRkZDFiZCAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0
dXJlcy5jbWFrZQpAQCAtMTA2LDYgKzEwNiw3IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4p
CiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkg
IlRvZ2dsZSByZXNvbHV0aW9uIG1lZGlhIHF1ZXJ5IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfUkVTT1VSQ0VfVElNSU5HICJUb2dnbGUgUmVzb3VyY2UgVGlt
aW5nIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0NSSVBU
RURfU1BFRUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBzdXBwb3J0IiBPRkYpCisgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyAiVG9nZ2xlIExpbnV4
IHNlY2NvbXAgZmlsdGVycyBmb3IgdGhlIFdlYlByb2Nlc3Mgc3VwcG9ydCIgT0ZGKQogICAgIFdF
QktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBz
dXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JL
RVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sgIlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1cHBvcnQg
KHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IDM1Zjg4ZmI0YTcyNmFh
ZjNkMjZiYTM1MjgxMjkzZGNkYzQwZjlmZjYuLmU3MWM0YjJhYTNlMmFmMzFkNzhlOGFhNjMxZWMw
NGFlNGYyMjM2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC0xMDAsNiArMTAwLDcgQEAKICNjbWFrZWRl
ZmluZTAxIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZCiAjY21ha2VkZWZpbmUwMSBFTkFC
TEVfUkVTT1VSQ0VfVElNSU5HCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0NSSVBURURfU1BFRUNI
CisjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0VDQ09NUF9GSUxURVJTCiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9MTElORwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5NDkzM2I4Mjg4ZTVmYjM2MTNhYmI0
MzI1ODhhMGRjNzdjMmYyNWYuLmVlMTIxM2I2M2RkYTcwZjY4OWYwMTFlMmMwMDA0NGU1MTY1MWNi
OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNiBAQAorMjAxMy0wMy0yMCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlh
Z28uc2FudG9zQGludGVsLmNvbT4KKworICAgICAgICBbV0syXSBEcm9wIFdlYlByb2Nlc3MgY2Fw
YWJpbGl0aWVzIG9uIExpbnV4IHVzaW5nIHNlY2NvbXAgZmlsdGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyB0byB2ZXJpZnkg
aWYgdGhlIGhhbmRsaW5nIG9mIHRoZSBvcGVuLCBvcGVuYXQsIGNyZWF0IHN5c2NhbGwKKyAgICAg
ICAgaXMgYmVpbmcgZG9uZSByaWdodC4gV2UgY2hlY2sgaWYgdGhlIFJlYWQvV3JpdGUvUmVhZEFu
ZFdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgIGFyZSByZXNwZWN0ZWQsIGlmIHRoZSBjYW5vbmlj
YWwgcGF0aCBpcyBiZWluZyByZXNvbHZlZCBhbmQgaWYKKyAgICAgICAgdGhlIHBlcm1pc3Npb25z
IGFyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRvcG1vc3QgcGFyZW50IGRpcmVjdG9yeSB3aXRoIGEK
KyAgICAgICAgcG9saWN5IHNldCB3aGVuIHRoZSBkaXJlY3RvcnkgYmVpbmcgb3BlbmVkIGhhcyBu
byBwb2xpY3kuCisKKyAgICAgICAgV2UgYWxzbyB0ZXN0IGlmIGFueSBhdHRlbXB0IG9mIGJsb2Nr
aW5nIFNJR1NZUyBpcyBzaWxlbnRseSBpZ25vcmVkLgorICAgICAgICBTSUdTWVMgY2Fubm90IGJl
IGJsb2NrZWQgYmVjYXVzZSBpbiBpdCdzIGhhbmRsZXIgaXMgd2hlcmUgd2UgaG9vaworICAgICAg
ICBzeXNjYWxscyB0byB0aGUgYnJva2VyIHByb2Nlc3MuCisKKyAgICAgICAgQWxzbyBhZGRlZCBs
aWJzZWNjb21wIHRvIEVGTCdzIGpoYnVpbGQgdG8gbWFrZSB0aGUgbGlmZSBvZiBkZXZlbG9wZXJz
CisgICAgICAgIHdpbGxpbmcgdG8gaGVscCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bUVmbC5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29t
cEZpbHRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEkpOgorICAgICAgICAo
U2VjY29tcEVudmlyb25tZW50KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNlY2NvbXBFbnZp
cm9ubWVudDo6U2V0VXApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U2VjY29tcEVudmlyb25t
ZW50OjpUZWFyRG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkdW1teUhhbmRsZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpz
dHJlc3NUZXN0KToKKyAgICAgICAgKiBlZmwvamhidWlsZC5tb2R1bGVzOgorICAgICAgICAqIHFt
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpOgorCiAyMDEzLTAzLTE4ICBBbmRyYXMg
QmVjc2kgIDxhbmRyYXMuYmVjc2lAZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IHRoZSBi
dWlsZCBvZiBRdFRlc3RCcm93c2VyIGlmIHRoZSBwcmludCBwcmV2aWV3IGRpYWxvZyBpcyBkaXNh
YmxlZCBpbiBRdApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDc3
ODY1OTVhOGMxNmExYTJmYzI5MjQ5MTIyMzJkMjU2NTNjNTVhNDguLjA1ZTc1YjRlYzFmMDIwODVk
ODkwYjY4NzkwOWRiNDEzOGUxZWJmMWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KQEAgLTEyNSw2ICsxMjUsNyBAQCBteSAoCiAgICAgJHJlcXVlc3RBbmltYXRpb25G
cmFtZVN1cHBvcnQsCiAgICAgJHJlc291cmNlVGltaW5nU3VwcG9ydCwKICAgICAkc2NyaXB0ZWRT
cGVlY2hTdXBwb3J0LAorICAgICRzZWNjb21wRmlsdGVyc1N1cHBvcnQsCiAgICAgJHNoYWRvd0RP
TVN1cHBvcnQsCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAgICRzcWxEYXRhYmFzZVN1
cHBvcnQsCkBAIC00MDEsNiArNDAyLDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9u
ID0+ICJyZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZSIsIGRlc2MgPT4gIlRvZ2dsZSBSZXF1ZXN0IEFu
aW1hdGlvbiBGcmFtZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1JFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzR3Rr
KCkgfHwgaXNFZmwoKSB8fCBpc0JsYWNrQmVycnkoKSksIHZhbHVlID0+IFwkcmVxdWVzdEFuaW1h
dGlvbkZyYW1lU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gInNlY2NvbXAtZmlsdGVycyIs
IGRlc2MgPT4gIlRvZ2dsZSBTZWNjb21wIEZpbHRlciBzYW5kYm94IiwKKyAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzZWNj
b21wRmlsdGVyc1N1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJzY3JpcHRlZC1zcGVlY2gi
LCBkZXNjID0+ICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIHN1cHBvcnQiLAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfU0NSSVBURURfU1BFRUNIIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHNj
cmlwdGVkU3BlZWNoU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBhNzE3NTU5YmFjMTUyNzdlNjk3NGM5NzBhY2IwYjgwZjlhNzk3ZjYyLi45OTEyMGY3
ZjNhNGRhOTNmMTBhZjAzNWIyNzAxMjAyZDAyYzYwNWJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTkwLDYgKzkwLDE1IEBAIHNldCh0ZXN0X3dlYmtpdDJfYXBpX0JJ
TkFSSUVTCiAgICAgZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3MKICkKIAorIyBT
ZWNjb21wIGZpbHRlcnMgaXMgYW4gaW50ZXJuYWwgQVBJIGFuZCBpdHMgc3ltYm9scworIyBhcmUg
bm90IChhbmQgc2hvdWxkIG5vdCkgYmUgZXhwb3NlZCBieSBkZWZhdWx0LiBXZQorIyBjYW4gb25s
eSB0ZXN0IGl0IHdoZW4gYnVpbGRpbmcgc2hhcmVkIGNvcmUuCitpZiAoRU5BQkxFX1NFQ0NPTVBf
RklMVEVSUyBBTkQgU0hBUkVEX0NPUkUpCisgICAgbGlzdChBUFBFTkQgdGVzdF93ZWJraXQyX2Fw
aV9CSU5BUklFUworICAgICAgICBTZWNjb21wRmlsdGVycworICAgICkKK2VuZGlmICgpCisKIHNl
dCh0ZXN0X3dlYmtpdDJfYXBpX2ZhaWxfQklOQVJJRVMKICAgICBDYW5IYW5kbGVSZXF1ZXN0CiAg
ICAgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9TZWNjb21wRmlsdGVycy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NjZiZjY4NzJj
YmRlODVlOWQ0NDRlOWMxZmNmMmQ4ZGNmYTk0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwCkBAIC0wLDAgKzEs
NDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDxXZWJLaXQyL1NlY2NvbXBCcm9rZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1NlY2NvbXBG
aWx0ZXJzLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9TeXNjYWxsUG9saWN5Lmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNs
dWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgcm9vdERpciwgKEFTQ0lJTGl0ZXJhbCgiLyIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgaG9tZURpciwgKFN0cmluZyhnZXRlbnYoIkhPTUUiKSkpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCB1c3JEaXIsIChBU0NJSUxpdGVyYWwoIi91c3IiKSkpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzclNiaW5EaXIsIChBU0NJSUxpdGVyYWwoIi91c3Ivc2Jp
biIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpclJlYWQsIChBU0NJSUxp
dGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQiKSkpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIHRlc3REaXJXcml0ZSwgKEFTQ0lJTGl0ZXJhbCgiL3RtcC9XZWJL
aXRTZWNjb21wRmlsdGVycy90ZXN0V3JpdGUiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIHRlc3REaXJSZWFkQW5kV3JpdGUsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29t
cEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZSIpKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgdGVzdERpck5vdEFsbG93ZWQsIChBU0NJSUxpdGVyYWwoIi90bXAvV2ViS2l0U2VjY29tcEZp
bHRlcnMvdGVzdE5vdEFsbG93ZWQiKSkpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRl
c3RGaWxlTm90QWxsb3dlZCwgKHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlUG9saWN5
IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRlc3RGaWxlUmVhZEFuZFdyaXRlLCAo
dGVzdERpck5vdEFsbG93ZWQgKyAiL3Rlc3RGaWxlUG9saWN5IikpOworCitzdGF0aWMgY29uc3Qg
bW9kZV90IGRlZmF1bHRNb2RlID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lYVVNSOworCitjbGFz
cyBTZWNjb21wRW52aXJvbm1lbnQgOiBwdWJsaWMgdGVzdGluZzo6RW52aXJvbm1lbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBBU1NFUlRfVFJV
RSghaG9tZURpci5pc0VtcHR5KCkpOworCisgICAgICAgIG1rZGlyKCIvdG1wL1dlYktpdFNlY2Nv
bXBGaWx0ZXJzIiwgZGVmYXVsdE1vZGUpOworICAgICAgICBta2Rpcih0ZXN0RGlyUmVhZC51dGY4
KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJXcml0ZS51dGY4
KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIG1rZGlyKHRlc3REaXJSZWFkQW5kV3Jp
dGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgICAgICBta2Rpcih0ZXN0RGlyTm90
QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisKKyAgICAgICAgLy8gQ3JlYXRl
IGEgZmlsZSBmb3IgdGhlIFJlYWQgb25seSBhbmQgTm90QWxsb3dlZCBkaXJlY3RvcnkgYmVmb3Jl
CisgICAgICAgIC8vIGxvYWRpbmcgdGhlIGZpbHRlcnMuCisgICAgICAgIFN0cmluZyBmaWxlID0g
dGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlIjsKKyAgICAgICAgaW50IGZkID0gb3BlbihmaWxlLnV0
ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICAgICAgQVNT
RVJUX05FKGNsb3NlKGZkKSwgLTEpOworICAgICAgICBmaWxlID0gdGVzdERpck5vdEFsbG93ZWQg
KyAiL3Rlc3RGaWxlIjsKKyAgICAgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19S
RFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgICAgICBBU1NFUlRfTkUoY2xvc2UoZmQp
LCAtMSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGZpbGVzIGZvciB0aGUgZmlsZSBwb2xpY3kgdGVz
dHMuIEZpbGUgcG9saWNpZXMgcHJlY2VkZXMgdGhlCisgICAgICAgIC8vIGRpcmVjdG9yeSBwb2xp
Y3kuIEluIHRoaXMgY2FzZSwgd2UgY3JlYXRlIGEgZmlsZSB3aXRoIHJlYWQgYW5kIHdyaXRlCisg
ICAgICAgIC8vIHBvbGljaWVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBhbGxvd2Vk
LCBhbmQgdmljZSB2ZXJzYS4gCisgICAgICAgIGZkID0gb3Blbih0ZXN0RmlsZU5vdEFsbG93ZWQu
dXRmOCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgICAgICBB
U1NFUlRfTkUoY2xvc2UoZmQpLCAtMSk7CisgICAgICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRB
bmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Cisg
ICAgICAgIEFTU0VSVF9ORShjbG9zZShmZCksIC0xKTsKKworICAgICAgICBTeXNjYWxsUG9saWN5
IHBvbGljeTsKKyAgICAgICAgcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24ocm9vdERpciwg
U3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQ
ZXJtaXNzaW9uKHVzckRpciwgU3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgICAgIHBvbGljeS5h
ZGREaXJlY3RvcnlQZXJtaXNzaW9uKHVzclNiaW5EaXIsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93
ZWQpOworICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbih0ZXN0RGlyUmVhZCwg
U3lzY2FsbFBvbGljeTo6UmVhZCk7CisgICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNz
aW9uKHRlc3REaXJXcml0ZSwgU3lzY2FsbFBvbGljeTo6V3JpdGUpOworICAgICAgICBwb2xpY3ku
YWRkRGlyZWN0b3J5UGVybWlzc2lvbih0ZXN0RGlyUmVhZEFuZFdyaXRlLCBTeXNjYWxsUG9saWN5
OjpSZWFkQW5kV3JpdGUpOworICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbih0
ZXN0RGlyTm90QWxsb3dlZCwgU3lzY2FsbFBvbGljeTo6Tm90QWxsb3dlZCk7CisgICAgICAgIHBv
bGljeS5hZGRGaWxlUGVybWlzc2lvbih0ZXN0RmlsZU5vdEFsbG93ZWQsIFN5c2NhbGxQb2xpY3k6
Ok5vdEFsbG93ZWQpOworICAgICAgICBwb2xpY3kuYWRkRmlsZVBlcm1pc3Npb24odGVzdEZpbGVS
ZWFkQW5kV3JpdGUsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7CisKKyAgICAgICAgU2Vj
Y29tcEZpbHRlcnMgc2VjY29tcEZpbHRlcnMoU2VjY29tcEZpbHRlcnM6OkFsbG93KTsKKyAgICAg
ICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgib3BlbiIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwKTsK
KyAgICAgICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgib3BlbmF0IiwgU2VjY29tcEZpbHRlcnM6
OlRyYXApOworICAgICAgICBzZWNjb21wRmlsdGVycy5hZGRSdWxlKCJjcmVhdCIsIFNlY2NvbXBG
aWx0ZXJzOjpUcmFwKTsKKworICAgICAgICBTZWNjb21wQnJva2VyOjpsYXVuY2hQcm9jZXNzKCZz
ZWNjb21wRmlsdGVycywgcG9saWN5KTsKKyAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6
ZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAg
ICAvLyBUaGlzIHdpbGwgaGF2ZSB0byBtb3ZlIHRvIGEgc2VwYXJhdGVkIHByb2Nlc3MgY3JlYXRl
ZCBiZWZvcmUgbG9hZGluZworICAgICAgICAvLyB0aGUgZmlsdGVycyB3aGVuIHdlIHB1dCB0aGUg
cm1kaXIvdW5saW5rIHBvbGljaWVzIGluIHBsYWNlLgorICAgICAgICB1bmxpbmsoIi90bXAvV2Vi
S2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQvdGVzdEZpbGUiKTsKKyAgICAgICAgdW5s
aW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL3Rlc3RGaWxlUG9s
aWN5Iik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVh
ZEFuZFdyaXRlL3Rlc3RGaWxlIik7CisgICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21w
RmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlL3Rlc3RGaWxlMiIpOworICAgICAgICB1bmxpbmsoIi90
bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90ZXN0RmlsZTMiKTsKKyAg
ICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUv
dGVzdEZpbGVQb2xpY3kiKTsKKyAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0
ZXJzL3Rlc3RXcml0ZS90ZXN0RmlsZSIpOworICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2Vj
Y29tcEZpbHRlcnMvdGVzdFdyaXRlL3Rlc3RGaWxlMiIpOworICAgICAgICB1bmxpbmsoIi90bXAv
V2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQvdGVzdEZpbGUiKTsKKyAgICAgICAgcm1kaXIo
Ii90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQiKTsKKyAgICAgICAgcm1k
aXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZSIpOworICAgICAg
ICBybWRpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0V3JpdGUiKTsKKyAgICAgICAg
cm1kaXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQiKTsKKyAgICAgICAgcm1k
aXIoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMiKTsKKyAgICB9Cit9OworCis6OnRlc3Rpbmc6
OkVudmlyb25tZW50KiBjb25zdCBlbnYgPSA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9u
bWVudChuZXcgU2VjY29tcEVudmlyb25tZW50KTsKKworc3RhdGljIHZvaWQgZHVtbXlIYW5kbGVy
KGludCwgc2lnaW5mb190Kiwgdm9pZCopCit7Cit9CisKK1RFU1QoV2ViS2l0Miwgc2lnYWN0aW9u
KQoreworICAgIC8vIFNldHRpbmcgYSBoYW5kbGVyIHNob3VsZCBiZSBlbm91Z2ggdG8gYnJlYWsg
YW55IHN1YnNlcXVlbnQgdGVzdCBpZgorICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmVkIGJ5IHRo
ZSBzYW5kYm94LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0
aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7CisgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZkdW1t
eUhhbmRsZXI7CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKworICAgIEFTU0VS
VF9ORShzaWdhY3Rpb24oU0lHU1lTLCAmYWN0aW9uLCAwKSwgLTEpOworfQorCitURVNUKFdlYktp
dDIsIHNpZ3Byb2NtYXNrKQoreworICAgIC8vIFdlIHRlc3QgaGVyZSB0aGUgbWVjaGFuaXNtIGlu
c3RhbGxlZCB0byBwcmV2ZW50IFNJR1NZUyB0byBiZSBibG9ja2VkLiBBbnkKKyAgICAvLyBhdHRl
bXAgdG8gYWRkIFNJR1NZUyB0byB0aGUgc2V0IG9mIGJsb2NrZWQgc2lnbmFscyB3aWxsIGJlIHNp
bGVudGx5CisgICAgLy8gaWdub3JlZCAoYnV0IG90aGVyIHNpZ25hbHMgd2lsbCBiZSBibG9ja2Vk
IGp1c3QgZmluZSkuCisgICAgc2lnc2V0X3Qgc2V0LCBvbGRTZXQ7CisgICAgc2lnZW1wdHlzZXQo
JnNldCk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQs
IFNJR1VTUjEpOworCisgICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwg
MCksIC0xKTsKKyAgICBBU1NFUlRfTkUoc2lncHJvY21hc2soU0lHX0JMT0NLLCAwLCAmb2xkU2V0
KSwgLTEpOworICAgIEFTU0VSVF9GQUxTRShzaWdpc21lbWJlcigmb2xkU2V0LCBTSUdTWVMpKSA8
PCAiU0lHU1lTIHNob3VsZCBub3QgYmUgYmxvY2tlZC4iOworICAgIEFTU0VSVF9UUlVFKHNpZ2lz
bWVtYmVyKCZvbGRTZXQsIFNJR1VTUjEpKSA8PCAiT3RoZXIgc2lnbmFscyBzaG91bGQgYmUgYmxv
Y2tlZCBub3JtYWxseS4iOworCisgICAgc2lnZW1wdHlzZXQoJnNldCk7CisgICAgc2lnYWRkc2V0
KCZzZXQsIFNJR1NZUyk7CisgICAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjIpOworCisgICAgQVNT
RVJUX05FKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2V0LCAmb2xkU2V0KSwgLTEpOworICAg
IEFTU0VSVF9ORShzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgMCwgJnNldCksIC0xKTsKKyAgICBB
U1NFUlRfRkFMU0Uoc2lnaXNtZW1iZXIoJnNldCwgU0lHU1lTKSkgPDwgIlNJR1NZUyBzaG91bGQg
bm90IGJlIGJsb2NrZWQuIjsKKyAgICBBU1NFUlRfVFJVRShzaWdpc21lbWJlcigmc2V0LCBTSUdV
U1IyKSkgPDwgIk90aGVyIHNpZ25hbHMgc2hvdWxkIGJlIGJsb2NrZWQgbm9ybWFsbHkuIjsKKyAg
ICBBU1NFUlRfRkFMU0Uoc2lnaXNtZW1iZXIoJm9sZFNldCwgU0lHVVNSMikpOworCisgICAgQVNT
RVJUX05FKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkU2V0LCAwKSwgLTEpIDw8ICJTaG91
bGQgcmVzdG9yZSB0aGUgb2xkIHNpZ25hbCBzZXQganVzdCBmaW5lLiI7CisgICAgQVNTRVJUX05F
KHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAwLCAmc2V0KSwgLTEpOworICAgIEFTU0VSVF9GQUxT
RShzaWdpc21lbWJlcigmc2V0LCBTSUdVU1IyKSkgPDwgIlRoZSByZXN0b3JlZCBzZXQgZG9lc24n
dCBoYXZlIFNJR1VTUjIuIjsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuKQoreworICAgIC8vIFJl
YWQgb25seSBkaXJlY3RvcnkuCisgICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVz
dEZpbGUiOworICAgIGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOwor
ICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9
IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2Uo
ZmQpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkICsgIi9UaGlzRmlsZURvZXNOb3RFeGlzdCI7
CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgPDwgIlNob3VsZCByZXR1cm4gRU5P
RU5UIHdoZW4gdHJ5aW5nICIgXAorICAgICAgICAidG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5v
dCBleGl0IGFuZCB0aGUgcGVybWlzc2lvbnMgYXJlIE9LLiI7CisKKyAgICBmZCA9IG9wZW4oZmls
ZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYg
ZXJybm8gPT0gRUFDQ0VTKSA8PCAiU2hvdWxkIHJldHVybiBFQUNDRVMgd2hlbiB0cnlpbmcgIiBc
CisgICAgICAgICJ0byBvcGVuIGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXQgYW5kIHRoZSBwZXJt
aXNzaW9ucyBhcmUgbm90IE9LLiI7CisKKyAgICAvLyBXcml0ZSBvbmx5IGRpcmVjdG9yeS4KKyAg
ICBmaWxlID0gdGVzdERpcldyaXRlICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZpbGUu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAgQVNT
RVJUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRm
OCgpLmRhdGEoKSwgT19SRFdSKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9
PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkp
OworICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBm
ZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZk
LCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gUmVhZCBhbiB3cml0ZSBkaXJlY3Rvcnku
CisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiL3Rlc3RGaWxlIjsKKyAgICBmZCA9
IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2Rl
KTsKKyAgICBBU1NFUlRfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9w
ZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOwor
ICAgIGNsb3NlKGZkKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRP
TkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9
IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAt
MSk7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3RvcnkuCisgICAg
ZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZSI7CisgICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7CisgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEg
JiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCks
IE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMp
OworCisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVY
UEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKworICAgIC8vIFRoZSAv
dXNyIGRpcmVjdG9yeSBoZXJlIGhhcyByZWFkIHBlcm1pc3Npb25zLCBzbyBpdCdzIHN1YmRpcmVj
dG9yaWVzCisgICAgLy8gc2hvdWxkIHJlc29sdmUgdG8gdGhlIC91c3IgcGVybWlzc2lvbnMgdW5s
ZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICAgIGZpbGUgPSB1c3JEaXIgKyAiL2Jpbi9iYXNl
bmFtZSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAg
IEVYUEVDVF9ORShmZCwgLTEpIDw8ICJTdWJkaXJlY3RvcmllcyBzaG91bGQgd2l0aCBubyBwb2xp
Y3kgc2hvdWxkICIgXAorICAgICAgICAiaW5oZXJpdCB0aGUgcGFyZW50J3MgcG9saWNpZXMuIjsK
KyAgICBjbG9zZShmZCk7CisKKyAgICBmaWxlID0gdXNyU2JpbkRpciArICIvYWRkdXNlciI7Cisg
ICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOworICAgIEVYUEVDVF9U
UlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgPDwgIlRoaXMgZGlyZWN0b3J5IHNob3Vs
ZCBoYXZlICIgXAorICAgICAgICAiaXRzIG93biBwb2xpY3kgaW5zdGVhZCBvZiB0aGUgcGFyZW50
J3MuIjsKKworICAgIC8vIEFjY2VzcyB0byB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgc3lzdGVtIGlz
IGJsb2NrZWQgYW5kIHNob3VsZAorICAgIC8vIG5ldmVyIHJldHVybiBhbnl0aGluZyBlbHNlIG90
aGVyIHRoYW4gRUFDQ0VTIHJlZ2FyZGxlc3MgaWYgdGhlCisgICAgLy8gZmlsZSBleGlzdHMgb3Ig
bm90LiBUaGUgcmVhc29uIGlzIGJlY2F1c2UgaXQgd2lsbCBmYWxsYmFjayB0byB0aGUKKyAgICAv
LyBwb2xpY3kgb2YgdGhlIFJvb3QgZGlyZWN0b3J5LCBtYXJrZWQgYXMgTm90QWxsb3dlZC4KKyAg
ICBmaWxlID0gaG9tZURpciArICIvdGVzdEZpbGUiOworICAgIGZkID0gb3BlbihmaWxlLnV0Zjgo
KS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJV
RShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuKCIvZXRjL3Bh
c3N3ZCIsIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBF
QUNDRVMpOworCisgICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uL2V0
Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsK
KyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmls
ZSA9IHRlc3REaXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3Jp
dGUgKyAiLy4uLy4uLy4uL2V0Yy9wYXNzd2QiOworICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fUkRPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBF
QUNDRVMpOworCisgICAgLy8gSGVyZSB3ZSB0ZXN0IGZpbGUgcG9saWNpZXMuIFRoZSBoYXZlIHBy
ZWNlZGVuY2Ugb3ZlciBkaXJlY3RvcnkgcG9saWNpZXMuCisgICAgLy8gVGhlIGZpbGUgYmVsbG93
IGxpdmVzIGluc2lkZSBhIGRpcmVjdG9yeSB3aXRoIFJlYWRBbmRXcml0ZSBwb2xpY3kuCisgICAg
ZmQgPSBvcGVuKHRlc3RGaWxlTm90QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Cisg
ICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZkID0g
b3Blbih0ZXN0RmlsZU5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVY
UEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmZCA9IG9wZW4o
dGVzdEZpbGVOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7CisgICAgRVhQRUNUX1RS
VUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKKworICAgIGZpbGUgPSB0ZXN0RGlyUmVh
ZEFuZFdyaXRlICsgIi8uLi8uLi8uLiIgKyB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0Rmls
ZVBvbGljeSI7CisgICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOwor
ICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAvLyBU
aGUgbmV4dCBmaWxlIGlzIGxvY2F0ZWQgaW5zaWRlIGEgZGlyZWN0b3J5IG1hcmtlZCBhcyBOb3RB
bGxvd2VkLCBidXQKKyAgICAvLyBpdCBoYXMgaXRzIG93biBmaWxlIHBvbGljeSB0aGF0IHByZWNl
ZGVzIHRoZSBkaXJlY3RvcnkgcG9saWN5LgorICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRBbmRX
cml0ZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7Cisg
ICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRlLnV0Zjgo
KS5kYXRhKCksIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShm
ZCk7CisKKyAgICBmZCA9IG9wZW4odGVzdEZpbGVSZWFkQW5kV3JpdGUudXRmOCgpLmRhdGEoKSwg
T19SRFdSKTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBm
aWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvLi4vLi4vLi4iICsgdGVzdERpck5vdEFsbG93
ZWQgKyAiL3Rlc3RGaWxlUG9saWN5IjsKKyAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworfQor
CitURVNUKFdlYktpdDIsIGNyZWF0KQoreworICAgIC8vIFJlYWQgb25seSBkaXJlY3RvcnkuCisg
ICAgU3RyaW5nIGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvdGVzdEZpbGUyIjsKKyAgICBpbnQgZmQg
PSBjcmVhdChmaWxlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBFQ1RfVFJV
RShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgLy8gV3JpdGUgb25seSBkaXJl
Y3RvcnkuCisgICAgZmlsZSA9IHRlc3REaXJXcml0ZSArICIvdGVzdEZpbGUyIjsKKyAgICBmZCA9
IGNyZWF0KGZpbGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOworICAgIEVYUEVDVF9ORShm
ZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAgIC8vIFJlYWQgYW4gd3JpdGUgZGlyZWN0b3J5
LgorICAgIGZpbGUgPSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZTIiOworICAgIGZk
ID0gY3JlYXQoZmlsZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX05F
KGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gTm90QWxsb3dlZCBkaXJlY3Rvcnku
CisgICAgZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0RmlsZTIiOworICAgIGZkID0g
Y3JlYXQoZmlsZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7CisgICAgRVhQRUNUX1RSVUUo
ZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKK30KKworVEVTVChXZWJLaXQyLCBvcGVuYXQp
Cit7CisgICAgaW50IGRpckZkID0gb3Blbih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRh
KCksIE9fUkRPTkxZKTsKKyAgICBBU1NFUlRfTkUoZGlyRmQsIC0xKTsKKworICAgIGludCBmZCA9
IG9wZW5hdChkaXJGZCwgInRlc3RGaWxlMyIsIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2Rl
KTsKKyAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBmZCA9IG9w
ZW5hdChkaXJGZCwgInRlc3RGaWxlMyIsIE9fUkRXUik7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7
CisgICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZTMiLCBP
X1JET05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgY2xvc2UoZmQpOworCisgICAg
ZmQgPSBvcGVuYXQoZGlyRmQsICJ0ZXN0RmlsZTMiLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05F
KGZkLCAtMSk7CisKKyAgICBmZCA9IG9wZW5hdChmZCwgInRlc3RGaWxlMyIsIE9fV1JPTkxZKTsK
KyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9URElSKSA8PCAiU2hvdWxk
IHJldHVybiBFTk9URElSIHdoZW4gdGhlIGZkIGlzIGEgZmlsZS4iOworICAgIGNsb3NlKGZkKTsK
KworICAgIFN0cmluZyBmaWxlID0gIi4uLy4uLy4uIiArIHRlc3REaXJSZWFkQW5kV3JpdGUgKyAi
L3Rlc3RGaWxlMyI7CisgICAgZmQgPSBvcGVuYXQoZGlyRmQsIGZpbGUudXRmOCgpLmRhdGEoKSwg
T19XUk9OTFkpOworICAgIEVYUEVDVF9ORShmZCwgLTEpOworICAgIGNsb3NlKGZkKTsKKworICAg
IGZpbGUgPSAiLi4vLi4vLi4iICsgdGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlMyI7CisgICAgZmQg
PSBvcGVuYXQoZGlyRmQsIGZpbGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOworICAgIEVYUEVD
VF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICBmaWxlID0gdGVzdERp
clJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGUzIjsKKyAgICBmZCA9IG9wZW5hdCgtMSwgZmlsZS51
dGY4KCkuZGF0YSgpLCBPX1dST05MWSk7CisgICAgRVhQRUNUX05FKGZkLCAtMSkgPDwgIkRpcmVj
dG9yeSBmZCBzaG91bGQgYmUgaWdub3JlZCB3aGVuIHRoZSBwYXRoIGlzIGFic29sdXRlLiI7Cisg
ICAgY2xvc2UoZmQpOworCisgICAgZmQgPSBvcGVuYXQoLTEsICJ0ZXN0RmlsZTMiLCBPX1dST05M
WSk7CisgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUJBREYpIDw8ICJTaG91
bGQgcmV0dXJuIEVCQURGIHdoZW4gdGhlIGZkIGlzIGludmFsaWQuIjsKKyAgICBjbG9zZShkaXJG
ZCk7CisKKyAgICBkaXJGZCA9IG9wZW4odGVzdERpck5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwg
T19SRE9OTFkpOworICAgIEVYUEVDVF9UUlVFKGRpckZkID09IC0xICYmIGVycm5vID09IEVBQ0NF
Uyk7CisKKyAgICBkaXJGZCA9IG9wZW4odGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwgT19SRE9O
TFkpOworICAgIEFTU0VSVF9ORShkaXJGZCwgLTEpOworCisgICAgZmQgPSBvcGVuYXQoZGlyRmQs
ICJ0ZXN0RmlsZTIiLCBPX1JET05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKKyAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisgICAgZmQgPSBvcGVuYXQo
ZGlyRmQsICJ0ZXN0RmlsZSIsIE9fV1JPTkxZKTsKKyAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAm
JiBlcnJubyA9PSBFQUNDRVMpOworICAgIGNsb3NlKGRpckZkKTsKK30KKworc3RhdGljIHZvaWQq
IHN0cmVzc1Rlc3Qodm9pZCopCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDA7ICsraSkg
eworICAgICAgICBpbnQgZmQgPSBvcGVuKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RS
ZWFkL3Rlc3RGaWxlIiwgT19SRFdSKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYg
ZXJybm8gPT0gRUFDQ0VTKTsKKworICAgICAgICBmZCA9IG9wZW4oIi90bXAvV2ViS2l0U2VjY29t
cEZpbHRlcnMvdGVzdFJlYWQvdGVzdEZpbGUiLCBPX1JET05MWSk7CisgICAgICAgIEVYUEVDVF9O
RShmZCwgLTEpOworICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgZmQgPSBvcGVuKCIvdG1w
L1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL3Rlc3RGaWxlIiwgT19SRE9OTFkp
OworICAgICAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOworCisg
ICAgICAgIGZkID0gY3JlYXQoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93
ZWQvU2hvbGROb3RCZUFsbG93ZWQiLCBkZWZhdWx0TW9kZSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7CisKKyAgICAgICAgaW50IGRpckZkID0gb3Bl
bigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZCIsIE9fUkRPTkxZKTsKKyAgICAg
ICAgRVhQRUNUX05FKGRpckZkLCAtMSk7CisKKyAgICAgICAgZmQgPSBvcGVuYXQoZGlyRmQsICJ0
ZXN0RmlsZSIsIE9fUkRPTkxZKTsKKyAgICAgICAgRVhQRUNUX05FKGZkLCAtMSk7CisgICAgICAg
IGNsb3NlKGZkKTsKKyAgICAgICAgY2xvc2UoZGlyRmQpOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitURVNUKFdlYktpdDIsIHRocmVhZGluZykKK3sKKyAgICAvLyBUZXN0cyBpZiBjb25j
dXJyZW50IHN5c2NhbGwgZXhlY3V0aW9uIHdvcmtzIGZpbmUuIEl0IGNhbiBiZQorICAgIC8vIGFs
c28gdXNlZCBmb3IgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQgbGVhayBkZXRlY3Rpb24uIFRoZSB0
ZXN0CisgICAgLy8gaXMgZGlzYWJsZWQgb24gRGVidWcgbW9kZSBiZWNhdXNlIGl0IGNhbiBiZSB3
YXkgdG9vIHZlcmJvc2UuCisgICAgcHRocmVhZF90IHRocmVhZHNbNV07CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemVvZih0aHJlYWRzKSAvIHNpemVvZihwdGhyZWFkX3QpOyArK2kpCisg
ICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCAwLCBzdHJlc3NUZXN0LCAwKTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHRocmVhZHMpIC8gc2l6ZW9mKHB0aHJlYWRf
dCk7ICsraSkKKyAgICAgICAgcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZC5t
b2R1bGVzIGIvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcwppbmRleCA5OWMyNzhlNTcyYmIzOTFm
Y2I2YjQzZGQ1ODdkYjJiYzA1NDc1MGMwLi4yMTdkMmJjNGU1NmQ0YWI2Zjg1MTJlYWI1MDcyMTM3
YTExYmNkMTQzIDEwMDY0NAotLS0gYS9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rv
b2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKQEAgLTI0LDYgKzI0LDcgQEAKICAgICAgIDxkZXAgcGFj
a2FnZT0iZ3N0LXBsdWdpbnMtZ29vZCIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lu
cy1iYWQiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImxpYnNlY2NvbXAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxl
PgogCkBAIC01MSw2ICs1Miw4IEBACiAgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdo
dGVubWVudC5vcmciLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ3N0cmVh
bWVyIgogICAgICAgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIv
PgorICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5jb2RlLnNmLm5ldCIKKyAgICAg
IGhyZWY9ImdpdDovL2dpdC5jb2RlLnNmLm5ldC9wLyIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImNh
aXJvIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0zNDcs
NCArMzUwLDEwIEBACiAgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWVmOGJlNjY1MDk2YjNhNGU2
NDQyNGZiMzlkN2M1ZGE1N2ZhYWFmOTVlOWZlYTZjMWJiNDQyOTVkNGZiMzJkNSIvPgogICA8L2F1
dG90b29scz4gCiAKKyAgPGF1dG90b29scyBpZD0ibGlic2VjY29tcCIgYXV0b2dlbi1zaD0iY29u
ZmlndXJlIj4KKyAgICAgIDxicmFuY2ggbW9kdWxlPSJsaWJzZWNjb21wL2xpYnNlY2NvbXAiCisg
ICAgICAgICAgcmVwbz0iZ2l0LmNvZGUuc2YubmV0IgorICAgICAgICAgIHRhZz0iYmJkN2NhMDdh
N2M3NmQ1Y2Q4ODRkYmRkZWM1ODM4NWUxYjc0MzlkMiIvPgorICA8L2F1dG90b29scz4KKwogPC9t
b2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByaSBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCmluZGV4
IDNjNGYzZGExOTQ0ZjljZjc0NTlkNWUxMTkyZWFiN2YzNGQ3ZjFkM2IuLjZiMDk4MGFiM2M2ZWQy
Zjk3ODNmYWNkMDNjOWZmOGY3NmIwY2I2ZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJpCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJpCkBAIC05OSw2ICs5OSw3IEBAIEZFQVRVUkVfREVGQVVMVFMgPSBcCiAg
ICAgRU5BQkxFX1JFU09VUkNFX1RJTUlORz0wIFwKICAgICBFTkFCTEVfUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUU9MSBcCiAgICAgRU5BQkxFX1NDUklQVEVEX1NQRUVDSD0wIFwKKyAgICBFTkFCTEVf
U0VDQ09NUF9GSUxURVJTPTAgXAogICAgIEVOQUJMRV9TSEFET1dfRE9NPTAgXAogICAgIEVOQUJM
RV9TSEFSRURfV09SS0VSUz0xIFwKICAgICBFTkFCTEVfU01PT1RIX1NDUk9MTElORz0xIFwKZGlm
ZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwMDJmMzZhZDJhYzU4ZWFmYjZm
NzE4ZmYyNDM2NzlhZjczZTcxMmY1Li5jODNkYWRlYzY0YTFiMTBkOTExMDg2MjY0N2E1MjhlZjUw
YmZmMjVjIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTMtMDMtMjAgIFRoaWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRv
c0BpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gRHJvcCBXZWJQcm9jZXNzIGNhcGFiaWxpdGll
cyBvbiBMaW51eCB1c2luZyBzZWNjb21wIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGJpdHMgdG8gRUZML0NNYWtlIGJ1aWxk
c3lzdGVtIHRvIGZpbmQgdGhlIGxpYnNlY2NvbXAKKyAgICAgICAgbGlicmFyeS4KKworICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZTogQWRkZWQuCisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtl
OgorCiAyMDEzLTAzLTE3ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgog
CiAgICAgICAgIFtHVEtdIEV4cG9ydHMgbGV2ZWxkYiBzeW1ib2xzCg==
</data>
<flag name="review"
          id="215724"
          type_id="1"
          status="+"
          setter="mjs"
    />
    <flag name="commit-queue"
          id="219160"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>