<?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>32565</bug_id>
          
          <creation_ts>2009-12-15 10:05:50 -0800</creation_ts>
          <short_desc>[Qt] Initialization of a new API; QtScript.</short_desc>
          <delta_ts>2010-01-26 05:00:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31863</blocked>
    
    <blocked>32607</blocked>
    
    <blocked>32662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171906</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-15 10:05:50 -0800</bug_when>
    <thetext>I would like to initialize new Qtish API, for more general information please look at the bug 31863. 

New functionality needed: It should be possible to evaluate a java script function and convert returned value to QString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171911</commentid>
    <comment_count>1</comment_count>
      <attachid>44885</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-15 10:22:00 -0800</bug_when>
    <thetext>Created attachment 44885
Initialization of API v1

Initialization of API v1, patch introduce QJavaScriptEngine and QJavaScriptValue. With instance of these two classes it is possible to evaluate a java script code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171913</commentid>
    <comment_count>2</comment_count>
      <attachid>44886</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-15 10:23:17 -0800</bug_when>
    <thetext>Created attachment 44886
Autotests

This patch is a supplement to the first one (Initialization of API v1) and contains an autotest for the new functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171914</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 10:24:10 -0800</bug_when>
    <thetext>Attachment 44885 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/qt/api/qjavascriptengine.h:44:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qjavascriptvalue.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/api/qjavascriptvalue.cpp:23:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/qt/api/qjavascriptvalue.h:41:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qjavascriptengine.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172139</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-15 19:01:26 -0800</bug_when>
    <thetext>&gt; JavaScriptCore/qt/api/qjavascriptengine.h:44:  d_ptr is incorrectly named.
&gt; Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

This looks like a false positive.  Are there other identifiers we should whitelist besides d_ptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172236</commentid>
    <comment_count>5</comment_count>
      <attachid>44885</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-16 02:11:33 -0800</bug_when>
    <thetext>Comment on attachment 44885
Initialization of API v1

r- -&gt; #include &quot;config.h&quot; is missing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172241</commentid>
    <comment_count>6</comment_count>
      <attachid>44961</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-16 02:28:05 -0800</bug_when>
    <thetext>Created attachment 44961
Initialization of API v2

I have added #include &quot;config.h&quot; add the beginning of each implementation file.

Another problem that will be pointed by bot:
JavaScriptCore/qt/api/qjavascriptvalue.cpp:22:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
JavaScriptCore/qt/api/qjavascriptengine.cpp:22:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
I think it is wrong as the file is an implementation of two classes (public and private). I believe that the problem with sorting is caused by this misunderstood. When I call sort for a new headers:
$ ls |grep .h |sort
qjavascriptengine.h
qjavascriptengine_p.h
qjavascriptvalue.h
qjavascriptvalue_p.h
qtjavascriptglobal.h
which is what i tried to put into .cpp and .h files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172243</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 02:28:31 -0800</bug_when>
    <thetext>Attachment 44961 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/qt/api/qjavascriptengine.h:44:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qjavascriptvalue.cpp:22:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
JavaScriptCore/qt/api/qjavascriptvalue.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/qt/api/qjavascriptvalue.h:41:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qjavascriptengine.cpp:22:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172244</commentid>
    <comment_count>8</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-12-16 02:31:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; JavaScriptCore/qt/api/qjavascriptengine.h:44:  d_ptr is incorrectly named.
&gt; &gt; Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; This looks like a false positive.  Are there other identifiers we should
&gt; whitelist besides d_ptr?

I&apos;m not sure but it seems that the d_ptr and the q_ptr only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173159</commentid>
    <comment_count>9</comment_count>
      <attachid>44961</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-12-18 08:09:02 -0800</bug_when>
    <thetext>Comment on attachment 44961
Initialization of API v2

&gt; diff --git a/ChangeLog b/ChangeLog
&gt; index 98d5de4..02e4cef 100644
&gt; --- a/ChangeLog
&gt; +++ b/ChangeLog
&gt; @@ -1,3 +1,24 @@
&gt; +2009-12-15  Jedrzej Nowacki  &lt;jedrzej.nowacki@nokia.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Introduction to QJavaScript API.

Suggestion:

&quot;First steps of the QJavaScript API&quot;

&gt; +        Two new classes were created; QJavaScriptEngine and QJavaScriptValue.
&gt; +        The first should encapsulate a java script context and the second a script

&quot;The first should encapsulate a javascript context and the second a script


&gt; +        value.
&gt; +        
&gt; +        This is beginning of development, so by default the classes won&apos;t be compiled.

&quot;This API is still in development, so it isn&apos;t compiled by default.&quot;

&gt; +        To compile it qmake option should be provided. For example:
&gt; +        build-webkit --qt --qmakearg=&quot;CONFIG+=build-qjavascript&quot;
&gt; +        

&quot;To trigger compilation, pass --qmakearg=&quot;CONFIG+=build-qjavascript&quot; to build-webkit.&quot;

&gt; +        Changes are necessary to create a new Qtish C++ API on top of the JSC public
&gt; +        C API (bug 31863).

Leave that part out.


  
&gt;          Reviewed by Simon Fraser.
&gt; diff --git a/JavaScriptCore/qt/api/QtJavaScript.pro b/JavaScriptCore/qt/api/QtJavaScript.pro
&gt; new file mode 100755
&gt; index 0000000..a1b97ee
&gt; --- /dev/null
&gt; +++ b/JavaScriptCore/qt/api/QtJavaScript.pro
&gt; @@ -0,0 +1,35 @@
&gt; +TARGET     = QtJavaScript
&gt; +TEMPLATE = lib
&gt; +QT         = core

These should be aligned or not at all.


&gt; +
&gt; +/** Convertion from QString to JSStringRef
&gt; +TODO make it nicer... maybe casting operator?
&gt; +@internal
&gt; +*/

The public API will be using qdoc syntax, so we should use the same syntax within the same file for internal documentation,
marked with \internal.

&gt; +JSStringRef qStringToJSStringRef(const QString&amp; str)
&gt; +{
&gt; +    return JSStringCreateWithUTF8CString(str.toUtf8().constData());
&gt; +}

If this function is called only from within qjavascriptengine.cpp, then it should be static. Otherwise it should probably be a class function of QJavaScriptEnginePrivate.

&gt; +class QJavaScriptEngine {

QJavaScriptEngine should be a subclass of QObject.

&gt; +
&gt; +class QJavaScriptEnginePrivate
&gt; +        : public QSharedData {

This class would not be a subclass of QSharedData anymore, once QJavaScriptEngine subclasses QObject.

&gt; +    QJavaScriptEnginePrivate();
&gt; +    ~QJavaScriptEnginePrivate();
&gt; +    QJavaScriptValue evaluate(const QString&amp;);
&gt; +    void collectGarbage();
&gt; +    JSGlobalContextRef context() { return m_context; }

context() should be const.

&gt; +
&gt; +QString jSStringRefToQString(const JSStringRef&amp; str)
&gt; +{
&gt; +    size_t size = JSStringGetMaximumUTF8CStringSize(str);
&gt; +    char* buffer = new char[size];
&gt; +    JSStringGetUTF8CString(str, buffer, size);
&gt; +    QString result = QString::fromUtf8(buffer);
&gt; +    delete buffer;
&gt; +    return  result;
&gt; +}

It would be faster to use JSStringGetLength and JSStringGetCharactersPtr to do the conversion without an intermediate conversion to utf-8:

return QString(reinterpret_cast&lt;const QChar*&gt;(JSStringGetCharactersPtr(str)), JSStringGetLength(str));



&gt; +/** Returns true if this QScriptValue is valid; otherwise returns false. */
&gt; +bool QJavaScriptValue::isValid()

This function should be const.

&gt; +/** Returns the string value of this QScriptValue, as defined in ECMA-262 section 9.8, &quot;ToString&quot;.
&gt; +
&gt; +Note that if this QScriptValue is an object, calling this function has side effects on the script
&gt; +engine, since the engine will call the object&apos;s toString() function (and possibly valueOf()) in an
&gt; +attempt to convert the object to a primitive value (possibly resulting in an uncaught script
&gt; +exception).
&gt; +*/
&gt; +QString QJavaScriptValue::toQString()

This should be just called toString(), for consistency with the Qt API.


&gt; +    QJavaScriptValuePrivate(QJavaScriptEnginePtr engine, JSValueRef&amp; value)

I would pass the JSValueRef by value.


&gt; +++ b/JavaScriptCore/qt/api/qtjavascriptglobal.h
&gt; @@ -0,0 +1,25 @@
&gt; +#ifndef QTJAVASCRIPTGLOBAL_H
&gt; +#define QTJAVASCRIPTGLOBAL_H
&gt; +
&gt; +#include &lt;QtCore/qglobal.h&gt;

This file is missing a license header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182255</commentid>
    <comment_count>10</comment_count>
      <attachid>46913</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-19 08:38:01 -0800</bug_when>
    <thetext>Created attachment 46913
 Initialization of API v3

Completely rewritten code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182257</commentid>
    <comment_count>11</comment_count>
      <attachid>46915</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-19 08:39:03 -0800</bug_when>
    <thetext>Created attachment 46915
Autotests v3

Additional autotest suite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182258</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 08:40:45 -0800</bug_when>
    <thetext>Attachment 46913 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/qt/api/qscriptengine_p.h:54:  q_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qscriptengine.h:46:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/api/qscriptvalue.h:92:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182296</commentid>
    <comment_count>13</comment_count>
      <attachid>46915</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-19 10:10:51 -0800</bug_when>
    <thetext>Comment on attachment 46915
Autotests v3

&quot;-&quot; badly generated changelog can&apos;t be applied by bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182301</commentid>
    <comment_count>14</comment_count>
      <attachid>46913</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-19 10:17:11 -0800</bug_when>
    <thetext>Comment on attachment 46913
 Initialization of API v3

Kent have found some issues with the code:
- use of C cast
- toString() method should return &quot;true&quot;, &quot;false&quot;, &quot;null&quot;, &quot;undefined&quot; instead of &quot;True&quot;, &quot;False&quot;, &quot;null&quot;, &quot;undefined&quot;
- one spelling mistake

I will create another version of the patch... If there are other issues please feel free to comment :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182725</commentid>
    <comment_count>15</comment_count>
      <attachid>47004</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-20 03:45:37 -0800</bug_when>
    <thetext>Created attachment 47004
Autotests v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182726</commentid>
    <comment_count>16</comment_count>
      <attachid>47005</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-20 03:46:59 -0800</bug_when>
    <thetext>Created attachment 47005
Initialization of API v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182734</commentid>
    <comment_count>17</comment_count>
      <attachid>47005</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-20 04:02:32 -0800</bug_when>
    <thetext>Comment on attachment 47005
Initialization of API v4

This seems like a good start! Some minor comments

&gt; +        
&gt; +        This API is still in development, so it isn&apos;t compiled by default.
&gt; +        To trigger compilation, pass --qmakearg=&quot;CONFIG+=build-qjavascript&quot; to

why qjavascript, not qtscript or qtjavascript?

&gt; +void QScriptEngine::collectGarbage()
&gt; +{
&gt; +    d_ptr-&gt;collectGarbage();
&gt; +}

Maybe we should add a \sa to this method in the QWebSettings::clearMemoryCaches, so that people will know about it for mobile devices

&gt; +/*!
&gt; +  \since 4.5
&gt; +
&gt; +  Returns true if this QScriptValue is of the primitive type Boolean;
&gt; +  otherwise returns false.
&gt; +
&gt; +  \sa toBool()
&gt; +*/

Should these really have \since 4.5 ?

&gt; +
&gt; +    QScriptValue();
&gt; +    QScriptValue(bool value);
&gt; +    QScriptValue(int value);
&gt; +    QScriptValue(uint value);
&gt; +    QScriptValue(qreal value);
&gt; +    QScriptValue(const QString&amp; value);
&gt; +    QScriptValue(const char* value);
&gt; +    QScriptValue(SpecialValue val);
&gt; +    QScriptValue(const QScriptValue&amp; other);
&gt; +
&gt; +    QScriptValue(QScriptEngine* engine, bool val);
&gt; +    QScriptValue(QScriptEngine* engine, int val);
&gt; +    QScriptValue(QScriptEngine* engine, uint val);
&gt; +    QScriptValue(QScriptEngine* engine, qreal val);
&gt; +    QScriptValue(QScriptEngine* engine, const QString&amp; val);
&gt; +    QScriptValue(QScriptEngine* engine, const char* value);
&gt; +    QScriptValue(QScriptEngine* engine, SpecialValue val);
&gt; +


You don&apos;t need to add engine and value here, and mixing val and value doesn&apos;t seem right.


&gt; +qreal QScriptValuePrivate::toInteger() const
&gt; +{
&gt; +    // TODO it is not true implementation!
&gt; +    return toNumber();
&gt; +}

maybe add notImplemented() ???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182762</commentid>
    <comment_count>18</comment_count>
      <attachid>47015</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-20 06:12:49 -0800</bug_when>
    <thetext>Created attachment 47015
First steps of QtScript v5 (init+tests)

&gt; This seems like a good start! Some minor comments
Thanks for review :-),

&gt; why qjavascript, not qtscript or qtjavascript?
Changed to qtscript.

&gt; &gt; +void QScriptEngine::collectGarbage()
&gt; Maybe we should add a \sa to this method in the
&gt; QWebSettings::clearMemoryCaches, so that people will know about it for mobile
&gt; devices
There is no connection between QWebXXX and QScriptXXX. The QtScript is not accessible from the QtWebkit, but it is one of the long term goals. So I think it is a bit to early for documentation :-)

&gt; &gt; +/*!
&gt; &gt; +  \since 4.5
&gt; Should these really have \since 4.5 ?
Our goal is to create a new implementation of QtScript source and binary compatible with the current one. But yes it looks strange to put \since tag in new API :-)
The tag was removed. Documentation was updated.

&gt; You don&apos;t need to add engine and value here, and mixing val and value doesn&apos;t
&gt; seem right.
All parameters names were unified.

&gt; &gt; +qreal QScriptValuePrivate::toInteger() const
&gt; &gt; +{
&gt; &gt; +    // TODO it is not true implementation!
&gt; &gt; +    return toNumber();
&gt; &gt; +}
&gt; maybe add notImplemented() ???
notImplemented() is a private API, so I can&apos;t use it. Actually, toNumber() cover more then 99% of use cases (difference will be for +-infinity, +-0, NaN), and it is enough to test constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182878</commentid>
    <comment_count>19</comment_count>
      <attachid>47015</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-01-20 11:47:13 -0800</bug_when>
    <thetext>Comment on attachment 47015
First steps of QtScript v5 (init+tests)

As a JSC engineer I would r- this due to the QScriptValue constructors that do not take a context, there seems to be a lot of work to make this doable but it seems unnecessary - detaching the value from the engine implies that values are transferrable, which they are not.

Would be good to see assertions in the API to ensure at least debug code doesn&apos;t allow value made in one context to be passed another.

Also unsure how GC is expected to work, the JSValueRef for a value is held in a QScriptValuePrivate, but QScriptValuePrivate is heap allocated so won&apos;t be on the stack -&gt; GC won;t be aware of value, thus leading to collection at which point QScriptValuePrivate will be holding a dangling pointer.

How are exceptions meant to be caught/seen/handled?  All conversion functions may throw, yet there is no indication of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183172</commentid>
    <comment_count>20</comment_count>
      <attachid>47112</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-21 05:43:46 -0800</bug_when>
    <thetext>Created attachment 47112
First steps of QtScript v6

&gt; As a JSC engineer I would r- this due to the QScriptValue constructors that do
&gt; not take a context, there seems to be a lot of work to make this doable but it
&gt; seems unnecessary - detaching the value from the engine implies that values are
&gt; transferrable, which they are not.
A QScriptValue object shouldn&apos;t be used in different instances of QScriptEngine, so association between QScriptValue and QScriptEngine is unbreakable.
Code created with context-less constructors is just nicer. For example:
foo.call(thisObject, QScriptValueList()&lt;&lt; &quot;hello&quot; &lt;&lt; &quot;world&quot;); 
is cleaner then
foo.call(thisObject, QScriptValueList()&lt;&lt; QScriptValue(&amp;engine, &quot;hello&quot;) &lt;&lt; QScriptValue(&amp;engine, &quot;world&quot;)); 

&gt; Would be good to see assertions in the API to ensure at least debug code
&gt; doesn&apos;t allow value made in one context to be passed another.
I added a few warnings in public API and a few asserts in private part of API. In Qt we try to avoid asserts in public API.

&gt; Also unsure how GC is expected to work, the JSValueRef for a value is held in a
&gt; QScriptValuePrivate, but QScriptValuePrivate is heap allocated so won&apos;t be on
&gt; the stack -&gt; GC won;t be aware of value, thus leading to collection at which
&gt; point QScriptValuePrivate will be holding a dangling pointer.
Nice catch, fixed.

&gt; How are exceptions meant to be caught/seen/handled?  All conversion functions
&gt; may throw, yet there is no indication of this.
Right, this patch doesn&apos;t include exception handling. This feature is going to be implemented in future. The last uncaught exception should be visible from QScriptEngine::uncaughtException() (which is not implemented).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183175</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-21 05:48:40 -0800</bug_when>
    <thetext>Attachment 47112 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring JavaScriptCore/qt/api/qscriptconverter_p.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptvalue_p.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptvalue.cpp; This file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:21:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:40:  toString_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:42:  copyConstructor_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:44:  assignOperator_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:47:  constructors_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Ignoring JavaScriptCore/qt/api/qscriptvalue.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptengine_p.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptengine.cpp; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptengine.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qtscriptglobal.h; This file is exempt from the style guide.
Ignoring JavaScriptCore/qt/api/qscriptengine_p.cpp; This file is exempt from the style guide.
Total errors found: 7


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184257</commentid>
    <comment_count>22</comment_count>
      <attachid>47112</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-25 05:38:13 -0800</bug_when>
    <thetext>Comment on attachment 47112
First steps of QtScript v6


&gt; +++ b/JavaScriptCore/qt/api/QtScript.pro
&gt; @@ -0,0 +1,37 @@
&gt; +TARGET     = QtJavaScript

I think that should be QtScript.


&gt; +++ b/JavaScriptCore/qt/api/qscriptengine_p.h
&gt; @@ -0,0 +1,99 @@
&gt; +/*
&gt; +    Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
&gt; +
&gt; +        This library is free software; you can redistribute it and/or
&gt; +    modify it under the terms of the GNU Library General Public

^^^ Looks like a stray indentation here :)

&gt; +class QScriptEnginePrivate
&gt; +        : public QSharedData {

I think it&apos;s more common in WebKit to have the &quot;: public QSharedData {&quot; on the previous line.

&gt; +public:
&gt; +    static QScriptEnginePtr get(const QScriptEngine* q) { return q ? q-&gt;d_ptr : QScriptEnginePtr(); }

Can it happen that get() is called with a null q pointer?

&gt; +    static QScriptEngine* get(const QScriptEnginePrivate* d) { return d ? d-&gt;q_ptr : 0; }

Same question here. (Just wondering if the extra branch is necessary)

&gt; +void QScriptEnginePrivate::collectGarbage()
&gt; +{
&gt; +    JSGarbageCollect(context());

I think this function and the other helper functions below could use m_context directly.


&gt; +class QScriptValuePrivate
&gt; +    : public QSharedData {

Same style comment as earlier (new newline before &quot;: public&quot;)


&gt; +QScriptValuePrivate::QScriptValuePrivate(QString string)

I suggest to pass the QString by const reference here.


&gt; +bool QScriptValuePrivate::isBool()
&gt; +bool QScriptValuePrivate::isNumber()
&gt; +bool QScriptValuePrivate::isNull()
&gt; +bool QScriptValuePrivate::isString()
&gt; +bool QScriptValuePrivate::isUndefined()
&gt; +bool QScriptValuePrivate::isError()
&gt; +bool QScriptValuePrivate::isObject()
&gt; +bool QScriptValuePrivate::isFunction()
&gt; +QString QScriptValuePrivate::toString()

Shouldn&apos;t these functions be const?


&gt; +bool QScriptValuePrivate::assignEngine(QScriptEnginePrivate* engine)
&gt; +{
[...]
&gt; +    m_engine = const_cast&lt;QScriptEnginePrivate*&gt;(engine);

Why is the const_cast needed here?

&gt; +QScriptValuePrivate* QScriptValuePrivate::call(const QScriptValuePrivate* , const QScriptValueList &amp;args)

Looks like a stray space before the comma here :)



&gt; +void tst_QScriptValue::toString_data()
&gt; +{
&gt; +    QTest::addColumn&lt;QString&gt;(&quot;code&quot;);
&gt; +    QTest::addColumn&lt;QString&gt;(&quot;result&quot;);
&gt; +
&gt; +    QTest::newRow(&quot;string&quot;) &lt;&lt; &quot;&apos;hello&apos;&quot; &lt;&lt; &quot;hello&quot;;
&gt; +    QTest::newRow(&quot;string utf&quot;) &lt;&lt; &quot;&apos;ÄÅÄÅ¼ÅºÃ³ÅÅÄ&apos;&quot; &lt;&lt; &quot;ÄÅÄÅ¼ÅºÃ³ÅÅÄ&quot;;

If this is a UTF-8 encoded string, then you have to construct it using QString::fromUtf8.

The implicit QString(const char*) constructor works most of the time fine on Linux only because nowadays the locale encoding is usually utf-8.

r- until the above comments are addressed. The rest looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184542</commentid>
    <comment_count>23</comment_count>
      <attachid>47397</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-26 03:20:25 -0800</bug_when>
    <thetext>Created attachment 47397
First steps of QtScript v7

(In reply to comment #22)
&gt; (From update of attachment 47112 [details])
&gt; &gt; +++ b/JavaScriptCore/qt/api/QtScript.pro
&gt; &gt; @@ -0,0 +1,37 @@
&gt; &gt; +TARGET     = QtJavaScript
&gt; 
&gt; I think that should be QtScript.
Fixed.

&gt; &gt; +        This library is free software; you can redistribute it and/or
&gt; &gt; +    modify it under the terms of the GNU Library General Public
&gt; 
&gt; ^^^ Looks like a stray indentation here :)
Fixed.
 
&gt; &gt; +class QScriptEnginePrivate
&gt; &gt; +        : public QSharedData {
Massive fix :-)

&gt; &gt; +public:
&gt; &gt; +    static QScriptEnginePtr get(const QScriptEngine* q) { return q ? q-&gt;d_ptr : QScriptEnginePtr(); }
&gt; 
&gt; Can it happen that get() is called with a null q pointer?
&gt; 
&gt; &gt; +    static QScriptEngine* get(const QScriptEnginePrivate* d) { return d ? d-&gt;q_ptr : 0; }
&gt; 
&gt; Same question here. (Just wondering if the extra branch is necessary)
It was possible, but I changed QScriptValue::engine and all bounded constructors of the QScriptValuePrivate. So corrected.

 
&gt; &gt; +void QScriptEnginePrivate::collectGarbage()
&gt; &gt; +{
&gt; &gt; +    JSGarbageCollect(context());
&gt; 
&gt; I think this function and the other helper functions below could use m_context
&gt; directly.
Corrected.
 
&gt; &gt; +QScriptValuePrivate::QScriptValuePrivate(QString string)
&gt; 
&gt; I suggest to pass the QString by const reference here.
Done.

&gt; &gt; +bool QScriptValuePrivate::isBool()
&gt; &gt; +bool QScriptValuePrivate::isNumber()
&gt; &gt; +bool QScriptValuePrivate::isNull()
&gt; &gt; +bool QScriptValuePrivate::isString()
&gt; &gt; +bool QScriptValuePrivate::isUndefined()
&gt; &gt; +bool QScriptValuePrivate::isError()
&gt; &gt; +bool QScriptValuePrivate::isObject()
&gt; &gt; +bool QScriptValuePrivate::isFunction()
&gt; &gt; +QString QScriptValuePrivate::toString()
&gt; 
&gt; Shouldn&apos;t these functions be const?
Changed in toString(), others can change internal state of the QScriptValuePrivate.
 
&gt; &gt; +bool QScriptValuePrivate::assignEngine(QScriptEnginePrivate* engine)
&gt; &gt; +{
&gt; [...]
&gt; &gt; +    m_engine = const_cast&lt;QScriptEnginePrivate*&gt;(engine);
&gt; 
&gt; Why is the const_cast needed here?
Fixed.
 
&gt; &gt; +QScriptValuePrivate* QScriptValuePrivate::call(const QScriptValuePrivate* , const QScriptValueList &amp;args)
&gt; 
&gt; Looks like a stray space before the comma here :)
Fixed.

&gt; &gt; +void tst_QScriptValue::toString_data()
&gt; &gt; +{
&gt; &gt; +    QTest::addColumn&lt;QString&gt;(&quot;code&quot;);
&gt; &gt; +    QTest::addColumn&lt;QString&gt;(&quot;result&quot;);
&gt; &gt; +
&gt; &gt; +    QTest::newRow(&quot;string&quot;) &lt;&lt; &quot;&apos;hello&apos;&quot; &lt;&lt; &quot;hello&quot;;
&gt; &gt; +    QTest::newRow(&quot;string utf&quot;) &lt;&lt; &quot;&apos;Ä…Å›Ä‡Å¼ÅºÃ³Å‚Å„Ä™&apos;&quot; &lt;&lt; &quot;Ä…Å›Ä‡Å¼ÅºÃ³Å‚Å„Ä™&quot;;
&gt; 
&gt; If this is a UTF-8 encoded string, then you have to construct it using
&gt; QString::fromUtf8.
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184545</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-26 03:28:14 -0800</bug_when>
    <thetext>Attachment 47397 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring &quot;JavaScriptCore/qt/api/qscriptconverter_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptvalue_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptvalue.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/QtScript.pro&quot;: this file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:21:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:35:  toString_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:37:  copyConstructor_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:39:  assignOperator_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp:42:  constructors_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Ignoring &quot;JavaScriptCore/qt/api/qscriptvalue.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qtscriptglobal.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.cpp&quot;: this file is exempt from the style guide.
Total errors found: 7


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184552</commentid>
    <comment_count>25</comment_count>
      <attachid>47397</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-26 04:20:30 -0800</bug_when>
    <thetext>Comment on attachment 47397
First steps of QtScript v7

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184565</commentid>
    <comment_count>26</comment_count>
      <attachid>47397</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-26 05:00:22 -0800</bug_when>
    <thetext>Comment on attachment 47397
First steps of QtScript v7

Clearing flags on attachment: 47397

Committed r53850: &lt;http://trac.webkit.org/changeset/53850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184566</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-26 05:00:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44885</attachid>
            <date>2009-12-15 10:22:00 -0800</date>
            <delta_ts>2009-12-16 02:28:05 -0800</delta_ts>
            <desc>Initialization of API v1</desc>
            <filename>patchV1.diff</filename>
            <type>text/plain</type>
            <size>21740</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5OGQ1ZGU0Li4wMmU0Y2Vm
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMDktMTItMTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9k
dWN0aW9uIHRvIFFKYXZhU2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFKYXZhU2NyaXB0RW5naW5lIGFuZCBRSmF2YVNjcmlwdFZhbHVl
LgorICAgICAgICBUaGUgZmlyc3Qgc2hvdWxkIGVuY2Fwc3VsYXRlIGEgamF2YSBzY3JpcHQgY29u
dGV4dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaXMgYmVnaW5uaW5nIG9mIGRldmVsb3BtZW50LCBzbyBieSBkZWZhdWx0IHRo
ZSBjbGFzc2VzIHdvbid0IGJlIGNvbXBpbGVkLgorICAgICAgICBUbyBjb21waWxlIGl0IHFtYWtl
IG9wdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuIEZvciBleGFtcGxlOgorICAgICAgICBidWlsZC13
ZWJraXQgLS1xdCAtLXFtYWtlYXJnPSJDT05GSUcrPWJ1aWxkLXFqYXZhc2NyaXB0IgorICAgICAg
ICAKKyAgICAgICAgQ2hhbmdlcyBhcmUgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBRdGlzaCBD
KysgQVBJIG9uIHRvcCBvZiB0aGUgSlNDIHB1YmxpYworICAgICAgICBDIEFQSSAoYnVnIDMxODYz
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1
NjUKKworICAgICAgICAqIFdlYktpdC5wcm86CisKIDIwMDktMTItMTMgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdo
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDUzMzI4NzUuLjExMmQ5YWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MyBAQAorMjAwOS0xMi0xNSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnRyb2R1Y3Rpb24gdG8gUUphdmFTY3JpcHQgQVBJLgorICAgICAgICAKKyAgICAgICAgVHdvIG5l
dyBjbGFzc2VzIHdlcmUgY3JlYXRlZDsgUUphdmFTY3JpcHRFbmdpbmUgYW5kIFFKYXZhU2NyaXB0
VmFsdWUuCisgICAgICAgIFRoZSBmaXJzdCBzaG91bGQgZW5jYXBzdWxhdGUgYSBqYXZhIHNjcmlw
dCBjb250ZXh0IGFuZCB0aGUgc2Vjb25kIGEgc2NyaXB0CisgICAgICAgIHZhbHVlLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBiZWdpbm5pbmcgb2YgZGV2ZWxvcG1lbnQsIHNvIGJ5IGRlZmF1
bHQgdGhlIGNsYXNzZXMgd29uJ3QgYmUgY29tcGlsZWQuCisgICAgICAgIFRvIGNvbXBpbGUgaXQg
cW1ha2Ugb3B0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gRm9yIGV4YW1wbGU6CisgICAgICAgIGJ1
aWxkLXdlYmtpdCAtLXF0IC0tcW1ha2Vhcmc9IkNPTkZJRys9YnVpbGQtcWphdmFzY3JpcHQiCisg
ICAgICAgIAorICAgICAgICBDaGFuZ2VzIGFyZSBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IFF0
aXNoIEMrKyBBUEkgb24gdG9wIG9mIHRoZSBKU0MgcHVibGljCisgICAgICAgIEMgQVBJIChidWcg
MzE4NjMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjU2NQorCisgICAgICAgICogcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm86IEFkZGVkLgorICAg
ICAgICAqIHF0L2FwaS9xamF2YXNjcmlwdGVuZ2luZS5jcHA6IEFkZGVkLgorICAgICAgICAocVN0
cmluZ1RvSlNTdHJpbmdSZWYpOgorICAgICAgICAoUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQpOgorICAgICAgICAoUUphdmFTY3JpcHRFbmdpbmU6OlFKYXZhU2NyaXB0RW5naW5lKToKKyAg
ICAgICAgKFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTo6UUphdmFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5naW5lOjp+UUphdmFTY3JpcHRFbmdpbmUpOgorICAg
ICAgICAoUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjp+UUphdmFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5naW5lOjpldmFsdWF0ZSk6CisgICAgICAgIChRSmF2
YVNjcmlwdEVuZ2luZVByaXZhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5n
aW5lOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgIChRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6
OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKiBxdC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuaDog
QWRkZWQuCisgICAgICAgICogcXQvYXBpL3FqYXZhc2NyaXB0ZW5naW5lX3AuaDogQWRkZWQuCisg
ICAgICAgIChRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmNvbnRleHQpOgorICAgICAgICAqIHF0
L2FwaS9xamF2YXNjcmlwdHZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChqU1N0cmluZ1JlZlRv
UVN0cmluZyk6CisgICAgICAgIChRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KToKKyAgICAg
ICAgKFFKYXZhU2NyaXB0VmFsdWU6OlFKYXZhU2NyaXB0VmFsdWUpOgorICAgICAgICAoUUphdmFT
Y3JpcHRWYWx1ZTo6flFKYXZhU2NyaXB0VmFsdWUpOgorICAgICAgICAoUUphdmFTY3JpcHRWYWx1
ZTo6ZW5naW5lKToKKyAgICAgICAgKFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgor
ICAgICAgICAoUUphdmFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRSmF2YVNjcmlw
dFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRSmF2YVNjcmlwdFZhbHVlOjp0b1FT
dHJpbmcpOgorICAgICAgICAoUUphdmFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvUVN0cmluZyk6Cisg
ICAgICAgICogcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuaDogQWRkZWQuCisgICAgICAgICogcXQv
YXBpL3FqYXZhc2NyaXB0dmFsdWVfcC5oOiBBZGRlZC4KKyAgICAgICAgKFFKYXZhU2NyaXB0VmFs
dWVQcml2YXRlOjpRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZSk6CisgICAgICAgICogcXQvYXBpL3F0
amF2YXNjcmlwdGdsb2JhbC5oOiBBZGRlZC4KKwogMjAwOS0xMi0xNCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uYTFiOTdlZQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdEphdmFTY3JpcHQucHJvCkBAIC0wLDAgKzEsMzUgQEAKK1RBUkdFVCAgICAgPSBR
dEphdmFTY3JpcHQKK1RFTVBMQVRFID0gbGliCitRVCAgICAgICAgID0gY29yZQorCitJTkNMVURF
UEFUSCArPSAkJFBXRAorCitDT05GSUcgKz0gYnVpbGRpbmctbGlicworCitpbmNsdWRlKCQkUFdE
Ly4uLy4uLy4uL1dlYktpdC5wcmkpCitpbmNsdWRlKCQkUFdELy4uLy4uL0phdmFTY3JpcHRDb3Jl
LnByaSkKKworSEVBREVSUyArPSAkJFBXRC9xdGphdmFzY3JpcHRnbG9iYWwuaAorCisKK0lOQ0xV
REVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQorCitTT1VSQ0VTICs9ICAkJFBXRC9xamF2YXNjcmlw
dGVuZ2luZS5jcHAgXAorICAgICAgICAgICAgJCRQV0QvcWphdmFzY3JpcHR2YWx1ZS5jcHAKK0hF
QURFUlMgKz0gICQkUFdEL3FqYXZhc2NyaXB0ZW5naW5lLmggXAorICAgICAgICAgICAgJCRQV0Qv
cWphdmFzY3JpcHRlbmdpbmVfcC5oIFwKKyAgICAgICAgICAgICQkUFdEL3FqYXZhc2NyaXB0dmFs
dWUuaCBcCisgICAgICAgICAgICAkJFBXRC9xamF2YXNjcmlwdHZhbHVlX3AuaCAKKworIXN0YXRp
YzogREVGSU5FUyArPSBRVF9NQUtFRExMCisKK0NPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkg
eworICAgIGlzRW1wdHkoR0VORVJBVEVEX1NPVVJDRVNfRElSKTpHRU5FUkFURURfU09VUkNFU19E
SVIgPSBnZW5lcmF0ZWQkJHtRTUFLRV9ESVJfU0VQfWRlYnVnCisgICAgT0JKRUNUU19ESVIgPSBv
YmovZGVidWcKK30gZWxzZSB7ICMgUmVsZWFzZQorICAgIGlzRW1wdHkoR0VORVJBVEVEX1NPVVJD
RVNfRElSKTpHRU5FUkFURURfU09VUkNFU19ESVIgPSBnZW5lcmF0ZWQkJHtRTUFLRV9ESVJfU0VQ
fXJlbGVhc2UKKyAgICBPQkpFQ1RTX0RJUiA9IG9iai9yZWxlYXNlCit9CisKK0RFU1RESVIgPSAk
JE9VVFBVVF9ESVIvbGliCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2
YXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdp
bmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwNDJlZDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuY3Bw
CkBAIC0wLDAgKzEsMTMwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAicWphdmFz
Y3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxamF2YXNjcmlwdGVuZ2luZV9wLmgiCisKKyNpbmNs
dWRlICJxamF2YXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSAicWphdmFzY3JpcHR2YWx1ZV9wLmgi
CisKKworLyoqIENvbnZlcnRpb24gZnJvbSBRU3RyaW5nIHRvIEpTU3RyaW5nUmVmCitUT0RPIG1h
a2UgaXQgbmljZXIuLi4gbWF5YmUgY2FzdGluZyBvcGVyYXRvcj8KK0BpbnRlcm5hbAorKi8KK0pT
U3RyaW5nUmVmIHFTdHJpbmdUb0pTU3RyaW5nUmVmKGNvbnN0IFFTdHJpbmcmIHN0cikKK3sKKyAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyLnRvVXRmOCgpLmNvbnN0
RGF0YSgpKTsKK30KKworLyoqIFBlcmZvcm0gY29udmVyc2lvbiBmcm9tICJwcml2YXRlIiB0byAi
cHVibGljIiB2ZXJzaW9uLgorQGludGVybmFsCisqLworUUphdmFTY3JpcHRFbmdpbmUgUUphdmFT
Y3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoUUphdmFTY3JpcHRFbmdpbmVQdHIgZCkKK3sKKyAgICBy
ZXR1cm4gUUphdmFTY3JpcHRFbmdpbmUoZCk7Cit9CisKKy8qKiBQZXJmb3JtIGNvbnZlcnNpb24g
ZnJvbSAicHJpdmF0ZSIgdG8gInB1YmxpYyIgdmVyc2lvbi4KK0BpbnRlcm5hbAorKi8KK1FKYXZh
U2NyaXB0RW5naW5lIFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGNvbnN0IFFKYXZhU2Ny
aXB0RW5naW5lUHJpdmF0ZSogZCkKK3sKKyAgICByZXR1cm4gUUphdmFTY3JpcHRFbmdpbmUoUUph
dmFTY3JpcHRFbmdpbmVQdHIoY29uc3RfY2FzdDxRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGUqPihk
KSkpOworfQorCisvKiogUGVyZm9ybSBjb252ZXJzaW9uIGZyb20gInB1YmxpYyIgdG8gInByaXZh
dGUiIHZlcnNpb24uCitAaW50ZXJuYWwKKyovCitRSmF2YVNjcmlwdEVuZ2luZVB0ciBRSmF2YVNj
cmlwdEVuZ2luZVByaXZhdGU6OmdldChjb25zdCBRSmF2YVNjcmlwdEVuZ2luZSYgcSkKK3sKKyAg
ICByZXR1cm4gcS5kX3B0cjsKK30KKworLyoqIENvbnN0cnVjdHMgYSBRU2NyaXB0RW5naW5lIG9i
amVjdC4KKworVGhlIGdsb2JhbE9iamVjdCgpIGlzIGluaXRpYWxpemVkIHRvIGhhdmUgcHJvcGVy
dGllcyBhcyBkZXNjcmliZWQgaW4gRUNNQS0yNjIsIFNlY3Rpb24gMTUuMS4KKyovCitRSmF2YVNj
cmlwdEVuZ2luZTo6UUphdmFTY3JpcHRFbmdpbmUoKQorICAgIDogZF9wdHIobmV3IFFKYXZhU2Ny
aXB0RW5naW5lUHJpdmF0ZSgpKQoreworfQorCisvKiogQ29uc3RydWN0cyBhIFFTY3JpcHRFbmdp
bmUgb2JqZWN0IGZyb20gInByaXZhdGUiIG9iamVjdCB2ZXJzaW9uCitAaW50ZXJuYWwKKyovCitR
SmF2YVNjcmlwdEVuZ2luZTo6UUphdmFTY3JpcHRFbmdpbmUoUUphdmFTY3JpcHRFbmdpbmVQdHIg
ZCkKK3sKKyAgICB0aGlzLT5kX3B0ciA9IGQ7Cit9CisKKy8qKiBDb25zdHJ1Y3RzIGEgZGVmYXVs
dCBRU2NyaXB0RW5naW5lUHJpdmF0ZSBvYmplY3QsIGEgbmV3IGdsb2JhbCBjb250ZXh0IHdpbGwg
YmUgY3JlYXRlZCAqLworUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjpRSmF2YVNjcmlwdEVuZ2lu
ZVByaXZhdGUoKQorICAgIDogbV9jb250ZXh0KEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKSkKK3sK
K30KKworCitRSmF2YVNjcmlwdEVuZ2luZTo6flFKYXZhU2NyaXB0RW5naW5lKCkKK3sKK30KKwor
UUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjp+UUphdmFTY3JpcHRFbmdpbmVQcml2YXRlKCkKK3sK
KyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKG1fY29udGV4dCk7Cit9CisKKy8qKiBFdmFsdWF0
ZXMgcHJvZ3JhbSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLiAqLwor
UUphdmFTY3JpcHRWYWx1ZSBRSmF2YVNjcmlwdEVuZ2luZTo6ZXZhbHVhdGUoY29uc3QgUVN0cmlu
ZyYgcHJvZ3JhbSkKK3sKKyAgICByZXR1cm4gZF9wdHItPmV2YWx1YXRlKHByb2dyYW0pOworfQor
CisvKiogRXZhbHVhdGVzIHByb2dyYW0gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZh
bHVhdGlvbi4KK0BpbnRlcm5hbAorKi8KK1FKYXZhU2NyaXB0VmFsdWUgUUphdmFTY3JpcHRFbmdp
bmVQcml2YXRlOjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtKQoreworICAgIEpTU3Ry
aW5nUmVmIHNjcmlwdCA9IHFTdHJpbmdUb0pTU3RyaW5nUmVmKHByb2dyYW0pOworICAgIEpTVmFs
dWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQsIHNjcmlwdCwgMCwgMCwg
MCwgMCk7CisgICAgcmV0dXJuIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQobmV3IFFKYXZh
U2NyaXB0VmFsdWVQcml2YXRlKHRoaXMsIHJlc3VsdCkpOworfQorCisvKiogUnVucyB0aGUgZ2Fy
YmFnZSBjb2xsZWN0b3IuCisKK1RoZSBnYXJiYWdlIGNvbGxlY3RvciB3aWxsIGF0dGVtcHQgdG8g
cmVjbGFpbSBtZW1vcnkgYnkgbG9jYXRpbmcgYW5kIGRpc3Bvc2luZyBvZiBvYmplY3RzIHRoYXQg
YXJlCitubyBsb25nZXIgcmVhY2hhYmxlIGluIHRoZSBzY3JpcHQgZW52aXJvbm1lbnQuCisKK05v
cm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbjsgdGhlIGdhcmJhZ2Ug
Y29sbGVjdG9yIHdpbGwgYXV0b21hdGljYWxseSBiZSBpbnZva2VkCit3aGVuIHRoZSBRU2NyaXB0
RW5naW5lIGRlY2lkZXMgdGhhdCBpdCdzIHdpc2UgdG8gZG8gc28gKGkuZS4gd2hlbiBhIGNlcnRh
aW4gbnVtYmVyIG9mIG5ldyBvYmplY3RzCitoYXZlIGJlZW4gY3JlYXRlZCkuIEhvd2V2ZXIsIHlv
dSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCB0aGF0IGdhcmJh
Z2UKK2NvbGxlY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBhcyBzb29uIGFzIHBvc3NpYmxlLgor
Ki8KK3ZvaWQgUUphdmFTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICBkX3B0
ci0+Y29sbGVjdEdhcmJhZ2UoKTsKK30KKworLyoqIFJ1bnMgdGhlIGdhcmJhZ2UgY29sbGVjdG9y
LgorQGludGVybmFsCisqLwordm9pZCBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmNvbGxlY3RH
YXJiYWdlKCkKK3sKKyAgICBKU0dhcmJhZ2VDb2xsZWN0KG1fY29udGV4dCk7Cit9CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuaCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdGVuZ2luZS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLjg3NGJjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFFKQVZBU0NSSVBURU5HSU5FX0gKKyNkZWZpbmUgUUpBVkFTQ1JJUFRF
TkdJTkVfSAorCisjaW5jbHVkZSAicWphdmFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUgPFFFeHBs
aWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI+CisjaW5jbHVkZSA8UVN0cmluZz4KKworCitjbGFzcyBR
SmF2YVNjcmlwdEVuZ2luZVByaXZhdGU7Cit0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBv
aW50ZXI8UUphdmFTY3JpcHRFbmdpbmVQcml2YXRlPiBRSmF2YVNjcmlwdEVuZ2luZVB0cjsKKwor
Y2xhc3MgUUphdmFTY3JpcHRFbmdpbmUgeworcHVibGljOgorICAgIFFKYXZhU2NyaXB0RW5naW5l
KCk7CisgICAgflFKYXZhU2NyaXB0RW5naW5lKCk7CisKKyAgICBRSmF2YVNjcmlwdFZhbHVlIGV2
YWx1YXRlKGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTsKKworICAg
IFFKYXZhU2NyaXB0RW5naW5lKFFKYXZhU2NyaXB0RW5naW5lUHRyIGQpOworCisgICAgUUphdmFT
Y3JpcHRFbmdpbmVQdHIgZF9wdHI7CisKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmVfcC5oIGIvSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FqYXZhc2NyaXB0ZW5naW5lX3AuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwLi5hNjhhMDYwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FqYXZhc2NyaXB0ZW5naW5lX3AuaApAQCAtMCwwICsxLDUxIEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIFFKQVZBU0NSSVBURU5HSU5FX1BfSAorI2RlZmluZSBRSkFWQVNDUklQVEVO
R0lORV9QX0gKKworI2luY2x1ZGUgInFqYXZhc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPFFTaGFyZWREYXRhPgorI2luY2x1
ZGUgPFFTdHJpbmc+CisKKworY2xhc3MgUUphdmFTY3JpcHRWYWx1ZTsKK2NsYXNzIFFKYXZhU2Ny
aXB0RW5naW5lOworCitjbGFzcyBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGUKKyAgICAgICAgOiBw
dWJsaWMgUVNoYXJlZERhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBRSmF2YVNjcmlwdEVuZ2lu
ZSBnZXQoUUphdmFTY3JpcHRFbmdpbmVQdHIgZCk7CisgICAgc3RhdGljIFFKYXZhU2NyaXB0RW5n
aW5lIGdldChjb25zdCBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGUqIGQpOworICAgIHN0YXRpYyBR
SmF2YVNjcmlwdEVuZ2luZVB0ciBnZXQoY29uc3QgUUphdmFTY3JpcHRFbmdpbmUmIHEpOworCisg
ICAgUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlKCk7CisgICAgflFKYXZhU2NyaXB0RW5naW5lUHJp
dmF0ZSgpOworICAgIFFKYXZhU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgUVN0cmluZyYpOwor
ICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxDb250
ZXh0UmVmIG1fY29udGV4dDsKK307CisKKworI2VuZGlmIC8vIFFKQVZBU0NSSVBURU5HSU5FUFJJ
VkFURV9QX0gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdHZh
bHVlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdHZhbHVlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMzJmOTNmCi0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuY3BwCkBAIC0wLDAgKzEs
MTMyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAicWphdmFzY3JpcHR2YWx1ZS5o
IgorI2luY2x1ZGUgInFqYXZhc2NyaXB0dmFsdWVfcC5oIgorCisjaW5jbHVkZSAicWphdmFzY3Jp
cHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxamF2YXNjcmlwdGVuZ2luZV9wLmgiCisKKworLyoqIENv
bnZlcnRpb24gZnJvbSBKU1N0cmluZ1JlZiB0byBRU3RyaW5nCitUT0RPIG1ha2UgaXQgbmljZXIu
Li4gbWF5YmUgY2FzdGluZyBvcGVyYXRvcj8KK0BpbnRlcm5hbAorKi8KKworUVN0cmluZyBqU1N0
cmluZ1JlZlRvUVN0cmluZyhjb25zdCBKU1N0cmluZ1JlZiYgc3RyKQoreworICAgIHNpemVfdCBz
aXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cik7CisgICAgY2hhciog
YnVmZmVyID0gbmV3IGNoYXJbc2l6ZV07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHIs
IGJ1ZmZlciwgc2l6ZSk7CisgICAgUVN0cmluZyByZXN1bHQgPSBRU3RyaW5nOjpmcm9tVXRmOChi
dWZmZXIpOworICAgIGRlbGV0ZSBidWZmZXI7CisgICAgcmV0dXJuICByZXN1bHQ7Cit9CisKKy8q
KiBQZXJmb3JtIGNvbnZlcnNpb24gZnJvbSAicHJpdmF0ZSIgdG8gInB1YmxpYyIgdmVyc2lvbi4K
K0BpbnRlcm5hbAorKi8KK1FKYXZhU2NyaXB0VmFsdWUgUUphdmFTY3JpcHRWYWx1ZVByaXZhdGU6
OmdldChRSmF2YVNjcmlwdFZhbHVlUHRyIGQpCit7CisgICAgcmV0dXJuIFFKYXZhU2NyaXB0VmFs
dWUoZCk7Cit9CisKKy8qKiBQZXJmb3JtIGNvbnZlcnNpb24gZnJvbSAicHJpdmF0ZSIgdG8gInB1
YmxpYyIgdmVyc2lvbi4KK0BpbnRlcm5hbAorKi8KK1FKYXZhU2NyaXB0VmFsdWUgUUphdmFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldChjb25zdCBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZSogZCkKK3sK
KyAgICByZXR1cm4gUUphdmFTY3JpcHRWYWx1ZShRSmF2YVNjcmlwdFZhbHVlUHRyKGNvbnN0X2Nh
c3Q8UUphdmFTY3JpcHRWYWx1ZVByaXZhdGUqPihkKSkpOworfQorCisvKiogUGVyZm9ybSBjb252
ZXJzaW9uIGZyb20gInB1YmxpYyIgdG8gInByaXZhdGUiIHZlcnNpb24uCitAaW50ZXJuYWwKKyov
CitRSmF2YVNjcmlwdFZhbHVlUHRyIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoY29uc3Qg
UUphdmFTY3JpcHRWYWx1ZSYgcSkKK3sKKyAgICByZXR1cm4gcS5kX3B0cjsKK30KKworLyoqIENv
bnN0cnVjdCBkZWZhdWx0IGludmFsaWQgdmFsdWUgKi8KK1FKYXZhU2NyaXB0VmFsdWU6OlFKYXZh
U2NyaXB0VmFsdWUoKQorICAgIDogZF9wdHIobmV3IFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlKCkp
Cit7fQorCisvKiogQ29uc3RydWN0IGEgdmFsdWUgZnJvbSAicHJpdmF0ZSIgdmVyc2lvbiBvZiB0
aGUgY2xhc3MuCitAaW50ZXJuYWwKKyovCitRSmF2YVNjcmlwdFZhbHVlOjpRSmF2YVNjcmlwdFZh
bHVlKFFKYXZhU2NyaXB0VmFsdWVQdHIgZCkKKyAgICA6IGRfcHRyKGQpCit7fQorCitRSmF2YVNj
cmlwdFZhbHVlOjp+UUphdmFTY3JpcHRWYWx1ZSgpCit7fQorCisvKiogUmV0dXJuIFFKYXZhU2Ny
aXB0RW5naW5lIGFzc29zaWF0ZWQgd2l0aCB0aGUgdmFsdWUuIElmIHRoaXMgUVNjcmlwdFZhbHVl
IGlzIGludmFsaWQgb3IgdGhlIHZhbHVlCitpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGlj
dWxhciBlbmdpbmUsIGFuIGludmFsaWQgZW5naW5lIHdpbGwgYmUgcmV0dXJuZWQuICovCitRSmF2
YVNjcmlwdEVuZ2luZSBRSmF2YVNjcmlwdFZhbHVlOjplbmdpbmUoKQoreworICAgIHJldHVybiBk
X3B0ci0+ZW5naW5lKCk7Cit9CisKKy8qKiBSZXR1cm4gUUphdmFTY3JpcHRFbmdpbmUgYXNzb3Np
YXRlZCB3aXRoIHRoZSB2YWx1ZS4gSWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgaW52YWxpZCBvciB0
aGUgdmFsdWUKK2lzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGVuZ2luZSwgYW4g
aW52YWxpZCBlbmdpbmUgd2lsbCBiZSByZXR1cm5lZC4KK0BpbnRlcm5hbAorKi8KK1FKYXZhU2Ny
aXB0RW5naW5lIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUoKQoreworICAgIHJldHVy
biBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChtX2VuZ2luZSk7Cit9CisKKy8qKiBSZXR1
cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgdmFsaWQ7IG90aGVyd2lzZSByZXR1cm5z
IGZhbHNlLiAqLworYm9vbCBRSmF2YVNjcmlwdFZhbHVlOjppc1ZhbGlkKCkKK3sKKyAgICByZXR1
cm4gZF9wdHItPmlzVmFsaWQoKTsKK30KKworLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3Jp
cHRWYWx1ZSBpcyB2YWxpZDsgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCitAaW50ZXJuYWwKKyov
Citib29sIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjppc1ZhbGlkKCkKK3sKKyAgICByZXR1cm4g
bV92YWxpZDsKK30KKworLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIFFTY3Jp
cHRWYWx1ZSwgYXMgZGVmaW5lZCBpbiBFQ01BLTI2MiBzZWN0aW9uIDkuOCwgIlRvU3RyaW5nIi4K
KworTm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlwdAorZW5naW5lLCBzaW5j
ZSB0aGUgZW5naW5lIHdpbGwgY2FsbCB0aGUgb2JqZWN0J3MgdG9TdHJpbmcoKSBmdW5jdGlvbiAo
YW5kIHBvc3NpYmx5IHZhbHVlT2YoKSkgaW4gYW4KK2F0dGVtcHQgdG8gY29udmVydCB0aGUgb2Jq
ZWN0IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseSByZXN1bHRpbmcgaW4gYW4gdW5jYXVn
aHQgc2NyaXB0CitleGNlcHRpb24pLgorKi8KK1FTdHJpbmcgUUphdmFTY3JpcHRWYWx1ZTo6dG9R
U3RyaW5nKCkKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvUVN0cmluZygpOworfQorCisvKiogUmV0
dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoaXMgUVNjcmlwdFZhbHVlLCBhcyBkZWZpbmVkIGlu
IEVDTUEtMjYyIHNlY3Rpb24gOS44LCAiVG9TdHJpbmciLgorQGludGVybmFsCisqLworUVN0cmlu
ZyBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9RU3RyaW5nKCkKK3sKKyAgICBpZiAoaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4galNTdHJpbmdSZWZUb1FTdHJpbmcoSlNWYWx1ZVRvU3RyaW5n
Q29weShtX2VuZ2luZS0+Y29udGV4dCgpLCBtX3ZhbHVlLCAwKSk7CisgICAgcmV0dXJuICIiOwor
fQorCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHR2YWx1ZS5o
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2Q0ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuaApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIFFKQVZBU0NSSVBUVkFMVUVfSAorI2RlZmluZSBRSkFW
QVNDUklQVFZBTFVFX0gKKworI2luY2x1ZGUgPFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI+
CisKK2NsYXNzIFFKYXZhU2NyaXB0RW5naW5lOworY2xhc3MgUUphdmFTY3JpcHRWYWx1ZVByaXZh
dGU7Cit0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8UUphdmFTY3JpcHRWYWx1
ZVByaXZhdGU+IFFKYXZhU2NyaXB0VmFsdWVQdHI7CisKK2NsYXNzIFFKYXZhU2NyaXB0VmFsdWUg
eworcHVibGljOgorICAgIFFKYXZhU2NyaXB0VmFsdWUoKTsKKyAgICB+UUphdmFTY3JpcHRWYWx1
ZSgpOworCisgICAgUUphdmFTY3JpcHRFbmdpbmUgZW5naW5lKCk7CisgICAgYm9vbCBpc1ZhbGlk
KCk7CisKKyAgICBRU3RyaW5nIHRvUVN0cmluZygpOworcHJpdmF0ZToKKyAgICBRSmF2YVNjcmlw
dFZhbHVlKFFKYXZhU2NyaXB0VmFsdWVQdHIgZCk7CisKKyAgICBRSmF2YVNjcmlwdFZhbHVlUHRy
IGRfcHRyOworCisgICAgZnJpZW5kIGNsYXNzIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOworfTsK
KworI2VuZGlmIC8vIFFKQVZBU0NSSVBUVkFMVUVfSApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWVfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fq
YXZhc2NyaXB0dmFsdWVfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4
ZTYxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3Jp
cHR2YWx1ZV9wLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDgg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBRSkFWQVNDUklQVFZBTFVFX1BfSAorI2RlZmluZSBRSkFWQVNDUklQVFZBTFVFX1BfSAorCisj
aW5jbHVkZSAicWphdmFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFqYXZhc2NyaXB0dmFs
dWUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8
UVNoYXJlZERhdGE+CisKKworY2xhc3MgUUphdmFTY3JpcHRFbmdpbmU7CitjbGFzcyBRSmF2YVNj
cmlwdFZhbHVlOworCisKK2NsYXNzIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlCisgICAgICAgIDog
cHVibGljIFFTaGFyZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUUphdmFTY3JpcHRWYWx1
ZSBnZXQoUUphdmFTY3JpcHRWYWx1ZVB0ciBkKTsKKyAgICBzdGF0aWMgUUphdmFTY3JpcHRWYWx1
ZSBnZXQoY29uc3QgUUphdmFTY3JpcHRWYWx1ZVByaXZhdGUqIGQpOworICAgIHN0YXRpYyBRSmF2
YVNjcmlwdFZhbHVlUHRyIGdldChjb25zdCBRSmF2YVNjcmlwdFZhbHVlJiBxKTsKKworICAgIFFK
YXZhU2NyaXB0VmFsdWVQcml2YXRlKCkKKyAgICAgICAgOiBtX2VuZ2luZSgwKQorICAgICAgICAs
IG1fdmFsaWQoZmFsc2UpCisgICAge30KKworICAgIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlKFFK
YXZhU2NyaXB0RW5naW5lUHRyIGVuZ2luZSwgSlNWYWx1ZVJlZiYgdmFsdWUpCisgICAgICAgIDog
bV9lbmdpbmUoZW5naW5lKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV92
YWxpZCh0cnVlKQorICAgIHt9CisKKyAgICBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBR
SmF2YVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiYgdmFsdWUpCisgICAg
ICAgIDogbV9lbmdpbmUoUUphdmFTY3JpcHRFbmdpbmVQdHIoY29uc3RfY2FzdDxRSmF2YVNjcmlw
dEVuZ2luZVByaXZhdGUqPihlbmdpbmUpKSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1fdmFsaWQodHJ1ZSkKKyAgICB7fQorCisgICAgUUphdmFTY3JpcHRFbmdpbmUgZW5n
aW5lKCk7CisgICAgYm9vbCBpc1ZhbGlkKCk7CisKKyAgICBRU3RyaW5nIHRvUVN0cmluZygpOwor
cHJpdmF0ZToKKyAgICBRSmF2YVNjcmlwdEVuZ2luZVB0ciBtX2VuZ2luZTsKKworICAgIEpTVmFs
dWVSZWYgbV92YWx1ZTsKKyAgICBib29sIG1fdmFsaWQ7Cit9OworCisKKworI2VuZGlmIC8vIFFK
QVZBU0NSSVBUVkFMVUVfUF9ICmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRq
YXZhc2NyaXB0Z2xvYmFsLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRqYXZhc2NyaXB0Z2xv
YmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdkMGYxZQotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xdGphdmFzY3JpcHRnbG9iYWwuaApA
QCAtMCwwICsxLDI1IEBACisjaWZuZGVmIFFUSkFWQVNDUklQVEdMT0JBTF9ICisjZGVmaW5lIFFU
SkFWQVNDUklQVEdMT0JBTF9ICisKKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorCisjaWYg
ZGVmaW5lZChRX09TX1dJTikgfHwgZGVmaW5lZChRX09TX1NZTUJJQU4pCisjICBpZiBkZWZpbmVk
KFFUX05PRExMKQorIyAgZWxpZiBkZWZpbmVkKFFUX01BS0VETEwpICAgICAgICAvKiBjcmVhdGUg
YSBRdCBETEwgbGlicmFyeSAqLworIyAgICBpZiBkZWZpbmVkKFFUX0JVSUxEX0pBVkFTQ1JJUFRf
TElCKQorIyAgICAgIGRlZmluZSBRX0pBVkFTQ1JJUFRfRVhQT1JUIFFfREVDTF9FWFBPUlQKKyMg
ICAgZWxzZQorIyAgICAgIGRlZmluZSBRX0pBVkFTQ1JJUFRfRVhQT1JUIFFfREVDTF9JTVBPUlQK
KyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChRVF9ETEwpIC8qIHVzZSBhIFF0IERMTCBsaWJy
YXJ5ICovCisjICAgIGRlZmluZSBRX0pBVkFTQ1JJUFRfRVhQT1JUCisjICBlbmRpZgorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKFFUX1NIQVJFRCkKKyMgIGRlZmluZSBRX0pBVkFTQ1JJUFRfRVhQT1JU
IFFfREVDTF9FWFBPUlQKKyNlbHNlCisjICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVAorI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXgg
ODY2YmI5Yi4uOWJlYzYyNCAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJv
CkBAIC0xNCw0ICsxNCw5IEBAIFNVQkRJUlMgKz0gXAogICAgIFNVQkRJUlMgKz0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdE5ldHNjYXBlUGx1Z2luL1Rlc3ROZXRzY2FwZVBsdWdp
bi5wcm8KIH0KIAorYnVpbGQtcWphdmFzY3JpcHQgeworICAgIFNVQkRJUlMgKz0gXAorICAgICAg
ICBKYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRKYXZhU2NyaXB0LnBybworfQorCiBpbmNsdWRlKFdl
YktpdC9xdC9kb2NzL2RvY3MucHJpKQo=
</data>
<flag name="review"
          id="26807"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="26808"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44886</attachid>
            <date>2009-12-15 10:23:17 -0800</date>
            <delta_ts>2010-01-19 08:38:01 -0800</delta_ts>
            <desc>Autotests</desc>
            <filename>testsV1.diff</filename>
            <type>text/plain</type>
            <size>8874</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwMmU0Y2VmLi5lOTU0ZGJj
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjIgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBJbml0aWFs
aXplIGFuIGF1dG90ZXN0IGZvbGRlciBmb3IgdGhlIFF0SmF2YVNjcmlwdC4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudCBhIGZldyBiYXNpYyB0ZXN0cyBmb3IgdGhlIFFKYXZhU2NyaXB0RW5n
aW5lIGFuZCBmb3IKKyAgICAgICAgdGhlIFFKYXZhU2NyaXB0VmFsdWUuCisgICAgICAgIAorICAg
ICAgICBDaGFuZ2VzIGFyZSBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IFF0aXNoIEMrKyBBUEkg
b3ZlciBKU0MgcHVibGljIEMgQVBJLAorICAgICAgICBzaW1pbGFyIHRvIFF0U2NyaXB0IChidWcg
MzE4NjMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjU2NQorCisgICAgICAgICogV2ViS2l0LnBybzoKKworMjAwOS0xMi0xNSAgSmVkcnplaiBO
b3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gUUphdmFTY3JpcHQg
QVBJLgogICAgICAgICAKICAgICAgICAgVHdvIG5ldyBjbGFzc2VzIHdlcmUgY3JlYXRlZDsgUUph
dmFTY3JpcHRFbmdpbmUgYW5kIFFKYXZhU2NyaXB0VmFsdWUuCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMTEyZDlh
Yi4uYzEyNjNhMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgSW5pdGlhbGl6ZSBhbiBhdXRvdGVzdCBm
b2xkZXIgZm9yIHRoZSBRdEphdmFTY3JpcHQuCisgICAgICAgIAorICAgICAgICBJbXBsZW1lbnQg
YSBmZXcgYmFzaWMgdGVzdHMgZm9yIHRoZSBRSmF2YVNjcmlwdEVuZ2luZSBhbmQgZm9yCisgICAg
ICAgIHRoZSBRSmF2YVNjcmlwdFZhbHVlLgorICAgICAgICAKKyAgICAgICAgQ2hhbmdlcyBhcmUg
bmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBRdGlzaCBDKysgQVBJIG92ZXIgSlNDIHB1YmxpYyBD
IEFQSSwKKyAgICAgICAgc2ltaWxhciB0byBRdFNjcmlwdCAoYnVnIDMxODYzKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKworICAgICAg
ICAqIHF0L3Rlc3RzL3FqYXZhc2NyaXB0ZW5naW5lL3FqYXZhc2NyaXB0ZW5naW5lLnBybzogQWRk
ZWQuCisgICAgICAgICogcXQvdGVzdHMvcWphdmFzY3JpcHRlbmdpbmUvcWphdmFzY3JpcHRlbmdp
bmUucHJvLnVzZXI6IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FqYXZhc2NyaXB0ZW5naW5l
L3RzdF9xamF2YXNjcmlwdGVuZ2luZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FKYXZhU2Ny
aXB0RW5naW5lOjp0c3RfUUphdmFTY3JpcHRFbmdpbmUpOgorICAgICAgICAodHN0X1FKYXZhU2Ny
aXB0RW5naW5lOjp+dHN0X1FKYXZhU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RSmF2YVNj
cmlwdEVuZ2luZTo6aW5pdCk6CisgICAgICAgICh0c3RfUUphdmFTY3JpcHRFbmdpbmU6OmNsZWFu
dXApOgorICAgICAgICAodHN0X1FKYXZhU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSk6Cisg
ICAgICAgICogcXQvdGVzdHMvcWphdmFzY3JpcHR2YWx1ZS9xamF2YXNjcmlwdHZhbHVlLnBybzog
QWRkZWQuCisgICAgICAgICogcXQvdGVzdHMvcWphdmFzY3JpcHR2YWx1ZS90c3RfcWphdmFzY3Jp
cHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FKYXZhU2NyaXB0VmFsdWU6OnRzdF9R
SmF2YVNjcmlwdFZhbHVlKToKKyAgICAgICAgKHRzdF9RSmF2YVNjcmlwdFZhbHVlOjp+dHN0X1FK
YXZhU2NyaXB0VmFsdWUpOgorICAgICAgICAodHN0X1FKYXZhU2NyaXB0VmFsdWU6OmluaXQpOgor
ICAgICAgICAodHN0X1FKYXZhU2NyaXB0VmFsdWU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FK
YXZhU2NyaXB0VmFsdWU6OnRvUVN0cmluZ19kYXRhKToKKyAgICAgICAgKHRzdF9RSmF2YVNjcmlw
dFZhbHVlOjp0b1FTdHJpbmcpOgorICAgICAgICAqIHF0L3Rlc3RzL3Rlc3RzLnByaTogQWRkZWQu
CisgICAgICAgICogcXQvdGVzdHMvdGVzdHMucHJvOiBBZGRlZC4KKworMjAwOS0xMi0xNSAgSmVk
cnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gUUphdmFT
Y3JpcHQgQVBJLgogICAgICAgICAKICAgICAgICAgVHdvIG5ldyBjbGFzc2VzIHdlcmUgY3JlYXRl
ZDsgUUphdmFTY3JpcHRFbmdpbmUgYW5kIFFKYXZhU2NyaXB0VmFsdWUuCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xamF2YXNjcmlwdGVuZ2luZS9xamF2YXNjcmlwdGVuZ2lu
ZS5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xamF2YXNjcmlwdGVuZ2luZS9xamF2YXNj
cmlwdGVuZ2luZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2YzZjkx
NQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FqYXZhc2NyaXB0
ZW5naW5lL3FqYXZhc2NyaXB0ZW5naW5lLnBybwpAQCAtMCwwICsxLDcgQEAKK1RFTVBMQVRFID0g
YXBwCitUQVJHRVQgPSB0c3RfcWphdmFzY3JpcHRlbmdpbmUKK1FUICs9IHRlc3RsaWIKK2luY2x1
ZGUoLi4vdGVzdHMucHJpKQorCitTT1VSQ0VTICs9IHRzdF9xamF2YXNjcmlwdGVuZ2luZS5jcHAK
KwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcWphdmFzY3JpcHRlbmdpbmUv
dHN0X3FqYXZhc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FqYXZh
c2NyaXB0ZW5naW5lL3RzdF9xamF2YXNjcmlwdGVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uYzRkNjdmMwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3FqYXZhc2NyaXB0ZW5naW5lL3RzdF9xamF2YXNjcmlwdGVuZ2luZS5jcHAK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFqYXZhc2Ny
aXB0ZW5naW5lLmgiCisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKworCitjbGFzcyB0c3RfUUph
dmFTY3JpcHRFbmdpbmUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorCitw
dWJsaWM6CisgICAgdHN0X1FKYXZhU2NyaXB0RW5naW5lKCkge30KKyAgICB2aXJ0dWFsIH50c3Rf
UUphdmFTY3JpcHRFbmdpbmUoKSB7fQorCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBpbml0KCkg
e30KKyAgICB2b2lkIGNsZWFudXAoKSB7fQorCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKK307CisKKy8qIHRlc3QgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhdCBsZWFz
dCB0cnkgdG8gbm90IGNyYXNoICovCit2b2lkIHRzdF9RSmF2YVNjcmlwdEVuZ2luZTo6Y29sbGVj
dEdhcmJhZ2UoKQoreworICAgIFFKYXZhU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBlbmdpbmUu
Y29sbGVjdEdhcmJhZ2UoKTsKK30KKworUVRFU1RfTUFJTih0c3RfUUphdmFTY3JpcHRFbmdpbmUp
CisjaW5jbHVkZSAidHN0X3FqYXZhc2NyaXB0ZW5naW5lLm1vYyIKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3F0L3Rlc3RzL3FqYXZhc2NyaXB0dmFsdWUvcWphdmFzY3JpcHR2YWx1ZS5wcm8g
Yi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xamF2YXNjcmlwdHZhbHVlL3FqYXZhc2NyaXB0dmFs
dWUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MmY5ZGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xamF2YXNjcmlwdHZhbHVlL3Fq
YXZhc2NyaXB0dmFsdWUucHJvCkBAIC0wLDAgKzEsNyBAQAorVEVNUExBVEUgPSBhcHAKK1RBUkdF
VCA9IHRzdF9xamF2YXNjcmlwdHZhbHVlCitRVCArPSB0ZXN0bGliCitpbmNsdWRlKC4uL3Rlc3Rz
LnByaSkKKworU09VUkNFUyArPSB0c3RfcWphdmFzY3JpcHR2YWx1ZS5jcHAKKwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcWphdmFzY3JpcHR2YWx1ZS90c3RfcWphdmFzY3Jp
cHR2YWx1ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xamF2YXNjcmlwdHZhbHVlL3Rz
dF9xamF2YXNjcmlwdHZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
Li5hODI1YTZjCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcWph
dmFzY3JpcHR2YWx1ZS90c3RfcWphdmFzY3JpcHR2YWx1ZS5jcHAKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFqYXZhc2NyaXB0ZW5naW5lLmgiCisjaW5j
bHVkZSAicWphdmFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKK2Ns
YXNzIHRzdF9RSmF2YVNjcmlwdFZhbHVlCisgICAgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKKworcHVibGljOgorICAgIHRzdF9RSmF2YVNjcmlwdFZhbHVlKCkge30KKyAgICB2aXJ0
dWFsIH50c3RfUUphdmFTY3JpcHRWYWx1ZSgpIHt9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lk
IGluaXQoKSB7fTsKKyAgICB2b2lkIGNsZWFudXAoKSB7fTsKKworcHJpdmF0ZSBzbG90czoKKyAg
ICB2b2lkIHRvUVN0cmluZ19kYXRhKCk7CisgICAgdm9pZCB0b1FTdHJpbmcoKTsKKworcHJpdmF0
ZToKKworfTsKKwordm9pZCB0c3RfUUphdmFTY3JpcHRWYWx1ZTo6dG9RU3RyaW5nX2RhdGEoKQor
eworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oImNvZGUiKTsKKyAgICBRVGVzdDo6YWRk
Q29sdW1uPFFTdHJpbmc+KCJyZXN1bHQiKTsKKworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIp
IDw8ICInaGVsbG8nIiA8PCAiaGVsbG8iOworICAgIFFUZXN0OjpuZXdSb3coImV4cHJlc3Npb24i
KSA8PCAiMSArIDQiIDw8ICI1IjsKKyAgICBRVGVzdDo6bmV3Um93KCJudWxsIikgPDwgIm51bGwi
IDw8ICJudWxsIjsKKyAgICBRVGVzdDo6bmV3Um93KCJib29sZWFuIikgPDwgImZhbHNlIiA8PCAi
ZmFsc2UiOworfQorCisvKiBUZXN0IGNvbnZlcnNpb24gdG8gc3RyaW5nIGZyb20gZGlmZmVyZW50
IEpTQyB0eXBlcyAqLwordm9pZCB0c3RfUUphdmFTY3JpcHRWYWx1ZTo6dG9RU3RyaW5nKCkKK3sK
KyAgICBRRkVUQ0goUVN0cmluZywgY29kZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHJlc3VsdCk7
CisKKyAgICBRSmF2YVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUUNPTVBBUkUoZW5naW5lLmV2
YWx1YXRlKGNvZGUpLnRvUVN0cmluZygpLCByZXN1bHQpOworfQorCitRVEVTVF9NQUlOKHRzdF9R
SmF2YVNjcmlwdFZhbHVlKQorI2luY2x1ZGUgInRzdF9xamF2YXNjcmlwdHZhbHVlLm1vYyIKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnByaSBiL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3Rlc3RzLnByaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZTRiOGIxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVz
dHMucHJpCkBAIC0wLDAgKzEsMjggQEAKK2lzRW1wdHkoT1VUUFVUX0RJUikgeworICAgIENPTkZJ
RyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkgeworICAgICAgICBPVVRQVVRfRElSPSQkUFdEL1dlYktp
dEJ1aWxkL0RlYnVnCisgICAgfSBlbHNlIHsgIyBSZWxlYXNlCisgICAgICAgIE9VVFBVVF9ESVI9
JCRQV0QvV2ViS2l0QnVpbGQvUmVsZWFzZQorICAgIH0KK30KKworCitRTUFLRV9SUEFUSERJUiA9
ICQkT1VUUFVUX0RJUi9saWIgJCRRTUFLRV9SUEFUSERJUgorUU1BS0VfTElCRElSID0gJCRPVVRQ
VVRfRElSL2xpYiAkJFFNQUtFX0xJQkRJUgorbWFjOiFzdGF0aWM6Y29udGFpbnMoUVRfQ09ORklH
LCBxdF9mcmFtZXdvcmspOiFDT05GSUcod2Via2l0X25vX2ZyYW1ld29yaykgeworICAgIExJQlMg
Kz0gLWZyYW1ld29yayBRdEphdmFTY3JpcHQKKyAgICBRTUFLRV9GUkFNRVdPUktQQVRIID0gJCRP
VVRQVVRfRElSL2xpYiAkJFFNQUtFX0ZSQU1FV09SS1BBVEgKK30gZWxzZSB7CisgICAgd2luMzIt
Knx3aW5jZSogeworICAgICAgICBMSUJTICs9IC1sUXRKYXZhU2NyaXB0JCR7UVRfTUFKT1JfVkVS
U0lPTn0KKyAgICB9IGVsc2UgeworICAgICAgICBMSUJTICs9IC1sUXRKYXZhU2NyaXB0CisgICAg
fQorfQorCitDT05GSUcocmVsZWFzZSwgZGVidWd8cmVsZWFzZSkgeworICAgIERFRklORVMgKz0g
TkRFQlVHCit9CisKK0lOQ0xVREVQQVRIICs9ICQkUFdELy4uL2FwaQorCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0
cy90ZXN0cy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3NGE3Nwot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAt
MCwwICsxLDMgQEAKK1RFTVBMQVRFID0gc3ViZGlycworU1VCRElSUyA9ICAgcWphdmFzY3JpcHRl
bmdpbmUgXAorICAgICAgICAgICAgcWphdmFzY3JpcHR2YWx1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0
LnBybyBiL1dlYktpdC5wcm8KaW5kZXggOWJlYzYyNC4uMGUzZTBlNiAxMDA2NDQKLS0tIGEvV2Vi
S2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC0xNiw3ICsxNiw4IEBAIFNVQkRJUlMgKz0gXAog
CiBidWlsZC1xamF2YXNjcmlwdCB7CiAgICAgU1VCRElSUyArPSBcCi0gICAgICAgIEphdmFTY3Jp
cHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0
L2FwaS9RdEphdmFTY3JpcHQucHJvIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMK
IH0KIAogaW5jbHVkZShXZWJLaXQvcXQvZG9jcy9kb2NzLnByaSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44961</attachid>
            <date>2009-12-16 02:28:05 -0800</date>
            <delta_ts>2010-01-19 08:38:01 -0800</delta_ts>
            <desc>Initialization of API v2</desc>
            <filename>patchV2.diff</filename>
            <type>text/plain</type>
            <size>21786</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5OGQ1ZGU0Li4wMmU0Y2Vm
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMDktMTItMTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9k
dWN0aW9uIHRvIFFKYXZhU2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFKYXZhU2NyaXB0RW5naW5lIGFuZCBRSmF2YVNjcmlwdFZhbHVl
LgorICAgICAgICBUaGUgZmlyc3Qgc2hvdWxkIGVuY2Fwc3VsYXRlIGEgamF2YSBzY3JpcHQgY29u
dGV4dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaXMgYmVnaW5uaW5nIG9mIGRldmVsb3BtZW50LCBzbyBieSBkZWZhdWx0IHRo
ZSBjbGFzc2VzIHdvbid0IGJlIGNvbXBpbGVkLgorICAgICAgICBUbyBjb21waWxlIGl0IHFtYWtl
IG9wdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuIEZvciBleGFtcGxlOgorICAgICAgICBidWlsZC13
ZWJraXQgLS1xdCAtLXFtYWtlYXJnPSJDT05GSUcrPWJ1aWxkLXFqYXZhc2NyaXB0IgorICAgICAg
ICAKKyAgICAgICAgQ2hhbmdlcyBhcmUgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBRdGlzaCBD
KysgQVBJIG9uIHRvcCBvZiB0aGUgSlNDIHB1YmxpYworICAgICAgICBDIEFQSSAoYnVnIDMxODYz
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1
NjUKKworICAgICAgICAqIFdlYktpdC5wcm86CisKIDIwMDktMTItMTMgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdo
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDUzMzI4NzUuLjExMmQ5YWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MyBAQAorMjAwOS0xMi0xNSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnRyb2R1Y3Rpb24gdG8gUUphdmFTY3JpcHQgQVBJLgorICAgICAgICAKKyAgICAgICAgVHdvIG5l
dyBjbGFzc2VzIHdlcmUgY3JlYXRlZDsgUUphdmFTY3JpcHRFbmdpbmUgYW5kIFFKYXZhU2NyaXB0
VmFsdWUuCisgICAgICAgIFRoZSBmaXJzdCBzaG91bGQgZW5jYXBzdWxhdGUgYSBqYXZhIHNjcmlw
dCBjb250ZXh0IGFuZCB0aGUgc2Vjb25kIGEgc2NyaXB0CisgICAgICAgIHZhbHVlLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBiZWdpbm5pbmcgb2YgZGV2ZWxvcG1lbnQsIHNvIGJ5IGRlZmF1
bHQgdGhlIGNsYXNzZXMgd29uJ3QgYmUgY29tcGlsZWQuCisgICAgICAgIFRvIGNvbXBpbGUgaXQg
cW1ha2Ugb3B0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gRm9yIGV4YW1wbGU6CisgICAgICAgIGJ1
aWxkLXdlYmtpdCAtLXF0IC0tcW1ha2Vhcmc9IkNPTkZJRys9YnVpbGQtcWphdmFzY3JpcHQiCisg
ICAgICAgIAorICAgICAgICBDaGFuZ2VzIGFyZSBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IFF0
aXNoIEMrKyBBUEkgb24gdG9wIG9mIHRoZSBKU0MgcHVibGljCisgICAgICAgIEMgQVBJIChidWcg
MzE4NjMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjU2NQorCisgICAgICAgICogcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm86IEFkZGVkLgorICAg
ICAgICAqIHF0L2FwaS9xamF2YXNjcmlwdGVuZ2luZS5jcHA6IEFkZGVkLgorICAgICAgICAocVN0
cmluZ1RvSlNTdHJpbmdSZWYpOgorICAgICAgICAoUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQpOgorICAgICAgICAoUUphdmFTY3JpcHRFbmdpbmU6OlFKYXZhU2NyaXB0RW5naW5lKToKKyAg
ICAgICAgKFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTo6UUphdmFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5naW5lOjp+UUphdmFTY3JpcHRFbmdpbmUpOgorICAg
ICAgICAoUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlOjp+UUphdmFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5naW5lOjpldmFsdWF0ZSk6CisgICAgICAgIChRSmF2
YVNjcmlwdEVuZ2luZVByaXZhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFFKYXZhU2NyaXB0RW5n
aW5lOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgIChRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6
OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKiBxdC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuaDog
QWRkZWQuCisgICAgICAgICogcXQvYXBpL3FqYXZhc2NyaXB0ZW5naW5lX3AuaDogQWRkZWQuCisg
ICAgICAgIChRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmNvbnRleHQpOgorICAgICAgICAqIHF0
L2FwaS9xamF2YXNjcmlwdHZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChqU1N0cmluZ1JlZlRv
UVN0cmluZyk6CisgICAgICAgIChRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KToKKyAgICAg
ICAgKFFKYXZhU2NyaXB0VmFsdWU6OlFKYXZhU2NyaXB0VmFsdWUpOgorICAgICAgICAoUUphdmFT
Y3JpcHRWYWx1ZTo6flFKYXZhU2NyaXB0VmFsdWUpOgorICAgICAgICAoUUphdmFTY3JpcHRWYWx1
ZTo6ZW5naW5lKToKKyAgICAgICAgKFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgor
ICAgICAgICAoUUphdmFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRSmF2YVNjcmlw
dFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRSmF2YVNjcmlwdFZhbHVlOjp0b1FT
dHJpbmcpOgorICAgICAgICAoUUphdmFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvUVN0cmluZyk6Cisg
ICAgICAgICogcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuaDogQWRkZWQuCisgICAgICAgICogcXQv
YXBpL3FqYXZhc2NyaXB0dmFsdWVfcC5oOiBBZGRlZC4KKyAgICAgICAgKFFKYXZhU2NyaXB0VmFs
dWVQcml2YXRlOjpRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZSk6CisgICAgICAgICogcXQvYXBpL3F0
amF2YXNjcmlwdGdsb2JhbC5oOiBBZGRlZC4KKwogMjAwOS0xMi0xNCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uYTFiOTdlZQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdEphdmFTY3JpcHQucHJvCkBAIC0wLDAgKzEsMzUgQEAKK1RBUkdFVCAgICAgPSBR
dEphdmFTY3JpcHQKK1RFTVBMQVRFID0gbGliCitRVCAgICAgICAgID0gY29yZQorCitJTkNMVURF
UEFUSCArPSAkJFBXRAorCitDT05GSUcgKz0gYnVpbGRpbmctbGlicworCitpbmNsdWRlKCQkUFdE
Ly4uLy4uLy4uL1dlYktpdC5wcmkpCitpbmNsdWRlKCQkUFdELy4uLy4uL0phdmFTY3JpcHRDb3Jl
LnByaSkKKworSEVBREVSUyArPSAkJFBXRC9xdGphdmFzY3JpcHRnbG9iYWwuaAorCisKK0lOQ0xV
REVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQorCitTT1VSQ0VTICs9ICAkJFBXRC9xamF2YXNjcmlw
dGVuZ2luZS5jcHAgXAorICAgICAgICAgICAgJCRQV0QvcWphdmFzY3JpcHR2YWx1ZS5jcHAKK0hF
QURFUlMgKz0gICQkUFdEL3FqYXZhc2NyaXB0ZW5naW5lLmggXAorICAgICAgICAgICAgJCRQV0Qv
cWphdmFzY3JpcHRlbmdpbmVfcC5oIFwKKyAgICAgICAgICAgICQkUFdEL3FqYXZhc2NyaXB0dmFs
dWUuaCBcCisgICAgICAgICAgICAkJFBXRC9xamF2YXNjcmlwdHZhbHVlX3AuaCAKKworIXN0YXRp
YzogREVGSU5FUyArPSBRVF9NQUtFRExMCisKK0NPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkg
eworICAgIGlzRW1wdHkoR0VORVJBVEVEX1NPVVJDRVNfRElSKTpHRU5FUkFURURfU09VUkNFU19E
SVIgPSBnZW5lcmF0ZWQkJHtRTUFLRV9ESVJfU0VQfWRlYnVnCisgICAgT0JKRUNUU19ESVIgPSBv
YmovZGVidWcKK30gZWxzZSB7ICMgUmVsZWFzZQorICAgIGlzRW1wdHkoR0VORVJBVEVEX1NPVVJD
RVNfRElSKTpHRU5FUkFURURfU09VUkNFU19ESVIgPSBnZW5lcmF0ZWQkJHtRTUFLRV9ESVJfU0VQ
fXJlbGVhc2UKKyAgICBPQkpFQ1RTX0RJUiA9IG9iai9yZWxlYXNlCit9CisKK0RFU1RESVIgPSAk
JE9VVFBVVF9ESVIvbGliCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2
YXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdp
bmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkYzQ5MWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmUuY3Bw
CkBAIC0wLDAgKzEsMTMyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJxamF2YXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFqYXZhc2Ny
aXB0ZW5naW5lX3AuaCIKKworI2luY2x1ZGUgInFqYXZhc2NyaXB0dmFsdWUuaCIKKyNpbmNsdWRl
ICJxamF2YXNjcmlwdHZhbHVlX3AuaCIKKworCisvKiogQ29udmVydGlvbiBmcm9tIFFTdHJpbmcg
dG8gSlNTdHJpbmdSZWYKK1RPRE8gbWFrZSBpdCBuaWNlci4uLiBtYXliZSBjYXN0aW5nIG9wZXJh
dG9yPworQGludGVybmFsCisqLworSlNTdHJpbmdSZWYgcVN0cmluZ1RvSlNTdHJpbmdSZWYoY29u
c3QgUVN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdHIudG9VdGY4KCkuY29uc3REYXRhKCkpOworfQorCisvKiogUGVyZm9ybSBjb252ZXJz
aW9uIGZyb20gInByaXZhdGUiIHRvICJwdWJsaWMiIHZlcnNpb24uCitAaW50ZXJuYWwKKyovCitR
SmF2YVNjcmlwdEVuZ2luZSBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChRSmF2YVNjcmlw
dEVuZ2luZVB0ciBkKQoreworICAgIHJldHVybiBRSmF2YVNjcmlwdEVuZ2luZShkKTsKK30KKwor
LyoqIFBlcmZvcm0gY29udmVyc2lvbiBmcm9tICJwcml2YXRlIiB0byAicHVibGljIiB2ZXJzaW9u
LgorQGludGVybmFsCisqLworUUphdmFTY3JpcHRFbmdpbmUgUUphdmFTY3JpcHRFbmdpbmVQcml2
YXRlOjpnZXQoY29uc3QgUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlKiBkKQoreworICAgIHJldHVy
biBRSmF2YVNjcmlwdEVuZ2luZShRSmF2YVNjcmlwdEVuZ2luZVB0cihjb25zdF9jYXN0PFFKYXZh
U2NyaXB0RW5naW5lUHJpdmF0ZSo+KGQpKSk7Cit9CisKKy8qKiBQZXJmb3JtIGNvbnZlcnNpb24g
ZnJvbSAicHVibGljIiB0byAicHJpdmF0ZSIgdmVyc2lvbi4KK0BpbnRlcm5hbAorKi8KK1FKYXZh
U2NyaXB0RW5naW5lUHRyIFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGNvbnN0IFFKYXZh
U2NyaXB0RW5naW5lJiBxKQoreworICAgIHJldHVybiBxLmRfcHRyOworfQorCisvKiogQ29uc3Ry
dWN0cyBhIFFTY3JpcHRFbmdpbmUgb2JqZWN0LgorCitUaGUgZ2xvYmFsT2JqZWN0KCkgaXMgaW5p
dGlhbGl6ZWQgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFzIGRlc2NyaWJlZCBpbiBFQ01BLTI2MiwgU2Vj
dGlvbiAxNS4xLgorKi8KK1FKYXZhU2NyaXB0RW5naW5lOjpRSmF2YVNjcmlwdEVuZ2luZSgpCisg
ICAgOiBkX3B0cihuZXcgUUphdmFTY3JpcHRFbmdpbmVQcml2YXRlKCkpCit7Cit9CisKKy8qKiBD
b25zdHJ1Y3RzIGEgUVNjcmlwdEVuZ2luZSBvYmplY3QgZnJvbSAicHJpdmF0ZSIgb2JqZWN0IHZl
cnNpb24KK0BpbnRlcm5hbAorKi8KK1FKYXZhU2NyaXB0RW5naW5lOjpRSmF2YVNjcmlwdEVuZ2lu
ZShRSmF2YVNjcmlwdEVuZ2luZVB0ciBkKQoreworICAgIHRoaXMtPmRfcHRyID0gZDsKK30KKwor
LyoqIENvbnN0cnVjdHMgYSBkZWZhdWx0IFFTY3JpcHRFbmdpbmVQcml2YXRlIG9iamVjdCwgYSBu
ZXcgZ2xvYmFsIGNvbnRleHQgd2lsbCBiZSBjcmVhdGVkICovCitRSmF2YVNjcmlwdEVuZ2luZVBy
aXZhdGU6OlFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZSgpCisgICAgOiBtX2NvbnRleHQoSlNHbG9i
YWxDb250ZXh0Q3JlYXRlKDApKQoreworfQorCisKK1FKYXZhU2NyaXB0RW5naW5lOjp+UUphdmFT
Y3JpcHRFbmdpbmUoKQoreworfQorCitRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6On5RSmF2YVNj
cmlwdEVuZ2luZVByaXZhdGUoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250
ZXh0KTsKK30KKworLyoqIEV2YWx1YXRlcyBwcm9ncmFtIGFuZCByZXR1cm5zIHRoZSByZXN1bHQg
b2YgdGhlIGV2YWx1YXRpb24uICovCitRSmF2YVNjcmlwdFZhbHVlIFFKYXZhU2NyaXB0RW5naW5l
OjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtKQoreworICAgIHJldHVybiBkX3B0ci0+
ZXZhbHVhdGUocHJvZ3JhbSk7Cit9CisKKy8qKiBFdmFsdWF0ZXMgcHJvZ3JhbSBhbmQgcmV0dXJu
cyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgorQGludGVybmFsCisqLworUUphdmFTY3Jp
cHRWYWx1ZSBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU6OmV2YWx1YXRlKGNvbnN0IFFTdHJpbmcm
IHByb2dyYW0pCit7CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gcVN0cmluZ1RvSlNTdHJpbmdS
ZWYocHJvZ3JhbSk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KG1f
Y29udGV4dCwgc2NyaXB0LCAwLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gUUphdmFTY3JpcHRWYWx1
ZVByaXZhdGU6OmdldChuZXcgUUphdmFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgcmVzdWx0KSk7
Cit9CisKKy8qKiBSdW5zIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKworVGhlIGdhcmJhZ2UgY29s
bGVjdG9yIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG1lbW9yeSBieSBsb2NhdGluZyBhbmQgZGlz
cG9zaW5nIG9mIG9iamVjdHMgdGhhdCBhcmUKK25vIGxvbmdlciByZWFjaGFibGUgaW4gdGhlIHNj
cmlwdCBlbnZpcm9ubWVudC4KKworTm9ybWFsbHkgeW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlz
IGZ1bmN0aW9uOyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGlu
dm9rZWQKK3doZW4gdGhlIFFTY3JpcHRFbmdpbmUgZGVjaWRlcyB0aGF0IGl0J3Mgd2lzZSB0byBk
byBzbyAoaS5lLiB3aGVuIGEgY2VydGFpbiBudW1iZXIgb2YgbmV3IG9iamVjdHMKK2hhdmUgYmVl
biBjcmVhdGVkKS4gSG93ZXZlciwgeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZXhwbGlj
aXRseSByZXF1ZXN0IHRoYXQgZ2FyYmFnZQorY29sbGVjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVk
IGFzIHNvb24gYXMgcG9zc2libGUuCisqLwordm9pZCBRSmF2YVNjcmlwdEVuZ2luZTo6Y29sbGVj
dEdhcmJhZ2UoKQoreworICAgIGRfcHRyLT5jb2xsZWN0R2FyYmFnZSgpOworfQorCisvKiogUnVu
cyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCitAaW50ZXJuYWwKKyovCit2b2lkIFFKYXZhU2NyaXB0
RW5naW5lUHJpdmF0ZTo6Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIEpTR2FyYmFnZUNvbGxlY3Qo
bV9jb250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNj
cmlwdGVuZ2luZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0ZW5naW5lLmgK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc0YmMxMAotLS0gL2Rldi9udWxs
CisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdGVuZ2luZS5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUUpBVkFTQ1JJUFRFTkdJTkVf
SAorI2RlZmluZSBRSkFWQVNDUklQVEVOR0lORV9ICisKKyNpbmNsdWRlICJxamF2YXNjcmlwdHZh
bHVlLmgiCisjaW5jbHVkZSA8UUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcj4KKyNpbmNsdWRl
IDxRU3RyaW5nPgorCisKK2NsYXNzIFFKYXZhU2NyaXB0RW5naW5lUHJpdmF0ZTsKK3R5cGVkZWYg
UUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGU+IFFK
YXZhU2NyaXB0RW5naW5lUHRyOworCitjbGFzcyBRSmF2YVNjcmlwdEVuZ2luZSB7CitwdWJsaWM6
CisgICAgUUphdmFTY3JpcHRFbmdpbmUoKTsKKyAgICB+UUphdmFTY3JpcHRFbmdpbmUoKTsKKwor
ICAgIFFKYXZhU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgUVN0cmluZyYpOworICAgIHZvaWQg
Y29sbGVjdEdhcmJhZ2UoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUUphdmFTY3Jp
cHRFbmdpbmVQcml2YXRlOworCisgICAgUUphdmFTY3JpcHRFbmdpbmUoUUphdmFTY3JpcHRFbmdp
bmVQdHIgZCk7CisKKyAgICBRSmF2YVNjcmlwdEVuZ2luZVB0ciBkX3B0cjsKKworfTsKKworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdGVuZ2lu
ZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmVfcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2OGEwNjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3JpcHRlbmdpbmVfcC5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUUpBVkFTQ1JJUFRFTkdJTkVfUF9I
CisjZGVmaW5lIFFKQVZBU0NSSVBURU5HSU5FX1BfSAorCisjaW5jbHVkZSAicWphdmFzY3JpcHRl
bmdpbmUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVk
ZSA8UVNoYXJlZERhdGE+CisjaW5jbHVkZSA8UVN0cmluZz4KKworCitjbGFzcyBRSmF2YVNjcmlw
dFZhbHVlOworY2xhc3MgUUphdmFTY3JpcHRFbmdpbmU7CisKK2NsYXNzIFFKYXZhU2NyaXB0RW5n
aW5lUHJpdmF0ZQorICAgICAgICA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFFKYXZhU2NyaXB0RW5naW5lIGdldChRSmF2YVNjcmlwdEVuZ2luZVB0ciBkKTsKKyAg
ICBzdGF0aWMgUUphdmFTY3JpcHRFbmdpbmUgZ2V0KGNvbnN0IFFKYXZhU2NyaXB0RW5naW5lUHJp
dmF0ZSogZCk7CisgICAgc3RhdGljIFFKYXZhU2NyaXB0RW5naW5lUHRyIGdldChjb25zdCBRSmF2
YVNjcmlwdEVuZ2luZSYgcSk7CisKKyAgICBRSmF2YVNjcmlwdEVuZ2luZVByaXZhdGUoKTsKKyAg
ICB+UUphdmFTY3JpcHRFbmdpbmVQcml2YXRlKCk7CisgICAgUUphdmFTY3JpcHRWYWx1ZSBldmFs
dWF0ZShjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisKKworcHJp
dmF0ZToKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250ZXh0OworfTsKKworCisjZW5kaWYg
Ly8gUUpBVkFTQ1JJUFRFTkdJTkVQUklWQVRFX1BfSApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fq
YXZhc2NyaXB0dmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1
ODQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcWphdmFzY3Jp
cHR2YWx1ZS5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFqYXZhc2NyaXB0dmFsdWUuaCIKKyNpbmNsdWRl
ICJxamF2YXNjcmlwdHZhbHVlX3AuaCIKKworI2luY2x1ZGUgInFqYXZhc2NyaXB0ZW5naW5lLmgi
CisjaW5jbHVkZSAicWphdmFzY3JpcHRlbmdpbmVfcC5oIgorCisKKy8qKiBDb252ZXJ0aW9uIGZy
b20gSlNTdHJpbmdSZWYgdG8gUVN0cmluZworVE9ETyBtYWtlIGl0IG5pY2VyLi4uIG1heWJlIGNh
c3Rpbmcgb3BlcmF0b3I/CitAaW50ZXJuYWwKKyovCisKK1FTdHJpbmcgalNTdHJpbmdSZWZUb1FT
dHJpbmcoY29uc3QgSlNTdHJpbmdSZWYmIHN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IEpTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHIpOworICAgIGNoYXIqIGJ1ZmZlciA9IG5l
dyBjaGFyW3NpemVdOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyLCBidWZmZXIsIHNp
emUpOworICAgIFFTdHJpbmcgcmVzdWx0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoYnVmZmVyKTsKKyAg
ICBkZWxldGUgYnVmZmVyOworICAgIHJldHVybiAgcmVzdWx0OworfQorCisvKiogUGVyZm9ybSBj
b252ZXJzaW9uIGZyb20gInByaXZhdGUiIHRvICJwdWJsaWMiIHZlcnNpb24uCitAaW50ZXJuYWwK
KyovCitRSmF2YVNjcmlwdFZhbHVlIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoUUphdmFT
Y3JpcHRWYWx1ZVB0ciBkKQoreworICAgIHJldHVybiBRSmF2YVNjcmlwdFZhbHVlKGQpOworfQor
CisvKiogUGVyZm9ybSBjb252ZXJzaW9uIGZyb20gInByaXZhdGUiIHRvICJwdWJsaWMiIHZlcnNp
b24uCitAaW50ZXJuYWwKKyovCitRSmF2YVNjcmlwdFZhbHVlIFFKYXZhU2NyaXB0VmFsdWVQcml2
YXRlOjpnZXQoY29uc3QgUUphdmFTY3JpcHRWYWx1ZVByaXZhdGUqIGQpCit7CisgICAgcmV0dXJu
IFFKYXZhU2NyaXB0VmFsdWUoUUphdmFTY3JpcHRWYWx1ZVB0cihjb25zdF9jYXN0PFFKYXZhU2Ny
aXB0VmFsdWVQcml2YXRlKj4oZCkpKTsKK30KKworLyoqIFBlcmZvcm0gY29udmVyc2lvbiBmcm9t
ICJwdWJsaWMiIHRvICJwcml2YXRlIiB2ZXJzaW9uLgorQGludGVybmFsCisqLworUUphdmFTY3Jp
cHRWYWx1ZVB0ciBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGNvbnN0IFFKYXZhU2NyaXB0
VmFsdWUmIHEpCit7CisgICAgcmV0dXJuIHEuZF9wdHI7Cit9CisKKy8qKiBDb25zdHJ1Y3QgZGVm
YXVsdCBpbnZhbGlkIHZhbHVlICovCitRSmF2YVNjcmlwdFZhbHVlOjpRSmF2YVNjcmlwdFZhbHVl
KCkKKyAgICA6IGRfcHRyKG5ldyBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZSgpKQore30KKworLyoq
IENvbnN0cnVjdCBhIHZhbHVlIGZyb20gInByaXZhdGUiIHZlcnNpb24gb2YgdGhlIGNsYXNzLgor
QGludGVybmFsCisqLworUUphdmFTY3JpcHRWYWx1ZTo6UUphdmFTY3JpcHRWYWx1ZShRSmF2YVNj
cmlwdFZhbHVlUHRyIGQpCisgICAgOiBkX3B0cihkKQore30KKworUUphdmFTY3JpcHRWYWx1ZTo6
flFKYXZhU2NyaXB0VmFsdWUoKQore30KKworLyoqIFJldHVybiBRSmF2YVNjcmlwdEVuZ2luZSBh
c3Nvc2lhdGVkIHdpdGggdGhlIHZhbHVlLiBJZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBpbnZhbGlk
IG9yIHRoZSB2YWx1ZQoraXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZW5naW5l
LCBhbiBpbnZhbGlkIGVuZ2luZSB3aWxsIGJlIHJldHVybmVkLiAqLworUUphdmFTY3JpcHRFbmdp
bmUgUUphdmFTY3JpcHRWYWx1ZTo6ZW5naW5lKCkKK3sKKyAgICByZXR1cm4gZF9wdHItPmVuZ2lu
ZSgpOworfQorCisvKiogUmV0dXJuIFFKYXZhU2NyaXB0RW5naW5lIGFzc29zaWF0ZWQgd2l0aCB0
aGUgdmFsdWUuIElmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGludmFsaWQgb3IgdGhlIHZhbHVlCitp
cyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBlbmdpbmUsIGFuIGludmFsaWQgZW5n
aW5lIHdpbGwgYmUgcmV0dXJuZWQuCitAaW50ZXJuYWwKKyovCitRSmF2YVNjcmlwdEVuZ2luZSBR
SmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTo6ZW5naW5lKCkKK3sKKyAgICByZXR1cm4gUUphdmFTY3Jp
cHRFbmdpbmVQcml2YXRlOjpnZXQobV9lbmdpbmUpOworfQorCisvKiogUmV0dXJucyB0cnVlIGlm
IHRoaXMgUVNjcmlwdFZhbHVlIGlzIHZhbGlkOyBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4gKi8K
K2Jvb2wgUUphdmFTY3JpcHRWYWx1ZTo6aXNWYWxpZCgpCit7CisgICAgcmV0dXJuIGRfcHRyLT5p
c1ZhbGlkKCk7Cit9CisKKy8qKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMg
dmFsaWQ7IG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorQGludGVybmFsCisqLworYm9vbCBRSmF2
YVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCgpCit7CisgICAgcmV0dXJuIG1fdmFsaWQ7Cit9
CisKKy8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhpcyBRU2NyaXB0VmFsdWUsIGFz
IGRlZmluZWQgaW4gRUNNQS0yNjIgc2VjdGlvbiA5LjgsICJUb1N0cmluZyIuCisKK05vdGUgdGhh
dCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmplY3QsIGNhbGxpbmcgdGhpcyBmdW5jdGlv
biBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3JpcHQKK2VuZ2luZSwgc2luY2UgdGhlIGVuZ2lu
ZSB3aWxsIGNhbGwgdGhlIG9iamVjdCdzIHRvU3RyaW5nKCkgZnVuY3Rpb24gKGFuZCBwb3NzaWJs
eSB2YWx1ZU9mKCkpIGluIGFuCithdHRlbXB0IHRvIGNvbnZlcnQgdGhlIG9iamVjdCB0byBhIHBy
aW1pdGl2ZSB2YWx1ZSAocG9zc2libHkgcmVzdWx0aW5nIGluIGFuIHVuY2F1Z2h0IHNjcmlwdAor
ZXhjZXB0aW9uKS4KKyovCitRU3RyaW5nIFFKYXZhU2NyaXB0VmFsdWU6OnRvUVN0cmluZygpCit7
CisgICAgcmV0dXJuIGRfcHRyLT50b1FTdHJpbmcoKTsKK30KKworLyoqIFJldHVybnMgdGhlIHN0
cmluZyB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1ZSwgYXMgZGVmaW5lZCBpbiBFQ01BLTI2MiBz
ZWN0aW9uIDkuOCwgIlRvU3RyaW5nIi4KK0BpbnRlcm5hbAorKi8KK1FTdHJpbmcgUUphdmFTY3Jp
cHRWYWx1ZVByaXZhdGU6OnRvUVN0cmluZygpCit7CisgICAgaWYgKGlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGpTU3RyaW5nUmVmVG9RU3RyaW5nKEpTVmFsdWVUb1N0cmluZ0NvcHkobV9lbmdp
bmUtPmNvbnRleHQoKSwgbV92YWx1ZSwgMCkpOworICAgIHJldHVybiAiIjsKK30KKwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWUuaCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdHZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uNTdkNGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xamF2YXNjcmlwdHZhbHVlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBRSkFWQVNDUklQVFZBTFVFX0gKKyNkZWZpbmUgUUpBVkFTQ1JJUFRWQUxV
RV9ICisKKyNpbmNsdWRlIDxRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPgorCitjbGFzcyBR
SmF2YVNjcmlwdEVuZ2luZTsKK2NsYXNzIFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlOwordHlwZWRl
ZiBRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlPiBR
SmF2YVNjcmlwdFZhbHVlUHRyOworCitjbGFzcyBRSmF2YVNjcmlwdFZhbHVlIHsKK3B1YmxpYzoK
KyAgICBRSmF2YVNjcmlwdFZhbHVlKCk7CisgICAgflFKYXZhU2NyaXB0VmFsdWUoKTsKKworICAg
IFFKYXZhU2NyaXB0RW5naW5lIGVuZ2luZSgpOworICAgIGJvb2wgaXNWYWxpZCgpOworCisgICAg
UVN0cmluZyB0b1FTdHJpbmcoKTsKK3ByaXZhdGU6CisgICAgUUphdmFTY3JpcHRWYWx1ZShRSmF2
YVNjcmlwdFZhbHVlUHRyIGQpOworCisgICAgUUphdmFTY3JpcHRWYWx1ZVB0ciBkX3B0cjsKKwor
ICAgIGZyaWVuZCBjbGFzcyBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZTsKK307CisKKyNlbmRpZiAv
LyBRSkFWQVNDUklQVFZBTFVFX0gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
amF2YXNjcmlwdHZhbHVlX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xamF2YXNjcmlwdHZh
bHVlX3AuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGU2MWI4Ci0tLSAv
ZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FqYXZhc2NyaXB0dmFsdWVfcC5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUUpBVkFTQ1JJ
UFRWQUxVRV9QX0gKKyNkZWZpbmUgUUpBVkFTQ1JJUFRWQUxVRV9QX0gKKworI2luY2x1ZGUgInFq
YXZhc2NyaXB0ZW5naW5lX3AuaCIKKyNpbmNsdWRlICJxamF2YXNjcmlwdHZhbHVlLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPFFTaGFyZWREYXRh
PgorCisKK2NsYXNzIFFKYXZhU2NyaXB0RW5naW5lOworY2xhc3MgUUphdmFTY3JpcHRWYWx1ZTsK
KworCitjbGFzcyBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZQorICAgICAgICA6IHB1YmxpYyBRU2hh
cmVkRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFFKYXZhU2NyaXB0VmFsdWUgZ2V0KFFKYXZh
U2NyaXB0VmFsdWVQdHIgZCk7CisgICAgc3RhdGljIFFKYXZhU2NyaXB0VmFsdWUgZ2V0KGNvbnN0
IFFKYXZhU2NyaXB0VmFsdWVQcml2YXRlKiBkKTsKKyAgICBzdGF0aWMgUUphdmFTY3JpcHRWYWx1
ZVB0ciBnZXQoY29uc3QgUUphdmFTY3JpcHRWYWx1ZSYgcSk7CisKKyAgICBRSmF2YVNjcmlwdFZh
bHVlUHJpdmF0ZSgpCisgICAgICAgIDogbV9lbmdpbmUoMCkKKyAgICAgICAgLCBtX3ZhbGlkKGZh
bHNlKQorICAgIHt9CisKKyAgICBRSmF2YVNjcmlwdFZhbHVlUHJpdmF0ZShRSmF2YVNjcmlwdEVu
Z2luZVB0ciBlbmdpbmUsIEpTVmFsdWVSZWYmIHZhbHVlKQorICAgICAgICA6IG1fZW5naW5lKGVu
Z2luZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsaWQodHJ1ZSkK
KyAgICB7fQorCisgICAgUUphdmFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUUphdmFTY3JpcHRF
bmdpbmVQcml2YXRlKiBlbmdpbmUsIEpTVmFsdWVSZWYmIHZhbHVlKQorICAgICAgICA6IG1fZW5n
aW5lKFFKYXZhU2NyaXB0RW5naW5lUHRyKGNvbnN0X2Nhc3Q8UUphdmFTY3JpcHRFbmdpbmVQcml2
YXRlKj4oZW5naW5lKSkpCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3Zh
bGlkKHRydWUpCisgICAge30KKworICAgIFFKYXZhU2NyaXB0RW5naW5lIGVuZ2luZSgpOworICAg
IGJvb2wgaXNWYWxpZCgpOworCisgICAgUVN0cmluZyB0b1FTdHJpbmcoKTsKK3ByaXZhdGU6Cisg
ICAgUUphdmFTY3JpcHRFbmdpbmVQdHIgbV9lbmdpbmU7CisKKyAgICBKU1ZhbHVlUmVmIG1fdmFs
dWU7CisgICAgYm9vbCBtX3ZhbGlkOworfTsKKworCisKKyNlbmRpZiAvLyBRSkFWQVNDUklQVFZB
TFVFX1BfSApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0amF2YXNjcmlwdGds
b2JhbC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0amF2YXNjcmlwdGdsb2JhbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3ZDBmMWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRqYXZhc2NyaXB0Z2xvYmFsLmgKQEAgLTAsMCArMSwy
NSBAQAorI2lmbmRlZiBRVEpBVkFTQ1JJUFRHTE9CQUxfSAorI2RlZmluZSBRVEpBVkFTQ1JJUFRH
TE9CQUxfSAorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworI2lmIGRlZmluZWQoUV9P
U19XSU4pIHx8IGRlZmluZWQoUV9PU19TWU1CSUFOKQorIyAgaWYgZGVmaW5lZChRVF9OT0RMTCkK
KyMgIGVsaWYgZGVmaW5lZChRVF9NQUtFRExMKSAgICAgICAgLyogY3JlYXRlIGEgUXQgRExMIGxp
YnJhcnkgKi8KKyMgICAgaWYgZGVmaW5lZChRVF9CVUlMRF9KQVZBU0NSSVBUX0xJQikKKyMgICAg
ICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfRVhQT1JUCisjICAgIGVsc2UKKyMg
ICAgICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfSU1QT1JUCisjICAgIGVuZGlm
CisjICBlbGlmIGRlZmluZWQoUVRfRExMKSAvKiB1c2UgYSBRdCBETEwgbGlicmFyeSAqLworIyAg
ICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVm
aW5lZChRVF9TSEFSRUQpCisjICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfRVhQ
T1JUCisjZWxzZQorIyAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJLaXQucHJvCmluZGV4IDg2NmJiOWIuLjli
ZWM2MjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpAQCAtMTQsNCAr
MTQsOSBAQCBTVUJESVJTICs9IFwKICAgICBTVUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L1Rlc3ROZXRzY2FwZVBsdWdpbi9UZXN0TmV0c2NhcGVQbHVnaW4ucHJvCiB9CiAK
K2J1aWxkLXFqYXZhc2NyaXB0IHsKKyAgICBTVUJESVJTICs9IFwKKyAgICAgICAgSmF2YVNjcmlw
dENvcmUvcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm8KK30KKwogaW5jbHVkZShXZWJLaXQvcXQvZG9j
cy9kb2NzLnByaSkK
</data>
<flag name="review"
          id="26899"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46913</attachid>
            <date>2010-01-19 08:38:01 -0800</date>
            <delta_ts>2010-01-20 03:45:37 -0800</delta_ts>
            <desc> Initialization of API v3</desc>
            <filename>initV3.diff</filename>
            <type>text/plain</type>
            <size>46999</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uNzExOTUyZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdEphdmFTY3JpcHQucHJvCkBAIC0wLDAgKzEsMzcgQEAKK1RBUkdFVCAgICAgPSBR
dEphdmFTY3JpcHQKK1RFTVBMQVRFICAgPSBsaWIKK1FUICAgICAgICAgPSBjb3JlCisKK0lOQ0xV
REVQQVRIICs9ICQkUFdECisKK0NPTkZJRyArPSBidWlsZGluZy1saWJzCitKQVZBU0NSSVBUQ09S
RV9KSVQgPSB5ZXMKKworaXNFbXB0eShKU0NfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpKU0NfR0VO
RVJBVEVEX1NPVVJDRVNfRElSID0gLi4vLi4vZ2VuZXJhdGVkCitDT05GSUcoZGVidWcsIGRlYnVn
fHJlbGVhc2UpIHsKKyAgICBPQkpFQ1RTX0RJUiA9IG9iai9kZWJ1ZworfSBlbHNlIHsgIyBSZWxl
YXNlCisgICAgT0JKRUNUU19ESVIgPSBvYmovcmVsZWFzZQorfQorCitpbmNsdWRlKCQkUFdELy4u
Ly4uLy4uL1dlYktpdC5wcmkpCitpbmNsdWRlKCQkUFdELy4uLy4uL0phdmFTY3JpcHRDb3JlLnBy
aSkKKworSU5DTFVERVBBVEggKz0gJCRQV0QvLi4vLi4vQVBJCisKK1NPVVJDRVMgKz0gICQkUFdE
L3FzY3JpcHRlbmdpbmUuY3BwIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRlbmdpbmVfcC5j
cHAgXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlLmNwcCBcCisKK0hFQURFUlMgKz0g
ICQkUFdEL3F0c2NyaXB0Z2xvYmFsLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZS5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRlbmdpbmVfcC5oIFwKKyAgICAgICAgICAg
ICQkUFdEL3FzY3JpcHR2YWx1ZS5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1ZV9w
LmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAorCisKKyFzdGF0
aWM6IERFRklORVMgKz0gUVRfTUFLRURMTAorCitERVNURElSID0gJCRPVVRQVVRfRElSL2xpYgor
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGNvbnZlcnRlcl9wLmgg
Yi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGNvbnZlcnRlcl9wLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMmQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaApAQCAtMCwwICsxLDUwIEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRjb252ZXJ0ZXJfcF9oCisjZGVmaW5l
IHFzY3JpcHRjb252ZXJ0ZXJfcF9oCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KKworLyoKKyAgXGludGVybmFsCisg
IFxjbGFzcyBRU2NyaXB0Q29udmVydGVyCisgIFFTY3JpcHRWYWx1ZSBhbmQgUVNjcmlwdEVuZ2lu
ZSBoZWxwZXIgY2xhc3MuIFRoaXMgY2xhc3MncyByZXNwb25zYWJpbGl0eSBpcyB0byBjb252ZXJ0
IHZhbHVlcworICBiZXR3ZWVuIEpTIHZhbHVlcyBhbmQgUXQvQysrIHZhbHVlcy4KKworICBUaGlz
IGlzIGEgbmljZSB3YXkgdG8gaW5saW5lIHRoZXNlIGZ1bmN0aW9ucyBpbiBib3RoIFFTY3JpcHRW
YWx1ZSBhbmQgUVNjcmlwdEVuZ2luZS4KKyovCitjbGFzcyBRU2NyaXB0Q29udmVydGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUVN0cmluZyB0b1N0cmluZyhjb25zdCBKU1N0cmluZ1JlZiBzdHIp
CisgICAgeworICAgICAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFD
aGFyKj4oSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cikpLCBKU1N0cmluZ0dldExlbmd0aChz
dHIpKTsKKyAgICB9CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIHRvU3RyaW5nKGNvbnN0IFFTdHJp
bmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdHIudG9VdGY4KCkuY29uc3REYXRhKCkpOworICAgIH0KKyAgICBzdGF0aWMgSlNTdHJp
bmdSZWYgdG9TdHJpbmcoY29uc3QgY2hhciogc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cik7CisgICAgfQorfTsKKworI2VuZGlmIC8v
IHFzY3JpcHRjb252ZXJ0ZXJfcF9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJiY2Y4NQotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApAQCAtMCww
ICsxLDg4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lX3AuaCIK
KyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorCisvKiEKKyAgICBDb25zdHJ1Y3RzIGEgUVNj
cmlwdEVuZ2luZSBvYmplY3QuCisKKyAgICBUaGUgZ2xvYmFsT2JqZWN0KCkgaXMgaW5pdGlhbGl6
ZWQgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFzIGRlc2NyaWJlZCBpbiBFQ01BLTI2MiwgU2VjdGlvbiAx
NS4xLgorKi8KK1FTY3JpcHRFbmdpbmU6OlFTY3JpcHRFbmdpbmUoKQorICAgIDogZF9wdHIobmV3
IFFTY3JpcHRFbmdpbmVQcml2YXRlKHRoaXMpKQore30KKworLyohCisgICAgRGVzdHJveXMgdGhp
cyBRU2NyaXB0RW5naW5lLgorKi8KK1FTY3JpcHRFbmdpbmU6On5RU2NyaXB0RW5naW5lKCkKK3t9
CisKKy8qIQorICAgIEV2YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFz
IHRoZSBiYXNlIGxpbmUgbnVtYmVyLAorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhl
IGV2YWx1YXRpb24uCisKKyAgICBUaGUgc2NyaXB0IGNvZGUgd2lsbCBiZSBldmFsdWF0ZWQgaW4g
dGhlIGN1cnJlbnQgY29udGV4dC4KKworICAgIFRoZSBldmFsdWF0aW9uIG9mIFxhIHByb2dyYW0g
Y2FuIGNhdXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGUKKyAgICBlbmdpbmU7IGluIHRoaXMgY2FzZSB0
aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGV4Y2VwdGlvbgorICAgIHRoYXQgd2FzIHRocm93
biAodHlwaWNhbGx5IGFuIFxje0Vycm9yfSBvYmplY3QpLiBZb3UgY2FuIGNhbGwKKyAgICBoYXNV
bmNhdWdodEV4Y2VwdGlvbigpIHRvIGRldGVybWluZSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQg
aW4KKyAgICB0aGUgbGFzdCBjYWxsIHRvIGV2YWx1YXRlKCkuCisKKyAgICBcYSBsaW5lTnVtYmVy
IGlzIHVzZWQgdG8gc3BlY2lmeSBhIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGZvciBcYQorICAgIHBy
b2dyYW07IGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IHRoZSBlbmdpbmUgdGhh
dCBwZXJ0YWluCisgICAgdG8gdGhpcyBldmFsdWF0aW9uIChlLmcuIHVuY2F1Z2h0RXhjZXB0aW9u
TGluZU51bWJlcigpKSB3aWxsIGJlCisgICAgYmFzZWQgb24gdGhpcyBhcmd1bWVudC4gRm9yIGV4
YW1wbGUsIGlmIFxhIHByb2dyYW0gY29uc2lzdHMgb2YgdHdvCisgICAgbGluZXMgb2YgY29kZSwg
YW5kIHRoZSBzdGF0ZW1lbnQgb24gdGhlIHNlY29uZCBsaW5lIGNhdXNlcyBhIHNjcmlwdAorICAg
IGV4Y2VwdGlvbiwgdW5jYXVnaHRFeGNlcHRpb25MaW5lTnVtYmVyKCkgd291bGQgcmV0dXJuIHRo
ZSBnaXZlbiBcYQorICAgIGxpbmVOdW1iZXIgcGx1cyBvbmUuIFdoZW4gbm8gc3RhcnRpbmcgbGlu
ZSBudW1iZXIgaXMgc3BlY2lmaWVkLCBsaW5lCisgICAgbnVtYmVycyB3aWxsIGJlIDEtYmFzZWQu
CisKKyAgICBcYSBmaWxlTmFtZSBpcyB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuIEZvciBleGFt
cGxlIGluIGVycm9yIG9iamVjdHMKKyAgICB0aGUgZmlsZSBuYW1lIGlzIGFjY2Vzc2libGUgdGhy
b3VnaCB0aGUgImZpbGVOYW1lIiBwcm9wZXJ0eSBpZiBpdCdzCisgICAgcHJvdmlkZWQgd2l0aCB0
aGlzIGZ1bmN0aW9uLgorKi8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpldmFsdWF0ZShj
b25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgaW50IGxpbmVO
dW1iZXIpCit7CisgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldCgoUVNjcmlwdFZh
bHVlUHJpdmF0ZSopZF9wdHItPmV2YWx1YXRlKHByb2dyYW0sIGZpbGVOYW1lLCBsaW5lTnVtYmVy
KSk7Cit9CisKKy8qIQorICAgIFJ1bnMgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgorCisgICAgVGhl
IGdhcmJhZ2UgY29sbGVjdG9yIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG1lbW9yeSBieSBsb2Nh
dGluZyBhbmQgZGlzcG9zaW5nIG9mIG9iamVjdHMgdGhhdCBhcmUKKyAgICBubyBsb25nZXIgcmVh
Y2hhYmxlIGluIHRoZSBzY3JpcHQgZW52aXJvbm1lbnQuCisKKyAgICBOb3JtYWxseSB5b3UgZG9u
J3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb247IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aWxs
IGF1dG9tYXRpY2FsbHkgYmUgaW52b2tlZAorICAgIHdoZW4gdGhlIFFTY3JpcHRFbmdpbmUgZGVj
aWRlcyB0aGF0IGl0J3Mgd2lzZSB0byBkbyBzbyAoaS5lLiB3aGVuIGEgY2VydGFpbiBudW1iZXIg
b2YgbmV3IG9iamVjdHMKKyAgICBoYXZlIGJlZW4gY3JlYXRlZCkuIEhvd2V2ZXIsIHlvdSBjYW4g
Y2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCB0aGF0IGdhcmJhZ2UKKyAg
ICBjb2xsZWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyov
Cit2b2lkIFFTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICBkX3B0ci0+Y29s
bGVjdEdhcmJhZ2UoKTsKK30KKworCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGVuZ2luZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaApu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTNhODAyCi0tLSAvZGV2L251bGwK
KysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaApAQCAtMCwwICsxLDQ5
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRlbmdpbmVfaAorI2RlZmlu
ZSBxc2NyaXB0ZW5naW5lX2gKKworCisjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KKyNpbmNs
dWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgor
CitjbGFzcyBRU2NyaXB0VmFsdWU7CitjbGFzcyBRU2NyaXB0RW5naW5lUHJpdmF0ZTsKKworLy8g
SW50ZXJuYWwgdHlwZWRlZgordHlwZWRlZiBRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFT
Y3JpcHRFbmdpbmVQcml2YXRlPiBRU2NyaXB0RW5naW5lUHRyOworCitjbGFzcyBRU2NyaXB0RW5n
aW5lCisgICAgOiBwdWJsaWMgUU9iamVjdCB7CitwdWJsaWM6CisgICAgUVNjcmlwdEVuZ2luZSgp
OworICAgIH5RU2NyaXB0RW5naW5lKCk7CisKKyAgICBRU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29u
c3QgUVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUgPSBRU3RyaW5nKCks
IGludCBsaW5lTnVtYmVyID0gMSk7CisgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBRU2NyaXB0RW5naW5lUHJpdmF0ZTsKKworICAgIFFTY3Jp
cHRFbmdpbmVQdHIgZF9wdHI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fz
Y3JpcHRlbmdpbmVfcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNk
M2RlMQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5n
aW5lX3AuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorCisjaW5jbHVkZSAi
cXNjcmlwdHZhbHVlX3AuaCIKKworLyohCisgICAgQ29uc3RydWN0cyBhIGRlZmF1bHQgUVNjcmlw
dEVuZ2luZVByaXZhdGUgb2JqZWN0LCBhIG5ldyBnbG9iYWwgY29udGV4dCB3aWxsIGJlIGNyZWF0
ZWQuCisgICAgXGludGVybmFsCisqLworUVNjcmlwdEVuZ2luZVByaXZhdGU6OlFTY3JpcHRFbmdp
bmVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSkKKyAgICA6IHFfcHRyKGNvbnN0
X2Nhc3Q8UVNjcmlwdEVuZ2luZSo+KGVuZ2luZSkpCisgICAgLCBtX2NvbnRleHQoSlNHbG9iYWxD
b250ZXh0Q3JlYXRlKDApKQore30KKworUVNjcmlwdEVuZ2luZVByaXZhdGU6On5RU2NyaXB0RW5n
aW5lUHJpdmF0ZSgpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KCkpOwor
fQorCisvKiEKKyAgICBFdmFsdWF0ZXMgcHJvZ3JhbSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9m
IHRoZSBldmFsdWF0aW9uLgorICAgIFxpbnRlcm5hbAorKi8KK1FTY3JpcHRWYWx1ZVByaXZhdGUq
IFFTY3JpcHRFbmdpbmVQcml2YXRlOjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBj
b25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgaW50IGxpbmVOdW1iZXIpCit7CisgICAgSlNTdHJpbmdS
ZWYgc2NyaXB0ID0gUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcocHJvZ3JhbSk7CisgICAgSlNT
dHJpbmdSZWYgZmlsZSA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKGZpbGVOYW1lKTsKKyAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVh
dGVTY3JpcHQoY29udGV4dCgpLCBzY3JpcHQsIC8qIEdsb2JhbCBPYmplY3QgKi8gMCwgZmlsZSwg
bGluZU51bWJlciwgJmV4Y2VwdGlvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh0aGlzLCBleGNlcHRpb24pOyAvLyByZXR1cm5zIGFu
IGV4Y2VwdGlvbgorICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh0aGlzLCByZXN1
bHQpOworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVf
cC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyZjdmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyAgICAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNjcmlwdGVuZ2luZV9wX2gKKyNkZWZpbmUg
cXNjcmlwdGVuZ2luZV9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgorI2lu
Y2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzaGFy
ZWRkYXRhLmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KKworCitjbGFzcyBRU2NyaXB0
RW5naW5lOworCitjbGFzcyBRU2NyaXB0RW5naW5lUHJpdmF0ZQorICAgICAgICA6IHB1YmxpYyBR
U2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFFTY3JpcHRFbmdpbmVQdHIgZ2V0KGNv
bnN0IFFTY3JpcHRFbmdpbmUqIHEpIHsgcmV0dXJuIHEgPyBxLT5kX3B0ciA6IFFTY3JpcHRFbmdp
bmVQdHIoKTsgfQorICAgIHN0YXRpYyBRU2NyaXB0RW5naW5lKiBnZXQoY29uc3QgUVNjcmlwdEVu
Z2luZVByaXZhdGUqIGQpIHsgcmV0dXJuIGQgPyBkLT5xX3B0ciA6IDA7IH0KKworICAgIFFTY3Jp
cHRFbmdpbmVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqKTsKKyAgICB+UVNjcmlwdEVuZ2lu
ZVByaXZhdGUoKTsKKworICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGV2YWx1YXRlKGNvbnN0IFFT
dHJpbmcmIHByb2dyYW0sIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBpbnQgbGluZU51bWJlcik7
CisgICAgaW5saW5lIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKKworICAgIGlubGluZSBKU1ZhbHVl
UmVmIG1ha2VKU1ZhbHVlKGRvdWJsZSBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVl
UmVmIG1ha2VKU1ZhbHVlKGludCBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVlUmVm
IG1ha2VKU1ZhbHVlKHVpbnQgbnVtYmVyKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiBt
YWtlSlNWYWx1ZShjb25zdCBRU3RyaW5nJiBzdHJpbmcpIGNvbnN0OworICAgIGlubGluZSBKU1Zh
bHVlUmVmIG1ha2VKU1ZhbHVlKGJvb2wgbnVtYmVyKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1
ZVJlZiBtYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3Q7
CisKKyAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQoKSBjb25zdDsKK3ByaXZh
dGU6CisgICAgUVNjcmlwdEVuZ2luZSogcV9wdHI7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1f
Y29udGV4dDsKK307CisKKwordm9pZCBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29sbGVjdEdhcmJh
Z2UoKQoreworICAgIEpTR2FyYmFnZUNvbGxlY3QoY29udGV4dCgpKTsKK30KKworSlNWYWx1ZVJl
ZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoZG91YmxlIG51bWJlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCgpLCBudW1iZXIpOworfQor
SlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoaW50IG51bWJlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCgpLCBudW1iZXIp
OworfQorSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUodWludCBu
dW1iZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQoKSwg
bnVtYmVyKTsKK30KK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVl
KGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dCgpLCBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhzdHJpbmcpKTsKK30K
K0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKGJvb2wgdmFsdWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0KCksIHZhbHVl
KTsKK30KK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKFFTY3Jp
cHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKSBjb25zdAoreworICAgIGlmICh2YWx1ZSA9PSBR
U2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVsbChj
b250ZXh0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KCkpOwor
fQorCitKU0dsb2JhbENvbnRleHRSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6OmNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKKworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuY3BwIGIvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMC4uZTU3ZGJiNwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0dmFsdWUuY3BwCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKworI2luY2x1
ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lX3AuaCIKKyNpbmNs
dWRlICJxc2NyaXB0dmFsdWVfcC5oIgorI2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KKworCisv
KiEKKyAgICBDb25zdHJ1Y3RzIGFuIGludmFsaWQgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpR
U2NyaXB0VmFsdWUoKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoKSkKK3t9
CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUg
d2l0aCBhIGJvb2xlYW4gXGEgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUo
Ym9vbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHZhbHVlKSkK
K3t9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFs
dWUgd2l0aCBhIG51bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1
ZShpbnQgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkp
Cit7fQorCisvKiEKKyAgXHNpbmNlIDQuNQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZh
bHVlIHdpdGggYSBudW1iZXIgXGEgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFs
dWUodWludCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHZhbHVl
KSkKK3t9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0
VmFsdWUgd2l0aCBhIG51bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRW
YWx1ZShxcmVhbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHZh
bHVlKSkKK3t9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2Ny
aXB0VmFsdWUgd2l0aCBhIHN0cmluZyBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3Jp
cHRWYWx1ZShjb25zdCBRU3RyaW5nJiB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKHZhbHVlKSkKK3t9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0
cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIHNwZWNpYWwgXGEgdmFsdWUuCisqLworUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUoU3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogZF9wdHIobmV3
IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUpKQore30KKworLyohCisgIFxzaW5jZSA0LjUKKwor
ICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgc3RyaW5nIFxhIHZhbHVlLgor
Ki8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKQorICAgIDog
ZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoUVN0cmluZzo6ZnJvbVV0ZjgodmFsdWUpKSkK
K3t9CisKKy8qIQorICAgIEJsb2NrIGF1dG9tYXRpYyBjb252ZXJ0aW9uIHRvIGJvb2wKKyAgICBc
aW50ZXJuYWwKKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZSh2b2lkKiBkKQoreworICAg
IFFfQVNTRVJUKGZhbHNlKTsKK30KKy8qIQorICAgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZh
bHVlIGZyb20gcHJpdmF0ZQorICAgIFxpbnRlcm5hbAorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlw
dFZhbHVlKFFTY3JpcHRWYWx1ZVByaXZhdGUqIGQpCisgICAgOiBkX3B0cihkKQore30KKworCitR
U2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGJvb2wgdmFs
dWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkK
K3t9CitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGlu
dCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgdmFs
dWUpKQore30KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2lu
ZSwgdWludCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2lu
ZSwgdmFsdWUpKQore30KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUq
IGVuZ2luZSwgcXJlYWwgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0
ZShlbmdpbmUsIHZhbHVlKSkKK3t9CitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0
RW5naW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFT
Y3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7fQorUVNjcmlwdFZhbHVlOjpRU2Ny
aXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICA6
IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgUVN0cmluZzo6ZnJvbVV0Zjgo
dmFsdWUpKSkKK3t9CitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lICpl
bmdpbmUsIFNwZWNpYWxWYWx1ZSB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQ
cml2YXRlKGVuZ2luZSwgdmFsdWUpKQore30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNj
cmlwdFZhbHVlIHRoYXQgaXMgYSBjb3B5IG9mIFxhIG90aGVyLgorCisgIE5vdGUgdGhhdCBpZiBc
YSBvdGhlciBpcyBhbiBvYmplY3QgKGkuZS4sIGlzT2JqZWN0KCkgd291bGQgcmV0dXJuCisgIHRy
dWUpLCB0aGVuIG9ubHkgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlzIGNv
cGllZCBpbnRvCisgIHRoZSBuZXcgc2NyaXB0IHZhbHVlIChpLmUuLCB0aGUgb2JqZWN0IGl0c2Vs
ZiBpcyBub3QgY29waWVkKS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShjb25zdCBR
U2NyaXB0VmFsdWUmIG90aGVyKQorICAgIDogZF9wdHIob3RoZXIuZF9wdHIpCit7fQorCisvKiEK
KyAgICBEZXN0cm95cyB0aGlzIFFTY3JpcHRWYWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6On5RU2Ny
aXB0VmFsdWUoKQore30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1
ZSBpcyB2YWxpZDsgb3RoZXJ3aXNlIHJldHVybnMKKyAgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0
VmFsdWU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNWYWxpZCgpOwor
fQorLyohCisgIFxzaW5jZSA0LjUKKworICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFs
dWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIEJvb2xlYW47CisgIG90aGVyd2lzZSByZXR1cm5z
IGZhbHNlLgorCisgIFxzYSB0b0Jvb2woKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Jvb2wo
KSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNCb29sKCk7Cit9CisvKiEKKyAgXG9ic29s
ZXRlCisKKyAgVXNlIGlzQm9vbCgpIGluc3RlYWQuCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFT
Y3JpcHRWYWx1ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgQm9vbGVhbjsKKyAgb3RoZXJ3aXNl
IHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc0Jvb2woKTsKK30KKy8qIQorICBSZXR1cm5zIHRydWUg
aWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bWJlcjsKKyAg
b3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIHRvTnVtYmVyKCkKKyovCitib29sIFFT
Y3JpcHRWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNOdW1i
ZXIoKTsKK30KKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2Yg
dGhlIHByaW1pdGl2ZSB0eXBlIE51bGw7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisg
IFxzYSBRU2NyaXB0RW5naW5lOjpudWxsVmFsdWUoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjpp
c051bGwoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNOdWxsKCk7Cit9CisvKiEKKyAg
UmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlw
ZSBTdHJpbmc7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSB0b1N0cmluZygp
CisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZF9wdHItPmlzU3RyaW5nKCk7Cit9CisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlw
dFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlwZSBVbmRlZmluZWQ7CisgIG90aGVyd2lzZSBy
ZXR1cm5zIGZhbHNlLgorCisgIFxzYSBRU2NyaXB0RW5naW5lOjp1bmRlZmluZWRWYWx1ZSgpCisq
LworYm9vbCBRU2NyaXB0VmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZF9wdHItPmlzVW5kZWZpbmVkKCk7Cit9Citib29sIFFTY3JpcHRWYWx1ZTo6aXNFcnJvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc0Vycm9yKCk7Cit9CisKKy8qIQorICBSZXR1cm5z
IHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIE9iamVjdCB0eXBlOyBvdGhlcndp
c2UKKyAgcmV0dXJucyBmYWxzZS4KKworICBOb3RlIHRoYXQgZnVuY3Rpb24gdmFsdWVzLCB2YXJp
YW50IHZhbHVlcywgYW5kIFFPYmplY3QgdmFsdWVzIGFyZQorICBvYmplY3RzLCBzbyB0aGlzIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3Igc3VjaCB2YWx1ZXMuCisKKyAgXHNhIHRvT2JqZWN0KCks
IFFTY3JpcHRFbmdpbmU6Om5ld09iamVjdCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzT2Jq
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzT2JqZWN0KCk7Cit9CisKKy8qIQor
ICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYSBmdW5jdGlvbjsgb3RoZXJ3
aXNlIHJldHVybnMKKyAgZmFsc2UuCisKKyAgXHNhIGNhbGwoKQorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlOjppc0Z1bmN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzRnVuY3Rpb24o
KTsKK30KKworLyohCisgIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRW
YWx1ZSwgYXMgZGVmaW5lZCBpbgorICBcbHtFQ01BLTI2Mn0gc2VjdGlvbiA5LjgsICJUb1N0cmlu
ZyIuCisKKyAgTm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCwgY2Fs
bGluZyB0aGlzIGZ1bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlwdCBlbmdp
bmUsIHNpbmNlIHRoZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB0b1N0cmluZygp
IGZ1bmN0aW9uIChhbmQgcG9zc2libHkgdmFsdWVPZigpKSBpbiBhbgorICBhdHRlbXB0IHRvIGNv
bnZlcnQgdGhlIG9iamVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkKKyAgcmVzdWx0
aW5nIGluIGFuIHVuY2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSBpc1N0cmluZygp
CisqLworUVN0cmluZyBRU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZF9wdHItPnRvU3RyaW5nKCk7Cit9CitxcmVhbCBRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvTnVtYmVyKCk7Cit9Citib29sIFFTY3JpcHRW
YWx1ZTo6dG9Cb29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvQm9vbCgpOworfQor
Ym9vbCBRU2NyaXB0VmFsdWU6OnRvQm9vbGVhbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRy
LT50b0Jvb2woKTsKK30KK3FyZWFsIFFTY3JpcHRWYWx1ZTo6dG9JbnRlZ2VyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZF9wdHItPnRvSW50ZWdlcigpOworfQorcWludDMyIFFTY3JpcHRWYWx1ZTo6
dG9JbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0ludDMyKCk7Cit9CitxdWlu
dDMyIFFTY3JpcHRWYWx1ZTo6dG9VSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+
dG9VSW50MzIoKTsKK30KK3F1aW50MTYgUVNjcmlwdFZhbHVlOjp0b1VJbnQxNigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGRfcHRyLT50b1VJbnQxNigpOworfQorCitRU2NyaXB0VmFsdWUgUVNjcmlw
dFZhbHVlOjpjYWxsKGNvbnN0IFFTY3JpcHRWYWx1ZSYgdGhpc09iamVjdCwgY29uc3QgUVNjcmlw
dFZhbHVlTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gZF9wdHItPmNhbGwodGhpc09iamVjdC5k
X3B0ci5kYXRhKCksIGFyZ3MpOworfQorCitRU2NyaXB0RW5naW5lKiBRU2NyaXB0VmFsdWU6OmVu
Z2luZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZF9w
dHItPmVuZ2luZSgpKTsKK30KKworUVNjcmlwdFZhbHVlJiBRU2NyaXB0VmFsdWU6Om9wZXJhdG9y
PShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKQoreworICAgIGRfcHRyID0gb3RoZXIuZF9wdHI7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKGNvbnN0
IFFTY3JpcHRWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyID09IG90aGVy
LmRfcHRyIHx8IGRfcHRyLT5lcXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7
Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlOjpzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFs
dWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ciA9PSBvdGhlci5kX3B0ciB8fCBk
X3B0ci0+c3RyaWN0bHlFcXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7Cit9
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlLmggYi9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uYWJlNWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0dmFsdWUuaApAQCAtMCwwICsxLDk3IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIHFzY3JpcHR2YWx1ZV9oCisjZGVmaW5lIHFzY3JpcHR2YWx1ZV9oCisKKyNpbmNs
dWRlIDxRdENvcmUvcWxpc3QuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKwor
Y2xhc3MgUVNjcmlwdEVuZ2luZTsKK2NsYXNzIFFTY3JpcHRWYWx1ZVByaXZhdGU7CisKK2NsYXNz
IFFTY3JpcHRWYWx1ZTsKK3R5cGVkZWYgUUxpc3Q8UVNjcmlwdFZhbHVlPiBRU2NyaXB0VmFsdWVM
aXN0OworCitjbGFzcyBRU2NyaXB0VmFsdWUgeworcHVibGljOiAgICAKKyAgICBlbnVtIFNwZWNp
YWxWYWx1ZSB7CisgICAgICAgIE51bGxWYWx1ZSwKKyAgICAgICAgVW5kZWZpbmVkVmFsdWUKKyAg
ICB9OworCisgICAgUVNjcmlwdFZhbHVlKCk7CisgICAgUVNjcmlwdFZhbHVlKGJvb2wgdmFsdWUp
OworICAgIFFTY3JpcHRWYWx1ZShpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZSh1aW50IHZh
bHVlKTsKKyAgICBRU2NyaXB0VmFsdWUocXJlYWwgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShj
b25zdCBRU3RyaW5nJiB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVl
KTsKKyAgICBRU2NyaXB0VmFsdWUoU3BlY2lhbFZhbHVlIHZhbCk7CisgICAgUVNjcmlwdFZhbHVl
KGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIpOworCisgICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRF
bmdpbmUqIGVuZ2luZSwgYm9vbCB2YWwpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5l
KiBlbmdpbmUsIGludCB2YWwpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdp
bmUsIHVpbnQgdmFsKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBx
cmVhbCB2YWwpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0
IFFTdHJpbmcmIHZhbCk7CisgICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwg
Y29uc3QgY2hhciogdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdp
bmUsIFNwZWNpYWxWYWx1ZSB2YWwpOworCisgICAgflFTY3JpcHRWYWx1ZSgpOworCisgICAgUVNj
cmlwdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFZhbHVlJik7CisgICAgYm9vbCBlcXVh
bHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBzdHJpY3RseUVx
dWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdDsKKworICAgIFFTY3JpcHRFbmdp
bmUqIGVuZ2luZSgpIGNvbnN0OworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgYm9v
bCBpc0Jvb2woKSBjb25zdDsKKyAgICBib29sIGlzQm9vbGVhbigpIGNvbnN0OworICAgIGJvb2wg
aXNOdW1iZXIoKSBjb25zdDsKKyAgICBib29sIGlzRnVuY3Rpb24oKSBjb25zdDsKKyAgICBib29s
IGlzTnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKyAgICBib29sIGlz
VW5kZWZpbmVkKCkgY29uc3Q7CisgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OworICAgIGJvb2wg
aXNFcnJvcigpIGNvbnN0OworCisgICAgUVN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIHFy
ZWFsIHRvTnVtYmVyKCkgY29uc3Q7CisgICAgYm9vbCB0b0Jvb2woKSBjb25zdDsKKyAgICBib29s
IHRvQm9vbGVhbigpIGNvbnN0OworICAgIHFyZWFsIHRvSW50ZWdlcigpIGNvbnN0OworICAgIHFp
bnQzMiB0b0ludDMyKCkgY29uc3Q7CisgICAgcXVpbnQzMiB0b1VJbnQzMigpIGNvbnN0OworICAg
IHF1aW50MTYgdG9VSW50MTYoKSBjb25zdDsKKworICAgIFFTY3JpcHRWYWx1ZSBjYWxsKGNvbnN0
IFFTY3JpcHRWYWx1ZSYgdGhpc09iamVjdCA9IFFTY3JpcHRWYWx1ZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFTY3JpcHRWYWx1ZUxpc3QmIGFyZ3MgPSBRU2NyaXB0VmFsdWVMaXN0
KCkpOworCitwcml2YXRlOgorICAgIFFTY3JpcHRWYWx1ZSh2b2lkKik7CisgICAgUVNjcmlwdFZh
bHVlKFFTY3JpcHRWYWx1ZVByaXZhdGUqKTsKKworICAgIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBv
aW50ZXI8UVNjcmlwdFZhbHVlUHJpdmF0ZT4gZF9wdHI7CisKKyAgICBmcmllbmQgY2xhc3MgUVNj
cmlwdFZhbHVlUHJpdmF0ZTsKK307CisKKyNlbmRpZiAvLyBxc2NyaXB0dmFsdWVfaApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmggYi9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlX3AuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwLi4yZDg3YTAxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHR2YWx1ZV9wLmgKQEAgLTAsMCArMSw2MDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgcXNjcmlwdHZhbHVlX3BfaAorI2RlZmluZSBxc2NyaXB0dmFsdWVfcF9oCisKKyNp
bmNsdWRlICJxc2NyaXB0Y29udmVydGVyX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lX3Au
aCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRkYXRhLmg+CisKK2NsYXNzIFFT
Y3JpcHRFbmdpbmU7CitjbGFzcyBRU2NyaXB0VmFsdWU7CisKKy8qCisgIFxpbnRlcm5hbAorICBc
Y2xhc3MgUVNjcmlwdFZhbHVlUHJpdmF0ZQorCisgIEltcGxlbWVudGF0aW9uIG9mIFFTY3JpcHRW
YWx1ZS4KKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGEgc3RhdGUgbWFjaGluZS4g
VGhlIHN0YXRlcyBuYW1lcyBhcmUgaW5jbHVkZWQgaW4KKyAgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
U3RhdGVzLiBFYWNoIG1ldGhvZCBzaG91bGQgY2hlY2sgZm9yIHRoZSBjdXJyZW50IHN0YXRlIGFu
ZCB0aGVuIHBlcmZvcm0gYQorICBjb3JyZWN0IGFjdGlvbi4KKworICBTdGF0ZXM6CisgICAgSW52
YWxpZCAtPiBRU1ZQIGlzIGludmFsaWQsIG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlIGFi
b3V0IGNsYXNzIG1lbWJlcnMuCisgICAgQ1N0cmluZyAtPiBRU1ZQIGlzIGNyZWF0ZWQgZnJvbSBR
U3RyaW5nIG9yIGNvbnN0IGNoYXIqIGFuZCBubyBKU0MgZW5naW5lIGhhcyBiZWVuIGFzc29jaWF0
ZWQgeWV0LgorICAgICAgICBDdXJyZW50IHZhbHVlIGlzIGtlcHQgaW4gbV9zdHJpbmcsIG90aGVy
IG1lbWJlcnMgbWF5IGJlIHVuaXRpYWxpemVkLgorICAgIENOdW1iZXIgLT4gUVNWUCBpcyBjcmVh
dGVkIGZyb20gaW50LCB1aW50LCBkb3VibGUuLi4gYW5kIG5vIEpTQyBlbmdpbmUgaGFzIGJlZW4g
YmluZCB5ZXQuIEN1cnJlbnQKKyAgICAgICAgdmFsdWUgaXMga2VwdCBpbiBtX251bWJlciwgb3Ro
ZXIgbWVtYmVycyBtYXkgYmUgaW5pdGlhbGl6ZWQuCisgICAgQ0Jvb2wgLT4gUVNWUCBpcyBjcmVh
dGVkIGZyb20gYm9vbCBhbmQgbm8gSlNDIGVuZ2luZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHlldC4g
Q3VycmVudCB2YWx1ZSBpcyBrZXB0CisgICAgICAgIGluIG1fbnVtYmVyLCBvdGhlciBtZW1iZXJz
IG1heSBiZSB1bml0aWFsaXplZC4KKyAgICBDU3BlY2lhbCAtPiBRU1ZQIGlzIFVuZGVmaW5lZCBv
ciBOdWxsLCBidXQgYSBKU0MgZW5naW5lIGhhc24ndCBiZWVuIGFzc29jaWF0ZWQgeWV0LCBjdXJy
ZW50IHZhbHVlCisgICAgICAgIGlzIGtlcHQgaW4gbV9udW1iZXIgKGNhc3Qgb2YgUVNjcmlwdFZh
bHVlOjpTcGVjaWFsVmFsdWUpCisgICAgSlNWYWx1ZSAtPiBRU1ZQIGlzIGFzc29jaWF0ZWQgd2l0
aCBlbmdpbmUsIGJ1dCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhYm91dCByZWFsIHR5cGUsIHRo
ZSBzdGF0ZQorICAgICAgICBoYXZlIHJlYWxseSBzaG9ydCBsaXZlIGN5Y2xlLiBOb3JtYWxseSBp
dCBpcyBjcmVhdGVkIGFzIGEgZnVuY3Rpb24gY2FsbCByZXN1bHQuCisgICAgSlNOYXRpdmUgLT4g
UVNWUCBpcyBhc3NvY2lhdGVkIHdpdGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlz
bid0IGEgSmF2YVNjcmlwdCBvYmplY3QuCisgICAgSlNPYmplY3QgLT4gUVNWUCBpcyBhc3NvY2lh
dGVkIHdpdGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlzIGEgSmF2YVNjcmlwdCBv
YmplY3QuCisKKyAgRWFjaCBzdGF0ZSBrZWVwIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8g
aW52b2tlIGFsbCBtZXRob2RzLCBpZiBub3QgaXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8KKyAgYSBw
cm9wZXIgc3RhdGUuIENoYW5nZWQgc3RhdGUgc2hvdWxkbid0IGJlIHJldmVydGVkLgorKi8KKwor
Y2xhc3MgUVNjcmlwdFZhbHVlUHJpdmF0ZQorICAgIDogcHVibGljIFFTaGFyZWREYXRhIHsKK3B1
YmxpYzoKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGdldChjb25zdCBR
U2NyaXB0VmFsdWUmIHEpOworICAgIGlubGluZSBzdGF0aWMgUVNjcmlwdFZhbHVlIGdldChjb25z
dCBRU2NyaXB0VmFsdWVQcml2YXRlKiBkKTsKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1
ZSBnZXQoUVNjcmlwdFZhbHVlUHJpdmF0ZSogZCk7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVl
UHJpdmF0ZSgpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKFFTdHJpbmcgc3RyaW5n
KTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShib29sIHZhbHVlKTsKKyAgICBpbmxp
bmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShpbnQgbnVtYmVyKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZh
bHVlUHJpdmF0ZSh1aW50IG51bWJlcik7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUo
cXJlYWwgbnVtYmVyKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShRU2NyaXB0VmFs
dWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSk7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0
ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGJvb2wgdmFsdWUpOworICAgIGlubGluZSBR
U2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50IHZhbHVl
KTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBl
bmdpbmUsIHVpbnQgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0
IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgcXJlYWwgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0
VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYg
dmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdp
bmUqIGVuZ2luZSwgUVNjcmlwdFZhbHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpOworCisgICAgaW5s
aW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2lu
ZSwgSlNWYWx1ZVJlZiB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29u
c3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmpl
Y3RSZWYgb2JqZWN0KTsKKworICAgIGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICBp
bmxpbmUgYm9vbCBpc0Jvb2woKTsKKyAgICBpbmxpbmUgYm9vbCBpc051bWJlcigpOworICAgIGlu
bGluZSBib29sIGlzTnVsbCgpOworICAgIGlubGluZSBib29sIGlzU3RyaW5nKCk7CisgICAgaW5s
aW5lIGJvb2wgaXNVbmRlZmluZWQoKTsKKyAgICBpbmxpbmUgYm9vbCBpc0Vycm9yKCk7CisgICAg
aW5saW5lIGJvb2wgaXNPYmplY3QoKTsKKyAgICBpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uKCk7CisK
KyAgICBpbmxpbmUgUVN0cmluZyB0b1N0cmluZygpOworICAgIGlubGluZSBxcmVhbCB0b051bWJl
cigpIGNvbnN0OworICAgIGlubGluZSBib29sIHRvQm9vbCgpIGNvbnN0OworICAgIGlubGluZSBx
cmVhbCB0b0ludGVnZXIoKSBjb25zdDsKKyAgICBpbmxpbmUgcWludDMyIHRvSW50MzIoKSBjb25z
dDsKKyAgICBpbmxpbmUgcXVpbnQzMiB0b1VJbnQzMigpIGNvbnN0OworICAgIGlubGluZSBxdWlu
dDE2IHRvVUludDE2KCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBlcXVhbHMoUVNjcmlwdFZh
bHVlUHJpdmF0ZSogb3RoZXIpOworICAgIGlubGluZSBib29sIHN0cmljdGx5RXF1YWxzKGNvbnN0
IFFTY3JpcHRWYWx1ZVByaXZhdGUqIG90aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBhc3Np
Z25FbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSk7CisKKyAgICBpbmxpbmUgUVNj
cmlwdFZhbHVlUHJpdmF0ZSogY2FsbChjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiAsIGNvbnN0
IFFTY3JpcHRWYWx1ZUxpc3QmIGFyZ3MpOworCisgICAgaW5saW5lIGJvb2wgaXNJbmhlcml0ZWRG
cm9tKGNvbnN0IGNoYXIqKTsKKworICAgIGlubGluZSBib29sIGlzSlNCYXNlZCgpIGNvbnN0Owor
ICAgIGlubGluZSBib29sIGlzTnVtYmVyQmFzZWQoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBp
c1N0cmluZ0Jhc2VkKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQoKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiB2YWx1ZSgpIGNvbnN0OworICAg
IGlubGluZSBKU09iamVjdFJlZiBvYmplY3QoKSBjb25zdDsKKyAgICBpbmxpbmUgUVNjcmlwdEVu
Z2luZVByaXZhdGUqIGVuZ2luZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFBsZWFzZSwg
dXBkYXRlIGNsYXNzIGRvY3VtZW50YXRpb24gd2hlbiB5b3UgY2hhbmdlIHRoZSBlbnVtLgorICAg
IGVudW0gU3RhdGVzIHsKKyAgICAgICAgSW52YWxpZCA9IDAsCisgICAgICAgIENTdHJpbmcgPSAw
eDEwMDAsCisgICAgICAgIENOdW1iZXIsCisgICAgICAgIENCb29sLAorICAgICAgICBDU3BlY2lh
bCwKKyAgICAgICAgSlNWYWx1ZSA9IDB4MjAwMCwgLy8gSlMgdmFsdWVzIGFyZSBlcXVhbCBvciBo
aWdoZXIgdGhlbiB0aGlzIHZhbHVlLgorICAgICAgICBKU05hdGl2ZSwKKyAgICAgICAgSlNPYmpl
Y3QKKyAgICB9IG1fc3RhdGU7CisgICAgUVNjcmlwdEVuZ2luZVB0ciBtX2VuZ2luZTsKKyAgICBR
U3RyaW5nIG1fc3RyaW5nOworICAgIHFyZWFsIG1fbnVtYmVyOworICAgIEpTVmFsdWVSZWYgbV92
YWx1ZTsKKyAgICBKU09iamVjdFJlZiBtX29iamVjdDsKK307CisKK1FTY3JpcHRWYWx1ZVByaXZh
dGUqIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChjb25zdCBRU2NyaXB0VmFsdWUmIHEpIHsgcmV0
dXJuIHEuZF9wdHIuZGF0YSgpOyB9CitRU2NyaXB0VmFsdWUgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
Z2V0KGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqIGQpCit7CisgICAgcmV0dXJuIFFTY3JpcHRW
YWx1ZShjb25zdF9jYXN0PFFTY3JpcHRWYWx1ZVByaXZhdGUqPihkKSk7Cit9CitRU2NyaXB0VmFs
dWUgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KFFTY3JpcHRWYWx1ZVByaXZhdGUqIGQpCit7Cisg
ICAgcmV0dXJuIFFTY3JpcHRWYWx1ZShkKTsKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNj
cmlwdFZhbHVlUHJpdmF0ZSgpCisgICAgOiBtX3N0YXRlKEludmFsaWQpCit7fQorUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShRU3RyaW5nIHN0cmluZykKKyAgICA6IG1f
c3RhdGUoQ1N0cmluZykKKyAgICAsIG1fc3RyaW5nKHN0cmluZykKK3t9CitRU2NyaXB0VmFsdWVQ
cml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGJvb2wgdmFsdWUpCisgICAgOiBtX3N0YXRlKENC
b29sKQorICAgICwgbV9udW1iZXIodmFsdWUpCit7fQorUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNj
cmlwdFZhbHVlUHJpdmF0ZShpbnQgbnVtYmVyKQorICAgIDogbV9zdGF0ZShDTnVtYmVyKQorICAg
ICwgbV9udW1iZXIobnVtYmVyKQore30KK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1
ZVByaXZhdGUodWludCBudW1iZXIpCisgICAgOiBtX3N0YXRlKENOdW1iZXIpCisgICAgLCBtX251
bWJlcihudW1iZXIpCit7fQorUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0
ZShxcmVhbCBudW1iZXIpCisgICAgOiBtX3N0YXRlKENOdW1iZXIpCisgICAgLCBtX251bWJlcihu
dW1iZXIpCit7fQorUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShRU2Ny
aXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoQ1NwZWNpYWwpCisg
ICAgLCBtX251bWJlcih2YWx1ZSkKK3t9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRW
YWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBib29sIHZhbHVlKQorICAg
IDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRl
OjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIg
cGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDQm9vbDsKKyAgICAgICAg
bV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5l
LT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFs
dWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50IHZhbHVlKQorICAgIDog
bV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0
aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVtYmVyOworICAgICAgICBt
X251bWJlciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUt
Pm1ha2VKU1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1
ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZhbHVlKQorICAgIDog
bV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0
aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVtYmVyOworICAgICAgICBt
X251bWJlciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUt
Pm1ha2VKU1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1
ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBxcmVhbCB2YWx1ZSkKKyAgICA6
IG1fc3RhdGUoSlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
Z2V0KGVuZ2luZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBh
dGggcmVpbml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ051bWJlcjsKKyAgICAgICAg
bV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5l
LT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFs
dWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYgdmFs
dWUpCisgICAgOiBtX3N0YXRlKEpTTmF0aXZlKQorICAgICwgbV9lbmdpbmUoUVNjcmlwdEVuZ2lu
ZVByaXZhdGU6OmdldChlbmdpbmUpKQoreworICAgIGlmICghZW5naW5lKSB7CisgICAgICAgIC8v
IHNsb3dlciBwYXRoIHJlaW5pdGlhbGl6YXRpb24KKyAgICAgICAgbV9zdGF0ZSA9IENTdHJpbmc7
CisgICAgICAgIG1fc3RyaW5nID0gdmFsdWU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmFsdWUg
PSBtX2VuZ2luZS0+bWFrZUpTVmFsdWUodmFsdWUpOworfQorUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
UVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIFFTY3JpcHRW
YWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAs
IG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAo
IWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAg
ICAgIG1fc3RhdGUgPSBDU3BlY2lhbDsKKyAgICAgICAgbV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9
CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlw
dEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSkKKyAgICA6IG1fc3RhdGUo
SlNWYWx1ZSkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUq
PihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKKwore30KK1FTY3JpcHRWYWx1ZVByaXZh
dGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2lu
ZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYgb2JqZWN0KQorICAgIDogbV9zdGF0ZShK
U09iamVjdCkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUq
PihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fb2JqZWN0KG9iamVjdCkK
K3t9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgIT0gSW52YWxpZDt9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNCb29s
KCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIENCb29sOiByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIGlmIChpc09iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBLZWVwIGdvaW5nLgorICAgIGNhc2UgSlNOYXRp
dmU6CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQoKSwgdmFsdWUoKSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBR
U2NyaXB0VmFsdWVQcml2YXRlOjppc051bWJlcigpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBDTnVtYmVyOgorICAgICAgICByZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBK
U1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLy8gS2VlcCBnb2luZy4KKyAgICBjYXNlIEpTTmF0aXZlOgorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2
YXRlOjppc051bGwoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ1NwZWNp
YWw6CisgICAgICAgIHJldHVybiBtX251bWJlciA9PSAoaW50KVFTY3JpcHRWYWx1ZTo6TnVsbFZh
bHVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEtlZXAgZ29pbmcuCisgICAgY2FzZSBKU05h
dGl2ZToKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVJc051bGwoY29udGV4dCgpLCB2YWx1ZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmlzU3RyaW5nKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIENTdHJpbmc6IHJldHVybiB0cnVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAg
ICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEtlZXAgZ29pbmcuCisgICAgY2FzZSBKU05hdGl2ZToKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0KCksIHZhbHVlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNVbmRlZmlu
ZWQoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ1NwZWNpYWw6CisgICAg
ICAgIHJldHVybiBtX251bWJlciA9PSAoaW50KVFTY3JpcHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWU7
CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gS2VlcCBnb2luZy4KKyAgICBjYXNlIEpTTmF0aXZl
OgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQoKSwgdmFsdWUoKSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBR
U2NyaXB0VmFsdWVQcml2YXRlOjppc0Vycm9yKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIGlmICghaXNPYmplY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gS2VlcCBnb2luZy4KKyAgICBjYXNlIEpTT2JqZWN0
OgorICAgICAgICByZXR1cm4gaXNJbmhlcml0ZWRGcm9tKCJFcnJvciIpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6aXNPYmplY3QoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNP
YmplY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAg
bV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRp
b24gKi8gMCk7CisgICAgICAgIGlmICghb2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2Ny
aXB0VmFsdWVQcml2YXRlOjppc0Z1bmN0aW9uKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIG1fb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApOworICAgICAgICBpZiAoIW9iamVj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3N0YXRlID0gSlNPYmpl
Y3Q7CisgICAgICAgIC8vIEtlZXAgZ29pbmcuCisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAg
cmV0dXJuIEpTT2JqZWN0SXNGdW5jdGlvbihjb250ZXh0KCksIG9iamVjdCgpKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitRU3RyaW5nIFFTY3JpcHRW
YWx1ZVByaXZhdGU6OnRvU3RyaW5nKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBj
YXNlIEludmFsaWQ6IHJldHVybiBRU3RyaW5nKCk7CisgICAgY2FzZSBDQm9vbDogcmV0dXJuIG1f
bnVtYmVyID8gUVN0cmluZzo6ZnJvbUxhdGluMSgiVHJ1ZSIpIDogUVN0cmluZzo6ZnJvbUxhdGlu
MSgiRmFsc2UiKTsKKyAgICBjYXNlIENTdHJpbmc6IHJldHVybiBtX3N0cmluZzsKKyAgICBjYXNl
IENOdW1iZXI6IHJldHVybiBRU3RyaW5nOjpudW1iZXIobV9udW1iZXIpOworICAgIGNhc2UgQ1Nw
ZWNpYWw6IHJldHVybiBtX251bWJlciA9PSBRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSA/IFFTdHJp
bmc6OmZyb21MYXRpbjEoIk51bGwiKSA6IFFTdHJpbmc6OmZyb21MYXRpbjEoIlVuZGVmaW5lZCIp
OworICAgIGNhc2UgSlNWYWx1ZToKKyAgICBjYXNlIEpTTmF0aXZlOgorICAgIGNhc2UgSlNPYmpl
Y3Q6CisgICAgICAgIHJldHVybiBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApKTsKKyAgICB9
CisKKyAgICByZXR1cm4gUVN0cmluZygpOyAvLyBBdm9pZCBnY2Mgd2FybmluZywgdGhlIHJldHVy
biBzaG91bGRuJ3QgYmUgYWNjZXNzaWJsZS4KK30KKworcXJlYWwgUVNjcmlwdFZhbHVlUHJpdmF0
ZTo6dG9OdW1iZXIoKSBjb25zdAoreworICAgIC8vIFRPRE8gQ2hlY2sgaXQuCisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAg
Y2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihjb250ZXh0KCks
IHZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKKyAgICBjYXNlIENOdW1iZXI6CisgICAgY2Fz
ZSBDQm9vbDoKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIGNhc2UgSW52YWxpZDoKKyAg
ICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDU3RyaW5n
OgorICAgICAgICByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOworICAgIH0KKworICAgIHJldHVy
biAwOyAvLyBBdm9pZCBnY2Mgd2FybmluZywgdGhlIHJldHVybiBzaG91bGRuJ3QgYmUgYWNjZXNz
aWJsZS4KK30KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9Cb29sKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgY2FzZSBKU05hdGl2
ZToKKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0KCksIHZhbHVlKCkpOworICAgIGNhc2UgQ051bWJlcjoKKyAgICBjYXNlIENCb29sOgor
ICAgICAgICByZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBJbnZhbGlkOgorICAgIGNhc2UgQ1Nw
ZWNpYWw6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAg
IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOyAv
LyBBdm9pZCBnY2Mgd2FybmluZywgdGhlIHJldHVybiBzaG91bGRuJ3QgYmUgYWNjZXNzaWJsZS4K
K30KK3FyZWFsIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcigpIGNvbnN0Cit7CisgICAg
Ly8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICByZXR1cm4gdG9OdW1i
ZXIoKTsKK30KK3FpbnQzMiBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b0ludDMyKCkgY29uc3QKK3sK
KyAgICAvLyBUT0RPIGl0IGlzIG5vdCB0cnVlIGltcGxlbWVudGF0aW9uIQorICAgIHJldHVybiB0
b051bWJlcigpOworfQorcXVpbnQzMiBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b1VJbnQzMigpIGNv
bnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICBy
ZXR1cm4gdG9OdW1iZXIoKTsKK30KK3F1aW50MTYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9VSW50
MTYoKSBjb25zdAoreworICAgIC8vIFRPRE8gaXQgaXMgbm90IHRydWUgaW1wbGVtZW50YXRpb24h
CisgICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisKKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRl
OjplcXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZSogb3RoZXIpCit7CisgICAgaWYgKCFpc1ZhbGlk
KCkgfHwgIW90aGVyLT5pc1ZhbGlkKCkpIC8vIEludmFsaWQgc2hvdWxkIHJldHVybiBmYWxzZS4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fc3RhdGUgPT0gQ1NwZWNpYWwgJiYg
b3RoZXItPm1fc3RhdGUgPT0gQ1NwZWNpYWwpCisgICAgICAgIHJldHVybiBtX251bWJlciA9PSBv
dGhlci0+bV9udW1iZXI7CisKKyAgICBpZiAoaXNKU0Jhc2VkKCkgJiYgIW90aGVyLT5pc0pTQmFz
ZWQoKSkKKyAgICAgICAgb3RoZXItPmFzc2lnbkVuZ2luZShlbmdpbmUoKSk7CisgICAgZWxzZSBp
ZiAoIWlzSlNCYXNlZCgpICYmIG90aGVyLT5pc0pTQmFzZWQoKSkKKyAgICAgICAgb3RoZXItPmFz
c2lnbkVuZ2luZShvdGhlci0+ZW5naW5lKCkpOworICAgIGVsc2UgaWYgKGlzSlNCYXNlZCgpICYm
IG90aGVyLT5pc0pTQmFzZWQoKSAmJiBlbmdpbmUoKSAhPSBvdGhlci0+ZW5naW5lKCkpIHsKKyAg
ICAgICAgcVdhcm5pbmcoIlFTY3JpcHRWYWx1ZTo6ZXF1YWxzOiBjYW5ub3QgY29tcGFyZSB0byBh
IHZhbHVlIGNyZWF0ZWQgaW4gYSBkaWZmZXJlbnQgZW5naW5lIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWVzIGFyZSBiaW5kIHRvIHRoZSBzYW1lIGVu
Z2luZSBzbyB3ZSBjYW4gY2FsbCBpdCB0byBjb21wYXJlLgorICAgIHJldHVybiBKU1ZhbHVlSXNF
cXVhbChjb250ZXh0KCksIHZhbHVlKCksIG90aGVyLT52YWx1ZSgpLCAvKmV4Y2VwdGlvbiovIDAp
OworfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnN0cmljdGx5RXF1YWxzKGNvbnN0IFFT
Y3JpcHRWYWx1ZVByaXZhdGUqIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3N0YXRlICE9IG90
aGVyLT5tX3N0YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzSlNCYXNlZCgp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCgpLCB2YWx1ZSgp
LCBvdGhlci0+dmFsdWUoKSk7CisgICAgaWYgKGlzU3RyaW5nQmFzZWQoKSkKKyAgICAgICAgcmV0
dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsKKyAgICBpZiAoaXNOdW1iZXJCYXNlZCgp
KQorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gb3RoZXItPm1fbnVtYmVyOworCisgICAgcmV0
dXJuIGZhbHNlOyAvLyBJbnZhbGlkIHN0YXRlLgorfQorCit2b2lkIFFTY3JpcHRWYWx1ZVByaXZh
dGU6OmFzc2lnbkVuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lKQoreworICAgIHN3
aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ0Jvb2w6CisgICAgICAgIG1fdmFsdWUgPSBlbmdp
bmUtPm1ha2VKU1ZhbHVlKChib29sKW1fbnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU3RyaW5nOgorICAgICAgICBtX3ZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZShtX3N0cmlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ051bWJlcjoKKyAgICAgICAgbV92YWx1ZSA9
IGVuZ2luZS0+bWFrZUpTVmFsdWUobV9udW1iZXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG8KKyAgICB9CisgICAgbV9lbmdp
bmUgPSBjb25zdF9jYXN0PFFTY3JpcHRFbmdpbmVQcml2YXRlKj4oZW5naW5lKTsKKyAgICBtX3N0
YXRlID0gSlNOYXRpdmU7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRWYWx1ZVBy
aXZhdGU6OmNhbGwoY29uc3QgUVNjcmlwdFZhbHVlUHJpdmF0ZSogLCBjb25zdCBRU2NyaXB0VmFs
dWVMaXN0ICZhcmdzKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNWYWx1
ZToKKyAgICAgICAgbV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgp
LCAvKiBleGNlcHRpb24gKi8gMCk7CisgICAgICAgIGlmICghb2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBKU1ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlOworICAgICAgICB9CisgICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAg
ICAgLy8gS2VlcCBnb2luZy4KKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBDb252ZXJ0cyBhbGwgYXJndW1lbnRzIGFuZCBiaW5kcyB0byB0aGUgZW5naW5lLgor
ICAgICAgICAgICAgaW50IGFyZ2MgPSBhcmdzLnNpemUoKTsKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWYgYXJndlthcmdjXTsKKyAgICAgICAgICAgIFFTY3JpcHRWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGkgPSBhcmdzLmNvbnN0QmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBp
ICE9IGFyZ3MuY29uc3RFbmQoKTsgaisrLCBpKyspIHsKKyAgICAgICAgICAgICAgICBRU2NyaXB0
VmFsdWVQcml2YXRlKiB2YWx1ZSA9IFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldCgqaSk7CisgICAg
ICAgICAgICAgICAgdmFsdWUtPmFzc2lnbkVuZ2luZShlbmdpbmUoKSk7CisgICAgICAgICAgICAg
ICAgYXJndltqXSA9IHZhbHVlLT52YWx1ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBNYWtlcyB0aGUgY2FsbAorICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAw
OworICAgICAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGNvbnRleHQoKSwgb2JqZWN0KCksIC8qIHRoaXNPYmplY3QgKi8gMCwgYXJnYywgYXJndiwgJmV4
Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBleGNlcHRpb24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSgpLCBleGNlcHRp
b24pOworICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiAhZXhjZXB0aW9uKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUoKSwgcmVzdWx0KTsKKyAg
ICAgICAgfQorICAgICAgICAvLyB0aGlzIFFTViBpcyBub3QgYSBmdW5jdGlvbiA8LS0gIXJlc3Vs
dCAmJiAhZXhjZXB0aW9uLiBLZWVwIGdvaW5nLgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZTsKKyAgICB9Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2
YXRlKiBRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUoKSBjb25zdAoreworICAgIC8vIEFzIGxv
bmcgYXMgbV9lbmdpbmUgaXMgYW4gYXV0b2luaXRpYWxpemF0ZWQgcG9pbnRlciB3ZSBjYW4gc2Fm
ZWx5IHJldHVybiBpdCB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgY3VycmVudCBzdGF0ZS4KKyAg
ICByZXR1cm4gbV9lbmdpbmUuZGF0YSgpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYgUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2Vk
KCkpOworICAgIHJldHVybiBtX2VuZ2luZS0+Y29udGV4dCgpOworfQorSlNWYWx1ZVJlZiBRU2Ny
aXB0VmFsdWVQcml2YXRlOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2Vk
KCkpOworICAgIHJldHVybiBtX3ZhbHVlOworfQorSlNPYmplY3RSZWYgUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6b2JqZWN0KCkgY29uc3QKK3sKKyAgICBRX0FTU0VSVChpc0pTQmFzZWQoKSk7CisgICAg
cmV0dXJuIG1fb2JqZWN0OworfQorCisvKiEKKyAgXGludGVybmFsCisgIFJldHVybiB0cnVlIGlm
IFFTViBpcyBjcmVhdGVkIGZyb20gY29uc3RydWN0ZXIgdGhhdCBuYW1lIGlzIGdpdmVuIGFzIHBh
cmFtZXRlciwgaXQgaGF2ZSB0byBiZSBhCisgIGJ1aWxkLWluIHR5cGUKKyovCitib29sIFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmlzSW5oZXJpdGVkRnJvbShjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250
ZXh0KCkpOworICAgIEpTVmFsdWVSZWYgZXJyb3IgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQoKSwgZ2xvYmFsT2JqZWN0LCBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhuYW1lKSwgMCk7
CisgICAgcmV0dXJuIEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3Rvcihjb250ZXh0KCksIHZh
bHVlKCksIEpTVmFsdWVUb09iamVjdChjb250ZXh0KCksIGVycm9yLCAvKiBleGNlcHRpb24gKi8g
MCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKK30KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm4g
dHJ1ZSBpZiBRU1YgaGF2ZSBhbiBlbmdpbmUgYXNzb2NpYXRlZAorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6aXNKU0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBKU1ZhbHVl
OyB9CisvKiEKKyAgXGludGVybmFsCisgIFJldHVybiB0cnVlIGlmIGN1cnJlbnQgdmFsdWUgb2Yg
UVNWIGlzIHBsYWNlZCBpbiBtX251bWJlcgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
aXNOdW1iZXJCYXNlZCgpIGNvbnN0IHsgcmV0dXJuICFpc0pTQmFzZWQoKSAmJiAhaXNTdHJpbmdC
YXNlZCgpICYmIG1fc3RhdGUgIT0gSW52YWxpZDsgfQorLyohCisgIFxpbnRlcm5hbAorICBSZXR1
cm4gdHJ1ZSBpZiBjdXJyZW50IHZhbHVlIG9mIFFTViBpcyBwbGFjZWQgaW4gbV9zdHJpbmcKKyov
Citib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzU3RyaW5nQmFzZWQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IENTdHJpbmc7IH0KKworCisKKyNlbmRpZiAvLyBxc2NyaXB0dmFsdWVfcF9o
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRzY3JpcHRnbG9iYWwuaCBiL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9xdHNjcmlwdGdsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLjI5NzQ5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXRzY3JpcHRnbG9iYWwuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIHF0c2NyaXB0Z2xvYmFsX2gKKyNkZWZpbmUgcXRzY3JpcHRnbG9iYWxf
aAorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworI2lmIGRlZmluZWQoUV9PU19XSU4p
IHx8IGRlZmluZWQoUV9PU19TWU1CSUFOKQorIyAgaWYgZGVmaW5lZChRVF9OT0RMTCkKKyMgIGVs
aWYgZGVmaW5lZChRVF9NQUtFRExMKSAgICAgICAgLyogY3JlYXRlIGEgUXQgRExMIGxpYnJhcnkg
Ki8KKyMgICAgaWYgZGVmaW5lZChRVF9CVUlMRF9KQVZBU0NSSVBUX0xJQikKKyMgICAgICBkZWZp
bmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfRVhQT1JUCisjICAgIGVsc2UKKyMgICAgICBk
ZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfSU1QT1JUCisjICAgIGVuZGlmCisjICBl
bGlmIGRlZmluZWQoUVRfRExMKSAvKiB1c2UgYSBRdCBETEwgbGlicmFyeSAqLworIyAgICBkZWZp
bmUgUV9KQVZBU0NSSVBUX0VYUE9SVAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChR
VF9TSEFSRUQpCisjICBkZWZpbmUgUV9KQVZBU0NSSVBUX0VYUE9SVCBRX0RFQ0xfRVhQT1JUCisj
ZWxzZQorIyAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQKKyNlbmRpZgorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJLaXQucHJvCmluZGV4IDg0ZTc3Y2EuLmRkMjlhNzYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpAQCAtMjAsNCArMjAsOSBA
QCBTVUJESVJTICs9IFwKIAogfQogCitidWlsZC1xamF2YXNjcmlwdCB7CisgICAgU1VCRElSUyAr
PSBcCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvCit9CisK
IGluY2x1ZGUoV2ViS2l0L3F0L2RvY3MvZG9jcy5wcmkpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
ZG9jcy9xdHdlYmtpdC5xZG9jY29uZiBiL1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25m
CmluZGV4IDhlZThmNjkuLjI5MmMxMjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9kb2NzL3F0d2Vi
a2l0LnFkb2Njb25mCisrKyBiL1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCkBAIC00
LDcgKzQsNyBAQCBwcm9qZWN0ICAgICA9IHF0d2Via2l0CiBkZXNjcmlwdGlvbiA9ICJRdCBXZWJL
aXQgQVBJIERvY3VtZW50YXRpb24iCiAKIGhlYWRlcmRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9B
cGkKLXNvdXJjZWRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9BcGkgJFNSQ0RJUi9XZWJLaXQvcXQv
ZG9jcworc291cmNlZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9x
dC9kb2NzICRTUkNESVIvSmF2YVNjcmlwdENvcmUvcXQvYXBpCiBvdXRwdXRkaXIgPSAkT1VUUFVU
X0RJUi9kb2MvaHRtbAogb3V0cHV0Zm9ybWF0cyA9IEhUTUwKIHNvdXJjZXMuZmlsZWV4dGVuc2lv
bnMgID0gIiouY3BwICouZG9jICoucWRvYyAqLmgiCg==
</data>
<flag name="commit-queue"
          id="29254"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46915</attachid>
            <date>2010-01-19 08:39:03 -0800</date>
            <delta_ts>2010-01-20 03:45:37 -0800</delta_ts>
            <desc>Autotests v3</desc>
            <filename>autoV3.diff</filename>
            <type>text/plain</type>
            <size>20826</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NDlkOWYzLi44YzExNTI0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBJbml0aWFs
aXplIGFuIGF1dG90ZXN0IGZvbGRlciBmb3IgdGhlIFF0U2NyaXB0LgorICAgICAgICAKKyAgICAg
ICAgSW1wbGVtZW50IGEgZmV3IGJhc2ljIHRlc3RzIGZvciB0aGUgUVNjcmlwdEVuZ2luZSBhbmQg
Zm9yCisgICAgICAgIHRoZSBRU2NyaXB0VmFsdWUuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRl
c2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTY1CisKKyAgICAgICAgKiBXZWJLaXQucHJvOgorCisy
MDEwLTAxLTE5ICBKZWRyemVqIE5vd2Fja2kgIDxqZWRyemVqLm5vd2Fja2lAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEZpcnN0IHN0
ZXBzIG9mIHRoZSBRdFNjcmlwdCBBUEkuCiAgICAgICAgIAogICAgICAgICBUd28gbmV3IGNsYXNz
ZXMgd2VyZSBjcmVhdGVkOyBRU2NyaXB0RW5naW5lIGFuZCBRU2NyaXB0VmFsdWUuCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
aW5kZXggNjI4YTc2MC4uZTM4ZDE0ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDQ2IEBACiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgSW5pdGlhbGl6ZSBh
biBhdXRvdGVzdCBmb2xkZXIgZm9yIHRoZSBRdFNjcmlwdC4KKyAgICAgICAgCisgICAgICAgIElt
cGxlbWVudCBhIGZldyBiYXNpYyB0ZXN0cyBmb3IgdGhlIFFTY3JpcHRFbmdpbmUgYW5kIGZvcgor
ICAgICAgICB0aGUgUVNjcmlwdFZhbHVlLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlw
dGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMjU2NQorCisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdGVuZ2lu
ZS9xc2NyaXB0ZW5naW5lLnBybzogQWRkZWQuCisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdGVu
Z2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRF
bmdpbmU6OnRzdF9RU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjp+
dHN0X1FTY3JpcHRFbmdpbmUpOgorICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6OmluaXQpOgor
ICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FTY3Jp
cHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpl
dmFsdWF0ZSk6CisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3FzY3JpcHR2YWx1ZS5w
cm86IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZh
bHVlLmNwcDogQWRkZWQuCisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp0c3RfUVNjcmlwdFZh
bHVlKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6On50c3RfUVNjcmlwdFZhbHVlKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmluaXQpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZTo6Y2xlYW51cCk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjpjdG9yKToKKyAgICAgICAg
KHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nX2RhdGEpOgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29weUNvbnN0cnVj
dG9yX2RhdGEpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29weUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yX2RhdGEpOgorICAgICAg
ICAodHN0X1FTY3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3IpOgorICAgICAgICAodHN0X1FTY3Jp
cHRWYWx1ZTo6ZGF0YVNoYXJpbmcpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3Ry
dWN0b3JzX2RhdGEpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3RydWN0b3JzKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmNhbGwpOgorICAgICAgICAqIHF0L3Rlc3RzL3Rl
c3RzLnByaTogQWRkZWQuCisgICAgICAgICogcXQvdGVzdHMvdGVzdHMucHJvOiBBZGRlZC4KKwor
MjAxMC0wMS0xOSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBGaXJzdCBz
dGVwcyBvZiB0aGUgUXRTY3JpcHQgQVBJLgogICAgICAgICAKICAgICAgICAgVHdvIG5ldyBjbGFz
c2VzIHdlcmUgY3JlYXRlZDsgUVNjcmlwdEVuZ2luZSBhbmQgUVNjcmlwdFZhbHVlLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5l
LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlwdGVuZ2lu
ZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGRjMDkwMgotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlw
dGVuZ2luZS5wcm8KQEAgLTAsMCArMSw3IEBACitURU1QTEFURSA9IGFwcAorVEFSR0VUID0gdHN0
X3FzY3JpcHRlbmdpbmUKK1FUICs9IHRlc3RsaWIKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQorCitT
T1VSQ0VTICs9IHRzdF9xc2NyaXB0ZW5naW5lLmNwcAorCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjNWYxM2YKLS0tIC9kZXYvbnVsbAor
KysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5n
aW5lLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
cXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUgPFF0
VGVzdC9xdGVzdC5oPgorCitjbGFzcyB0c3RfUVNjcmlwdEVuZ2luZQorICAgIDogcHVibGljIFFP
YmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICB0c3RfUVNjcmlwdEVuZ2luZSgp
IHt9CisgICAgdmlydHVhbCB+dHN0X1FTY3JpcHRFbmdpbmUoKSB7fQorCitwdWJsaWMgc2xvdHM6
CisgICAgdm9pZCBpbml0KCkge30KKyAgICB2b2lkIGNsZWFudXAoKSB7fQorCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKKyAgICB2b2lkIGV2YWx1YXRlKCk7Cit9
OworCisvKiBUZXN0IGdhcmJhZ2UgY29sbGVjdGlvbiwgYXQgbGVhc3QgdHJ5IHRvIG5vdCBjcmFz
aC4gKi8KK3ZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICBR
U2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBlbmdpbmUuY29sbGVjdEdhcmJhZ2UoKTsKK30KKwor
LyogRXZhbHVhdGluZyBhIHNjcmlwdCB0aGF0IHRocm93IGFuIHVuaGFuZGxlZCBleGNlcHRpb24g
c2hvdWxkIHJldHVybiBhbiBpbnZhbGlkIHZhbHVlLiAqLwordm9pZCB0c3RfUVNjcmlwdEVuZ2lu
ZTo6ZXZhbHVhdGUoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFWRVJJRlky
KGVuZ2luZS5ldmFsdWF0ZSgiMSsxIikuaXNWYWxpZCgpLCAidGhlIGV4cHJlc3Npb24gc2hvdWxk
IGJlIGV2YWx1YXRlZCBhbmQgYW4gdmFsaWQgcmVzdWx0IHNob3VsZCBiZSByZXR1cm5lZCIpOwor
ICAgIFFWRVJJRlkyKGVuZ2luZS5ldmFsdWF0ZSgicGluZyIpLmlzVmFsaWQoKSwgIlNjcmlwdCB0
aHJvd2luZyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHNob3VsZCByZXR1cm4gYW4gZXhjZXB0aW9u
IHZhbHVlIik7Cit9CisKK1FURVNUX01BSU4odHN0X1FTY3JpcHRFbmdpbmUpCisjaW5jbHVkZSAi
dHN0X3FzY3JpcHRlbmdpbmUubW9jIgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVz
dHMvcXNjcmlwdHZhbHVlL3FzY3JpcHR2YWx1ZS5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0
cy9xc2NyaXB0dmFsdWUvcXNjcmlwdHZhbHVlLnBybwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi4xY2U1YmMzCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
dGVzdHMvcXNjcmlwdHZhbHVlL3FzY3JpcHR2YWx1ZS5wcm8KQEAgLTAsMCArMSw3IEBACitURU1Q
TEFURSA9IGFwcAorVEFSR0VUID0gdHN0X3FzY3JpcHR2YWx1ZQorUVQgKz0gdGVzdGxpYgoraW5j
bHVkZSguLi90ZXN0cy5wcmkpCisKK1NPVVJDRVMgKz0gdHN0X3FzY3JpcHR2YWx1ZS5jcHAKKwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3RzdF9xc2Ny
aXB0dmFsdWUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3RzdF9x
c2NyaXB0dmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NDA4
NDYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFs
dWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHAKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVl
LmgiCisjaW5jbHVkZSA8UXRUZXN0L3F0ZXN0Lmg+CisKK1FfREVDTEFSRV9NRVRBVFlQRShRU2Ny
aXB0VmFsdWUqKTsKK1FfREVDTEFSRV9NRVRBVFlQRShRU2NyaXB0VmFsdWUpOworCitjbGFzcyB0
c3RfUVNjcmlwdFZhbHVlCisgICAgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKwor
cHVibGljOgorICAgIHRzdF9RU2NyaXB0VmFsdWUoKSB7fQorICAgIHZpcnR1YWwgfnRzdF9RU2Ny
aXB0VmFsdWUoKSB7fQorCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBpbml0KCkge30KKyAgICB2
b2lkIGNsZWFudXAoKSB7fQorCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgdG9TdHJpbmdfZGF0
YSgpOworICAgIHZvaWQgdG9TdHJpbmcoKTsKKyAgICB2b2lkIGNvcHlDb25zdHJ1Y3Rvcl9kYXRh
KCk7CisgICAgdm9pZCBjb3B5Q29uc3RydWN0b3IoKTsKKyAgICB2b2lkIGFzc2lnbk9wZXJhdG9y
X2RhdGEoKTsKKyAgICB2b2lkIGFzc2lnbk9wZXJhdG9yKCk7CisgICAgdm9pZCBkYXRhU2hhcmlu
ZygpOworICAgIHZvaWQgY29uc3RydWN0b3JzX2RhdGEoKTsKKyAgICB2b2lkIGNvbnN0cnVjdG9y
cygpOworICAgIHZvaWQgY2FsbCgpOworCisgICAgLy8gUXRTY3JpcHQuCisgICAgdm9pZCBjdG9y
KCk7Cit9OworCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmN0b3IoKQoreworICAgIFFTY3JpcHRF
bmdpbmUgZW5nOworICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY7CisgICAgICAgIFFDT01Q
QVJFKHYuaXNWYWxpZCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChR
U2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYo
JmVuZywgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYu
aXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0cnVl
KTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01Q
QVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1
ZSB2KCZlbmcsIFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVsbCgpLCB0cnVlKTsKKyAg
ICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYu
ZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZl
bmcsIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAg
ICBRQ09NUEFSRSh2LmlzQm9vbGVhbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc0Jv
b2woKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAg
ICAgICBRQ09NUEFSRSh2LnRvQm9vbGVhbigpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYu
ZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZl
bmcsIGludCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09i
amVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAg
ICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAg
UVNjcmlwdFZhbHVlIHYoaW50KDB4NDMyMTEyMzQpKTsKKyAgICAgICAgUVZFUklGWSh2LmlzTnVt
YmVyKCkpOworICAgICAgICBRQ09NUEFSRSh2LnRvSW50MzIoKSwgMHg0MzIxMTIzNCk7CisgICAg
fQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgdWludCgxKSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051bWJl
cigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAg
ICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdp
bmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYodWludCgw
eDQzMjExMjM0KSk7CisgICAgICAgIFFWRVJJRlkodi5pc051bWJlcigpKTsKKyAgICAgICAgUUNP
TVBBUkUodi50b1VJbnQzMigpLCB1aW50KDB4NDMyMTEyMzQpKTsKKyAgICB9CisgICAgeworICAg
ICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFs
aWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRv
TnVtYmVyKCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAg
IH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEyMzQ1Njc4OTEwLjUpOworICAgICAg
ICBRVkVSSUZZKHYuaXNOdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwg
MTIzNDU2Nzg5MTAuNSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVu
ZywgImNpYW8iKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAg
ICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2Jq
ZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBRTGF0aW4xU3Ry
aW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9
CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCBRU3RyaW5nKCJjaWFvIikpOwor
ICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYu
aXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2Up
OworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7
CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICAvLyBjb3B5
IGNvbnN0cnVjdG9yLCBvcGVyYXRvcj0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZl
bmcsIDEuMCk7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBBUkUo
djIuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Mi5lbmdpbmUo
KSwgJmVuZyk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYzKHYpOworICAgICAgICBRQ09NUEFS
RSh2My5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmlj
dGx5RXF1YWxzKHYyKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLmVuZ2luZSgpLCAmZW5n
KTsKKworICAgICAgICBRU2NyaXB0VmFsdWUgdjQoJmVuZywgMi4wKTsKKyAgICAgICAgUUNPTVBB
UkUodjQuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgdjMgPSB2NDsKKyAgICAg
ICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBB
UkUodjMuc3RyaWN0bHlFcXVhbHModjQpLCB0cnVlKTsKKworICAgICAgICB2MiA9IFFTY3JpcHRW
YWx1ZSgpOworICAgICAgICBRQ09NUEFSRSh2Mi5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOwor
ICAgICAgICBRQ09NUEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7CisKKyAgICAgICAgUVNjcmlwdFZh
bHVlIHY1KHYpOworICAgICAgICBRQ09NUEFSRSh2NS5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7
CisgICAgICAgIHYgPSBRU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0
bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodjUudG9OdW1iZXIoKSwgMS4w
KTsKKyAgICB9CisKKyAgICAvLyBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG5vIGVuZ2luZSBhcmd1
bWVudAorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlwdFZhbHVlOjpVbmRlZmlu
ZWRWYWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09i
amVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5n
aW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlwdFZh
bHVlOjpOdWxsVmFsdWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNOdWxsKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Lmlz
T2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRF
bmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihmYWxzZSk7
CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUo
di5pc0Jvb2xlYW4oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNCb29sKCksIHRydWUp
OworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBB
UkUodi50b0Jvb2xlYW4oKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAo
UVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
KGludCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVj
dCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAg
eworICAgICAgICBRU2NyaXB0VmFsdWUgdih1aW50KDEpKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVtYmVyKCksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUo
di50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlw
dEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEuMCk7
CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUo
di5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxz
ZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBB
UkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAg
ICBRU2NyaXB0VmFsdWUgdigiY2lhbyIpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwg
dHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFD
T01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5n
KCksIFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCks
IChRU2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVl
IHYoUVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUp
OworICAgICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFS
RSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBR
TGF0aW4xU3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNj
cmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICAvLyBjb3B5IGNvbnN0cnVjdG9yLCBvcGVyYXRv
cj0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEuMCk7CisgICAgICAgIFFTY3JpcHRW
YWx1ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIHRydWUp
OworICAgICAgICBRQ09NUEFSRSh2Mi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKwor
ICAgICAgICBRU2NyaXB0VmFsdWUgdjModik7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmljdGx5
RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModjIp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuZW5naW5lKCksIChRU2NyaXB0RW5naW5lICop
MCk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY0KDIuMCk7CisgICAgICAgIFFDT01QQVJFKHY0
LnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIHYzID0gdjQ7CisgICAgICAgIFFD
T01QQVJFKHYzLnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYz
LnN0cmljdGx5RXF1YWxzKHY0KSwgdHJ1ZSk7CisKKyAgICAgICAgdjIgPSBRU2NyaXB0VmFsdWUo
KTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
NSh2KTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAg
ICAgICB2ID0gUVNjcmlwdFZhbHVlKCk7CisgICAgICAgIFFDT01QQVJFKHY1LnN0cmljdGx5RXF1
YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHY1LnRvTnVtYmVyKCksIDEuMCk7Cisg
ICAgfQorCisgICAgLy8gMCBlbmdpbmUKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCBRU2Ny
aXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVlKS5pc1VuZGVmaW5lZCgpKTsKKyAgICBRVkVSSUZZKFFT
Y3JpcHRWYWx1ZSgwLCBRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSkuaXNOdWxsKCkpOworICAgIFFW
RVJJRlkoUVNjcmlwdFZhbHVlKDAsIGZhbHNlKS5pc0Jvb2woKSk7CisgICAgUVZFUklGWShRU2Ny
aXB0VmFsdWUoMCwgaW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1
ZSgwLCB1aW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCAx
LjApLmlzTnVtYmVyKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsICJjaWFvIikuaXNT
dHJpbmcoKSk7CisgICAgUVZFUklGWShRU2NyaXB0VmFsdWUoMCwgUVN0cmluZygiY2lhbyIpKS5p
c1N0cmluZygpKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRhKCkK
K3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJjb2RlIik7CisgICAgUVRlc3Q6OmFk
ZENvbHVtbjxRU3RyaW5nPigicmVzdWx0Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmci
KSA8PCAiJ2hlbGxvJyIgPDwgImhlbGxvIjsKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmcgdXRm
IikgPDwgIifEhcWbxIfFvMW6w7PFgsWExJknIiA8PCAixIXFm8SHxbzFusOzxYLFhMSZIjsKKyAg
ICBRVGVzdDo6bmV3Um93KCJleHByZXNzaW9uIikgPDwgIjEgKyA0IiA8PCAiNSI7CisgICAgUVRl
c3Q6Om5ld1JvdygibnVsbCIpIDw8ICJudWxsIiA8PCAibnVsbCI7CisgICAgUVRlc3Q6Om5ld1Jv
dygiYm9vbGVhbiIpIDw8ICJmYWxzZSIgPDwgImZhbHNlIjsKKyAgICBRVGVzdDo6bmV3Um93KCJ1
bmRlZmluZWQiKSA8PCAidW5kZWZpbmVkIiA8PCAidW5kZWZpbmVkIjsKKyAgICBRVGVzdDo6bmV3
Um93KCJvYmplY3QiKSA8PCAibmV3IE9iamVjdCIgPDwgIltvYmplY3QgT2JqZWN0XSI7Cit9CisK
Ky8qIFRlc3QgY29udmVyc2lvbiB0byBzdHJpbmcgZnJvbSBkaWZmZXJlbnQgSlNDIHR5cGVzICov
Cit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkKK3sKKyAgICBRRkVUQ0goUVN0cmlu
ZywgY29kZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHJlc3VsdCk7CisKKyAgICBRU2NyaXB0RW5n
aW5lIGVuZ2luZTsKKyAgICBRQ09NUEFSRShlbmdpbmUuZXZhbHVhdGUoY29kZSkudG9TdHJpbmco
KSwgcmVzdWx0KTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0b3Jf
ZGF0YSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIG5u
dW1iZXIoMTIzKTsKKyAgICBRU2NyaXB0VmFsdWUgbnN0cmluZygicGluZyIpOworICAgIFFTY3Jp
cHRWYWx1ZSBudW1iZXIoZW5naW5lLmV2YWx1YXRlKCIxIikpOworICAgIFFTY3JpcHRWYWx1ZSBz
dHJpbmcoZW5naW5lLmV2YWx1YXRlKCInZm9vJyIpKTsKKyAgICBRU2NyaXB0VmFsdWUgb2JqZWN0
KGVuZ2luZS5ldmFsdWF0ZSgibmV3IE9iamVjdCIpKTsKKyAgICBRU2NyaXB0VmFsdWUgdW5kZWZp
bmVkKGVuZ2luZS5ldmFsdWF0ZSgidW5kZWZpbmVkIikpOworICAgIFFTY3JpcHRWYWx1ZSBudWxs
KGVuZ2luZS5ldmFsdWF0ZSgibnVsbCIpKTsKKworICAgIFFUZXN0OjphZGRDb2x1bW48UVNjcmlw
dFZhbHVlPigidmFsdWUiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJyZXN1bHQi
KTsKKworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBudW1iZXIiKSA8PCBubnVtYmVyIDw8IFFT
dHJpbmc6Om51bWJlcigxMjMpOworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBzdHJpbmciKSA8
PCBuc3RyaW5nIDw8IFFTdHJpbmcoInBpbmciKTsKKyAgICBRVGVzdDo6bmV3Um93KCJudW1iZXIi
KSA8PCBudW1iZXIgPDwgIjEiOworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIpIDw8IHN0cmlu
ZyA8PCAiZm9vIjsKKyAgICBRVGVzdDo6bmV3Um93KCJvYmplY3QiKSA8PCBvYmplY3QgPDwgIltv
YmplY3QgT2JqZWN0XSI7CisgICAgUVRlc3Q6Om5ld1JvdygidW5kZWZpbmVkIikgPDwgdW5kZWZp
bmVkIDw8ICJ1bmRlZmluZWQiOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwiKSA8PCBudWxsIDw8
ICJudWxsIjsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0b3IoKQor
eworICAgIFFGRVRDSChRU2NyaXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywg
cmVzdWx0KTsKKworICAgIFFWRVJJRlkodmFsdWUuaXNWYWxpZCgpKTsKKyAgICBRU2NyaXB0VmFs
dWUgdG1wKHZhbHVlKTsKKyAgICBRVkVSSUZZKHRtcC5pc1ZhbGlkKCkpOworICAgIFFDT01QQVJF
KHRtcC50b1N0cmluZygpLCByZXN1bHQpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmFz
c2lnbk9wZXJhdG9yX2RhdGEoKQoreworICAgIGNvcHlDb25zdHJ1Y3Rvcl9kYXRhKCk7Cit9CisK
K3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3IoKQoreworICAgIFFGRVRDSChR
U2NyaXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywgcmVzdWx0KTsKKworICAg
IFFTY3JpcHRWYWx1ZSB0bXA7CisgICAgdG1wID0gdmFsdWU7CisgICAgUVZFUklGWSh0bXAuaXNW
YWxpZCgpKTsKKyAgICBRQ09NUEFSRSh0bXAudG9TdHJpbmcoKSwgcmVzdWx0KTsKK30KKworLyog
VGVzdCBpbnRlcm5hbCBkYXRhIHNoYXJpbmcgYmV0d2VlbiBhIGRpZmZyZW5ldCBRU2NyaXB0VmFs
dWUuICovCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKCkKK3sKKyAgICBRU2Ny
aXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUgdjE7CisgICAgUVNjcmlwdFZhbHVl
IHYyKHYxKTsKKworICAgIHYxID0gZW5naW5lLmV2YWx1YXRlKCIxIik7IC8vIHYxID09IDEgOyB2
MiBpbnZhbGlkLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKCF2Mi5p
c1ZhbGlkKCkpOworCisgICAgdjIgPSB2MTsgLy8gdjEgPT0gMTsgdjIgPT0gMS4KKyAgICBRVkVS
SUZZKHYxLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi5pc1ZhbGlkKCkpOworCisgICAgdjEg
PSBlbmdpbmUuZXZhbHVhdGUoIm9iaiA9IG5ldyBEYXRlIik7IC8vIHYxID09IFtvYmplY3QgRGF0
ZV0gOyB2MiA9PSAxLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHYy
LmlzVmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi50b1N0cmluZygpICE9IHYxLnRvU3RyaW5nKCkp
OworCisgICAgLy8gVE9ETyBhZGQgb2JqZWN0IG1hbmlwdWxhdGlvbiAodjEgYW5kIHYyIHBvaW50
IHRvIHRoZSBzYW1lIG9iamVjdCkuCit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3Ry
dWN0b3JzX2RhdGEoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworCisgICAgUVRlc3Q6
OmFkZENvbHVtbjxRU2NyaXB0VmFsdWU+KCJ2YWx1ZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48
UVN0cmluZz4oInN0cmluZyIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInZhbGlkIik7
CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigib2JqZWN0Iik7CisKKyAgICBRVGVzdDo6bmV3
Um93KCJpbnZhbGlkIikgPDwgUVNjcmlwdFZhbHVlKCkgPDwgUVN0cmluZygpIDw8IGZhbHNlIDw8
IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coIm51bWJlciIpIDw8IFFTY3JpcHRWYWx1ZSgtMjEp
IDw8IFFTdHJpbmc6Om51bWJlcigtMjEpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5l
d1JvdygiYm9vbCIpIDw8IFFTY3JpcHRWYWx1ZSh0cnVlKSA8PCBRU3RyaW5nKCJUcnVlIikgPDwg
dHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJkb3VibGUiKSA8PCBRU2NyaXB0VmFs
dWUoMjEuMTIpIDw8IFFTdHJpbmc6Om51bWJlcigyMS4xMikgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAg
ICBRVGVzdDo6bmV3Um93KCJzdHJpbmciKSA8PCBRU2NyaXB0VmFsdWUoIkFsYU1hS290YSIpIDw8
IFFTdHJpbmcoIkFsYU1hS290YSIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jv
dygib2JqZWN0IikgPDwgZW5naW5lLmV2YWx1YXRlKCJuZXcgT2JqZWN0IikgPDwgUVN0cmluZygi
W29iamVjdCBPYmplY3RdIikgPDwgdHJ1ZSA8PCB0cnVlOworfQorCit2b2lkIHRzdF9RU2NyaXB0
VmFsdWU6OmNvbnN0cnVjdG9ycygpCit7CisgICAgUUZFVENIKFFTY3JpcHRWYWx1ZSwgdmFsdWUp
OworICAgIFFGRVRDSChRU3RyaW5nLCBzdHJpbmcpOworICAgIFFGRVRDSChib29sLCB2YWxpZCk7
CisgICAgUUZFVENIKGJvb2wsIG9iamVjdCk7CisKKyAgICBRQ09NUEFSRSh2YWx1ZS5pc1ZhbGlk
KCksIHZhbGlkKTsKKyAgICBRQ09NUEFSRSh2YWx1ZS50b1N0cmluZygpLCBzdHJpbmcpOworICAg
IFFDT01QQVJFKHZhbHVlLmlzT2JqZWN0KCksIG9iamVjdCk7Cit9CisKK3ZvaWQgdHN0X1FTY3Jp
cHRWYWx1ZTo6Y2FsbCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlw
dFZhbHVlIHBpbmcgPSBlbmdpbmUuZXZhbHVhdGUoIiggZnVuY3Rpb24oKSB7cmV0dXJuICdwaW5n
Jzt9ICkiKTsKKyAgICBRU2NyaXB0VmFsdWUgaW5jciA9IGVuZ2luZS5ldmFsdWF0ZSgiKCBmdW5j
dGlvbihpKSB7cmV0dXJuIGkgKyAxO30gKSIpOworICAgIFFTY3JpcHRWYWx1ZSBvbmUoMSk7Cisg
ICAgUVNjcmlwdFZhbHVlIGZpdmUoNSk7CisgICAgUVNjcmlwdFZhbHVlIHJlc3VsdDsKKworICAg
IFFWRVJJRlkob25lLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWShmaXZlLmlzVmFsaWQoKSk7CisK
KyAgICBRVkVSSUZZKHBpbmcuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHBpbmcuaXNGdW5jdGlv
bigpKTsKKyAgICByZXN1bHQgPSBwaW5nLmNhbGwoKTsKKyAgICBRVkVSSUZZKHJlc3VsdC5pc1Zh
bGlkKCkpOworICAgIFFDT01QQVJFKHJlc3VsdC50b1N0cmluZygpLCBRU3RyaW5nOjpmcm9tVXRm
OCgicGluZyIpKTsKKworICAgIFFWRVJJRlkoaW5jci5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlko
aW5jci5pc0Z1bmN0aW9uKCkpOworICAgIHJlc3VsdCA9IGluY3IuY2FsbChRU2NyaXB0VmFsdWUo
KSwgUVNjcmlwdFZhbHVlTGlzdCgpIDw8IG9uZSk7CisgICAgUVZFUklGWShyZXN1bHQuaXNWYWxp
ZCgpKTsKKyAgICBRQ09NUEFSRShyZXN1bHQudG9TdHJpbmcoKSwgUVN0cmluZygiMiIpKTsKKwor
ICAgIFFDT01QQVJFKGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwgUVNjcmlwdFZhbHVlTGlzdCgp
IDw8IGZpdmUpLnRvU3RyaW5nKCksIFFTdHJpbmcoIjYiKSk7CisKKyAgICBRVkVSSUZZKGluY3Iu
Y2FsbCgpLmlzVmFsaWQoKSk7IC8vIEV4Y2VwdGlvbi4KK30KKworUVRFU1RfTUFJTih0c3RfUVNj
cmlwdFZhbHVlKQorI2luY2x1ZGUgInRzdF9xc2NyaXB0dmFsdWUubW9jIgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJpIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVz
dHMvdGVzdHMucHJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGI4YjEK
LS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcmkKQEAg
LTAsMCArMSwyOCBAQAoraXNFbXB0eShPVVRQVVRfRElSKSB7CisgICAgQ09ORklHKGRlYnVnLCBk
ZWJ1Z3xyZWxlYXNlKSB7CisgICAgICAgIE9VVFBVVF9ESVI9JCRQV0QvV2ViS2l0QnVpbGQvRGVi
dWcKKyAgICB9IGVsc2UgeyAjIFJlbGVhc2UKKyAgICAgICAgT1VUUFVUX0RJUj0kJFBXRC9XZWJL
aXRCdWlsZC9SZWxlYXNlCisgICAgfQorfQorCisKK1FNQUtFX1JQQVRIRElSID0gJCRPVVRQVVRf
RElSL2xpYiAkJFFNQUtFX1JQQVRIRElSCitRTUFLRV9MSUJESVIgPSAkJE9VVFBVVF9ESVIvbGli
ICQkUU1BS0VfTElCRElSCittYWM6IXN0YXRpYzpjb250YWlucyhRVF9DT05GSUcsIHF0X2ZyYW1l
d29yayk6IUNPTkZJRyh3ZWJraXRfbm9fZnJhbWV3b3JrKSB7CisgICAgTElCUyArPSAtZnJhbWV3
b3JrIFF0SmF2YVNjcmlwdAorICAgIFFNQUtFX0ZSQU1FV09SS1BBVEggPSAkJE9VVFBVVF9ESVIv
bGliICQkUU1BS0VfRlJBTUVXT1JLUEFUSAorfSBlbHNlIHsKKyAgICB3aW4zMi0qfHdpbmNlKiB7
CisgICAgICAgIExJQlMgKz0gLWxRdEphdmFTY3JpcHQkJHtRVF9NQUpPUl9WRVJTSU9OfQorICAg
IH0gZWxzZSB7CisgICAgICAgIExJQlMgKz0gLWxRdEphdmFTY3JpcHQKKyAgICB9Cit9CisKK0NP
TkZJRyhyZWxlYXNlLCBkZWJ1Z3xyZWxlYXNlKSB7CisgICAgREVGSU5FUyArPSBOREVCVUcKK30K
KworSU5DTFVERVBBVEggKz0gJCRQV0QvLi4vYXBpCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3Rlc3RzLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBy
bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVlZGIxCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0wLDAgKzEsMyBA
QAorVEVNUExBVEUgPSBzdWJkaXJzCitTVUJESVJTID0gICBxc2NyaXB0ZW5naW5lIFwKKyAgICAg
ICAgICAgIHFzY3JpcHR2YWx1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8K
aW5kZXggZGQyOWE3Ni4uNjZhOTgxMCAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJL
aXQucHJvCkBAIC0yMiw3ICsyMiw4IEBAIFNVQkRJUlMgKz0gXAogCiBidWlsZC1xamF2YXNjcmlw
dCB7CiAgICAgU1VCRElSUyArPSBcCi0gICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEph
dmFTY3JpcHQucHJvCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQu
cHJvIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMKIH0KIAogaW5jbHVkZShXZWJL
aXQvcXQvZG9jcy9kb2NzLnByaSkK
</data>
<flag name="review"
          id="29257"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="29258"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47004</attachid>
            <date>2010-01-20 03:45:37 -0800</date>
            <delta_ts>2010-01-20 06:12:49 -0800</delta_ts>
            <desc>Autotests v4</desc>
            <filename>autoV4.diff</filename>
            <type>text/plain</type>
            <size>20928</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NDlkOWYzLi4xM2RhNzkx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlh
bGl6ZSBhbiBhdXRvdGVzdCBmb2xkZXIgZm9yIHRoZSBRdFNjcmlwdC4KKyAgICAgICAgCisgICAg
ICAgIEltcGxlbWVudCBhIGZldyBiYXNpYyB0ZXN0cyBmb3IgdGhlIFFTY3JpcHRFbmdpbmUgYW5k
IGZvcgorICAgICAgICB0aGUgUVNjcmlwdFZhbHVlLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2NQorCisgICAgICAgICogV2ViS2l0LnBybzoKKwog
MjAxMC0wMS0xOSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2Mjhh
NzYwLi42YTRkZTdhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDEtMjAgIEpl
ZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbGl6ZSBhbiBhdXRvdGVz
dCBmb2xkZXIgZm9yIHRoZSBRdFNjcmlwdC4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBh
IGZldyBiYXNpYyB0ZXN0cyBmb3IgdGhlIFFTY3JpcHRFbmdpbmUgYW5kIGZvcgorICAgICAgICB0
aGUgUVNjcmlwdFZhbHVlLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQg
YnVnIFVSTCAoT09QUyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMjU2NQorCisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0
ZW5naW5lLnBybzogQWRkZWQuCisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3Rf
cXNjcmlwdGVuZ2luZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6OnRz
dF9RU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjp+dHN0X1FTY3Jp
cHRFbmdpbmUpOgorICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6OmluaXQpOgorICAgICAgICAo
dHN0X1FTY3JpcHRFbmdpbmU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6
OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpldmFsdWF0ZSk6
CisgICAgICAgICogcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3FzY3JpcHR2YWx1ZS5wcm86IEFkZGVk
LgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZhbHVlLmNwcDog
QWRkZWQuCisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp0c3RfUVNjcmlwdFZhbHVlKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6On50c3RfUVNjcmlwdFZhbHVlKToKKyAgICAgICAgKHRz
dF9RU2NyaXB0VmFsdWU6OmluaXQpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y2xlYW51
cCk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjpjdG9yKToKKyAgICAgICAgKHRzdF9RU2Ny
aXB0VmFsdWU6OnRvU3RyaW5nX2RhdGEpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6dG9T
dHJpbmcpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29weUNvbnN0cnVjdG9yX2RhdGEp
OgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29weUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yX2RhdGEpOgorICAgICAgICAodHN0X1FT
Y3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3IpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6
ZGF0YVNoYXJpbmcpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3RydWN0b3JzX2Rh
dGEpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3RydWN0b3JzKToKKyAgICAgICAg
KHRzdF9RU2NyaXB0VmFsdWU6OmNhbGwpOgorICAgICAgICAqIHF0L3Rlc3RzL3Rlc3RzLnByaTog
QWRkZWQuCisgICAgICAgICogcXQvdGVzdHMvdGVzdHMucHJvOiBBZGRlZC4KKwogMjAxMC0wMS0x
OSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlwdGVuZ2luZS5wcm8gYi9KYXZhU2NyaXB0Q29y
ZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUucHJvCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkYzA5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUucHJvCkBAIC0wLDAg
KzEsNyBAQAorVEVNUExBVEUgPSBhcHAKK1RBUkdFVCA9IHRzdF9xc2NyaXB0ZW5naW5lCitRVCAr
PSB0ZXN0bGliCitpbmNsdWRlKC4uL3Rlc3RzLnByaSkKKworU09VUkNFUyArPSB0c3RfcXNjcmlw
dGVuZ2luZS5jcHAKKwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlw
dGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9x
c2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi41YzVmMTNmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUv
cXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNp
bmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKyNpbmNsdWRlIDxRdFRlc3QvcXRlc3QuaD4KKworY2xh
c3MgdHN0X1FTY3JpcHRFbmdpbmUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVD
VAorCitwdWJsaWM6CisgICAgdHN0X1FTY3JpcHRFbmdpbmUoKSB7fQorICAgIHZpcnR1YWwgfnRz
dF9RU2NyaXB0RW5naW5lKCkge30KKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpIHt9
CisgICAgdm9pZCBjbGVhbnVwKCkge30KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGNvbGxl
Y3RHYXJiYWdlKCk7CisgICAgdm9pZCBldmFsdWF0ZSgpOworfTsKKworLyogVGVzdCBnYXJiYWdl
IGNvbGxlY3Rpb24sIGF0IGxlYXN0IHRyeSB0byBub3QgY3Jhc2guICovCit2b2lkIHRzdF9RU2Ny
aXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7
CisgICAgZW5naW5lLmNvbGxlY3RHYXJiYWdlKCk7Cit9CisKKy8qIEV2YWx1YXRpbmcgYSBzY3Jp
cHQgdGhhdCB0aHJvdyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHNob3VsZCByZXR1cm4gYW4gaW52
YWxpZCB2YWx1ZS4gKi8KK3ZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6OmV2YWx1YXRlKCkKK3sKKyAg
ICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRVkVSSUZZMihlbmdpbmUuZXZhbHVhdGUoIjEr
MSIpLmlzVmFsaWQoKSwgInRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBldmFsdWF0ZWQgYW5kIGFu
IHZhbGlkIHJlc3VsdCBzaG91bGQgYmUgcmV0dXJuZWQiKTsKKyAgICBRVkVSSUZZMihlbmdpbmUu
ZXZhbHVhdGUoInBpbmciKS5pc1ZhbGlkKCksICJTY3JpcHQgdGhyb3dpbmcgYW4gdW5oYW5kbGVk
IGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIGFuIGV4Y2VwdGlvbiB2YWx1ZSIpOworfQorCitRVEVT
VF9NQUlOKHRzdF9RU2NyaXB0RW5naW5lKQorI2luY2x1ZGUgInRzdF9xc2NyaXB0ZW5naW5lLm1v
YyIKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS9xc2Ny
aXB0dmFsdWUucHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3FzY3Jp
cHR2YWx1ZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNlNWJjMwot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS9x
c2NyaXB0dmFsdWUucHJvCkBAIC0wLDAgKzEsNyBAQAorVEVNUExBVEUgPSBhcHAKK1RBUkdFVCA9
IHRzdF9xc2NyaXB0dmFsdWUKK1FUICs9IHRlc3RsaWIKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQor
CitTT1VSQ0VTICs9IHRzdF9xc2NyaXB0dmFsdWUuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZhbHVlLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZhbHVlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2YzZmZmCi0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3RzdF9xc2NyaXB0dmFsdWUu
Y3BwCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAicXNj
cmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUgPFF0VGVz
dC9xdGVzdC5oPgorCitRX0RFQ0xBUkVfTUVUQVRZUEUoUVNjcmlwdFZhbHVlKik7CitRX0RFQ0xB
UkVfTUVUQVRZUEUoUVNjcmlwdFZhbHVlKTsKKworY2xhc3MgdHN0X1FTY3JpcHRWYWx1ZQorICAg
IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICB0c3RfUVNj
cmlwdFZhbHVlKCkge30KKyAgICB2aXJ0dWFsIH50c3RfUVNjcmlwdFZhbHVlKCkge30KKworcHVi
bGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpIHt9CisgICAgdm9pZCBjbGVhbnVwKCkge30KKwor
cHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHRvU3RyaW5nX2RhdGEoKTsKKyAgICB2b2lkIHRvU3Ry
aW5nKCk7CisgICAgdm9pZCBjb3B5Q29uc3RydWN0b3JfZGF0YSgpOworICAgIHZvaWQgY29weUNv
bnN0cnVjdG9yKCk7CisgICAgdm9pZCBhc3NpZ25PcGVyYXRvcl9kYXRhKCk7CisgICAgdm9pZCBh
c3NpZ25PcGVyYXRvcigpOworICAgIHZvaWQgZGF0YVNoYXJpbmcoKTsKKyAgICB2b2lkIGNvbnN0
cnVjdG9yc19kYXRhKCk7CisgICAgdm9pZCBjb25zdHJ1Y3RvcnMoKTsKKyAgICB2b2lkIGNhbGwo
KTsKKworICAgIC8vIGNvcGllZCBmcm9tIFF0J3MgUXRTY3JpcHQuCisgICAgdm9pZCBjdG9yKCk7
Cit9OworCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmN0b3IoKQoreworICAgIFFTY3JpcHRFbmdp
bmUgZW5nOworICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY7CisgICAgICAgIFFDT01QQVJF
KHYuaXNWYWxpZCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2Ny
aXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVu
ZywgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNW
YWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0cnVlKTsK
KyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJF
KHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
KCZlbmcsIFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1Zh
bGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVsbCgpLCB0cnVlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5n
aW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZlbmcs
IGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBR
Q09NUEFSRSh2LmlzQm9vbGVhbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc0Jvb2wo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAg
ICBRQ09NUEFSRSh2LnRvQm9vbGVhbigpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5n
aW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZlbmcs
IGludCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVj
dCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNj
cmlwdFZhbHVlIHYoaW50KDB4NDMyMTEyMzQpKTsKKyAgICAgICAgUVZFUklGWSh2LmlzTnVtYmVy
KCkpOworICAgICAgICBRQ09NUEFSRSh2LnRvSW50MzIoKSwgMHg0MzIxMTIzNCk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgdWludCgxKSk7CisgICAgICAgIFFD
T01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051bWJlcigp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAg
IFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUo
KSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYodWludCgweDQz
MjExMjM0KSk7CisgICAgICAgIFFWRVJJRlkodi5pc051bWJlcigpKTsKKyAgICAgICAgUUNPTVBB
UkUodi50b1VJbnQzMigpLCB1aW50KDB4NDMyMTEyMzQpKTsKKyAgICB9CisgICAgeworICAgICAg
ICBRU2NyaXB0VmFsdWUgdigmZW5nLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVt
YmVyKCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0K
KyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEyMzQ1Njc4OTEwLjUpOworICAgICAgICBR
VkVSSUZZKHYuaXNOdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMTIz
NDU2Nzg5MTAuNSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywg
ImNpYW8iKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBR
Q09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0
KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5n
KCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCBRU3RyaW5nKCJjaWFvIikpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNT
dHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOwor
ICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICAvLyBjb3B5IGNv
bnN0cnVjdG9yLCBvcGVyYXRvcj0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZlbmcs
IDEuMCk7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBBUkUodjIu
c3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Mi5lbmdpbmUoKSwg
JmVuZyk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYzKHYpOworICAgICAgICBRQ09NUEFSRSh2
My5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmljdGx5
RXF1YWxzKHYyKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLmVuZ2luZSgpLCAmZW5nKTsK
KworICAgICAgICBRU2NyaXB0VmFsdWUgdjQoJmVuZywgMi4wKTsKKyAgICAgICAgUUNPTVBBUkUo
djQuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgdjMgPSB2NDsKKyAgICAgICAg
UUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUo
djMuc3RyaWN0bHlFcXVhbHModjQpLCB0cnVlKTsKKworICAgICAgICB2MiA9IFFTY3JpcHRWYWx1
ZSgpOworICAgICAgICBRQ09NUEFSRSh2Mi5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAg
ICAgICBRQ09NUEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVl
IHY1KHYpOworICAgICAgICBRQ09NUEFSRSh2NS5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7Cisg
ICAgICAgIHYgPSBRU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlF
cXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodjUudG9OdW1iZXIoKSwgMS4wKTsK
KyAgICB9CisKKyAgICAvLyBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG5vIGVuZ2luZSBhcmd1bWVu
dAorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRW
YWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVj
dCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5naW5l
ICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlwdFZhbHVl
OjpOdWxsVmFsdWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNOdWxsKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2Jq
ZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdp
bmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihmYWxzZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c0Jvb2xlYW4oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNCb29sKCksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUo
di50b0Jvb2xlYW4oKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNj
cmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KGlu
dCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgp
LCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAg
UUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgewor
ICAgICAgICBRU2NyaXB0VmFsdWUgdih1aW50KDEpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1Zh
bGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVtYmVyKCksIHRydWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50
b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlwdEVu
Z2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEuMCk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7
CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUo
di5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBR
U2NyaXB0VmFsdWUgdigiY2lhbyIpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1
ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01Q
QVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCks
IFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChR
U2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYo
UVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2
LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBRTGF0
aW4xU3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlw
dEVuZ2luZSAqKTApOworICAgIH0KKyAgICAvLyBjb3B5IGNvbnN0cnVjdG9yLCBvcGVyYXRvcj0K
KyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEuMCk7CisgICAgICAgIFFTY3JpcHRWYWx1
ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRSh2Mi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKworICAg
ICAgICBRU2NyaXB0VmFsdWUgdjModik7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmljdGx5RXF1
YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModjIpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuZW5naW5lKCksIChRU2NyaXB0RW5naW5lICopMCk7
CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY0KDIuMCk7CisgICAgICAgIFFDT01QQVJFKHY0LnN0
cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIHYzID0gdjQ7CisgICAgICAgIFFDT01Q
QVJFKHYzLnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYzLnN0
cmljdGx5RXF1YWxzKHY0KSwgdHJ1ZSk7CisKKyAgICAgICAgdjIgPSBRU2NyaXB0VmFsdWUoKTsK
KyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAg
UUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSB2NSh2
KTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAgICAg
ICB2ID0gUVNjcmlwdFZhbHVlKCk7CisgICAgICAgIFFDT01QQVJFKHY1LnN0cmljdGx5RXF1YWxz
KHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHY1LnRvTnVtYmVyKCksIDEuMCk7CisgICAg
fQorCisgICAgLy8gMCBlbmdpbmUKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCBRU2NyaXB0
VmFsdWU6OlVuZGVmaW5lZFZhbHVlKS5pc1VuZGVmaW5lZCgpKTsKKyAgICBRVkVSSUZZKFFTY3Jp
cHRWYWx1ZSgwLCBRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSkuaXNOdWxsKCkpOworICAgIFFWRVJJ
RlkoUVNjcmlwdFZhbHVlKDAsIGZhbHNlKS5pc0Jvb2woKSk7CisgICAgUVZFUklGWShRU2NyaXB0
VmFsdWUoMCwgaW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgw
LCB1aW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCAxLjAp
LmlzTnVtYmVyKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsICJjaWFvIikuaXNTdHJp
bmcoKSk7CisgICAgUVZFUklGWShRU2NyaXB0VmFsdWUoMCwgUVN0cmluZygiY2lhbyIpKS5pc1N0
cmluZygpKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRhKCkKK3sK
KyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJjb2RlIik7CisgICAgUVRlc3Q6OmFkZENv
bHVtbjxRU3RyaW5nPigicmVzdWx0Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmciKSA8
PCAiJ2hlbGxvJyIgPDwgImhlbGxvIjsKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmcgdXRmIikg
PDwgIifEhcWbxIfFvMW6w7PFgsWExJknIiA8PCAixIXFm8SHxbzFusOzxYLFhMSZIjsKKyAgICBR
VGVzdDo6bmV3Um93KCJleHByZXNzaW9uIikgPDwgIjEgKyA0IiA8PCAiNSI7CisgICAgUVRlc3Q6
Om5ld1JvdygibnVsbCIpIDw8ICJudWxsIiA8PCAibnVsbCI7CisgICAgUVRlc3Q6Om5ld1Jvdygi
Ym9vbGVhbiIpIDw8ICJmYWxzZSIgPDwgImZhbHNlIjsKKyAgICBRVGVzdDo6bmV3Um93KCJ1bmRl
ZmluZWQiKSA8PCAidW5kZWZpbmVkIiA8PCAidW5kZWZpbmVkIjsKKyAgICBRVGVzdDo6bmV3Um93
KCJvYmplY3QiKSA8PCAibmV3IE9iamVjdCIgPDwgIltvYmplY3QgT2JqZWN0XSI7Cit9CisKKy8q
IFRlc3QgY29udmVyc2lvbiB0byBzdHJpbmcgZnJvbSBkaWZmZXJlbnQgSlNDIHR5cGVzICovCit2
b2lkIHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkKK3sKKyAgICBRRkVUQ0goUVN0cmluZywg
Y29kZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHJlc3VsdCk7CisKKyAgICBRU2NyaXB0RW5naW5l
IGVuZ2luZTsKKyAgICBRQ09NUEFSRShlbmdpbmUuZXZhbHVhdGUoY29kZSkudG9TdHJpbmcoKSwg
cmVzdWx0KTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0b3JfZGF0
YSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIG5udW1i
ZXIoMTIzKTsKKyAgICBRU2NyaXB0VmFsdWUgbnN0cmluZygicGluZyIpOworICAgIFFTY3JpcHRW
YWx1ZSBudW1iZXIoZW5naW5lLmV2YWx1YXRlKCIxIikpOworICAgIFFTY3JpcHRWYWx1ZSBzdHJp
bmcoZW5naW5lLmV2YWx1YXRlKCInZm9vJyIpKTsKKyAgICBRU2NyaXB0VmFsdWUgb2JqZWN0KGVu
Z2luZS5ldmFsdWF0ZSgibmV3IE9iamVjdCIpKTsKKyAgICBRU2NyaXB0VmFsdWUgdW5kZWZpbmVk
KGVuZ2luZS5ldmFsdWF0ZSgidW5kZWZpbmVkIikpOworICAgIFFTY3JpcHRWYWx1ZSBudWxsKGVu
Z2luZS5ldmFsdWF0ZSgibnVsbCIpKTsKKworICAgIFFUZXN0OjphZGRDb2x1bW48UVNjcmlwdFZh
bHVlPigidmFsdWUiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJyZXN1bHQiKTsK
KworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBudW1iZXIiKSA8PCBubnVtYmVyIDw8IFFTdHJp
bmc6Om51bWJlcigxMjMpOworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBzdHJpbmciKSA8PCBu
c3RyaW5nIDw8IFFTdHJpbmcoInBpbmciKTsKKyAgICBRVGVzdDo6bmV3Um93KCJudW1iZXIiKSA8
PCBudW1iZXIgPDwgIjEiOworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIpIDw8IHN0cmluZyA8
PCAiZm9vIjsKKyAgICBRVGVzdDo6bmV3Um93KCJvYmplY3QiKSA8PCBvYmplY3QgPDwgIltvYmpl
Y3QgT2JqZWN0XSI7CisgICAgUVRlc3Q6Om5ld1JvdygidW5kZWZpbmVkIikgPDwgdW5kZWZpbmVk
IDw8ICJ1bmRlZmluZWQiOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwiKSA8PCBudWxsIDw8ICJu
dWxsIjsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0b3IoKQorewor
ICAgIFFGRVRDSChRU2NyaXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywgcmVz
dWx0KTsKKworICAgIFFWRVJJRlkodmFsdWUuaXNWYWxpZCgpKTsKKyAgICBRU2NyaXB0VmFsdWUg
dG1wKHZhbHVlKTsKKyAgICBRVkVSSUZZKHRtcC5pc1ZhbGlkKCkpOworICAgIFFDT01QQVJFKHRt
cC50b1N0cmluZygpLCByZXN1bHQpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmFzc2ln
bk9wZXJhdG9yX2RhdGEoKQoreworICAgIGNvcHlDb25zdHJ1Y3Rvcl9kYXRhKCk7Cit9CisKK3Zv
aWQgdHN0X1FTY3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3IoKQoreworICAgIFFGRVRDSChRU2Ny
aXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywgcmVzdWx0KTsKKworICAgIFFT
Y3JpcHRWYWx1ZSB0bXA7CisgICAgdG1wID0gdmFsdWU7CisgICAgUVZFUklGWSh0bXAuaXNWYWxp
ZCgpKTsKKyAgICBRQ09NUEFSRSh0bXAudG9TdHJpbmcoKSwgcmVzdWx0KTsKK30KKworLyogVGVz
dCBpbnRlcm5hbCBkYXRhIHNoYXJpbmcgYmV0d2VlbiBhIGRpZmZyZW5ldCBRU2NyaXB0VmFsdWUu
ICovCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKCkKK3sKKyAgICBRU2NyaXB0
RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUgdjE7CisgICAgUVNjcmlwdFZhbHVlIHYy
KHYxKTsKKworICAgIHYxID0gZW5naW5lLmV2YWx1YXRlKCIxIik7IC8vIHYxID09IDEgOyB2MiBp
bnZhbGlkLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKCF2Mi5pc1Zh
bGlkKCkpOworCisgICAgdjIgPSB2MTsgLy8gdjEgPT0gMTsgdjIgPT0gMS4KKyAgICBRVkVSSUZZ
KHYxLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi5pc1ZhbGlkKCkpOworCisgICAgdjEgPSBl
bmdpbmUuZXZhbHVhdGUoIm9iaiA9IG5ldyBEYXRlIik7IC8vIHYxID09IFtvYmplY3QgRGF0ZV0g
OyB2MiA9PSAxLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHYyLmlz
VmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi50b1N0cmluZygpICE9IHYxLnRvU3RyaW5nKCkpOwor
CisgICAgLy8gVE9ETyBhZGQgb2JqZWN0IG1hbmlwdWxhdGlvbiAodjEgYW5kIHYyIHBvaW50IHRv
IHRoZSBzYW1lIG9iamVjdCkuCit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y29uc3RydWN0
b3JzX2RhdGEoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworCisgICAgUVRlc3Q6OmFk
ZENvbHVtbjxRU2NyaXB0VmFsdWU+KCJ2YWx1ZSIpOworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0
cmluZz4oInN0cmluZyIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInZhbGlkIik7Cisg
ICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigib2JqZWN0Iik7CisKKyAgICBRVGVzdDo6bmV3Um93
KCJpbnZhbGlkIikgPDwgUVNjcmlwdFZhbHVlKCkgPDwgUVN0cmluZygpIDw8IGZhbHNlIDw8IGZh
bHNlOworICAgIFFUZXN0OjpuZXdSb3coIm51bWJlciIpIDw8IFFTY3JpcHRWYWx1ZSgtMjEpIDw8
IFFTdHJpbmc6Om51bWJlcigtMjEpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jv
dygiYm9vbCIpIDw8IFFTY3JpcHRWYWx1ZSh0cnVlKSA8PCBRU3RyaW5nKCJ0cnVlIikgPDwgdHJ1
ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJkb3VibGUiKSA8PCBRU2NyaXB0VmFsdWUo
MjEuMTIpIDw8IFFTdHJpbmc6Om51bWJlcigyMS4xMikgPDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBR
VGVzdDo6bmV3Um93KCJzdHJpbmciKSA8PCBRU2NyaXB0VmFsdWUoIkFsYU1hS290YSIpIDw8IFFT
dHJpbmcoIkFsYU1hS290YSIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygi
b2JqZWN0IikgPDwgZW5naW5lLmV2YWx1YXRlKCJuZXcgT2JqZWN0IikgPDwgUVN0cmluZygiW29i
amVjdCBPYmplY3RdIikgPDwgdHJ1ZSA8PCB0cnVlOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwi
KSA8PCBRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpPDwgUVN0cmluZygibnVs
bCIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygidW5kZWYiKSA8PCBRU2Ny
aXB0VmFsdWUoUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk8PCBRU3RyaW5nKCJ1bmRlZmlu
ZWQiKSA8PCB0cnVlIDw8IGZhbHNlOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmNvbnN0
cnVjdG9ycygpCit7CisgICAgUUZFVENIKFFTY3JpcHRWYWx1ZSwgdmFsdWUpOworICAgIFFGRVRD
SChRU3RyaW5nLCBzdHJpbmcpOworICAgIFFGRVRDSChib29sLCB2YWxpZCk7CisgICAgUUZFVENI
KGJvb2wsIG9iamVjdCk7CisKKyAgICBRQ09NUEFSRSh2YWx1ZS5pc1ZhbGlkKCksIHZhbGlkKTsK
KyAgICBRQ09NUEFSRSh2YWx1ZS50b1N0cmluZygpLCBzdHJpbmcpOworICAgIFFDT01QQVJFKHZh
bHVlLmlzT2JqZWN0KCksIG9iamVjdCk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y2Fs
bCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIHBpbmcg
PSBlbmdpbmUuZXZhbHVhdGUoIiggZnVuY3Rpb24oKSB7cmV0dXJuICdwaW5nJzt9ICkiKTsKKyAg
ICBRU2NyaXB0VmFsdWUgaW5jciA9IGVuZ2luZS5ldmFsdWF0ZSgiKCBmdW5jdGlvbihpKSB7cmV0
dXJuIGkgKyAxO30gKSIpOworICAgIFFTY3JpcHRWYWx1ZSBvbmUoMSk7CisgICAgUVNjcmlwdFZh
bHVlIGZpdmUoNSk7CisgICAgUVNjcmlwdFZhbHVlIHJlc3VsdDsKKworICAgIFFWRVJJRlkob25l
LmlzVmFsaWQoKSk7CisgICAgUVZFUklGWShmaXZlLmlzVmFsaWQoKSk7CisKKyAgICBRVkVSSUZZ
KHBpbmcuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHBpbmcuaXNGdW5jdGlvbigpKTsKKyAgICBy
ZXN1bHQgPSBwaW5nLmNhbGwoKTsKKyAgICBRVkVSSUZZKHJlc3VsdC5pc1ZhbGlkKCkpOworICAg
IFFDT01QQVJFKHJlc3VsdC50b1N0cmluZygpLCBRU3RyaW5nOjpmcm9tVXRmOCgicGluZyIpKTsK
KworICAgIFFWRVJJRlkoaW5jci5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkoaW5jci5pc0Z1bmN0
aW9uKCkpOworICAgIHJlc3VsdCA9IGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwgUVNjcmlwdFZh
bHVlTGlzdCgpIDw8IG9uZSk7CisgICAgUVZFUklGWShyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICBR
Q09NUEFSRShyZXN1bHQudG9TdHJpbmcoKSwgUVN0cmluZygiMiIpKTsKKworICAgIFFDT01QQVJF
KGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwgUVNjcmlwdFZhbHVlTGlzdCgpIDw8IGZpdmUpLnRv
U3RyaW5nKCksIFFTdHJpbmcoIjYiKSk7CisKKyAgICBRVkVSSUZZKGluY3IuY2FsbCgpLmlzVmFs
aWQoKSk7IC8vIEV4Y2VwdGlvbi4KK30KKworUVRFU1RfTUFJTih0c3RfUVNjcmlwdFZhbHVlKQor
I2luY2x1ZGUgInRzdF9xc2NyaXB0dmFsdWUubW9jIgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvdGVzdHMvdGVzdHMucHJpIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJp
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGI4YjEKLS0tIC9kZXYvbnVs
bAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcmkKQEAgLTAsMCArMSwyOCBA
QAoraXNFbXB0eShPVVRQVVRfRElSKSB7CisgICAgQ09ORklHKGRlYnVnLCBkZWJ1Z3xyZWxlYXNl
KSB7CisgICAgICAgIE9VVFBVVF9ESVI9JCRQV0QvV2ViS2l0QnVpbGQvRGVidWcKKyAgICB9IGVs
c2UgeyAjIFJlbGVhc2UKKyAgICAgICAgT1VUUFVUX0RJUj0kJFBXRC9XZWJLaXRCdWlsZC9SZWxl
YXNlCisgICAgfQorfQorCisKK1FNQUtFX1JQQVRIRElSID0gJCRPVVRQVVRfRElSL2xpYiAkJFFN
QUtFX1JQQVRIRElSCitRTUFLRV9MSUJESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfTElC
RElSCittYWM6IXN0YXRpYzpjb250YWlucyhRVF9DT05GSUcsIHF0X2ZyYW1ld29yayk6IUNPTkZJ
Ryh3ZWJraXRfbm9fZnJhbWV3b3JrKSB7CisgICAgTElCUyArPSAtZnJhbWV3b3JrIFF0SmF2YVNj
cmlwdAorICAgIFFNQUtFX0ZSQU1FV09SS1BBVEggPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0Vf
RlJBTUVXT1JLUEFUSAorfSBlbHNlIHsKKyAgICB3aW4zMi0qfHdpbmNlKiB7CisgICAgICAgIExJ
QlMgKz0gLWxRdEphdmFTY3JpcHQkJHtRVF9NQUpPUl9WRVJTSU9OfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIExJQlMgKz0gLWxRdEphdmFTY3JpcHQKKyAgICB9Cit9CisKK0NPTkZJRyhyZWxlYXNl
LCBkZWJ1Z3xyZWxlYXNlKSB7CisgICAgREVGSU5FUyArPSBOREVCVUcKK30KKworSU5DTFVERVBB
VEggKz0gJCRQV0QvLi4vYXBpCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3Rz
L3Rlc3RzLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVlZGIxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2
YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0wLDAgKzEsMyBAQAorVEVNUExBVEUg
PSBzdWJkaXJzCitTVUJESVJTID0gICBxc2NyaXB0ZW5naW5lIFwKKyAgICAgICAgICAgIHFzY3Jp
cHR2YWx1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXggZGQyOWE3
Ni4uNjZhOTgxMCAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC0y
Miw3ICsyMiw4IEBAIFNVQkRJUlMgKz0gXAogCiBidWlsZC1xamF2YXNjcmlwdCB7CiAgICAgU1VC
RElSUyArPSBcCi0gICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJv
CisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdEphdmFTY3JpcHQucHJvIFwKKyAgICAg
ICAgSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMKIH0KIAogaW5jbHVkZShXZWJLaXQvcXQvZG9jcy9k
b2NzLnByaSkK
</data>
<flag name="review"
          id="29360"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="29361"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47005</attachid>
            <date>2010-01-20 03:46:59 -0800</date>
            <delta_ts>2010-01-20 06:12:49 -0800</delta_ts>
            <desc>Initialization of API v4</desc>
            <filename>initV4.diff</filename>
            <type>text/plain</type>
            <size>53575</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4MjJiNzgyLi41NDlkOWYz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDEtMTkgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3Qg
c3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4KKyAgICAg
ICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4dCBhbmQg
dGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxlZCBieSBk
ZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1ha2Vhcmc9
IkNPTkZJRys9YnVpbGQtcWphdmFzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKwor
ICAgICAgICAqIFdlYktpdC5wcm86CisKIDIwMTAtMDEtMTUgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgWGFuIExvcGV6
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IGU3NmE1NDUuLjYyOGE3NjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5
OSBAQAorMjAxMC0wMS0xOSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXJzdCBzdGVwcyBvZiB0aGUgUXRTY3JpcHQgQVBJLgorICAgICAgICAKKyAgICAgICAgVHdvIG5l
dyBjbGFzc2VzIHdlcmUgY3JlYXRlZDsgUVNjcmlwdEVuZ2luZSBhbmQgUVNjcmlwdFZhbHVlLgor
ICAgICAgICBUaGUgZmlyc3Qgc2hvdWxkIGVuY2Fwc3VsYXRlIGEgamF2YXNjcmlwdCBjb250ZXh0
IGFuZCB0aGUgc2Vjb25kIGEgc2NyaXB0CisgICAgICAgIHZhbHVlLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBBUEkgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQsIHNvIGl0IGlzbid0IGNvbXBpbGVk
IGJ5IGRlZmF1bHQuCisgICAgICAgIFRvIHRyaWdnZXIgY29tcGlsYXRpb24sIHBhc3MgLS1xbWFr
ZWFyZz0iQ09ORklHKz1idWlsZC1xamF2YXNjcmlwdCIgdG8KKyAgICAgICAgYnVpbGQtd2Via2l0
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2
NQorCisgICAgICAgICogcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm86IEFkZGVkLgorICAgICAgICAq
IHF0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0Q29u
dmVydGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmU6OlFTY3JpcHRFbmdpbmUpOgorICAgICAgICAo
UVNjcmlwdEVuZ2luZTo6flFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6
ZXZhbHVhdGUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UpOgorICAg
ICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9x
c2NyaXB0ZW5naW5lX3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRl
OjpRU2NyaXB0RW5naW5lUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
flFTY3JpcHRFbmdpbmVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpl
dmFsdWF0ZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oOiBBZGRlZC4KKyAg
ICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQpOgorICAgICAgICAoUVNjcmlwdEVuZ2lu
ZVByaXZhdGU6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRl
OjptYWtlSlNWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCk6
CisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoUVNj
cmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp+UVNjcmlw
dFZhbHVlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2Ny
aXB0VmFsdWU6OmlzQm9vbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzQm9vbGVhbik6Cisg
ICAgICAgIChRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6
aXNOdWxsKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoUVNj
cmlwdFZhbHVlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzRXJyb3Ip
OgorICAgICAgICAoUVNjcmlwdFZhbHVlOjppc09iamVjdCk6CisgICAgICAgIChRU2NyaXB0VmFs
dWU6OmlzRnVuY3Rpb24pOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp0b1N0cmluZyk6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9C
b29sKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZTo6dG9JbnRlZ2VyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9JbnQzMik6Cisg
ICAgICAgIChRU2NyaXB0VmFsdWU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6
dG9VSW50MTYpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZTo6ZW5naW5lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6c3Ry
aWN0bHlFcXVhbHMpOgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0dmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChRU2NyaXB0VmFsdWU6Oik6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9w
Lmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6KToKKyAgICAgICAgKFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmdldCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpR
U2NyaXB0VmFsdWVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFs
aWQpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNCb29sKToKKyAgICAgICAgKFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZh
dGU6OmlzTnVsbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1N0cmluZyk6Cisg
ICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjppc0Vycm9yKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzT2JqZWN0KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rpb24pOgor
ICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAoUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6dG9OdW1iZXIpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
dG9Cb29sKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjp0b0ludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1
ZVByaXZhdGU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvVUlu
dDE2KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVxdWFscyk6CisgICAgICAgIChR
U2NyaXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyk6CisgICAgICAgIChRU2NyaXB0VmFs
dWVQcml2YXRlOjphc3NpZ25FbmdpbmUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
Y2FsbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgorICAgICAgICAo
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y29udGV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2
YXRlOjp2YWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpvYmplY3QpOgorICAg
ICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNJbmhlcml0ZWRGcm9tKToKKyAgICAgICAgKFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmlzSlNCYXNlZCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2
YXRlOjppc051bWJlckJhc2VkKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzU3Ry
aW5nQmFzZWQpOgorICAgICAgICAqIHF0L2FwaS9xdHNjcmlwdGdsb2JhbC5oOiBBZGRlZC4KKwog
MjAxMC0wMS0xOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0SmF2YVNjcmlwdC5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRKYXZhU2NyaXB0
LnBybwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MTE5NTJmCi0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0SmF2YVNjcmlwdC5wcm8KQEAgLTAs
MCArMSwzNyBAQAorVEFSR0VUICAgICA9IFF0SmF2YVNjcmlwdAorVEVNUExBVEUgICA9IGxpYgor
UVQgICAgICAgICA9IGNvcmUKKworSU5DTFVERVBBVEggKz0gJCRQV0QKKworQ09ORklHICs9IGJ1
aWxkaW5nLWxpYnMKK0pBVkFTQ1JJUFRDT1JFX0pJVCA9IHllcworCitpc0VtcHR5KEpTQ19HRU5F
UkFURURfU09VUkNFU19ESVIpOkpTQ19HRU5FUkFURURfU09VUkNFU19ESVIgPSAuLi8uLi9nZW5l
cmF0ZWQKK0NPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkgeworICAgIE9CSkVDVFNfRElSID0g
b2JqL2RlYnVnCit9IGVsc2UgeyAjIFJlbGVhc2UKKyAgICBPQkpFQ1RTX0RJUiA9IG9iai9yZWxl
YXNlCit9CisKK2luY2x1ZGUoJCRQV0QvLi4vLi4vLi4vV2ViS2l0LnByaSkKK2luY2x1ZGUoJCRQ
V0QvLi4vLi4vSmF2YVNjcmlwdENvcmUucHJpKQorCitJTkNMVURFUEFUSCArPSAkJFBXRC8uLi8u
Li9BUEkKKworU09VUkNFUyArPSAgJCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAgXAorICAgICAgICAg
ICAgJCRQV0QvcXNjcmlwdGVuZ2luZV9wLmNwcCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
dmFsdWUuY3BwIFwKKworSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9iYWwuaCBcCisgICAg
ICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlw
dGVuZ2luZV9wLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlLmggXAorICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlX3AuaCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
Y29udmVydGVyX3AuaCBcCisKKworIXN0YXRpYzogREVGSU5FUyArPSBRVF9NQUtFRExMCisKK0RF
U1RESVIgPSAkJE9VVFBVVF9ESVIvbGliCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0
Y29udmVydGVyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NhNDFm
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRjb252ZXJ0
ZXJfcC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNj
cmlwdGNvbnZlcnRlcl9wX2gKKyNkZWZpbmUgcXNjcmlwdGNvbnZlcnRlcl9wX2gKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXN0cmlu
Zy5oPgorCisvKgorICBcaW50ZXJuYWwKKyAgXGNsYXNzIFFTY3JpcHRDb252ZXJ0ZXIKKyAgUVNj
cmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5naW5lIGhlbHBlciBjbGFzcy4gVGhpcyBjbGFzcydzIHJl
c3BvbnNpYmlsaXR5IGlzIHRvIGNvbnZlcnQgdmFsdWVzCisgIGJldHdlZW4gSlMgdmFsdWVzIGFu
ZCBRdC9DKysgdmFsdWVzLgorCisgIFRoaXMgaXMgYSBuaWNlIHdheSB0byBpbmxpbmUgdGhlc2Ug
ZnVuY3Rpb25zIGluIGJvdGggUVNjcmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5naW5lLgorKi8KK2Ns
YXNzIFFTY3JpcHRDb252ZXJ0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBRU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IEpTU3RyaW5nUmVmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIo
c3RyKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cikpOworICAgIH0KKyAgICBzdGF0aWMgSlNTdHJp
bmdSZWYgdG9TdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0ci50b1V0ZjgoKS5jb25zdERhdGEoKSk7
CisgICAgfQorICAgIHN0YXRpYyBKU1N0cmluZ1JlZiB0b1N0cmluZyhjb25zdCBjaGFyKiBzdHIp
CisgICAgeworICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Ry
KTsKKyAgICB9Cit9OworCisjZW5kaWYgLy8gcXNjcmlwdGNvbnZlcnRlcl9wX2gKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwLi5mMTJmNDEwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKworI2lu
Y2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZV9wLmgiCisK
Ky8qIQorICAgIENvbnN0cnVjdHMgYSBRU2NyaXB0RW5naW5lIG9iamVjdC4KKworICAgIFRoZSBn
bG9iYWxPYmplY3QoKSBpcyBpbml0aWFsaXplZCB0byBoYXZlIHByb3BlcnRpZXMgYXMgZGVzY3Jp
YmVkIGluIEVDTUEtMjYyLCBTZWN0aW9uIDE1LjEuCisqLworUVNjcmlwdEVuZ2luZTo6UVNjcmlw
dEVuZ2luZSgpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdEVuZ2luZVByaXZhdGUodGhpcykpCit7
Cit9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoaXMgUVNjcmlwdEVuZ2luZS4KKyovCitRU2NyaXB0
RW5naW5lOjp+UVNjcmlwdEVuZ2luZSgpCit7Cit9CisKKy8qIQorICAgIEV2YWx1YXRlcyBcYSBw
cm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxpbmUgbnVtYmVyLAorICAg
IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24uCisKKyAgICBUaGUgc2Ny
aXB0IGNvZGUgd2lsbCBiZSBldmFsdWF0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKworICAg
IFRoZSBldmFsdWF0aW9uIG9mIFxhIHByb2dyYW0gY2FuIGNhdXNlIGFuIGV4Y2VwdGlvbiBpbiB0
aGUKKyAgICBlbmdpbmU7IGluIHRoaXMgY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhl
IGV4Y2VwdGlvbgorICAgIHRoYXQgd2FzIHRocm93biAodHlwaWNhbGx5IGFuIFxje0Vycm9yfSBv
YmplY3QpLiBZb3UgY2FuIGNhbGwKKyAgICBoYXNVbmNhdWdodEV4Y2VwdGlvbigpIHRvIGRldGVy
bWluZSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgaW4KKyAgICB0aGUgbGFzdCBjYWxsIHRvIGV2
YWx1YXRlKCkuCisKKyAgICBcYSBsaW5lTnVtYmVyIGlzIHVzZWQgdG8gc3BlY2lmeSBhIHN0YXJ0
aW5nIGxpbmUgbnVtYmVyIGZvciBcYQorICAgIHByb2dyYW07IGxpbmUgbnVtYmVyIGluZm9ybWF0
aW9uIHJlcG9ydGVkIGJ5IHRoZSBlbmdpbmUgdGhhdCBwZXJ0YWluCisgICAgdG8gdGhpcyBldmFs
dWF0aW9uIChlLmcuIHVuY2F1Z2h0RXhjZXB0aW9uTGluZU51bWJlcigpKSB3aWxsIGJlCisgICAg
YmFzZWQgb24gdGhpcyBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIGlmIFxhIHByb2dyYW0gY29uc2lz
dHMgb2YgdHdvCisgICAgbGluZXMgb2YgY29kZSwgYW5kIHRoZSBzdGF0ZW1lbnQgb24gdGhlIHNl
Y29uZCBsaW5lIGNhdXNlcyBhIHNjcmlwdAorICAgIGV4Y2VwdGlvbiwgdW5jYXVnaHRFeGNlcHRp
b25MaW5lTnVtYmVyKCkgd291bGQgcmV0dXJuIHRoZSBnaXZlbiBcYQorICAgIGxpbmVOdW1iZXIg
cGx1cyBvbmUuIFdoZW4gbm8gc3RhcnRpbmcgbGluZSBudW1iZXIgaXMgc3BlY2lmaWVkLCBsaW5l
CisgICAgbnVtYmVycyB3aWxsIGJlIDEtYmFzZWQuCisKKyAgICBcYSBmaWxlTmFtZSBpcyB1c2Vk
IGZvciBlcnJvciByZXBvcnRpbmcuIEZvciBleGFtcGxlIGluIGVycm9yIG9iamVjdHMKKyAgICB0
aGUgZmlsZSBuYW1lIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgImZpbGVOYW1lIiBwcm9wZXJ0
eSBpZiBpdCdzCisgICAgcHJvdmlkZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLgorKi8KK1FTY3JpcHRW
YWx1ZSBRU2NyaXB0RW5naW5lOjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25z
dCBRU3RyaW5nJiBmaWxlTmFtZSwgaW50IGxpbmVOdW1iZXIpCit7CisgICAgcmV0dXJuIFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldChkX3B0ci0+ZXZhbHVhdGUocHJvZ3JhbSwgZmlsZU5hbWUsIGxp
bmVOdW1iZXIpKTsKK30KKworLyohCisgICAgUnVucyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisK
KyAgICBUaGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2lsbCBhdHRlbXB0IHRvIHJlY2xhaW0gbWVtb3J5
IGJ5IGxvY2F0aW5nIGFuZCBkaXNwb3Npbmcgb2Ygb2JqZWN0cyB0aGF0IGFyZQorICAgIG5vIGxv
bmdlciByZWFjaGFibGUgaW4gdGhlIHNjcmlwdCBlbnZpcm9ubWVudC4KKworICAgIE5vcm1hbGx5
IHlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbjsgdGhlIGdhcmJhZ2UgY29sbGVj
dG9yIHdpbGwgYXV0b21hdGljYWxseSBiZSBpbnZva2VkCisgICAgd2hlbiB0aGUgUVNjcmlwdEVu
Z2luZSBkZWNpZGVzIHRoYXQgaXQncyB3aXNlIHRvIGRvIHNvIChpLmUuIHdoZW4gYSBjZXJ0YWlu
IG51bWJlciBvZiBuZXcgb2JqZWN0cworICAgIGhhdmUgYmVlbiBjcmVhdGVkKS4gSG93ZXZlciwg
eW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZXhwbGljaXRseSByZXF1ZXN0IHRoYXQgZ2Fy
YmFnZQorICAgIGNvbGxlY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBhcyBzb29uIGFzIHBvc3Np
YmxlLgorKi8KK3ZvaWQgUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIGRf
cHRyLT5jb2xsZWN0R2FyYmFnZSgpOworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHRlbmdpbmUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM3NjY5MgotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0ZW5naW5lX2gKKyNk
ZWZpbmUgcXNjcmlwdGVuZ2luZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgorI2lu
Y2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nLmg+
CisKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKK2NsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlOworCisv
LyBJbnRlcm5hbCB0eXBlZGVmCit0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8
UVNjcmlwdEVuZ2luZVByaXZhdGU+IFFTY3JpcHRFbmdpbmVQdHI7CisKK2NsYXNzIFFTY3JpcHRF
bmdpbmUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBRU2NyaXB0RW5naW5l
KCk7CisgICAgflFTY3JpcHRFbmdpbmUoKTsKKworICAgIFFTY3JpcHRWYWx1ZSBldmFsdWF0ZShj
b25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSA9IFFTdHJpbmco
KSwgaW50IGxpbmVOdW1iZXIgPSAxKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlOworCisgICAgUVNj
cmlwdEVuZ2luZVB0ciBkX3B0cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGVuZ2luZV9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
YWYwYjZkCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRl
bmdpbmVfcC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisKKyNpbmNsdWRl
ICJxc2NyaXB0dmFsdWVfcC5oIgorCisvKiEKKyAgICBDb25zdHJ1Y3RzIGEgZGVmYXVsdCBRU2Ny
aXB0RW5naW5lUHJpdmF0ZSBvYmplY3QsIGEgbmV3IGdsb2JhbCBjb250ZXh0IHdpbGwgYmUgY3Jl
YXRlZC4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0RW5naW5lUHJpdmF0ZTo6UVNjcmlwdEVu
Z2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lKQorICAgIDogcV9wdHIoY29u
c3RfY2FzdDxRU2NyaXB0RW5naW5lKj4oZW5naW5lKSkKKyAgICAsIG1fY29udGV4dChKU0dsb2Jh
bENvbnRleHRDcmVhdGUoMCkpCit7Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2YXRlOjp+UVNjcmlw
dEVuZ2luZVByaXZhdGUoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCgp
KTsKK30KKworLyohCisgICAgRXZhbHVhdGVzIHByb2dyYW0gYW5kIHJldHVybnMgdGhlIHJlc3Vs
dCBvZiB0aGUgZXZhbHVhdGlvbi4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0VmFsdWVQcml2
YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6ZXZhbHVhdGUoY29uc3QgUVN0cmluZyYgcHJvZ3Jh
bSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVyKQoreworICAgIEpTU3Ry
aW5nUmVmIHNjcmlwdCA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHByb2dyYW0pOworICAg
IEpTU3RyaW5nUmVmIGZpbGUgPSBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhmaWxlTmFtZSk7
CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb247CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2
YWx1YXRlU2NyaXB0KGNvbnRleHQoKSwgc2NyaXB0LCAvKiBHbG9iYWwgT2JqZWN0ICovIDAsIGZp
bGUsIGxpbmVOdW1iZXIsICZleGNlcHRpb24pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgZXhjZXB0aW9uKTsgLy8gcmV0dXJu
cyBhbiBleGNlcHRpb24KKyAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywg
cmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5n
aW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaApuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZThjZTJiCi0tLSAvZGV2L251bGwKKysrIGIv
SmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCkBAIC0wLDAgKzEsOTkgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgICAgICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRlbmdpbmVfcF9oCisjZGVm
aW5lIHFzY3JpcHRlbmdpbmVfcF9oCisKKyNpbmNsdWRlICJxc2NyaXB0Y29udmVydGVyX3AuaCIK
KyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPFF0Q29yZS9x
c2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nLmg+CisKK2NsYXNzIFFTY3Jp
cHRFbmdpbmU7CisKK2NsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlCisgICAgICAgIDogcHVibGlj
IFFTaGFyZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVNjcmlwdEVuZ2luZVB0ciBnZXQo
Y29uc3QgUVNjcmlwdEVuZ2luZSogcSkgeyByZXR1cm4gcSA/IHEtPmRfcHRyIDogUVNjcmlwdEVu
Z2luZVB0cigpOyB9CisgICAgc3RhdGljIFFTY3JpcHRFbmdpbmUqIGdldChjb25zdCBRU2NyaXB0
RW5naW5lUHJpdmF0ZSogZCkgeyByZXR1cm4gZCA/IGQtPnFfcHRyIDogMDsgfQorCisgICAgUVNj
cmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSopOworICAgIH5RU2NyaXB0RW5n
aW5lUHJpdmF0ZSgpOworCisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZXZhbHVhdGUoY29uc3Qg
UVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVy
KTsKKyAgICBpbmxpbmUgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworCisgICAgaW5saW5lIEpTVmFs
dWVSZWYgbWFrZUpTVmFsdWUoZG91YmxlIG51bWJlcikgY29uc3Q7CisgICAgaW5saW5lIEpTVmFs
dWVSZWYgbWFrZUpTVmFsdWUoaW50IG51bWJlcikgY29uc3Q7CisgICAgaW5saW5lIEpTVmFsdWVS
ZWYgbWFrZUpTVmFsdWUodWludCBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVlUmVm
IG1ha2VKU1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3Q7CisgICAgaW5saW5lIEpT
VmFsdWVSZWYgbWFrZUpTVmFsdWUoYm9vbCBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1Zh
bHVlUmVmIG1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKSBjb25z
dDsKKworICAgIGlubGluZSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCgpIGNvbnN0OworcHJp
dmF0ZToKKyAgICBRU2NyaXB0RW5naW5lKiBxX3B0cjsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYg
bV9jb250ZXh0OworfTsKKwordm9pZCBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29sbGVjdEdhcmJh
Z2UoKQoreworICAgIEpTR2FyYmFnZUNvbGxlY3QoY29udGV4dCgpKTsKK30KKworSlNWYWx1ZVJl
ZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoZG91YmxlIG51bWJlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCgpLCBudW1iZXIpOworfQor
CitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1ZShpbnQgbnVtYmVy
KSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0KCksIG51bWJl
cik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKHVp
bnQgbnVtYmVyKSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
KCksIG51bWJlcik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VK
U1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCgpLCBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhzdHJpbmcp
KTsKK30KKworSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoYm9v
bCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQo
KSwgdmFsdWUpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNW
YWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAo
dmFsdWUgPT0gUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bGwoY29udGV4dCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCgpKTsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0OworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuY3BwIGIvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uODIxMzM3MwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0dmFsdWUuY3BwCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKwor
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lX3AuaCIK
KyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorI2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4K
KworLyohCisgICAgQ29uc3RydWN0cyBhbiBpbnZhbGlkIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1
ZTo6UVNjcmlwdFZhbHVlKCkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKCkp
Cit7Cit9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0
VmFsdWUgd2l0aCBhIGJvb2xlYW4gXGEgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0
VmFsdWUoYm9vbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHZh
bHVlKSkKK3sKK30KKworLyohCisgIFxzaW5jZSA0LjUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFT
Y3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNj
cmlwdFZhbHVlKGludCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRl
KHZhbHVlKSkKK3sKK30KKworLyohCisgIFxzaW5jZSA0LjUKKworICBDb25zdHJ1Y3RzIGEgbmV3
IFFTY3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6
UVNjcmlwdFZhbHVlKHVpbnQgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8qIQorICBcc2luY2UgNC41CisKKyAgQ29uc3RydWN0cyBh
IG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIG51bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFs
dWU6OlFTY3JpcHRWYWx1ZShxcmVhbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyohCisgIFxzaW5jZSA0LjUKKworICBDb25zdHJ1
Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgc3RyaW5nIFxhIHZhbHVlLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKGNvbnN0IFFTdHJpbmcmIHZhbHVlKQorICAgIDogZF9wdHIo
bmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUpKQoreworfQorCisvKiEKKyAgXHNpbmNlIDQu
NQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggYSBzcGVjaWFsIFxhIHZh
bHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFNwZWNpYWxWYWx1ZSB2YWx1ZSkK
KyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyoh
CisgIFxzaW5jZSA0LjUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEg
c3RyaW5nIFxhIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKGNvbnN0IGNo
YXIqIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoUVN0cmluZzo6
ZnJvbVV0ZjgodmFsdWUpKSkKK3sKK30KKworLyohCisgICAgQmxvY2sgYXV0b21hdGljIGNvbnZl
cnRpb24gdG8gYm9vbAorICAgIFxpbnRlcm5hbAorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZh
bHVlKHZvaWQqIGQpCit7CisgICAgUV9BU1NFUlQoZmFsc2UpOworfQorCisvKiEKKyAgICBDb25z
dHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSBmcm9tIHByaXZhdGUKKyAgICBcaW50ZXJuYWwKKyov
CitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0VmFsdWVQcml2YXRlKiBkKQorICAg
IDogZF9wdHIoZCkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBu
ZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIGJvb2xlYW4gXGEgdmFsdWUgYW5kCisgIHJlZ2lzdGVy
cyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlw
dFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgYm9vbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5l
dyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgdmFsdWUpKQoreworfQorCisvKiEKKyAgXG9i
c29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCB0aGUgaW50ZWdl
ciBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdpbmUu
CisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBp
bnQgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZh
bHVlKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNj
cmlwdFZhbHVlIHdpdGggdGhlIHVuc2lnbmVkIGludGVnZXIgXGEgdmFsdWUgYW5kCisgIHJlZ2lz
dGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorICovCitRU2NyaXB0VmFsdWU6OlFT
Y3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIHVpbnQgdmFsdWUpCisgICAgOiBkX3B0
cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisg
IFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIHFz
cmVhbCBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdp
bmUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5l
LCBxcmVhbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2lu
ZSwgdmFsdWUpKQoreworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5l
dyBRU2NyaXB0VmFsdWUgd2l0aCB0aGUgc3RyaW5nIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMg
aXQgd2l0aCB0aGUgc2NyaXB0IFxhIGVuZ2luZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRW
YWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQorICAgIDog
ZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9CisKKy8q
IQorICBcb2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIHRo
ZSBzdHJpbmcgXGEgdmFsdWUgYW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEg
ZW5naW5lLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVu
Z2luZSwgY29uc3QgY2hhciogdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZShlbmdpbmUsIFFTdHJpbmc6OmZyb21VdGY4KHZhbHVlKSkpCit7Cit9CisKKy8qIQorICBc
b2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIHRoZSBzcGVj
aWFsIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0aCB0aGUgc2NyaXB0IFxhIGVuZ2lu
ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lICplbmdpbmUs
IFNwZWNpYWxWYWx1ZSB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRl
KGVuZ2luZSwgdmFsdWUpKQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0
VmFsdWUgdGhhdCBpcyBhIGNvcHkgb2YgXGEgb3RoZXIuCisKKyAgTm90ZSB0aGF0IGlmIFxhIG90
aGVyIGlzIGFuIG9iamVjdCAoaS5lLiwgaXNPYmplY3QoKSB3b3VsZCByZXR1cm4KKyAgdHJ1ZSks
IHRoZW4gb25seSBhIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBvYmplY3QgaXMgY29waWVk
IGludG8KKyAgdGhlIG5ldyBzY3JpcHQgdmFsdWUgKGkuZS4sIHRoZSBvYmplY3QgaXRzZWxmIGlz
IG5vdCBjb3BpZWQpLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKGNvbnN0IFFTY3Jp
cHRWYWx1ZSYgb3RoZXIpCisgICAgOiBkX3B0cihvdGhlci5kX3B0cikKK3sKK30KKworLyohCisg
ICAgRGVzdHJveXMgdGhpcyBRU2NyaXB0VmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjp+UVNjcmlw
dFZhbHVlKCkKK3sKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1
ZSBpcyB2YWxpZDsgb3RoZXJ3aXNlIHJldHVybnMKKyAgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0
VmFsdWU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNWYWxpZCgpOwor
fQorCisvKiEKKyAgXHNpbmNlIDQuNQorCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRW
YWx1ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgQm9vbGVhbjsKKyAgb3RoZXJ3aXNlIHJldHVy
bnMgZmFsc2UuCisKKyAgXHNhIHRvQm9vbCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzQm9v
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc0Jvb2woKTsKK30KKworLyohCisgIFxv
YnNvbGV0ZQorCisgIFVzZSBpc0Jvb2woKSBpbnN0ZWFkLgorICBSZXR1cm5zIHRydWUgaWYgdGhp
cyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIEJvb2xlYW47CisgIG90aGVy
d2lzZSByZXR1cm5zIGZhbHNlLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Jvb2xlYW4oKSBj
b25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNCb29sKCk7Cit9CisKKy8qIQorICBSZXR1cm5z
IHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bWJl
cjsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIHRvTnVtYmVyKCkKKyovCiti
b29sIFFTY3JpcHRWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+
aXNOdW1iZXIoKTsKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1
ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgTnVsbDsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFs
c2UuCisKKyAgXHNhIFFTY3JpcHRFbmdpbmU6Om51bGxWYWx1ZSgpCisqLworYm9vbCBRU2NyaXB0
VmFsdWU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc051bGwoKTsKK30K
KworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBvZiB0aGUgcHJp
bWl0aXZlIHR5cGUgU3RyaW5nOworICBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKworICBcc2Eg
dG9TdHJpbmcoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRfcHRyLT5pc1N0cmluZygpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlm
IHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlwZSBVbmRlZmluZWQ7Cisg
IG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSBRU2NyaXB0RW5naW5lOjp1bmRlZmlu
ZWRWYWx1ZSgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZF9wdHItPmlzVW5kZWZpbmVkKCk7Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVl
Ojppc0Vycm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzRXJyb3IoKTsKK30KKwor
LyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBvZiB0aGUgT2JqZWN0
IHR5cGU7IG90aGVyd2lzZQorICByZXR1cm5zIGZhbHNlLgorCisgIE5vdGUgdGhhdCBmdW5jdGlv
biB2YWx1ZXMsIHZhcmlhbnQgdmFsdWVzLCBhbmQgUU9iamVjdCB2YWx1ZXMgYXJlCisgIG9iamVj
dHMsIHNvIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciBzdWNoIHZhbHVlcy4KKworICBc
c2EgdG9PYmplY3QoKSwgUVNjcmlwdEVuZ2luZTo6bmV3T2JqZWN0KCkKKyovCitib29sIFFTY3Jp
cHRWYWx1ZTo6aXNPYmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNPYmplY3Qo
KTsKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhIGZ1
bmN0aW9uOyBvdGhlcndpc2UgcmV0dXJucworICBmYWxzZS4KKworICBcc2EgY2FsbCgpCisqLwor
Ym9vbCBRU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBkX3B0
ci0+aXNGdW5jdGlvbigpOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9m
IHRoaXMgUVNjcmlwdFZhbHVlLCBhcyBkZWZpbmVkIGluCisgIFxse0VDTUEtMjYyfSBzZWN0aW9u
IDkuOCwgIlRvU3RyaW5nIi4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMg
YW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0
aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVj
dCdzIHRvU3RyaW5nKCkgZnVuY3Rpb24gKGFuZCBwb3NzaWJseSB2YWx1ZU9mKCkpIGluIGFuCisg
IGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3Nz
aWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAg
XHNhIGlzU3RyaW5nKCkKKyovCitRU3RyaW5nIFFTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBkX3B0ci0+dG9TdHJpbmcoKTsKK30KKworcXJlYWwgUVNjcmlwdFZh
bHVlOjp0b051bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b051bWJlcigpOwor
fQorCitib29sIFFTY3JpcHRWYWx1ZTo6dG9Cb29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9w
dHItPnRvQm9vbCgpOworfQorCitib29sIFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZF9wdHItPnRvQm9vbCgpOworfQorCitxcmVhbCBRU2NyaXB0VmFsdWU6
OnRvSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0ludGVnZXIoKTsKK30K
KworcWludDMyIFFTY3JpcHRWYWx1ZTo6dG9JbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRf
cHRyLT50b0ludDMyKCk7Cit9CisKK3F1aW50MzIgUVNjcmlwdFZhbHVlOjp0b1VJbnQzMigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b1VJbnQzMigpOworfQorCitxdWludDE2IFFTY3Jp
cHRWYWx1ZTo6dG9VSW50MTYoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9VSW50MTYo
KTsKK30KKworUVNjcmlwdFZhbHVlIFFTY3JpcHRWYWx1ZTo6Y2FsbChjb25zdCBRU2NyaXB0VmFs
dWUmIHRoaXNPYmplY3QsIGNvbnN0IFFTY3JpcHRWYWx1ZUxpc3QmIGFyZ3MpCit7CisgICAgcmV0
dXJuIGRfcHRyLT5jYWxsKHRoaXNPYmplY3QuZF9wdHIuZGF0YSgpLCBhcmdzKTsKK30KKworUVNj
cmlwdEVuZ2luZSogUVNjcmlwdFZhbHVlOjplbmdpbmUoKSBjb25zdAoreworICAgIHJldHVybiBR
U2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGRfcHRyLT5lbmdpbmUoKSk7Cit9CisKK1FTY3JpcHRW
YWx1ZSYgUVNjcmlwdFZhbHVlOjpvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikK
K3sKKyAgICBkX3B0ciA9IG90aGVyLmRfcHRyOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9v
bCBRU2NyaXB0VmFsdWU6OmVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdAor
eworICAgIHJldHVybiBkX3B0ciA9PSBvdGhlci5kX3B0ciB8fCBkX3B0ci0+ZXF1YWxzKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldChvdGhlcikpOworfQorCitib29sIFFTY3JpcHRWYWx1ZTo6c3Ry
aWN0bHlFcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gZF9wdHIgPT0gb3RoZXIuZF9wdHIgfHwgZF9wdHItPnN0cmljdGx5RXF1YWxzKFFTY3JpcHRW
YWx1ZVByaXZhdGU6OmdldChvdGhlcikpOworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FzY3JpcHR2YWx1ZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiZTVkNzQKLS0tIC9kZXYv
bnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlLmgKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0dmFsdWVfaAorI2Rl
ZmluZSBxc2NyaXB0dmFsdWVfaAorCisjaW5jbHVkZSA8UXRDb3JlL3FsaXN0Lmg+CisjaW5jbHVk
ZSA8UXRDb3JlL3FzaGFyZWRkYXRhLmg+CisKK2NsYXNzIFFTY3JpcHRFbmdpbmU7CitjbGFzcyBR
U2NyaXB0VmFsdWVQcml2YXRlOworCitjbGFzcyBRU2NyaXB0VmFsdWU7Cit0eXBlZGVmIFFMaXN0
PFFTY3JpcHRWYWx1ZT4gUVNjcmlwdFZhbHVlTGlzdDsKKworY2xhc3MgUVNjcmlwdFZhbHVlIHsK
K3B1YmxpYzogICAgCisgICAgZW51bSBTcGVjaWFsVmFsdWUgeworICAgICAgICBOdWxsVmFsdWUs
CisgICAgICAgIFVuZGVmaW5lZFZhbHVlCisgICAgfTsKKworICAgIFFTY3JpcHRWYWx1ZSgpOwor
ICAgIFFTY3JpcHRWYWx1ZShib29sIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoaW50IHZhbHVl
KTsKKyAgICBRU2NyaXB0VmFsdWUodWludCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKHFyZWFs
IHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIFFT
Y3JpcHRWYWx1ZShjb25zdCBjaGFyKiB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKFNwZWNpYWxW
YWx1ZSB2YWwpOworICAgIFFTY3JpcHRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKTsK
KworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGJvb2wgdmFsKTsKKyAg
ICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBpbnQgdmFsKTsKKyAgICBRU2Ny
aXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZhbCk7CisgICAgUVNjcmlwdFZh
bHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgcXJlYWwgdmFsKTsKKyAgICBRU2NyaXB0VmFsdWUo
UVNjcmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBRU3RyaW5nJiB2YWwpOworICAgIFFTY3JpcHRW
YWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICBRU2Ny
aXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBTcGVjaWFsVmFsdWUgdmFsKTsKKworICAg
IH5RU2NyaXB0VmFsdWUoKTsKKworICAgIFFTY3JpcHRWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFFT
Y3JpcHRWYWx1ZSYpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgc3RyaWN0bHlFcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhl
cikgY29uc3Q7CisKKyAgICBRU2NyaXB0RW5naW5lKiBlbmdpbmUoKSBjb25zdDsKKworICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworICAgIGJvb2wgaXNCb29sKCkgY29uc3Q7CisgICAgYm9vbCBp
c0Jvb2xlYW4oKSBjb25zdDsKKyAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CisgICAgYm9vbCBp
c0Z1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc051bGwoKSBjb25zdDsKKyAgICBib29sIGlz
U3RyaW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0OworICAgIGJvb2wg
aXNPYmplY3QoKSBjb25zdDsKKyAgICBib29sIGlzRXJyb3IoKSBjb25zdDsKKworICAgIFFTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICBxcmVhbCB0b051bWJlcigpIGNvbnN0OworICAgIGJv
b2wgdG9Cb29sKCkgY29uc3Q7CisgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAgICBxcmVh
bCB0b0ludGVnZXIoKSBjb25zdDsKKyAgICBxaW50MzIgdG9JbnQzMigpIGNvbnN0OworICAgIHF1
aW50MzIgdG9VSW50MzIoKSBjb25zdDsKKyAgICBxdWludDE2IHRvVUludDE2KCkgY29uc3Q7CisK
KyAgICBRU2NyaXB0VmFsdWUgY2FsbChjb25zdCBRU2NyaXB0VmFsdWUmIHRoaXNPYmplY3QgPSBR
U2NyaXB0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU2NyaXB0VmFsdWVM
aXN0JiBhcmdzID0gUVNjcmlwdFZhbHVlTGlzdCgpKTsKKworcHJpdmF0ZToKKyAgICBRU2NyaXB0
VmFsdWUodm9pZCopOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0VmFsdWVQcml2YXRlKik7CisK
KyAgICBRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFTY3JpcHRWYWx1ZVByaXZhdGU+IGRf
cHRyOworCisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRWYWx1ZVByaXZhdGU7Cit9OworCisjZW5k
aWYgLy8gcXNjcmlwdHZhbHVlX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0dmFsdWVfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmgK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJjZmMxNQotLS0gL2Rldi9udWxs
CisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVfcC5oCkBAIC0wLDAgKzEs
NjMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHR2YWx1ZV9wX2gKKyNk
ZWZpbmUgcXNjcmlwdHZhbHVlX3BfaAorCisjaW5jbHVkZSAicXNjcmlwdGNvbnZlcnRlcl9wLmgi
CisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPFF0Q29y
ZS9xc2hhcmVkZGF0YS5oPgorCitjbGFzcyBRU2NyaXB0RW5naW5lOworY2xhc3MgUVNjcmlwdFZh
bHVlOworCisvKgorICBcaW50ZXJuYWwKKyAgXGNsYXNzIFFTY3JpcHRWYWx1ZVByaXZhdGUKKwor
ICBJbXBsZW1lbnRhdGlvbiBvZiBRU2NyaXB0VmFsdWUuCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBp
cyBiYXNlZCBvbiBhIHN0YXRlIG1hY2hpbmUuIFRoZSBzdGF0ZXMgbmFtZXMgYXJlIGluY2x1ZGVk
IGluCisgIFFTY3JpcHRWYWx1ZVByaXZhdGU6OlN0YXRlcy4gRWFjaCBtZXRob2Qgc2hvdWxkIGNo
ZWNrIGZvciB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlbiBwZXJmb3JtIGEKKyAgY29ycmVjdCBh
Y3Rpb24uCisKKyAgU3RhdGVzOgorICAgIEludmFsaWQgLT4gUVNWUCBpcyBpbnZhbGlkLCBubyBh
c3N1bXB0aW9ucyBzaG91bGQgYmUgbWFkZSBhYm91dCBjbGFzcyBtZW1iZXJzLgorICAgIENTdHJp
bmcgLT4gUVNWUCBpcyBjcmVhdGVkIGZyb20gUVN0cmluZyBvciBjb25zdCBjaGFyKiBhbmQgbm8g
SlNDIGVuZ2luZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHlldC4KKyAgICAgICAgQ3VycmVudCB2YWx1
ZSBpcyBrZXB0IGluIG1fc3RyaW5nLCBvdGhlciBtZW1iZXJzIG1heSBiZSB1bml0aWFsaXplZC4K
KyAgICBDTnVtYmVyIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9tIGludCwgdWludCwgZG91YmxlLi4u
IGFuZCBubyBKU0MgZW5naW5lIGhhcyBiZWVuIGJpbmQgeWV0LiBDdXJyZW50CisgICAgICAgIHZh
bHVlIGlzIGtlcHQgaW4gbV9udW1iZXIsIG90aGVyIG1lbWJlcnMgbWF5IGJlIGluaXRpYWxpemVk
LgorICAgIENCb29sIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9tIGJvb2wgYW5kIG5vIEpTQyBlbmdp
bmUgaGFzIGJlZW4gYXNzb2NpYXRlZCB5ZXQuIEN1cnJlbnQgdmFsdWUgaXMga2VwdAorICAgICAg
ICBpbiBtX251bWJlciwgb3RoZXIgbWVtYmVycyBtYXkgYmUgdW5pdGlhbGl6ZWQuCisgICAgQ1Nw
ZWNpYWwgLT4gUVNWUCBpcyBVbmRlZmluZWQgb3IgTnVsbCwgYnV0IGEgSlNDIGVuZ2luZSBoYXNu
J3QgYmVlbiBhc3NvY2lhdGVkIHlldCwgY3VycmVudCB2YWx1ZQorICAgICAgICBpcyBrZXB0IGlu
IG1fbnVtYmVyIChjYXN0IG9mIFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlKQorICAgIEpTVmFs
dWUgLT4gUVNWUCBpcyBhc3NvY2lhdGVkIHdpdGggZW5naW5lLCBidXQgdGhlcmUgaXMgbm8gaW5m
b3JtYXRpb24gYWJvdXQgcmVhbCB0eXBlLCB0aGUgc3RhdGUKKyAgICAgICAgaGF2ZSByZWFsbHkg
c2hvcnQgbGl2ZSBjeWNsZS4gTm9ybWFsbHkgaXQgaXMgY3JlYXRlZCBhcyBhIGZ1bmN0aW9uIGNh
bGwgcmVzdWx0LgorICAgIEpTTmF0aXZlIC0+IFFTVlAgaXMgYXNzb2NpYXRlZCB3aXRoIGVuZ2lu
ZSwgYW5kIGl0IGlzIHN1cmUgdGhhdCBpdCBpc24ndCBhIEphdmFTY3JpcHQgb2JqZWN0LgorICAg
IEpTT2JqZWN0IC0+IFFTVlAgaXMgYXNzb2NpYXRlZCB3aXRoIGVuZ2luZSwgYW5kIGl0IGlzIHN1
cmUgdGhhdCBpdCBpcyBhIEphdmFTY3JpcHQgb2JqZWN0LgorCisgIEVhY2ggc3RhdGUga2VlcCBh
bGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGludm9rZSBhbGwgbWV0aG9kcywgaWYgbm90IGl0
IHNob3VsZCBiZSBjaGFuZ2VkIHRvCisgIGEgcHJvcGVyIHN0YXRlLiBDaGFuZ2VkIHN0YXRlIHNo
b3VsZG4ndCBiZSByZXZlcnRlZC4KKyovCisKK2NsYXNzIFFTY3JpcHRWYWx1ZVByaXZhdGUKKyAg
ICA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgaW5saW5lIHN0YXRpYyBRU2Ny
aXB0VmFsdWVQcml2YXRlKiBnZXQoY29uc3QgUVNjcmlwdFZhbHVlJiBxKTsKKyAgICBpbmxpbmUg
c3RhdGljIFFTY3JpcHRWYWx1ZSBnZXQoY29uc3QgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZCk7Cisg
ICAgaW5saW5lIHN0YXRpYyBRU2NyaXB0VmFsdWUgZ2V0KFFTY3JpcHRWYWx1ZVByaXZhdGUqIGQp
OworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoKTsKKyAgICBpbmxpbmUgUVNjcmlw
dFZhbHVlUHJpdmF0ZShRU3RyaW5nIHN0cmluZyk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVBy
aXZhdGUoYm9vbCB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoaW50IG51
bWJlcik7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUodWludCBudW1iZXIpOworICAg
IGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKHFyZWFsIG51bWJlcik7CisgICAgaW5saW5lIFFT
Y3JpcHRWYWx1ZVByaXZhdGUoUVNjcmlwdFZhbHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpOworCisg
ICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5l
LCBib29sIHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2Ny
aXB0RW5naW5lKiBlbmdpbmUsIGludCB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVBy
aXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZhbHVlKTsKKyAgICBpbmxp
bmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIHFyZWFs
IHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5n
aW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZh
bHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIFFTY3JpcHRWYWx1ZTo6U3Bl
Y2lhbFZhbHVlIHZhbHVlKTsKKworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0
IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUsIEpTVmFsdWVSZWYgdmFsdWUpOworICAgIGlu
bGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdp
bmUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIG9iamVjdCk7CisKKyAgICBpbmxpbmUg
Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNCb29sKCk7CisgICAgaW5s
aW5lIGJvb2wgaXNOdW1iZXIoKTsKKyAgICBpbmxpbmUgYm9vbCBpc051bGwoKTsKKyAgICBpbmxp
bmUgYm9vbCBpc1N0cmluZygpOworICAgIGlubGluZSBib29sIGlzVW5kZWZpbmVkKCk7CisgICAg
aW5saW5lIGJvb2wgaXNFcnJvcigpOworICAgIGlubGluZSBib29sIGlzT2JqZWN0KCk7CisgICAg
aW5saW5lIGJvb2wgaXNGdW5jdGlvbigpOworCisgICAgaW5saW5lIFFTdHJpbmcgdG9TdHJpbmco
KTsKKyAgICBpbmxpbmUgcXJlYWwgdG9OdW1iZXIoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCB0
b0Jvb2woKSBjb25zdDsKKyAgICBpbmxpbmUgcXJlYWwgdG9JbnRlZ2VyKCkgY29uc3Q7CisgICAg
aW5saW5lIHFpbnQzMiB0b0ludDMyKCkgY29uc3Q7CisgICAgaW5saW5lIHF1aW50MzIgdG9VSW50
MzIoKSBjb25zdDsKKyAgICBpbmxpbmUgcXVpbnQxNiB0b1VJbnQxNigpIGNvbnN0OworCisgICAg
aW5saW5lIGJvb2wgZXF1YWxzKFFTY3JpcHRWYWx1ZVByaXZhdGUqIG90aGVyKTsKKyAgICBpbmxp
bmUgYm9vbCBzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiBvdGhlcikg
Y29uc3Q7CisgICAgaW5saW5lIHZvaWQgYXNzaWduRW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRl
KiBlbmdpbmUpOworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGNhbGwoY29uc3Qg
UVNjcmlwdFZhbHVlUHJpdmF0ZSogLCBjb25zdCBRU2NyaXB0VmFsdWVMaXN0JiBhcmdzKTsKKwor
ICAgIGlubGluZSBib29sIGluaGVyaXRzKGNvbnN0IGNoYXIqKTsKKworICAgIGlubGluZSBib29s
IGlzSlNCYXNlZCgpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzTnVtYmVyQmFzZWQoKSBjb25z
dDsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZ0Jhc2VkKCkgY29uc3Q7CisKKyAgICBpbmxpbmUg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQoKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJl
ZiB2YWx1ZSgpIGNvbnN0OworICAgIGlubGluZSBKU09iamVjdFJlZiBvYmplY3QoKSBjb25zdDsK
KyAgICBpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIC8vIFBsZWFzZSwgdXBkYXRlIGNsYXNzIGRvY3VtZW50YXRpb24gd2hlbiB5b3Ug
Y2hhbmdlIHRoZSBlbnVtLgorICAgIGVudW0gU3RhdGVzIHsKKyAgICAgICAgSW52YWxpZCA9IDAs
CisgICAgICAgIENTdHJpbmcgPSAweDEwMDAsCisgICAgICAgIENOdW1iZXIsCisgICAgICAgIENC
b29sLAorICAgICAgICBDU3BlY2lhbCwKKyAgICAgICAgSlNWYWx1ZSA9IDB4MjAwMCwgLy8gSlMg
dmFsdWVzIGFyZSBlcXVhbCBvciBoaWdoZXIgdGhlbiB0aGlzIHZhbHVlLgorICAgICAgICBKU05h
dGl2ZSwKKyAgICAgICAgSlNPYmplY3QKKyAgICB9IG1fc3RhdGU7CisgICAgUVNjcmlwdEVuZ2lu
ZVB0ciBtX2VuZ2luZTsKKyAgICBRU3RyaW5nIG1fc3RyaW5nOworICAgIHFyZWFsIG1fbnVtYmVy
OworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsKKyAgICBKU09iamVjdFJlZiBtX29iamVjdDsKK307
CisKK1FTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChjb25zdCBR
U2NyaXB0VmFsdWUmIHEpIHsgcmV0dXJuIHEuZF9wdHIuZGF0YSgpOyB9CisKK1FTY3JpcHRWYWx1
ZSBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoY29uc3QgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZCkK
K3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlKGNvbnN0X2Nhc3Q8UVNjcmlwdFZhbHVlUHJpdmF0
ZSo+KGQpKTsKK30KKworUVNjcmlwdFZhbHVlIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChRU2Ny
aXB0VmFsdWVQcml2YXRlKiBkKQoreworICAgIHJldHVybiBRU2NyaXB0VmFsdWUoZCk7Cit9CisK
K1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoKQorICAgIDogbV9zdGF0
ZShJbnZhbGlkKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2
YXRlKFFTdHJpbmcgc3RyaW5nKQorICAgIDogbV9zdGF0ZShDU3RyaW5nKQorICAgICwgbV9zdHJp
bmcoc3RyaW5nKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2
YXRlKGJvb2wgdmFsdWUpCisgICAgOiBtX3N0YXRlKENCb29sKQorICAgICwgbV9udW1iZXIodmFs
dWUpCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoaW50
IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAsIG1fbnVtYmVyKG51bWJlcikK
K3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZSh1aW50IG51
bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAsIG1fbnVtYmVyKG51bWJlcikKK3sK
K30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShxcmVhbCBudW1i
ZXIpCisgICAgOiBtX3N0YXRlKENOdW1iZXIpCisgICAgLCBtX251bWJlcihudW1iZXIpCit7Cit9
CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoUVNjcmlwdFZhbHVl
OjpTcGVjaWFsVmFsdWUgdmFsdWUpCisgICAgOiBtX3N0YXRlKENTcGVjaWFsKQorICAgICwgbV9u
dW1iZXIodmFsdWUpCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVBy
aXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBib29sIHZhbHVlKQorICAgIDogbV9z
dGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQo
ZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCBy
ZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDQm9vbDsKKyAgICAgICAgbV9udW1i
ZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtl
SlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2
YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50IHZhbHVlKQorICAgIDogbV9zdGF0
ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5n
aW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWlu
aXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVtYmVyOworICAgICAgICBtX251bWJl
ciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VK
U1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZh
dGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZhbHVlKQorICAgIDogbV9zdGF0
ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5n
aW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWlu
aXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVtYmVyOworICAgICAgICBtX251bWJl
ciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VK
U1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZh
dGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBxcmVhbCB2YWx1ZSkKKyAgICA6IG1fc3Rh
dGUoSlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGVu
Z2luZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBhdGggcmVp
bml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ051bWJlcjsKKyAgICAgICAgbV9udW1i
ZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtl
SlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2
YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCisg
ICAgOiBtX3N0YXRlKEpTTmF0aXZlKQorICAgICwgbV9lbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZh
dGU6OmdldChlbmdpbmUpKQoreworICAgIGlmICghZW5naW5lKSB7CisgICAgICAgIC8vIHNsb3dl
ciBwYXRoIHJlaW5pdGlhbGl6YXRpb24KKyAgICAgICAgbV9zdGF0ZSA9IENTdHJpbmc7CisgICAg
ICAgIG1fc3RyaW5nID0gdmFsdWU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmFsdWUgPSBtX2Vu
Z2luZS0+bWFrZUpTVmFsdWUodmFsdWUpOworfQorUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlw
dFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIFFTY3JpcHRWYWx1ZTo6
U3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5n
aW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2lu
ZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1f
c3RhdGUgPSBDU3BlY2lhbDsKKyAgICAgICAgbV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9CisKK1FT
Y3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2lu
ZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNWYWx1
ZSkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUqPihlbmdp
bmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
UVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lLCBK
U1ZhbHVlUmVmIHZhbHVlLCBKU09iamVjdFJlZiBvYmplY3QpCisgICAgOiBtX3N0YXRlKEpTT2Jq
ZWN0KQorICAgICwgbV9lbmdpbmUoY29uc3RfY2FzdDxRU2NyaXB0RW5naW5lUHJpdmF0ZSo+KGVu
Z2luZSkpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9vYmplY3Qob2JqZWN0KQorewor
fQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlICE9IEludmFsaWQ7IH0KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc0Jvb2wo
KQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ0Jvb2w6IHJldHVybiB0cnVl
OworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTTmF0
aXZlOgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0KCksIHZhbHVlKCkp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNOdW1iZXIoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgIGNhc2UgQ051bWJlcjoKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIGNhc2Ug
SlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTTmF0aXZlOgorICAgICAg
ICByZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFsdWVQ
cml2YXRlOjppc051bGwoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ1Nw
ZWNpYWw6CisgICAgICAgIHJldHVybiBtX251bWJlciA9PSBzdGF0aWNfY2FzdDxpbnQ+KFFTY3Jp
cHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIGlmIChpc09i
amVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsLXRocm91
Z2guCisgICAgY2FzZSBKU05hdGl2ZToKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVJc051bGwoY29u
dGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzU3RyaW5nKCkKK3sKKyAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIENTdHJpbmc6IHJldHVybiB0cnVlOworICAgIGNh
c2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTTmF0aXZlOgorICAg
ICAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQoKSwgdmFsdWUoKSk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFs
dWVQcml2YXRlOjppc1VuZGVmaW5lZCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBDU3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyID09IHN0YXRpY19jYXN0PGlu
dD4oUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7CisgICAgY2FzZSBKU1ZhbHVlOgorICAg
ICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Ly8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgICAgIHJldHVybiBKU1Zh
bHVlSXNVbmRlZmluZWQoY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6Omlz
RXJyb3IoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNWYWx1ZToKKyAg
ICAgICAgaWYgKCFpc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAvLyBGYWxsLXRocm91Z2guCisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIGlu
aGVyaXRzKCJFcnJvciIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNPYmplY3QoKQoreworICAgIHN3
aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNPYmplY3Q6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgbV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRpb24gKi8gMCk7CisgICAgICAgIGlmICghb2Jq
ZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fc3RhdGUgPSBKU09i
amVjdDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc0Z1bmN0aW9u
KCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAg
IG1fb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0
aW9uICovIDApOworICAgICAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBtX3N0YXRlID0gSlNPYmplY3Q7CisgICAgICAgIC8vIEZhbGwtdGhyb3Vn
aC4KKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gSlNPYmplY3RJc0Z1bmN0aW9u
KGNvbnRleHQoKSwgb2JqZWN0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK1FTdHJpbmcgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcoKQor
eworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSW52YWxpZDogcmV0dXJuIFFTdHJp
bmcoKTsKKyAgICBjYXNlIENCb29sOiByZXR1cm4gbV9udW1iZXIgPyBRU3RyaW5nOjpmcm9tTGF0
aW4xKCJ0cnVlIikgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJmYWxzZSIpOworICAgIGNhc2UgQ1N0
cmluZzogcmV0dXJuIG1fc3RyaW5nOworICAgIGNhc2UgQ051bWJlcjogcmV0dXJuIFFTdHJpbmc6
Om51bWJlcihtX251bWJlcik7CisgICAgY2FzZSBDU3BlY2lhbDogcmV0dXJuIG1fbnVtYmVyID09
IFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlID8gUVN0cmluZzo6ZnJvbUxhdGluMSgibnVsbCIpIDog
UVN0cmluZzo6ZnJvbUxhdGluMSgidW5kZWZpbmVkIik7CisgICAgY2FzZSBKU1ZhbHVlOgorICAg
IGNhc2UgSlNOYXRpdmU6CisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIFFTY3Jp
cHRDb252ZXJ0ZXI6OnRvU3RyaW5nKEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCgpLCB2YWx1
ZSgpLCAvKiBleGNlcHRpb24gKi8gMCkpOworICAgIH0KKworICAgIFFfQVNTRVJUKGZhbHNlKTsK
KyAgICByZXR1cm4gUVN0cmluZygpOyAvLyBBdm9pZCBjb21waWxlciB3YXJuaW5nLgorfQorCitx
cmVhbCBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b051bWJlcigpIGNvbnN0Cit7CisgICAgLy8gVE9E
TyBDaGVjayBpdC4KKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIEpTVmFsdWU6Cisg
ICAgY2FzZSBKU05hdGl2ZToKKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApOworICAg
IGNhc2UgQ051bWJlcjoKKyAgICBjYXNlIENCb29sOgorICAgICAgICByZXR1cm4gbV9udW1iZXI7
CisgICAgY2FzZSBJbnZhbGlkOgorICAgIGNhc2UgQ1NwZWNpYWw6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAgIHJldHVybiBtX3N0cmluZy5pc0VtcHR5
KCk7CisgICAgfQorCisgICAgUV9BU1NFUlQoZmFsc2UpOworICAgIHJldHVybiAwOyAvLyBBdm9p
ZCBjb21waWxlciB3YXJuaW5nLgorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvQm9v
bCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgor
ICAgIGNhc2UgSlNOYXRpdmU6CisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBjYXNlIENOdW1iZXI6Cisg
ICAgY2FzZSBDQm9vbDoKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIGNhc2UgSW52YWxp
ZDoKKyAgICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBD
U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOworICAgIH0KKworICAg
IFFfQVNTRVJUKGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7IC8vIEF2b2lkIGNvbXBpbGVyIHdh
cm5pbmcuCit9CisKK3FyZWFsIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcigpIGNvbnN0
Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICByZXR1
cm4gdG9OdW1iZXIoKTsKK30KKworcWludDMyIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50MzIo
KSBjb25zdAoreworICAgIC8vIFRPRE8gaXQgaXMgbm90IHRydWUgaW1wbGVtZW50YXRpb24hCisg
ICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisKK3F1aW50MzIgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
dG9VSW50MzIoKSBjb25zdAoreworICAgIC8vIFRPRE8gaXQgaXMgbm90IHRydWUgaW1wbGVtZW50
YXRpb24hCisgICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisKK3F1aW50MTYgUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6dG9VSW50MTYoKSBjb25zdAoreworICAgIC8vIFRPRE8gaXQgaXMgbm90IHRydWUg
aW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisKKworYm9vbCBRU2Ny
aXB0VmFsdWVQcml2YXRlOjplcXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZSogb3RoZXIpCit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX3N0YXRlID09IENTcGVjaWFsICYmIG90aGVyLT5tX3N0YXRlID09
IENTcGVjaWFsKQorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gb3RoZXItPm1fbnVtYmVyOwor
CisgICAgaWYgKGlzSlNCYXNlZCgpICYmICFvdGhlci0+aXNKU0Jhc2VkKCkpCisgICAgICAgIG90
aGVyLT5hc3NpZ25FbmdpbmUoZW5naW5lKCkpOworICAgIGVsc2UgaWYgKCFpc0pTQmFzZWQoKSAm
JiBvdGhlci0+aXNKU0Jhc2VkKCkpCisgICAgICAgIG90aGVyLT5hc3NpZ25FbmdpbmUob3RoZXIt
PmVuZ2luZSgpKTsKKyAgICBlbHNlIGlmIChpc0pTQmFzZWQoKSAmJiBvdGhlci0+aXNKU0Jhc2Vk
KCkgJiYgZW5naW5lKCkgIT0gb3RoZXItPmVuZ2luZSgpKSB7CisgICAgICAgIHFXYXJuaW5nKCJR
U2NyaXB0VmFsdWU6OmVxdWFsczogY2Fubm90IGNvbXBhcmUgdG8gYSB2YWx1ZSBjcmVhdGVkIGlu
IGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIEpTVmFsdWVJc0VxdWFsKGNvbnRleHQoKSwgdmFsdWUoKSwgb3RoZXItPnZhbHVl
KCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjpz
dHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAobV9zdGF0ZSAhPSBvdGhlci0+bV9zdGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpc0pTQmFzZWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVJc1N0cmljdEVx
dWFsKGNvbnRleHQoKSwgdmFsdWUoKSwgb3RoZXItPnZhbHVlKCkpOworICAgIGlmIChpc1N0cmlu
Z0Jhc2VkKCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZyA9PSBvdGhlci0+bV9zdHJpbmc7Cisg
ICAgaWYgKGlzTnVtYmVyQmFzZWQoKSkKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyID09IG90aGVy
LT5tX251bWJlcjsKKworICAgIHJldHVybiBmYWxzZTsgLy8gSW52YWxpZCBzdGF0ZS4KK30KKwor
dm9pZCBRU2NyaXB0VmFsdWVQcml2YXRlOjphc3NpZ25FbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZh
dGUqIGVuZ2luZSkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIENCb29sOgor
ICAgICAgICBtX3ZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZShzdGF0aWNfY2FzdDxib29sPiht
X251bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAgIG1f
dmFsdWUgPSBlbmdpbmUtPm1ha2VKU1ZhbHVlKG1fc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDTnVtYmVyOgorICAgICAgICBtX3ZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZSht
X251bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsg
Ly8gTm90aGluZyB0byBkbworICAgIH0KKyAgICBtX2VuZ2luZSA9IGNvbnN0X2Nhc3Q8UVNjcmlw
dEVuZ2luZVByaXZhdGUqPihlbmdpbmUpOworICAgIG1fc3RhdGUgPSBKU05hdGl2ZTsKK30KKwor
UVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y2FsbChjb25zdCBRU2Ny
aXB0VmFsdWVQcml2YXRlKiAsIGNvbnN0IFFTY3JpcHRWYWx1ZUxpc3QgJmFyZ3MpCit7CisgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBtX29iamVjdCA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0KCksIHZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsK
KyAgICAgICAgaWYgKCFvYmplY3QoKSkgeworICAgICAgICAgICAgbV9zdGF0ZSA9IEpTVmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGU7CisgICAgICAgIH0K
KyAgICAgICAgbV9zdGF0ZSA9IEpTT2JqZWN0OworICAgICAgICAvLyBGYWxsLXRocm91Z2guCisg
ICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29udmVydCBhbGwg
YXJndW1lbnRzIGFuZCBiaW5kIHRvIHRoZSBlbmdpbmUuCisgICAgICAgICAgICBpbnQgYXJnYyA9
IGFyZ3Muc2l6ZSgpOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd2W2FyZ2NdOworICAgICAg
ICAgICAgUVNjcmlwdFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaSA9IGFyZ3MuY29uc3RCZWdp
bigpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGkgIT0gYXJncy5jb25zdEVuZCgpOyBq
KyssIGkrKykgeworICAgICAgICAgICAgICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIHZhbHVlID0g
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KCppKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+YXNz
aWduRW5naW5lKGVuZ2luZSgpKTsKKyAgICAgICAgICAgICAgICBhcmd2W2pdID0gdmFsdWUtPnZh
bHVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2UgdGhlIGNhbGwKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0KCksIG9iamVjdCgpLCAv
KiB0aGlzT2JqZWN0ICovIDAsIGFyZ2MsIGFyZ3YsICZleGNlcHRpb24pOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQgJiYgZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUVNj
cmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgJiYgIWV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRW
YWx1ZVByaXZhdGUoZW5naW5lKCksIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhp
cyBRU1YgaXMgbm90IGEgZnVuY3Rpb24gPC0tICFyZXN1bHQgJiYgIWV4Y2VwdGlvbi4gRmFsbC10
aHJvdWdoLgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZTsKKyAgICB9Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2YXRlKiBRU2NyaXB0VmFsdWVQcml2
YXRlOjplbmdpbmUoKSBjb25zdAoreworICAgIC8vIEFzIGxvbmcgYXMgbV9lbmdpbmUgaXMgYW4g
YXV0b2luaXRpYWxpemF0ZWQgcG9pbnRlciB3ZSBjYW4gc2FmZWx5IHJldHVybiBpdCB3aXRob3V0
CisgICAgLy8gY2hlY2tpbmcgY3VycmVudCBzdGF0ZS4KKyAgICByZXR1cm4gbV9lbmdpbmUuZGF0
YSgpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y29udGV4
dCgpIGNvbnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2VkKCkpOworICAgIHJldHVybiBtX2Vu
Z2luZS0+Y29udGV4dCgpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnZh
bHVlKCkgY29uc3QKK3sKKyAgICBRX0FTU0VSVChpc0pTQmFzZWQoKSk7CisgICAgcmV0dXJuIG1f
dmFsdWU7Cit9CisKK0pTT2JqZWN0UmVmIFFTY3JpcHRWYWx1ZVByaXZhdGU6Om9iamVjdCgpIGNv
bnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2VkKCkpOworICAgIHJldHVybiBtX29iamVjdDsK
K30KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5zIHRydWUgaWYgUVNWIGlzIGNyZWF0ZWQg
ZnJvbSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBnaXZlbiBcYSBuYW1lLCBpdCBoYXMgdG8gYmUgYQor
ICBidWlsdC1pbiB0eXBlLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aW5oZXJpdHMo
Y29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCgpKTsKKyAgICBKU1ZhbHVlUmVmIGVycm9yID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0KCksIGdsb2JhbE9iamVjdCwgUVNjcmlwdENvbnZl
cnRlcjo6dG9TdHJpbmcobmFtZSksIDApOworICAgIHJldHVybiBKU1ZhbHVlSXNJbnN0YW5jZU9m
Q29uc3RydWN0b3IoY29udGV4dCgpLCB2YWx1ZSgpLCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgp
LCBlcnJvciwgLyogZXhjZXB0aW9uICovIDApLCAvKiBleGNlcHRpb24gKi8gMCk7Cit9CisKKy8q
IQorICBcaW50ZXJuYWwKKyAgUmV0dXJucyB0cnVlIGlmIFFTViBoYXZlIGFuIGVuZ2luZSBhc3Nv
Y2lhdGVkLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNKU0Jhc2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA+PSBKU1ZhbHVlOyB9CisKKy8qIQorICBcaW50ZXJuYWwKKyAgUmV0
dXJucyB0cnVlIGlmIGN1cnJlbnQgdmFsdWUgb2YgUVNWIGlzIHBsYWNlZCBpbiBtX251bWJlci4K
KyovCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyQmFzZWQoKSBjb25zdCB7IHJl
dHVybiAhaXNKU0Jhc2VkKCkgJiYgIWlzU3RyaW5nQmFzZWQoKSAmJiBtX3N0YXRlICE9IEludmFs
aWQ7IH0KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5zIHRydWUgaWYgY3VycmVudCB2YWx1
ZSBvZiBRU1YgaXMgcGxhY2VkIGluIG1fc3RyaW5nLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6aXNTdHJpbmdCYXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ1N0cmluZzsg
fQorCisjZW5kaWYgLy8gcXNjcmlwdHZhbHVlX3BfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRzY3Jp
cHRnbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTc0OWMwCi0t
LSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmgK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxdHNjcmlwdGds
b2JhbF9oCisjZGVmaW5lIHF0c2NyaXB0Z2xvYmFsX2gKKworI2luY2x1ZGUgPFF0Q29yZS9xZ2xv
YmFsLmg+CisKKyNpZiBkZWZpbmVkKFFfT1NfV0lOKSB8fCBkZWZpbmVkKFFfT1NfU1lNQklBTikK
KyMgIGlmIGRlZmluZWQoUVRfTk9ETEwpCisjICBlbGlmIGRlZmluZWQoUVRfTUFLRURMTCkgICAg
ICAgIC8qIGNyZWF0ZSBhIFF0IERMTCBsaWJyYXJ5ICovCisjICAgIGlmIGRlZmluZWQoUVRfQlVJ
TERfSkFWQVNDUklQVF9MSUIpCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQgUV9E
RUNMX0VYUE9SVAorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQg
UV9ERUNMX0lNUE9SVAorIyAgICBlbmRpZgorIyAgZWxpZiBkZWZpbmVkKFFUX0RMTCkgLyogdXNl
IGEgUXQgRExMIGxpYnJhcnkgKi8KKyMgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQKKyMg
IGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoUVRfU0hBUkVEKQorIyAgZGVmaW5lIFFfSkFW
QVNDUklQVF9FWFBPUlQgUV9ERUNMX0VYUE9SVAorI2Vsc2UKKyMgIGRlZmluZSBRX0pBVkFTQ1JJ
UFRfRVhQT1JUCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQucHJvIGIvV2Vi
S2l0LnBybwppbmRleCA4NGU3N2NhLi5kZDI5YTc2IDEwMDY0NAotLS0gYS9XZWJLaXQucHJvCisr
KyBiL1dlYktpdC5wcm8KQEAgLTIwLDQgKzIwLDkgQEAgU1VCRElSUyArPSBcCiAKIH0KIAorYnVp
bGQtcWphdmFzY3JpcHQgeworICAgIFNVQkRJUlMgKz0gXAorICAgICAgICBKYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvUXRKYXZhU2NyaXB0LnBybworfQorCiBpbmNsdWRlKFdlYktpdC9xdC9kb2NzL2Rv
Y3MucHJpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFu
Z2VMb2cKaW5kZXggYjc2ZGNiOS4uOTU1Y2NjNiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDEt
MTkgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3Qgc3RlcHMgb2Yg
dGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xhc3NlcyB3ZXJl
IGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4KKyAgICAgICAgVGhlIGZp
cnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4dCBhbmQgdGhlIHNlY29u
ZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgQVBJIGlz
IHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxlZCBieSBkZWZhdWx0Lgor
ICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1ha2Vhcmc9IkNPTkZJRys9
YnVpbGQtcWphdmFzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKworICAgICAgICAq
IGRvY3MvcXR3ZWJraXQucWRvY2NvbmY6CisKIDIwMTAtMDEtMTkgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZiBiL1dlYktpdC9xdC9k
b2NzL3F0d2Via2l0LnFkb2Njb25mCmluZGV4IDhlZThmNjkuLjI5MmMxMjQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCisrKyBiL1dlYktpdC9xdC9kb2NzL3F0
d2Via2l0LnFkb2Njb25mCkBAIC00LDcgKzQsNyBAQCBwcm9qZWN0ICAgICA9IHF0d2Via2l0CiBk
ZXNjcmlwdGlvbiA9ICJRdCBXZWJLaXQgQVBJIERvY3VtZW50YXRpb24iCiAKIGhlYWRlcmRpcnMg
PSAkU1JDRElSL1dlYktpdC9xdC9BcGkKLXNvdXJjZWRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9B
cGkgJFNSQ0RJUi9XZWJLaXQvcXQvZG9jcworc291cmNlZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0
L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kb2NzICRTUkNESVIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
CiBvdXRwdXRkaXIgPSAkT1VUUFVUX0RJUi9kb2MvaHRtbAogb3V0cHV0Zm9ybWF0cyA9IEhUTUwK
IHNvdXJjZXMuZmlsZWV4dGVuc2lvbnMgID0gIiouY3BwICouZG9jICoucWRvYyAqLmgiCg==
</data>
<flag name="review"
          id="29362"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="29363"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47015</attachid>
            <date>2010-01-20 06:12:49 -0800</date>
            <delta_ts>2010-01-26 03:20:25 -0800</delta_ts>
            <desc>First steps of QtScript v5 (init+tests)</desc>
            <filename>initV5.diff</filename>
            <type>text/plain</type>
            <size>79421</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2YjBlMDg0Li4xZTk4ZmVh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3Qg
c3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4KKyAgICAg
ICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4dCBhbmQg
dGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxlZCBieSBk
ZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1ha2Vhcmc9
IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKworICAg
ICAgICAqIFdlYktpdC5wcm86CisKIDIwMTAtMDEtMjAgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3Iu
YXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDY5NjQzMTMuLjkyOTI2NGUgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMjYgQEAKKzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmlyc3Qgc3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3
byBuZXcgY2xhc3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1
ZS4KKyAgICAgICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29u
dGV4dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21w
aWxlZCBieSBkZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0t
cW1ha2Vhcmc9IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtp
dC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1
NjUKKworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86IEFkZGVkLgorICAgICAgICAqIHF0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0Q29udmVy
dGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmU6OlFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdEVuZ2luZTo6flFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6ZXZh
bHVhdGUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UpOgorICAgICAg
ICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2Ny
aXB0ZW5naW5lX3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpR
U2NyaXB0RW5naW5lUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6flFT
Y3JpcHRFbmdpbmVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpldmFs
dWF0ZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oOiBBZGRlZC4KKyAgICAg
ICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZVBy
aXZhdGU6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpt
YWtlSlNWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCk6Cisg
ICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp+UVNjcmlwdFZh
bHVlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWU6OmlzQm9vbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNO
dWxsKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzRXJyb3IpOgor
ICAgICAgICAoUVNjcmlwdFZhbHVlOjppc09iamVjdCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6
OmlzRnVuY3Rpb24pOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp0b1N0cmluZyk6CisgICAgICAg
IChRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29s
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6dG9JbnRlZ2VyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9JbnQzMik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9V
SW50MTYpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6ZW5naW5lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6c3RyaWN0
bHlFcXVhbHMpOgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0dmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChRU2NyaXB0VmFsdWU6Oik6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmg6
IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6KToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2Ny
aXB0VmFsdWVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNCb29sKToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzTnVsbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1N0cmluZyk6CisgICAg
ICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWVQcml2YXRlOjppc0Vycm9yKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6Omlz
T2JqZWN0KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rpb24pOgorICAg
ICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAoUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6dG9OdW1iZXIpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9C
b29sKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcik6CisgICAgICAg
IChRU2NyaXB0VmFsdWVQcml2YXRlOjp0b0ludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVBy
aXZhdGU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvVUludDE2
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVxdWFscyk6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQ
cml2YXRlOjphc3NpZ25FbmdpbmUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y2Fs
bCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdFZhbHVlUHJpdmF0ZTo6Y29udGV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRl
Ojp2YWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpvYmplY3QpOgorICAgICAg
ICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aW5oZXJpdHMpOgorICAgICAgICAoUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6aXNKU0Jhc2VkKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVt
YmVyQmFzZWQpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCk6
CisgICAgICAgICogcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmg6IEFkZGVkLgorICAgICAgICAqIHF0
L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlwdGVuZ2luZS5wcm86IEFkZGVkLgorICAgICAgICAq
IHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjp0c3RfUVNjcmlwdEVuZ2luZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6fnRzdF9RU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RU2Ny
aXB0RW5naW5lOjppbml0KToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjbGVhbnVwKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHR2
YWx1ZS9xc2NyaXB0dmFsdWUucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxdC90ZXN0cy9xc2NyaXB0
dmFsdWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZTo6dHN0X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp+dHN0
X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjppbml0KToKKyAgICAg
ICAgKHRzdF9RU2NyaXB0VmFsdWU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZTo6Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRhKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
VmFsdWU6OmNvcHlDb25zdHJ1Y3Rvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6
OmNvcHlDb25zdHJ1Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjphc3NpZ25PcGVy
YXRvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKToKKyAgICAgICAgKHRzdF9R
U2NyaXB0VmFsdWU6OmNvbnN0cnVjdG9yc19kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFs
dWU6OmNvbnN0cnVjdG9ycyk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAg
ICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcmk6IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3Rl
c3RzLnBybzogQWRkZWQuCisKIDIwMTAtMDEtMTkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdFNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
NzExOTUyZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlw
dC5wcm8KQEAgLTAsMCArMSwzNyBAQAorVEFSR0VUICAgICA9IFF0SmF2YVNjcmlwdAorVEVNUExB
VEUgICA9IGxpYgorUVQgICAgICAgICA9IGNvcmUKKworSU5DTFVERVBBVEggKz0gJCRQV0QKKwor
Q09ORklHICs9IGJ1aWxkaW5nLWxpYnMKK0pBVkFTQ1JJUFRDT1JFX0pJVCA9IHllcworCitpc0Vt
cHR5KEpTQ19HRU5FUkFURURfU09VUkNFU19ESVIpOkpTQ19HRU5FUkFURURfU09VUkNFU19ESVIg
PSAuLi8uLi9nZW5lcmF0ZWQKK0NPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkgeworICAgIE9C
SkVDVFNfRElSID0gb2JqL2RlYnVnCit9IGVsc2UgeyAjIFJlbGVhc2UKKyAgICBPQkpFQ1RTX0RJ
UiA9IG9iai9yZWxlYXNlCit9CisKK2luY2x1ZGUoJCRQV0QvLi4vLi4vLi4vV2ViS2l0LnByaSkK
K2luY2x1ZGUoJCRQV0QvLi4vLi4vSmF2YVNjcmlwdENvcmUucHJpKQorCitJTkNMVURFUEFUSCAr
PSAkJFBXRC8uLi8uLi9BUEkKKworU09VUkNFUyArPSAgJCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAg
XAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2luZV9wLmNwcCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKworSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9i
YWwuaCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXAorICAgICAgICAgICAg
JCRQV0QvcXNjcmlwdGVuZ2luZV9wLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVl
LmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlX3AuaCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0Y29udmVydGVyX3AuaCBcCisKKworIXN0YXRpYzogREVGSU5FUyArPSBRVF9N
QUtFRExMCisKK0RFU1RESVIgPSAkJE9VVFBVVF9ESVIvbGliCisKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jM2NhNDFmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fz
Y3JpcHRjb252ZXJ0ZXJfcC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgcXNjcmlwdGNvbnZlcnRlcl9wX2gKKyNkZWZpbmUgcXNjcmlwdGNvbnZlcnRlcl9w
X2gKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxR
dENvcmUvcXN0cmluZy5oPgorCisvKgorICBcaW50ZXJuYWwKKyAgXGNsYXNzIFFTY3JpcHRDb252
ZXJ0ZXIKKyAgUVNjcmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5naW5lIGhlbHBlciBjbGFzcy4gVGhp
cyBjbGFzcydzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGNvbnZlcnQgdmFsdWVzCisgIGJldHdlZW4g
SlMgdmFsdWVzIGFuZCBRdC9DKysgdmFsdWVzLgorCisgIFRoaXMgaXMgYSBuaWNlIHdheSB0byBp
bmxpbmUgdGhlc2UgZnVuY3Rpb25zIGluIGJvdGggUVNjcmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5n
aW5lLgorKi8KK2NsYXNzIFFTY3JpcHRDb252ZXJ0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBR
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IEpTU3RyaW5nUmVmIHN0cikKKyAgICB7CisgICAgICAgIHJl
dHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENo
YXJhY3RlcnNQdHIoc3RyKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cikpOworICAgIH0KKyAgICBz
dGF0aWMgSlNTdHJpbmdSZWYgdG9TdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0ci50b1V0ZjgoKS5j
b25zdERhdGEoKSk7CisgICAgfQorICAgIHN0YXRpYyBKU1N0cmluZ1JlZiB0b1N0cmluZyhjb25z
dCBjaGFyKiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoc3RyKTsKKyAgICB9Cit9OworCisjZW5kaWYgLy8gcXNjcmlwdGNvbnZlcnRlcl9w
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwLi5mMTJmNDEwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdp
bmUuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHR2
YWx1ZV9wLmgiCisKKy8qIQorICAgIENvbnN0cnVjdHMgYSBRU2NyaXB0RW5naW5lIG9iamVjdC4K
KworICAgIFRoZSBnbG9iYWxPYmplY3QoKSBpcyBpbml0aWFsaXplZCB0byBoYXZlIHByb3BlcnRp
ZXMgYXMgZGVzY3JpYmVkIGluIEVDTUEtMjYyLCBTZWN0aW9uIDE1LjEuCisqLworUVNjcmlwdEVu
Z2luZTo6UVNjcmlwdEVuZ2luZSgpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdEVuZ2luZVByaXZh
dGUodGhpcykpCit7Cit9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoaXMgUVNjcmlwdEVuZ2luZS4K
KyovCitRU2NyaXB0RW5naW5lOjp+UVNjcmlwdEVuZ2luZSgpCit7Cit9CisKKy8qIQorICAgIEV2
YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxpbmUg
bnVtYmVyLAorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24uCisK
KyAgICBUaGUgc2NyaXB0IGNvZGUgd2lsbCBiZSBldmFsdWF0ZWQgaW4gdGhlIGN1cnJlbnQgY29u
dGV4dC4KKworICAgIFRoZSBldmFsdWF0aW9uIG9mIFxhIHByb2dyYW0gY2FuIGNhdXNlIGFuIGV4
Y2VwdGlvbiBpbiB0aGUKKyAgICBlbmdpbmU7IGluIHRoaXMgY2FzZSB0aGUgcmV0dXJuIHZhbHVl
IHdpbGwgYmUgdGhlIGV4Y2VwdGlvbgorICAgIHRoYXQgd2FzIHRocm93biAodHlwaWNhbGx5IGFu
IFxje0Vycm9yfSBvYmplY3QpLiBZb3UgY2FuIGNhbGwKKyAgICBoYXNVbmNhdWdodEV4Y2VwdGlv
bigpIHRvIGRldGVybWluZSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgaW4KKyAgICB0aGUgbGFz
dCBjYWxsIHRvIGV2YWx1YXRlKCkuCisKKyAgICBcYSBsaW5lTnVtYmVyIGlzIHVzZWQgdG8gc3Bl
Y2lmeSBhIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGZvciBcYQorICAgIHByb2dyYW07IGxpbmUgbnVt
YmVyIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IHRoZSBlbmdpbmUgdGhhdCBwZXJ0YWluCisgICAg
dG8gdGhpcyBldmFsdWF0aW9uIChlLmcuIHVuY2F1Z2h0RXhjZXB0aW9uTGluZU51bWJlcigpKSB3
aWxsIGJlCisgICAgYmFzZWQgb24gdGhpcyBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIGlmIFxhIHBy
b2dyYW0gY29uc2lzdHMgb2YgdHdvCisgICAgbGluZXMgb2YgY29kZSwgYW5kIHRoZSBzdGF0ZW1l
bnQgb24gdGhlIHNlY29uZCBsaW5lIGNhdXNlcyBhIHNjcmlwdAorICAgIGV4Y2VwdGlvbiwgdW5j
YXVnaHRFeGNlcHRpb25MaW5lTnVtYmVyKCkgd291bGQgcmV0dXJuIHRoZSBnaXZlbiBcYQorICAg
IGxpbmVOdW1iZXIgcGx1cyBvbmUuIFdoZW4gbm8gc3RhcnRpbmcgbGluZSBudW1iZXIgaXMgc3Bl
Y2lmaWVkLCBsaW5lCisgICAgbnVtYmVycyB3aWxsIGJlIDEtYmFzZWQuCisKKyAgICBcYSBmaWxl
TmFtZSBpcyB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuIEZvciBleGFtcGxlIGluIGVycm9yIG9i
amVjdHMKKyAgICB0aGUgZmlsZSBuYW1lIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgImZpbGVO
YW1lIiBwcm9wZXJ0eSBpZiBpdCdzCisgICAgcHJvdmlkZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLgor
Ki8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBw
cm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgaW50IGxpbmVOdW1iZXIpCit7CisgICAg
cmV0dXJuIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChkX3B0ci0+ZXZhbHVhdGUocHJvZ3JhbSwg
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpKTsKK30KKworLyohCisgICAgUnVucyB0aGUgZ2FyYmFnZSBj
b2xsZWN0b3IuCisKKyAgICBUaGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2lsbCBhdHRlbXB0IHRvIHJl
Y2xhaW0gbWVtb3J5IGJ5IGxvY2F0aW5nIGFuZCBkaXNwb3Npbmcgb2Ygb2JqZWN0cyB0aGF0IGFy
ZQorICAgIG5vIGxvbmdlciByZWFjaGFibGUgaW4gdGhlIHNjcmlwdCBlbnZpcm9ubWVudC4KKwor
ICAgIE5vcm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbjsgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yIHdpbGwgYXV0b21hdGljYWxseSBiZSBpbnZva2VkCisgICAgd2hlbiB0
aGUgUVNjcmlwdEVuZ2luZSBkZWNpZGVzIHRoYXQgaXQncyB3aXNlIHRvIGRvIHNvIChpLmUuIHdo
ZW4gYSBjZXJ0YWluIG51bWJlciBvZiBuZXcgb2JqZWN0cworICAgIGhhdmUgYmVlbiBjcmVhdGVk
KS4gSG93ZXZlciwgeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZXhwbGljaXRseSByZXF1
ZXN0IHRoYXQgZ2FyYmFnZQorICAgIGNvbGxlY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBhcyBz
b29uIGFzIHBvc3NpYmxlLgorKi8KK3ZvaWQgUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2Uo
KQoreworICAgIGRfcHRyLT5jb2xsZWN0R2FyYmFnZSgpOworfQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0ZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM3NjY5
MgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0
ZW5naW5lX2gKKyNkZWZpbmUgcXNjcmlwdGVuZ2luZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcW9i
amVjdC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nLmg+CisKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKK2NsYXNzIFFTY3JpcHRFbmdpbmVQ
cml2YXRlOworCisvLyBJbnRlcm5hbCB0eXBlZGVmCit0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVk
RGF0YVBvaW50ZXI8UVNjcmlwdEVuZ2luZVByaXZhdGU+IFFTY3JpcHRFbmdpbmVQdHI7CisKK2Ns
YXNzIFFTY3JpcHRFbmdpbmUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBR
U2NyaXB0RW5naW5lKCk7CisgICAgflFTY3JpcHRFbmdpbmUoKTsKKworICAgIFFTY3JpcHRWYWx1
ZSBldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFt
ZSA9IFFTdHJpbmcoKSwgaW50IGxpbmVOdW1iZXIgPSAxKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJi
YWdlKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRl
OworCisgICAgUVNjcmlwdEVuZ2luZVB0ciBkX3B0cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41YWYwYjZkCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgi
CisKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorCisvKiEKKyAgICBDb25zdHJ1Y3RzIGEg
ZGVmYXVsdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSBvYmplY3QsIGEgbmV3IGdsb2JhbCBjb250ZXh0
IHdpbGwgYmUgY3JlYXRlZC4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0RW5naW5lUHJpdmF0
ZTo6UVNjcmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lKQorICAg
IDogcV9wdHIoY29uc3RfY2FzdDxRU2NyaXB0RW5naW5lKj4oZW5naW5lKSkKKyAgICAsIG1fY29u
dGV4dChKU0dsb2JhbENvbnRleHRDcmVhdGUoMCkpCit7Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2
YXRlOjp+UVNjcmlwdEVuZ2luZVByaXZhdGUoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVh
c2UoY29udGV4dCgpKTsKK30KKworLyohCisgICAgRXZhbHVhdGVzIHByb2dyYW0gYW5kIHJldHVy
bnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKyAgICBcaW50ZXJuYWwKKyovCitRU2Ny
aXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6ZXZhbHVhdGUoY29uc3QgUVN0
cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVyKQor
eworICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHBy
b2dyYW0pOworICAgIEpTU3RyaW5nUmVmIGZpbGUgPSBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmlu
ZyhmaWxlTmFtZSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb247CisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQoKSwgc2NyaXB0LCAvKiBHbG9iYWwgT2Jq
ZWN0ICovIDAsIGZpbGUsIGxpbmVOdW1iZXIsICZleGNlcHRpb24pOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgZXhjZXB0aW9u
KTsgLy8gcmV0dXJucyBhbiBleGNlcHRpb24KKyAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVBy
aXZhdGUodGhpcywgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
X3AuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZThjZTJiCi0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRlbmdp
bmVfcF9oCisjZGVmaW5lIHFzY3JpcHRlbmdpbmVfcF9oCisKKyNpbmNsdWRlICJxc2NyaXB0Y29u
dmVydGVyX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlw
dHZhbHVlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1
ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nLmg+CisK
K2NsYXNzIFFTY3JpcHRFbmdpbmU7CisKK2NsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlCisgICAg
ICAgIDogcHVibGljIFFTaGFyZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVNjcmlwdEVu
Z2luZVB0ciBnZXQoY29uc3QgUVNjcmlwdEVuZ2luZSogcSkgeyByZXR1cm4gcSA/IHEtPmRfcHRy
IDogUVNjcmlwdEVuZ2luZVB0cigpOyB9CisgICAgc3RhdGljIFFTY3JpcHRFbmdpbmUqIGdldChj
b25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZCkgeyByZXR1cm4gZCA/IGQtPnFfcHRyIDogMDsg
fQorCisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSopOworICAg
IH5RU2NyaXB0RW5naW5lUHJpdmF0ZSgpOworCisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZXZh
bHVhdGUoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGlu
dCBsaW5lTnVtYmVyKTsKKyAgICBpbmxpbmUgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworCisgICAg
aW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoZG91YmxlIG51bWJlcikgY29uc3Q7CisgICAg
aW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoaW50IG51bWJlcikgY29uc3Q7CisgICAgaW5s
aW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUodWludCBudW1iZXIpIGNvbnN0OworICAgIGlubGlu
ZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3Q7Cisg
ICAgaW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoYm9vbCBudW1iZXIpIGNvbnN0OworICAg
IGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVl
IHZhbHVlKSBjb25zdDsKKworICAgIGlubGluZSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCgp
IGNvbnN0OworcHJpdmF0ZToKKyAgICBRU2NyaXB0RW5naW5lKiBxX3B0cjsKKyAgICBKU0dsb2Jh
bENvbnRleHRSZWYgbV9jb250ZXh0OworfTsKKwordm9pZCBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIEpTR2FyYmFnZUNvbGxlY3QoY29udGV4dCgpKTsKK30K
KworSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoZG91YmxlIG51
bWJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCgpLCBu
dW1iZXIpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1
ZShpbnQgbnVtYmVyKSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0KCksIG51bWJlcik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1h
a2VKU1ZhbHVlKHVpbnQgbnVtYmVyKSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51
bWJlcihjb250ZXh0KCksIG51bWJlcik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVBy
aXZhdGU6Om1ha2VKU1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCgpLCBRU2NyaXB0Q29udmVydGVyOjp0b1N0
cmluZyhzdHJpbmcpKTsKK30KKworSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFr
ZUpTVmFsdWUoYm9vbCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29s
ZWFuKGNvbnRleHQoKSwgdmFsdWUpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2
YXRlOjptYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3QK
K3sKKyAgICBpZiAodmFsdWUgPT0gUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCgpKTsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmIFFTY3JpcHRFbmdp
bmVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0OworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY4OTFlMAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuY3BwCkBAIC0wLDAgKzEsNTUzIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0
dmFsdWUuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0
ZW5naW5lX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9xZGVidWcuaD4KKworLyohCisgICAgQ29uc3RydWN0cyBhbiBpbnZhbGlkIHZhbHVlLgorKi8K
K1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKCkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKCkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1
ZSB3aXRoIGEgYm9vbGVhbiBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1
ZShib29sIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUp
KQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIG51
bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShpbnQgdmFsdWUp
CisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8q
IQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVl
LgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKHVpbnQgdmFsdWUpCisgICAgOiBkX3B0
cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1
Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVlLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKHFyZWFsIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3Jp
cHRWYWx1ZVByaXZhdGUodmFsdWUpKQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBR
U2NyaXB0VmFsdWUgd2l0aCBhIHN0cmluZyBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFT
Y3JpcHRWYWx1ZShjb25zdCBRU3RyaW5nJiB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0
VmFsdWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNj
cmlwdFZhbHVlIHdpdGggYSBzcGVjaWFsIFxhIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNj
cmlwdFZhbHVlKFNwZWNpYWxWYWx1ZSB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlw
dFZhbHVlIHdpdGggYSBzdHJpbmcgXGEgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0
VmFsdWUoY29uc3QgY2hhciogdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZShRU3RyaW5nOjpmcm9tVXRmOCh2YWx1ZSkpKQoreworfQorCisvKiEKKyAgICBCbG9jayBh
dXRvbWF0aWMgY29udmVydGlvbiB0byBib29sCisgICAgXGludGVybmFsCisqLworUVNjcmlwdFZh
bHVlOjpRU2NyaXB0VmFsdWUodm9pZCogZCkKK3sKKyAgICBRX0FTU0VSVChmYWxzZSk7Cit9CisK
Ky8qIQorICAgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIGZyb20gcHJpdmF0ZQorICAg
IFxpbnRlcm5hbAorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRWYWx1ZVBy
aXZhdGUqIGQpCisgICAgOiBkX3B0cihkKQoreworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAg
Q29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCB0aGUgYm9vbGVhbiBcYSB2YWx1ZSBh
bmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBib29sIHZhbHVlKQor
ICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9
CisKKy8qIQorICBcb2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3
aXRoIHRoZSBpbnRlZ2VyIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0aCB0aGUgc2Ny
aXB0IFxhIGVuZ2luZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5n
aW5lKiBlbmdpbmUsIGludCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2
YXRlKGVuZ2luZSwgdmFsdWUpKQoreworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3Ry
dWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCB0aGUgdW5zaWduZWQgaW50ZWdlciBcYSB2YWx1
ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdpbmUuCisgKi8KK1FT
Y3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgdWludCB2YWx1
ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgdmFsdWUpKQor
eworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFs
dWUgd2l0aCB0aGUgcXNyZWFsIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0aCB0aGUg
c2NyaXB0IFxhIGVuZ2luZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0
RW5naW5lKiBlbmdpbmUsIHFyZWFsIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1
ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKworICBD
b25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIHRoZSBzdHJpbmcgXGEgdmFsdWUgYW5k
CisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3JpcHRW
YWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYg
dmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVl
KSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlw
dFZhbHVlIHdpdGggdGhlIHN0cmluZyBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGgg
dGhlIHNjcmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNj
cmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBR
U2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgUVN0cmluZzo6ZnJvbVV0ZjgodmFsdWUpKSkKK3sK
K30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVl
IHdpdGggdGhlIHNwZWNpYWwgXGEgdmFsdWUgYW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBz
Y3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRF
bmdpbmUqIGVuZ2luZSwgU3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3Jp
cHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3Rz
IGEgbmV3IFFTY3JpcHRWYWx1ZSB0aGF0IGlzIGEgY29weSBvZiBcYSBvdGhlci4KKworICBOb3Rl
IHRoYXQgaWYgXGEgb3RoZXIgaXMgYW4gb2JqZWN0IChpLmUuLCBpc09iamVjdCgpIHdvdWxkIHJl
dHVybgorICB0cnVlKSwgdGhlbiBvbmx5IGEgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIG9i
amVjdCBpcyBjb3BpZWQgaW50bworICB0aGUgbmV3IHNjcmlwdCB2YWx1ZSAoaS5lLiwgdGhlIG9i
amVjdCBpdHNlbGYgaXMgbm90IGNvcGllZCkuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFs
dWUoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikKKyAgICA6IGRfcHRyKG90aGVyLmRfcHRyKQor
eworfQorCisvKiEKKyAgICBEZXN0cm95cyB0aGlzIFFTY3JpcHRWYWx1ZS4KKyovCitRU2NyaXB0
VmFsdWU6On5RU2NyaXB0VmFsdWUoKQoreworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRo
aXMgUVNjcmlwdFZhbHVlIGlzIHZhbGlkOyBvdGhlcndpc2UgcmV0dXJucworICBmYWxzZS4KKyov
Citib29sIFFTY3JpcHRWYWx1ZTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRy
LT5pc1ZhbGlkKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFs
dWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIEJvb2xlYW47CisgIG90aGVyd2lzZSByZXR1cm5z
IGZhbHNlLgorCisgIFxzYSB0b0Jvb2woKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Jvb2wo
KSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNCb29sKCk7Cit9CisKKy8qIQorICBcb2Jz
b2xldGUKKworICBVc2UgaXNCb29sKCkgaW5zdGVhZC4KKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMg
UVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlwZSBCb29sZWFuOworICBvdGhlcndp
c2UgcmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRWYWx1ZTo6aXNCb29sZWFuKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzQm9vbCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0
cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlwZSBOdW1iZXI7
CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSB0b051bWJlcigpCisqLworYm9v
bCBRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlz
TnVtYmVyKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUg
aXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bGw7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNl
LgorCisgIFxzYSBRU2NyaXB0RW5naW5lOjpudWxsVmFsdWUoKQorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNOdWxsKCk7Cit9CisK
Ky8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1p
dGl2ZSB0eXBlIFN0cmluZzsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIHRv
U3RyaW5nKCkKKyovCitib29sIFFTY3JpcHRWYWx1ZTo6aXNTdHJpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBkX3B0ci0+aXNTdHJpbmcoKTsKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIFFTY3JpcHRWYWx1ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgVW5kZWZpbmVkOworICBv
dGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKworICBcc2EgUVNjcmlwdEVuZ2luZTo6dW5kZWZpbmVk
VmFsdWUoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRfcHRyLT5pc1VuZGVmaW5lZCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVl
IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCBvZiB0aGUgRXJyb3IgY2xhc3M7Cisg
IG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSBRU2NyaXB0Q29udGV4dDo6dGhyb3dF
cnJvcigpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzRXJyb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBkX3B0ci0+aXNFcnJvcigpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMg
UVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBPYmplY3QgdHlwZTsgb3RoZXJ3aXNlCisgIHJldHVybnMg
ZmFsc2UuCisKKyAgTm90ZSB0aGF0IGZ1bmN0aW9uIHZhbHVlcywgdmFyaWFudCB2YWx1ZXMsIGFu
ZCBRT2JqZWN0IHZhbHVlcyBhcmUKKyAgb2JqZWN0cywgc28gdGhpcyBmdW5jdGlvbiByZXR1cm5z
IHRydWUgZm9yIHN1Y2ggdmFsdWVzLgorCisgIFxzYSB0b09iamVjdCgpLCBRU2NyaXB0RW5naW5l
OjpuZXdPYmplY3QoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc09iamVjdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGRfcHRyLT5pc09iamVjdCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVl
IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGEgZnVuY3Rpb247IG90aGVyd2lzZSByZXR1cm5zCisg
IGZhbHNlLgorCisgIFxzYSBjYWxsKCkKKyovCitib29sIFFTY3JpcHRWYWx1ZTo6aXNGdW5jdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc0Z1bmN0aW9uKCk7Cit9CisKKy8qIQor
ICBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhpcyBRU2NyaXB0VmFsdWUsIGFzIGRlZmlu
ZWQgaW4KKyAgXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS44LCAiVG9TdHJpbmciLgorCisgIE5vdGUg
dGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmplY3QsIGNhbGxpbmcgdGhpcyBmdW5j
dGlvbgorICBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3JpcHQgZW5naW5lLCBzaW5jZSB0aGUg
ZW5naW5lIHdpbGwgY2FsbAorICB0aGUgb2JqZWN0J3MgdG9TdHJpbmcoKSBmdW5jdGlvbiAoYW5k
IHBvc3NpYmx5IHZhbHVlT2YoKSkgaW4gYW4KKyAgYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSBvYmpl
Y3QgdG8gYSBwcmltaXRpdmUgdmFsdWUgKHBvc3NpYmx5CisgIHJlc3VsdGluZyBpbiBhbiB1bmNh
dWdodCBzY3JpcHQgZXhjZXB0aW9uKS4KKworICBcc2EgaXNTdHJpbmcoKQorKi8KK1FTdHJpbmcg
UVNjcmlwdFZhbHVlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b1N0
cmluZygpOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgbnVtYmVyIHZhbHVlIG9mIHRoaXMgUVNj
cmlwdFZhbHVlLCBhcyBkZWZpbmVkIGluCisgIFxse0VDTUEtMjYyfSBzZWN0aW9uIDkuMywgIlRv
TnVtYmVyIi4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0
LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0
IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVl
T2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQg
dG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICBy
ZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIGlzTnVt
YmVyKCksIHRvSW50ZWdlcigpLCB0b0ludDMyKCksIHRvVUludDMyKCksIHRvVUludDE2KCkKKyov
CitxcmVhbCBRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9w
dHItPnRvTnVtYmVyKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBib29sZWFuIHZhbHVlIG9m
IHRoaXMgUVNjcmlwdFZhbHVlLCB1c2luZyB0aGUgY29udmVyc2lvbgorICBydWxlcyBkZXNjcmli
ZWQgaW4gXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS4yLCAiVG9Cb29sZWFuIi4KKworICBOb3RlIHRo
YXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rp
b24KKyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVu
Z2luZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBv
c3NpYmx5IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0
IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVn
aHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIGlzQm9vbCgpCisqLworYm9vbCBRU2NyaXB0
VmFsdWU6OnRvQm9vbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0Jvb2woKTsKK30K
KworLyohCisgIFxvYnNvbGV0ZQorCisgIFVzZSB0b0Jvb2woKSBpbnN0ZWFkLgorKi8KK2Jvb2wg
UVNjcmlwdFZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9C
b29sKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgUVNj
cmlwdFZhbHVlLCB1c2luZyB0aGUgY29udmVyc2lvbgorICBydWxlcyBkZXNjcmliZWQgaW4gXGx7
RUNNQS0yNjJ9IHNlY3Rpb24gOS40LCAiVG9JbnRlZ2VyIi4KKworICBOb3RlIHRoYXQgaWYgdGhp
cyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgaGFz
IHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3aWxs
IGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5IHRv
U3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEgcHJp
bWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2NyaXB0
IGV4Y2VwdGlvbikuCisKKyAgXHNhIHRvTnVtYmVyKCkKKyovCitxcmVhbCBRU2NyaXB0VmFsdWU6
OnRvSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0ludGVnZXIoKTsKK30K
KworLyohCisgIFJldHVybnMgdGhlIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZSBvZiB0aGlz
IFFTY3JpcHRWYWx1ZSwgdXNpbmcKKyAgdGhlIGNvbnZlcnNpb24gcnVsZXMgZGVzY3JpYmVkIGlu
IFxse0VDTUEtMjYyfSBzZWN0aW9uIDkuNSwgIlRvSW50MzIiLgorCisgIE5vdGUgdGhhdCBpZiB0
aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmplY3QsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICBo
YXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3JpcHQgZW5naW5lLCBzaW5jZSB0aGUgZW5naW5lIHdp
bGwgY2FsbAorICB0aGUgb2JqZWN0J3MgdmFsdWVPZigpIGZ1bmN0aW9uIChhbmQgcG9zc2libHkg
dG9TdHJpbmcoKSkgaW4gYW4KKyAgYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSBvYmplY3QgdG8gYSBw
cmltaXRpdmUgdmFsdWUgKHBvc3NpYmx5CisgIHJlc3VsdGluZyBpbiBhbiB1bmNhdWdodCBzY3Jp
cHQgZXhjZXB0aW9uKS4KKworICBcc2EgdG9OdW1iZXIoKSwgdG9VSW50MzIoKQorKi8KK3FpbnQz
MiBRU2NyaXB0VmFsdWU6OnRvSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9J
bnQzMigpOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgdW5zaWduZWQgMzItYml0IGludGVnZXIg
dmFsdWUgb2YgdGhpcyBRU2NyaXB0VmFsdWUsIHVzaW5nCisgIHRoZSBjb252ZXJzaW9uIHJ1bGVz
IGRlc2NyaWJlZCBpbiBcbHtFQ01BLTI2Mn0gc2VjdGlvbiA5LjYsICJUb1VpbnQzMiIuCisKKyAg
Tm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbGluZyB0aGlz
IGZ1bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlwdCBlbmdpbmUsIHNpbmNl
IHRoZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB2YWx1ZU9mKCkgZnVuY3Rpb24g
KGFuZCBwb3NzaWJseSB0b1N0cmluZygpKSBpbiBhbgorICBhdHRlbXB0IHRvIGNvbnZlcnQgdGhl
IG9iamVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkKKyAgcmVzdWx0aW5nIGluIGFu
IHVuY2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSB0b051bWJlcigpLCB0b0ludDMy
KCkKKyovCitxdWludDMyIFFTY3JpcHRWYWx1ZTo6dG9VSW50MzIoKSBjb25zdAoreworICAgIHJl
dHVybiBkX3B0ci0+dG9VSW50MzIoKTsKK30KKworLyohCisgIFJldHVybnMgdGhlIHVuc2lnbmVk
IDE2LWJpdCBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgUVNjcmlwdFZhbHVlLCB1c2luZworICB0aGUg
Y29udmVyc2lvbiBydWxlcyBkZXNjcmliZWQgaW4gXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS43LCAi
VG9VaW50MTYiLgorCisgIE5vdGUgdGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmpl
Y3QsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3Jp
cHQgZW5naW5lLCBzaW5jZSB0aGUgZW5naW5lIHdpbGwgY2FsbAorICB0aGUgb2JqZWN0J3MgdmFs
dWVPZigpIGZ1bmN0aW9uIChhbmQgcG9zc2libHkgdG9TdHJpbmcoKSkgaW4gYW4KKyAgYXR0ZW1w
dCB0byBjb252ZXJ0IHRoZSBvYmplY3QgdG8gYSBwcmltaXRpdmUgdmFsdWUgKHBvc3NpYmx5Cisg
IHJlc3VsdGluZyBpbiBhbiB1bmNhdWdodCBzY3JpcHQgZXhjZXB0aW9uKS4KKworICBcc2EgdG9O
dW1iZXIoKQorKi8KK3F1aW50MTYgUVNjcmlwdFZhbHVlOjp0b1VJbnQxNigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRfcHRyLT50b1VJbnQxNigpOworfQorCisvKiEKKyAgQ2FsbHMgdGhpcyBRU2Ny
aXB0VmFsdWUgYXMgYSBmdW5jdGlvbiwgdXNpbmcgXGEgdGhpc09iamVjdCBhcworICB0aGUgYHRo
aXMnIG9iamVjdCBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIHBhc3NpbmcgXGEgYXJncworICBh
cyBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZCBm
cm9tCisgIHRoZSBmdW5jdGlvbi4KKworICBJZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBub3QgYSBm
dW5jdGlvbiwgY2FsbCgpIGRvZXMgbm90aGluZworICBhbmQgcmV0dXJucyBhbiBpbnZhbGlkIFFT
Y3JpcHRWYWx1ZS4KKworICBOb3RlIHRoYXQgaWYgXGEgdGhpc09iamVjdCBpcyBub3QgYW4gb2Jq
ZWN0LCB0aGUgZ2xvYmFsIG9iamVjdAorICAoc2VlIFxse1FTY3JpcHRFbmdpbmU6Omdsb2JhbE9i
amVjdCgpfSkgd2lsbCBiZSB1c2VkIGFzIHRoZQorICBgdGhpcycgb2JqZWN0LgorCisgIENhbGxp
bmcgY2FsbCgpIGNhbiBjYXVzZSBhbiBleGNlcHRpb24gdG8gb2NjdXIgaW4gdGhlIHNjcmlwdCBl
bmdpbmU7CisgIGluIHRoYXQgY2FzZSwgY2FsbCgpIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2Fz
IHRocm93biAodHlwaWNhbGx5IGFuCisgIFxje0Vycm9yfSBvYmplY3QpLiBZb3UgY2FuIGNhbGwK
KyAgUVNjcmlwdEVuZ2luZTo6aGFzVW5jYXVnaHRFeGNlcHRpb24oKSB0byBkZXRlcm1pbmUgaWYg
YW4gZXhjZXB0aW9uCisgIG9jY3VycmVkLgorCisgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBldHMv
Y29kZS9zcmNfc2NyaXB0X3FzY3JpcHR2YWx1ZS5jcHAgMgorCisgIFxzYSBjb25zdHJ1Y3QoKQor
Ki8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0VmFsdWU6OmNhbGwoY29uc3QgUVNjcmlwdFZhbHVlJiB0
aGlzT2JqZWN0LCBjb25zdCBRU2NyaXB0VmFsdWVMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBk
X3B0ci0+Y2FsbCh0aGlzT2JqZWN0LmRfcHRyLmRhdGEoKSwgYXJncyk7Cit9CisKKy8qIQorICBS
ZXR1cm5zIHRoZSBRU2NyaXB0RW5naW5lIHRoYXQgY3JlYXRlZCB0aGlzIFFTY3JpcHRWYWx1ZSwK
KyAgb3IgMCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBpbnZhbGlkIG9yIHRoZSB2YWx1ZSBpcyBu
b3QKKyAgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBlbmdpbmUuCisqLworUVNjcmlwdEVu
Z2luZSogUVNjcmlwdFZhbHVlOjplbmdpbmUoKSBjb25zdAoreworICAgIHJldHVybiBRU2NyaXB0
RW5naW5lUHJpdmF0ZTo6Z2V0KGRfcHRyLT5lbmdpbmUoKSk7Cit9CisKKy8qIQorICBBc3NpZ25z
IHRoZSBcYSBvdGhlciB2YWx1ZSB0byB0aGlzIFFTY3JpcHRWYWx1ZS4KKworICBOb3RlIHRoYXQg
aWYgXGEgb3RoZXIgaXMgYW4gb2JqZWN0IChpc09iamVjdCgpIHJldHVybnMgdHJ1ZSksCisgIG9u
bHkgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0IHdpbGwgYmUgYXNzaWduZWQ7
CisgIHRoZSBvYmplY3QgaXRzZWxmIHdpbGwgbm90IGJlIGNvcGllZC4KKyovCitRU2NyaXB0VmFs
dWUmIFFTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9KGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIpCit7
CisgICAgZF9wdHIgPSBvdGhlci5kX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKy8qIQor
ICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgZXF1YWwgdG8gXGEgb3RoZXIs
IG90aGVyd2lzZQorICByZXR1cm5zIGZhbHNlLiBUaGUgY29tcGFyaXNvbiBmb2xsb3dzIHRoZSBi
ZWhhdmlvciBkZXNjcmliZWQgaW4KKyAgXGx7RUNNQS0yNjJ9IHNlY3Rpb24gMTEuOS4zLCAiVGhl
IEFic3RyYWN0IEVxdWFsaXR5IENvbXBhcmlzb24KKyAgQWxnb3JpdGhtIi4KKworICBUaGlzIGZ1
bmN0aW9uIGNhbiByZXR1cm4gdHJ1ZSBldmVuIGlmIHRoZSB0eXBlIG9mIHRoaXMgUVNjcmlwdFZh
bHVlCisgIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBcYSBvdGhlciB2YWx1ZTsg
aS5lLiB0aGUKKyAgY29tcGFyaXNvbiBpcyBub3Qgc3RyaWN0LiAgRm9yIGV4YW1wbGUsIGNvbXBh
cmluZyB0aGUgbnVtYmVyIDkgdG8KKyAgdGhlIHN0cmluZyAiOSIgcmV0dXJucyB0cnVlOyBjb21w
YXJpbmcgYW4gdW5kZWZpbmVkIHZhbHVlIHRvIGEgbnVsbAorICB2YWx1ZSByZXR1cm5zIHRydWU7
IGNvbXBhcmluZyBhIFxje051bWJlcn0gb2JqZWN0IHdob3NlIHByaW1pdGl2ZQorICB2YWx1ZSBp
cyA2IHRvIGEgXGN7U3RyaW5nfSBvYmplY3Qgd2hvc2UgcHJpbWl0aXZlIHZhbHVlIGlzICI2Igor
ICByZXR1cm5zIHRydWU7IGFuZCBjb21wYXJpbmcgdGhlIG51bWJlciAxIHRvIHRoZSBib29sZWFu
IHZhbHVlCisgIFxje3RydWV9IHJldHVybnMgdHJ1ZS4gSWYgeW91IHdhbnQgdG8gcGVyZm9ybSBh
IGNvbXBhcmlzb24KKyAgd2l0aG91dCBzdWNoIGltcGxpY2l0IHZhbHVlIGNvbnZlcnNpb24sIHVz
ZSBzdHJpY3RseUVxdWFscygpLgorCisgIE5vdGUgdGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBv
ciB0aGUgXGEgb3RoZXIgdmFsdWUgYXJlIG9iamVjdHMsCisgIGNhbGxpbmcgdGhpcyBmdW5jdGlv
biBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3JpcHQgZW5naW5lLCBzaW5jZQorICB0aGUgZW5n
aW5lIHdpbGwgY2FsbCB0aGUgb2JqZWN0J3MgdmFsdWVPZigpIGZ1bmN0aW9uIChhbmQgcG9zc2li
bHkKKyAgdG9TdHJpbmcoKSkgaW4gYW4gYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSBvYmplY3QgdG8g
YSBwcmltaXRpdmUgdmFsdWUKKyAgKHBvc3NpYmx5IHJlc3VsdGluZyBpbiBhbiB1bmNhdWdodCBz
Y3JpcHQgZXhjZXB0aW9uKS4KKworICBcc2Egc3RyaWN0bHlFcXVhbHMoKSwgbGVzc1RoYW4oKQor
Ki8KK2Jvb2wgUVNjcmlwdFZhbHVlOjplcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHIgPT0gb3RoZXIuZF9wdHIgfHwgZF9wdHItPmVxdWFs
cyhRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQob3RoZXIpKTsKK30KKworLyohCisgIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBlcXVhbCB0byBcYSBvdGhlciB1c2luZyBzdHJp
Y3QKKyAgY29tcGFyaXNvbiAobm8gY29udmVyc2lvbiksIG90aGVyd2lzZSByZXR1cm5zIGZhbHNl
LiBUaGUgY29tcGFyaXNvbgorICBmb2xsb3dzIHRoZSBiZWhhdmlvciBkZXNjcmliZWQgaW4gXGx7
RUNNQS0yNjJ9IHNlY3Rpb24gMTEuOS42LCAiVGhlCisgIFN0cmljdCBFcXVhbGl0eSBDb21wYXJp
c29uIEFsZ29yaXRobSIuCisKKyAgSWYgdGhlIHR5cGUgb2YgdGhpcyBRU2NyaXB0VmFsdWUgaXMg
ZGlmZmVyZW50IGZyb20gdGhlIHR5cGUgb2YgdGhlCisgIFxhIG90aGVyIHZhbHVlLCB0aGlzIGZ1
bmN0aW9uIHJldHVybnMgZmFsc2UuIElmIHRoZSB0eXBlcyBhcmUgZXF1YWwsCisgIHRoZSByZXN1
bHQgZGVwZW5kcyBvbiB0aGUgdHlwZSwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyB0YWJsZToK
KworICAgIFx0YWJsZQorICAgIFxoZWFkZXIgXG8gVHlwZSBcbyBSZXN1bHQKKyAgICBccm93ICAg
IFxvIFVuZGVmaW5lZCAgXG8gdHJ1ZQorICAgIFxyb3cgICAgXG8gTnVsbCAgICAgICBcbyB0cnVl
CisgICAgXHJvdyAgICBcbyBCb29sZWFuICAgIFxvIHRydWUgaWYgYm90aCB2YWx1ZXMgYXJlIHRy
dWUsIGZhbHNlIG90aGVyd2lzZQorICAgIFxyb3cgICAgXG8gTnVtYmVyICAgICBcbyBmYWxzZSBp
ZiBlaXRoZXIgdmFsdWUgaXMgTmFOIChOb3QtYS1OdW1iZXIpOyB0cnVlIGlmIHZhbHVlcyBhcmUg
ZXF1YWwsIGZhbHNlIG90aGVyd2lzZQorICAgIFxyb3cgICAgXG8gU3RyaW5nICAgICBcbyB0cnVl
IGlmIGJvdGggdmFsdWVzIGFyZSBleGFjdGx5IHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3Rl
cnMsIGZhbHNlIG90aGVyd2lzZQorICAgIFxyb3cgICAgXG8gT2JqZWN0ICAgICBcbyB0cnVlIGlm
IGJvdGggdmFsdWVzIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlCisg
ICAgXGVuZHRhYmxlCisKKyAgXHNhIGVxdWFscygpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OnN0
cmljdGx5RXF1YWxzKGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGRfcHRyID09IG90aGVyLmRfcHRyIHx8IGRfcHRyLT5zdHJpY3RseUVxdWFscyhRU2NyaXB0
VmFsdWVQcml2YXRlOjpnZXQob3RoZXIpKTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9xc2NyaXB0dmFsdWUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFs
dWUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ODRmMGVlCi0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZS5oCkBAIC0wLDAg
KzEsOTcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNjcmlwdHZhbHVlX2gKKyNk
ZWZpbmUgcXNjcmlwdHZhbHVlX2gKKworI2luY2x1ZGUgPFF0Q29yZS9xbGlzdC5oPgorI2luY2x1
ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorCitjbGFzcyBRU2NyaXB0RW5naW5lOworY2xhc3Mg
UVNjcmlwdFZhbHVlUHJpdmF0ZTsKKworY2xhc3MgUVNjcmlwdFZhbHVlOwordHlwZWRlZiBRTGlz
dDxRU2NyaXB0VmFsdWU+IFFTY3JpcHRWYWx1ZUxpc3Q7CisKK2NsYXNzIFFTY3JpcHRWYWx1ZSB7
CitwdWJsaWM6ICAgIAorICAgIGVudW0gU3BlY2lhbFZhbHVlIHsKKyAgICAgICAgTnVsbFZhbHVl
LAorICAgICAgICBVbmRlZmluZWRWYWx1ZQorICAgIH07CisKKyAgICBRU2NyaXB0VmFsdWUoKTsK
KyAgICBRU2NyaXB0VmFsdWUoYm9vbCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKGludCB2YWx1
ZSk7CisgICAgUVNjcmlwdFZhbHVlKHVpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShxcmVh
bCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsKKyAgICBR
U2NyaXB0VmFsdWUoY29uc3QgY2hhciogdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShTcGVjaWFs
VmFsdWUgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVy
KTsKKworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGJvb2wgdmFsdWUp
OworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGludCB2YWx1ZSk7Cisg
ICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgdWludCB2YWx1ZSk7CisgICAg
UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgcXJlYWwgdmFsdWUpOworICAgIFFT
Y3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsK
KyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBjaGFyKiB2YWx1
ZSk7CisgICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgU3BlY2lhbFZhbHVl
IHZhbHVlKTsKKworICAgIH5RU2NyaXB0VmFsdWUoKTsKKworICAgIFFTY3JpcHRWYWx1ZSYgb3Bl
cmF0b3I9KGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0
IFFTY3JpcHRWYWx1ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgc3RyaWN0bHlFcXVhbHMoY29u
c3QgUVNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3Q7CisKKyAgICBRU2NyaXB0RW5naW5lKiBlbmdp
bmUoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIGJvb2wgaXNCb29s
KCkgY29uc3Q7CisgICAgYm9vbCBpc0Jvb2xlYW4oKSBjb25zdDsKKyAgICBib29sIGlzTnVtYmVy
KCkgY29uc3Q7CisgICAgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc051bGwo
KSBjb25zdDsKKyAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc1VuZGVmaW5l
ZCgpIGNvbnN0OworICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKKyAgICBib29sIGlzRXJyb3Io
KSBjb25zdDsKKworICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICBxcmVhbCB0b051
bWJlcigpIGNvbnN0OworICAgIGJvb2wgdG9Cb29sKCkgY29uc3Q7CisgICAgYm9vbCB0b0Jvb2xl
YW4oKSBjb25zdDsKKyAgICBxcmVhbCB0b0ludGVnZXIoKSBjb25zdDsKKyAgICBxaW50MzIgdG9J
bnQzMigpIGNvbnN0OworICAgIHF1aW50MzIgdG9VSW50MzIoKSBjb25zdDsKKyAgICBxdWludDE2
IHRvVUludDE2KCkgY29uc3Q7CisKKyAgICBRU2NyaXB0VmFsdWUgY2FsbChjb25zdCBRU2NyaXB0
VmFsdWUmIHRoaXNPYmplY3QgPSBRU2NyaXB0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU2NyaXB0VmFsdWVMaXN0JiBhcmdzID0gUVNjcmlwdFZhbHVlTGlzdCgpKTsKKwor
cHJpdmF0ZToKKyAgICBRU2NyaXB0VmFsdWUodm9pZCopOworICAgIFFTY3JpcHRWYWx1ZShRU2Ny
aXB0VmFsdWVQcml2YXRlKik7CisKKyAgICBRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFT
Y3JpcHRWYWx1ZVByaXZhdGU+IGRfcHRyOworCisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRWYWx1
ZVByaXZhdGU7Cit9OworCisjZW5kaWYgLy8gcXNjcmlwdHZhbHVlX2gKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHR2YWx1ZV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
ZjJjZmMxNQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0
dmFsdWVfcC5oCkBAIC0wLDAgKzEsNjMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IHFzY3JpcHR2YWx1ZV9wX2gKKyNkZWZpbmUgcXNjcmlwdHZhbHVlX3BfaAorCisjaW5jbHVkZSAi
cXNjcmlwdGNvbnZlcnRlcl9wLmgiCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisjaW5j
bHVkZSAicXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorCitjbGFzcyBRU2NyaXB0RW5n
aW5lOworY2xhc3MgUVNjcmlwdFZhbHVlOworCisvKgorICBcaW50ZXJuYWwKKyAgXGNsYXNzIFFT
Y3JpcHRWYWx1ZVByaXZhdGUKKworICBJbXBsZW1lbnRhdGlvbiBvZiBRU2NyaXB0VmFsdWUuCisg
IFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhIHN0YXRlIG1hY2hpbmUuIFRoZSBzdGF0
ZXMgbmFtZXMgYXJlIGluY2x1ZGVkIGluCisgIFFTY3JpcHRWYWx1ZVByaXZhdGU6OlN0YXRlcy4g
RWFjaCBtZXRob2Qgc2hvdWxkIGNoZWNrIGZvciB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlbiBw
ZXJmb3JtIGEKKyAgY29ycmVjdCBhY3Rpb24uCisKKyAgU3RhdGVzOgorICAgIEludmFsaWQgLT4g
UVNWUCBpcyBpbnZhbGlkLCBubyBhc3N1bXB0aW9ucyBzaG91bGQgYmUgbWFkZSBhYm91dCBjbGFz
cyBtZW1iZXJzLgorICAgIENTdHJpbmcgLT4gUVNWUCBpcyBjcmVhdGVkIGZyb20gUVN0cmluZyBv
ciBjb25zdCBjaGFyKiBhbmQgbm8gSlNDIGVuZ2luZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHlldC4K
KyAgICAgICAgQ3VycmVudCB2YWx1ZSBpcyBrZXB0IGluIG1fc3RyaW5nLCBvdGhlciBtZW1iZXJz
IG1heSBiZSB1bml0aWFsaXplZC4KKyAgICBDTnVtYmVyIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9t
IGludCwgdWludCwgZG91YmxlLi4uIGFuZCBubyBKU0MgZW5naW5lIGhhcyBiZWVuIGJpbmQgeWV0
LiBDdXJyZW50CisgICAgICAgIHZhbHVlIGlzIGtlcHQgaW4gbV9udW1iZXIsIG90aGVyIG1lbWJl
cnMgbWF5IGJlIGluaXRpYWxpemVkLgorICAgIENCb29sIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9t
IGJvb2wgYW5kIG5vIEpTQyBlbmdpbmUgaGFzIGJlZW4gYXNzb2NpYXRlZCB5ZXQuIEN1cnJlbnQg
dmFsdWUgaXMga2VwdAorICAgICAgICBpbiBtX251bWJlciwgb3RoZXIgbWVtYmVycyBtYXkgYmUg
dW5pdGlhbGl6ZWQuCisgICAgQ1NwZWNpYWwgLT4gUVNWUCBpcyBVbmRlZmluZWQgb3IgTnVsbCwg
YnV0IGEgSlNDIGVuZ2luZSBoYXNuJ3QgYmVlbiBhc3NvY2lhdGVkIHlldCwgY3VycmVudCB2YWx1
ZQorICAgICAgICBpcyBrZXB0IGluIG1fbnVtYmVyIChjYXN0IG9mIFFTY3JpcHRWYWx1ZTo6U3Bl
Y2lhbFZhbHVlKQorICAgIEpTVmFsdWUgLT4gUVNWUCBpcyBhc3NvY2lhdGVkIHdpdGggZW5naW5l
LCBidXQgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYWJvdXQgcmVhbCB0eXBlLCB0aGUgc3RhdGUK
KyAgICAgICAgaGF2ZSByZWFsbHkgc2hvcnQgbGl2ZSBjeWNsZS4gTm9ybWFsbHkgaXQgaXMgY3Jl
YXRlZCBhcyBhIGZ1bmN0aW9uIGNhbGwgcmVzdWx0LgorICAgIEpTTmF0aXZlIC0+IFFTVlAgaXMg
YXNzb2NpYXRlZCB3aXRoIGVuZ2luZSwgYW5kIGl0IGlzIHN1cmUgdGhhdCBpdCBpc24ndCBhIEph
dmFTY3JpcHQgb2JqZWN0LgorICAgIEpTT2JqZWN0IC0+IFFTVlAgaXMgYXNzb2NpYXRlZCB3aXRo
IGVuZ2luZSwgYW5kIGl0IGlzIHN1cmUgdGhhdCBpdCBpcyBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
CisgIEVhY2ggc3RhdGUga2VlcCBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGludm9rZSBh
bGwgbWV0aG9kcywgaWYgbm90IGl0IHNob3VsZCBiZSBjaGFuZ2VkIHRvCisgIGEgcHJvcGVyIHN0
YXRlLiBDaGFuZ2VkIHN0YXRlIHNob3VsZG4ndCBiZSByZXZlcnRlZC4KKyovCisKK2NsYXNzIFFT
Y3JpcHRWYWx1ZVByaXZhdGUKKyAgICA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6Cisg
ICAgaW5saW5lIHN0YXRpYyBRU2NyaXB0VmFsdWVQcml2YXRlKiBnZXQoY29uc3QgUVNjcmlwdFZh
bHVlJiBxKTsKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1ZSBnZXQoY29uc3QgUVNjcmlw
dFZhbHVlUHJpdmF0ZSogZCk7CisgICAgaW5saW5lIHN0YXRpYyBRU2NyaXB0VmFsdWUgZ2V0KFFT
Y3JpcHRWYWx1ZVByaXZhdGUqIGQpOworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUo
KTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShRU3RyaW5nIHN0cmluZyk7CisgICAg
aW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoYm9vbCB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3Jp
cHRWYWx1ZVByaXZhdGUoaW50IG51bWJlcik7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZh
dGUodWludCBudW1iZXIpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKHFyZWFsIG51
bWJlcik7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoUVNjcmlwdFZhbHVlOjpTcGVj
aWFsVmFsdWUgdmFsdWUpOworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3Qg
UVNjcmlwdEVuZ2luZSogZW5naW5lLCBib29sIHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZh
bHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGludCB2YWx1ZSk7CisgICAg
aW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1
aW50IHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0
RW5naW5lKiBlbmdpbmUsIHFyZWFsIHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJp
dmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsK
KyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdp
bmUsIFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKTsKKworICAgIGlubGluZSBRU2Ny
aXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUsIEpTVmFs
dWVSZWYgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3Jp
cHRFbmdpbmVQcml2YXRlKiBlbmdpbmUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIG9i
amVjdCk7CisKKyAgICBpbmxpbmUgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgaW5saW5lIGJv
b2wgaXNCb29sKCk7CisgICAgaW5saW5lIGJvb2wgaXNOdW1iZXIoKTsKKyAgICBpbmxpbmUgYm9v
bCBpc051bGwoKTsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZygpOworICAgIGlubGluZSBib29s
IGlzVW5kZWZpbmVkKCk7CisgICAgaW5saW5lIGJvb2wgaXNFcnJvcigpOworICAgIGlubGluZSBi
b29sIGlzT2JqZWN0KCk7CisgICAgaW5saW5lIGJvb2wgaXNGdW5jdGlvbigpOworCisgICAgaW5s
aW5lIFFTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBpbmxpbmUgcXJlYWwgdG9OdW1iZXIoKSBjb25z
dDsKKyAgICBpbmxpbmUgYm9vbCB0b0Jvb2woKSBjb25zdDsKKyAgICBpbmxpbmUgcXJlYWwgdG9J
bnRlZ2VyKCkgY29uc3Q7CisgICAgaW5saW5lIHFpbnQzMiB0b0ludDMyKCkgY29uc3Q7CisgICAg
aW5saW5lIHF1aW50MzIgdG9VSW50MzIoKSBjb25zdDsKKyAgICBpbmxpbmUgcXVpbnQxNiB0b1VJ
bnQxNigpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgZXF1YWxzKFFTY3JpcHRWYWx1ZVByaXZh
dGUqIG90aGVyKTsKKyAgICBpbmxpbmUgYm9vbCBzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0
VmFsdWVQcml2YXRlKiBvdGhlcikgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgYXNzaWduRW5naW5l
KFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUpOworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1
ZVByaXZhdGUqIGNhbGwoY29uc3QgUVNjcmlwdFZhbHVlUHJpdmF0ZSogLCBjb25zdCBRU2NyaXB0
VmFsdWVMaXN0JiBhcmdzKTsKKworICAgIGlubGluZSBib29sIGluaGVyaXRzKGNvbnN0IGNoYXIq
KTsKKworICAgIGlubGluZSBib29sIGlzSlNCYXNlZCgpIGNvbnN0OworICAgIGlubGluZSBib29s
IGlzTnVtYmVyQmFzZWQoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZ0Jhc2VkKCkg
Y29uc3Q7CisKKyAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQoKSBjb25zdDsK
KyAgICBpbmxpbmUgSlNWYWx1ZVJlZiB2YWx1ZSgpIGNvbnN0OworICAgIGlubGluZSBKU09iamVj
dFJlZiBvYmplY3QoKSBjb25zdDsKKyAgICBpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVu
Z2luZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFBsZWFzZSwgdXBkYXRlIGNsYXNzIGRv
Y3VtZW50YXRpb24gd2hlbiB5b3UgY2hhbmdlIHRoZSBlbnVtLgorICAgIGVudW0gU3RhdGVzIHsK
KyAgICAgICAgSW52YWxpZCA9IDAsCisgICAgICAgIENTdHJpbmcgPSAweDEwMDAsCisgICAgICAg
IENOdW1iZXIsCisgICAgICAgIENCb29sLAorICAgICAgICBDU3BlY2lhbCwKKyAgICAgICAgSlNW
YWx1ZSA9IDB4MjAwMCwgLy8gSlMgdmFsdWVzIGFyZSBlcXVhbCBvciBoaWdoZXIgdGhlbiB0aGlz
IHZhbHVlLgorICAgICAgICBKU05hdGl2ZSwKKyAgICAgICAgSlNPYmplY3QKKyAgICB9IG1fc3Rh
dGU7CisgICAgUVNjcmlwdEVuZ2luZVB0ciBtX2VuZ2luZTsKKyAgICBRU3RyaW5nIG1fc3RyaW5n
OworICAgIHFyZWFsIG1fbnVtYmVyOworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsKKyAgICBKU09i
amVjdFJlZiBtX29iamVjdDsKK307CisKK1FTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRWYWx1
ZVByaXZhdGU6OmdldChjb25zdCBRU2NyaXB0VmFsdWUmIHEpIHsgcmV0dXJuIHEuZF9wdHIuZGF0
YSgpOyB9CisKK1FTY3JpcHRWYWx1ZSBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoY29uc3QgUVNj
cmlwdFZhbHVlUHJpdmF0ZSogZCkKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlKGNvbnN0X2Nh
c3Q8UVNjcmlwdFZhbHVlUHJpdmF0ZSo+KGQpKTsKK30KKworUVNjcmlwdFZhbHVlIFFTY3JpcHRW
YWx1ZVByaXZhdGU6OmdldChRU2NyaXB0VmFsdWVQcml2YXRlKiBkKQoreworICAgIHJldHVybiBR
U2NyaXB0VmFsdWUoZCk7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVBy
aXZhdGUoKQorICAgIDogbV9zdGF0ZShJbnZhbGlkKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKFFTdHJpbmcgc3RyaW5nKQorICAgIDogbV9zdGF0ZShD
U3RyaW5nKQorICAgICwgbV9zdHJpbmcoc3RyaW5nKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGJvb2wgdmFsdWUpCisgICAgOiBtX3N0YXRlKENCb29s
KQorICAgICwgbV9udW1iZXIodmFsdWUpCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFT
Y3JpcHRWYWx1ZVByaXZhdGUoaW50IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAg
ICAsIG1fbnVtYmVyKG51bWJlcikKK3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlw
dFZhbHVlUHJpdmF0ZSh1aW50IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAs
IG1fbnVtYmVyKG51bWJlcikKK3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZh
bHVlUHJpdmF0ZShxcmVhbCBudW1iZXIpCisgICAgOiBtX3N0YXRlKENOdW1iZXIpCisgICAgLCBt
X251bWJlcihudW1iZXIpCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1
ZVByaXZhdGUoUVNjcmlwdFZhbHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpCisgICAgOiBtX3N0YXRl
KENTcGVjaWFsKQorICAgICwgbV9udW1iZXIodmFsdWUpCit7Cit9CisKK1FTY3JpcHRWYWx1ZVBy
aXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBi
b29sIHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3Jp
cHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAg
ICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBD
Qm9vbDsKKyAgICAgICAgbV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92
YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50
IHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAg
ICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVt
YmVyOworICAgICAgICBtX251bWJlciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3Zh
bHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZh
dGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50
IHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAg
ICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVt
YmVyOworICAgICAgICBtX251bWJlciA9IHZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBtX3Zh
bHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVlKHZhbHVlKTsKK30KK1FTY3JpcHRWYWx1ZVByaXZh
dGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBxcmVh
bCB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0
RW5naW5lUHJpdmF0ZTo6Z2V0KGVuZ2luZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAg
ICAgLy8gc2xvd2VyIHBhdGggcmVpbml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ051
bWJlcjsKKyAgICAgICAgbV9udW1iZXIgPSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92
YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7Cit9CitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29u
c3QgUVN0cmluZyYgdmFsdWUpCisgICAgOiBtX3N0YXRlKEpTTmF0aXZlKQorICAgICwgbV9lbmdp
bmUoUVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChlbmdpbmUpKQoreworICAgIGlmICghZW5naW5l
KSB7CisgICAgICAgIC8vIHNsb3dlciBwYXRoIHJlaW5pdGlhbGl6YXRpb24KKyAgICAgICAgbV9z
dGF0ZSA9IENTdHJpbmc7CisgICAgICAgIG1fc3RyaW5nID0gdmFsdWU7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fdmFsdWUgPSBtX2VuZ2luZS0+bWFrZUpTVmFsdWUodmFsdWUpOworfQorUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBl
bmdpbmUsIFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogbV9zdGF0ZShK
U05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5l
KSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRp
YWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDU3BlY2lhbDsKKyAgICAgICAgbV9udW1iZXIg
PSB2YWx1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNW
YWx1ZSh2YWx1ZSk7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZh
dGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSkK
KyAgICA6IG1fc3RhdGUoSlNWYWx1ZSkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlw
dEVuZ2luZVByaXZhdGUqPihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKK30KKwor
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5n
aW5lUHJpdmF0ZSogZW5naW5lLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU09iamVjdFJlZiBvYmplY3Qp
CisgICAgOiBtX3N0YXRlKEpTT2JqZWN0KQorICAgICwgbV9lbmdpbmUoY29uc3RfY2FzdDxRU2Ny
aXB0RW5naW5lUHJpdmF0ZSo+KGVuZ2luZSkpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICwg
bV9vYmplY3Qob2JqZWN0KQoreworfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IEludmFsaWQ7IH0KKworYm9vbCBRU2NyaXB0
VmFsdWVQcml2YXRlOjppc0Jvb2woKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNh
c2UgQ0Jvb2w6IHJldHVybiB0cnVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlz
T2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhy
b3VnaC4KKyAgICBjYXNlIEpTTmF0aXZlOgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzQm9vbGVh
bihjb250ZXh0KCksIHZhbHVlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNOdW1iZXIoKQorewor
ICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ051bWJlcjoKKyAgICAgICAgcmV0dXJu
IG1fbnVtYmVyOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBj
YXNlIEpTTmF0aXZlOgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQoKSwg
dmFsdWUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc051bGwoKQoreworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgQ1NwZWNpYWw6CisgICAgICAgIHJldHVybiBtX251bWJlciA9PSBz
dGF0aWNfY2FzdDxpbnQ+KFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICBjYXNlIEpTVmFs
dWU6CisgICAgICAgIGlmIChpc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgY2FzZSBKU05hdGl2ZToKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVJc051bGwoY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzU3RyaW5nKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIENTdHJpbmc6
IHJldHVybiB0cnVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAg
ICBjYXNlIEpTTmF0aXZlOgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQo
KSwgdmFsdWUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc1VuZGVmaW5lZCgpCit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBDU3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIG1fbnVt
YmVyID09IHN0YXRpY19jYXN0PGludD4oUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7Cisg
ICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6
CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCgpLCB2YWx1ZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmlzRXJyb3IoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgewor
ICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKCFpc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgY2FzZSBKU09iamVj
dDoKKyAgICAgICAgcmV0dXJuIGluaGVyaXRzKCJFcnJvciIpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
aXNPYmplY3QoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNPYmplY3Q6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgbV9vYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRpb24gKi8g
MCk7CisgICAgICAgIGlmICghb2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFs
dWVQcml2YXRlOjppc0Z1bmN0aW9uKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBj
YXNlIEpTVmFsdWU6CisgICAgICAgIG1fb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQo
KSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApOworICAgICAgICBpZiAoIW9iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3N0YXRlID0gSlNPYmplY3Q7Cisg
ICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1
cm4gSlNPYmplY3RJc0Z1bmN0aW9uKGNvbnRleHQoKSwgb2JqZWN0KCkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK1FTdHJpbmcgUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6dG9TdHJpbmcoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2Ug
SW52YWxpZDogcmV0dXJuIFFTdHJpbmcoKTsKKyAgICBjYXNlIENCb29sOiByZXR1cm4gbV9udW1i
ZXIgPyBRU3RyaW5nOjpmcm9tTGF0aW4xKCJ0cnVlIikgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJm
YWxzZSIpOworICAgIGNhc2UgQ1N0cmluZzogcmV0dXJuIG1fc3RyaW5nOworICAgIGNhc2UgQ051
bWJlcjogcmV0dXJuIFFTdHJpbmc6Om51bWJlcihtX251bWJlcik7CisgICAgY2FzZSBDU3BlY2lh
bDogcmV0dXJuIG1fbnVtYmVyID09IFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlID8gUVN0cmluZzo6
ZnJvbUxhdGluMSgibnVsbCIpIDogUVN0cmluZzo6ZnJvbUxhdGluMSgidW5kZWZpbmVkIik7Cisg
ICAgY2FzZSBKU1ZhbHVlOgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgY2FzZSBKU09iamVjdDoK
KyAgICAgICAgcmV0dXJuIFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRpb24gKi8gMCkpOworICAgIH0KKwor
ICAgIFFfQVNTRVJUKGZhbHNlKTsKKyAgICByZXR1cm4gUVN0cmluZygpOyAvLyBBdm9pZCBjb21w
aWxlciB3YXJuaW5nLgorfQorCitxcmVhbCBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b051bWJlcigp
IGNvbnN0Cit7CisgICAgLy8gVE9ETyBDaGVjayBpdC4KKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIEpTVmFsdWU6CisgICAgY2FzZSBKU05hdGl2ZToKKyAgICBjYXNlIEpTT2JqZWN0
OgorICAgICAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSwgLyog
ZXhjZXB0aW9uICovIDApOworICAgIGNhc2UgQ051bWJlcjoKKyAgICBjYXNlIENCb29sOgorICAg
ICAgICByZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBJbnZhbGlkOgorICAgIGNhc2UgQ1NwZWNp
YWw6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAgIHJl
dHVybiBtX3N0cmluZy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgUV9BU1NFUlQoZmFsc2UpOwor
ICAgIHJldHVybiAwOyAvLyBBdm9pZCBjb21waWxlciB3YXJuaW5nLgorfQorCitib29sIFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OnRvQm9vbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBKU1ZhbHVlOgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgY2FzZSBKU09iamVj
dDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCgpLCB2YWx1ZSgpKTsK
KyAgICBjYXNlIENOdW1iZXI6CisgICAgY2FzZSBDQm9vbDoKKyAgICAgICAgcmV0dXJuIG1fbnVt
YmVyOworICAgIGNhc2UgSW52YWxpZDoKKyAgICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBDU3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmcuaXNF
bXB0eSgpOworICAgIH0KKworICAgIFFfQVNTRVJUKGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7
IC8vIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCit9CisKK3FyZWFsIFFTY3JpcHRWYWx1ZVByaXZh
dGU6OnRvSW50ZWdlcigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBs
ZW1lbnRhdGlvbiEKKyAgICByZXR1cm4gdG9OdW1iZXIoKTsKK30KKworcWludDMyIFFTY3JpcHRW
YWx1ZVByaXZhdGU6OnRvSW50MzIoKSBjb25zdAoreworICAgIC8vIFRPRE8gaXQgaXMgbm90IHRy
dWUgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisKK3F1aW50MzIg
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9VSW50MzIoKSBjb25zdAoreworICAgIC8vIFRPRE8gaXQg
aXMgbm90IHRydWUgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIHRvTnVtYmVyKCk7Cit9CisK
K3F1aW50MTYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9VSW50MTYoKSBjb25zdAoreworICAgIC8v
IFRPRE8gaXQgaXMgbm90IHRydWUgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIHRvTnVtYmVy
KCk7Cit9CisKKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjplcXVhbHMoUVNjcmlwdFZhbHVl
UHJpdmF0ZSogb3RoZXIpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLT5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3N0YXRlID09IENTcGVjaWFs
ICYmIG90aGVyLT5tX3N0YXRlID09IENTcGVjaWFsKQorICAgICAgICByZXR1cm4gbV9udW1iZXIg
PT0gb3RoZXItPm1fbnVtYmVyOworCisgICAgaWYgKGlzSlNCYXNlZCgpICYmICFvdGhlci0+aXNK
U0Jhc2VkKCkpCisgICAgICAgIG90aGVyLT5hc3NpZ25FbmdpbmUoZW5naW5lKCkpOworICAgIGVs
c2UgaWYgKCFpc0pTQmFzZWQoKSAmJiBvdGhlci0+aXNKU0Jhc2VkKCkpCisgICAgICAgIG90aGVy
LT5hc3NpZ25FbmdpbmUob3RoZXItPmVuZ2luZSgpKTsKKyAgICBlbHNlIGlmIChpc0pTQmFzZWQo
KSAmJiBvdGhlci0+aXNKU0Jhc2VkKCkgJiYgZW5naW5lKCkgIT0gb3RoZXItPmVuZ2luZSgpKSB7
CisgICAgICAgIHFXYXJuaW5nKCJRU2NyaXB0VmFsdWU6OmVxdWFsczogY2Fubm90IGNvbXBhcmUg
dG8gYSB2YWx1ZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWVJc0VxdWFsKGNvbnRleHQoKSwg
dmFsdWUoKSwgb3RoZXItPnZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKK30KKworYm9vbCBR
U2NyaXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWVQcml2
YXRlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBvdGhlci0+bV9zdGF0ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc0pTQmFzZWQoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQoKSwgdmFsdWUoKSwgb3RoZXItPnZhbHVl
KCkpOworICAgIGlmIChpc1N0cmluZ0Jhc2VkKCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZyA9
PSBvdGhlci0+bV9zdHJpbmc7CisgICAgaWYgKGlzTnVtYmVyQmFzZWQoKSkKKyAgICAgICAgcmV0
dXJuIG1fbnVtYmVyID09IG90aGVyLT5tX251bWJlcjsKKworICAgIHJldHVybiBmYWxzZTsgLy8g
SW52YWxpZCBzdGF0ZS4KK30KKwordm9pZCBRU2NyaXB0VmFsdWVQcml2YXRlOjphc3NpZ25Fbmdp
bmUoUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICBjYXNlIENCb29sOgorICAgICAgICBtX3ZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1
ZShzdGF0aWNfY2FzdDxib29sPihtX251bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTdHJpbmc6CisgICAgICAgIG1fdmFsdWUgPSBlbmdpbmUtPm1ha2VKU1ZhbHVlKG1fc3RyaW5n
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTnVtYmVyOgorICAgICAgICBtX3ZhbHVlID0g
ZW5naW5lLT5tYWtlSlNWYWx1ZShtX251bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkbworICAgIH0KKyAgICBtX2VuZ2lu
ZSA9IGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUqPihlbmdpbmUpOworICAgIG1fc3Rh
dGUgPSBKU05hdGl2ZTsKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6Y2FsbChjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiAsIGNvbnN0IFFTY3JpcHRWYWx1
ZUxpc3QgJmFyZ3MpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVl
OgorICAgICAgICBtX29iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0KCksIHZhbHVlKCks
IC8qIGV4Y2VwdGlvbiAqLyAwKTsKKyAgICAgICAgaWYgKCFvYmplY3QoKSkgeworICAgICAgICAg
ICAgbV9zdGF0ZSA9IEpTVmFsdWU7CisgICAgICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1
ZVByaXZhdGU7CisgICAgICAgIH0KKyAgICAgICAgbV9zdGF0ZSA9IEpTT2JqZWN0OworICAgICAg
ICAvLyBGYWxsLXRocm91Z2guCisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ29udmVydCBhbGwgYXJndW1lbnRzIGFuZCBiaW5kIHRvIHRoZSBlbmdpbmUuCisg
ICAgICAgICAgICBpbnQgYXJnYyA9IGFyZ3Muc2l6ZSgpOworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiBhcmd2W2FyZ2NdOworICAgICAgICAgICAgUVNjcmlwdFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0
b3IgaSA9IGFyZ3MuY29uc3RCZWdpbigpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGkg
IT0gYXJncy5jb25zdEVuZCgpOyBqKyssIGkrKykgeworICAgICAgICAgICAgICAgIFFTY3JpcHRW
YWx1ZVByaXZhdGUqIHZhbHVlID0gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KCppKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZS0+YXNzaWduRW5naW5lKGVuZ2luZSgpKTsKKyAgICAgICAgICAgICAg
ICBhcmd2W2pdID0gdmFsdWUtPnZhbHVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIE1ha2UgdGhlIGNhbGwKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihj
b250ZXh0KCksIG9iamVjdCgpLCAvKiB0aGlzT2JqZWN0ICovIDAsIGFyZ2MsIGFyZ3YsICZleGNl
cHRpb24pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgZXhjZXB0aW9uKQorICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUoKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgIWV4Y2VwdGlvbikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lKCksIHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gdGhpcyBRU1YgaXMgbm90IGEgZnVuY3Rpb24gPC0tICFyZXN1bHQg
JiYgIWV4Y2VwdGlvbi4gRmFsbC10aHJvdWdoLgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZTsKKyAgICB9Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2
YXRlKiBRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUoKSBjb25zdAoreworICAgIC8vIEFzIGxv
bmcgYXMgbV9lbmdpbmUgaXMgYW4gYXV0b2luaXRpYWxpemF0ZWQgcG9pbnRlciB3ZSBjYW4gc2Fm
ZWx5IHJldHVybiBpdCB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgY3VycmVudCBzdGF0ZS4KKyAg
ICByZXR1cm4gbV9lbmdpbmUuZGF0YSgpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYgUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2Vk
KCkpOworICAgIHJldHVybiBtX2VuZ2luZS0+Y29udGV4dCgpOworfQorCitKU1ZhbHVlUmVmIFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBRX0FTU0VSVChpc0pTQmFz
ZWQoKSk7CisgICAgcmV0dXJuIG1fdmFsdWU7Cit9CisKK0pTT2JqZWN0UmVmIFFTY3JpcHRWYWx1
ZVByaXZhdGU6Om9iamVjdCgpIGNvbnN0Cit7CisgICAgUV9BU1NFUlQoaXNKU0Jhc2VkKCkpOwor
ICAgIHJldHVybiBtX29iamVjdDsKK30KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5zIHRy
dWUgaWYgUVNWIGlzIGNyZWF0ZWQgZnJvbSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBnaXZlbiBcYSBu
YW1lLCBpdCBoYXMgdG8gYmUgYQorICBidWlsdC1pbiB0eXBlLgorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6aW5oZXJpdHMoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCgpKTsKKyAg
ICBKU1ZhbHVlUmVmIGVycm9yID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0KCksIGdsb2Jh
bE9iamVjdCwgUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcobmFtZSksIDApOworICAgIHJldHVy
biBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoY29udGV4dCgpLCB2YWx1ZSgpLCBKU1Zh
bHVlVG9PYmplY3QoY29udGV4dCgpLCBlcnJvciwgLyogZXhjZXB0aW9uICovIDApLCAvKiBleGNl
cHRpb24gKi8gMCk7Cit9CisKKy8qIQorICBcaW50ZXJuYWwKKyAgUmV0dXJucyB0cnVlIGlmIFFT
ViBoYXZlIGFuIGVuZ2luZSBhc3NvY2lhdGVkLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0
ZTo6aXNKU0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBKU1ZhbHVlOyB9CisKKy8q
IQorICBcaW50ZXJuYWwKKyAgUmV0dXJucyB0cnVlIGlmIGN1cnJlbnQgdmFsdWUgb2YgUVNWIGlz
IHBsYWNlZCBpbiBtX251bWJlci4KKyovCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVt
YmVyQmFzZWQoKSBjb25zdCB7IHJldHVybiAhaXNKU0Jhc2VkKCkgJiYgIWlzU3RyaW5nQmFzZWQo
KSAmJiBtX3N0YXRlICE9IEludmFsaWQ7IH0KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5z
IHRydWUgaWYgY3VycmVudCB2YWx1ZSBvZiBRU1YgaXMgcGxhY2VkIGluIG1fc3RyaW5nLgorKi8K
K2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gQ1N0cmluZzsgfQorCisjZW5kaWYgLy8gcXNjcmlwdHZhbHVlX3BfaApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmggYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXRzY3JpcHRnbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi4yOTc0OWMwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3F0c2NyaXB0Z2xvYmFsLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBxdHNjcmlwdGdsb2JhbF9oCisjZGVmaW5lIHF0c2NyaXB0Z2xvYmFsX2gKKwor
I2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+CisKKyNpZiBkZWZpbmVkKFFfT1NfV0lOKSB8fCBk
ZWZpbmVkKFFfT1NfU1lNQklBTikKKyMgIGlmIGRlZmluZWQoUVRfTk9ETEwpCisjICBlbGlmIGRl
ZmluZWQoUVRfTUFLRURMTCkgICAgICAgIC8qIGNyZWF0ZSBhIFF0IERMTCBsaWJyYXJ5ICovCisj
ICAgIGlmIGRlZmluZWQoUVRfQlVJTERfSkFWQVNDUklQVF9MSUIpCisjICAgICAgZGVmaW5lIFFf
SkFWQVNDUklQVF9FWFBPUlQgUV9ERUNMX0VYUE9SVAorIyAgICBlbHNlCisjICAgICAgZGVmaW5l
IFFfSkFWQVNDUklQVF9FWFBPUlQgUV9ERUNMX0lNUE9SVAorIyAgICBlbmRpZgorIyAgZWxpZiBk
ZWZpbmVkKFFUX0RMTCkgLyogdXNlIGEgUXQgRExMIGxpYnJhcnkgKi8KKyMgICAgZGVmaW5lIFFf
SkFWQVNDUklQVF9FWFBPUlQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoUVRfU0hB
UkVEKQorIyAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQgUV9ERUNMX0VYUE9SVAorI2Vsc2UK
KyMgIGRlZmluZSBRX0pBVkFTQ1JJUFRfRVhQT1JUCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUu
cHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5l
LnBybwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZGMwOTAyCi0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0
ZW5naW5lLnBybwpAQCAtMCwwICsxLDcgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSB0c3Rf
cXNjcmlwdGVuZ2luZQorUVQgKz0gdGVzdGxpYgoraW5jbHVkZSguLi90ZXN0cy5wcmkpCisKK1NP
VVJDRVMgKz0gdHN0X3FzY3JpcHRlbmdpbmUuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNj
cmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM1ZjEzZgotLS0gL2Rldi9udWxsCisr
KyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdp
bmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJx
c2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSA8UXRU
ZXN0L3F0ZXN0Lmg+CisKK2NsYXNzIHRzdF9RU2NyaXB0RW5naW5lCisgICAgOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9RU2NyaXB0RW5naW5lKCkg
e30KKyAgICB2aXJ0dWFsIH50c3RfUVNjcmlwdEVuZ2luZSgpIHt9CisKK3B1YmxpYyBzbG90czoK
KyAgICB2b2lkIGluaXQoKSB7fQorICAgIHZvaWQgY2xlYW51cCgpIHt9CisKK3ByaXZhdGUgc2xv
dHM6CisgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworICAgIHZvaWQgZXZhbHVhdGUoKTsKK307
CisKKy8qIFRlc3QgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhdCBsZWFzdCB0cnkgdG8gbm90IGNyYXNo
LiAqLwordm9pZCB0c3RfUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIFFT
Y3JpcHRFbmdpbmUgZW5naW5lOworICAgIGVuZ2luZS5jb2xsZWN0R2FyYmFnZSgpOworfQorCisv
KiBFdmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgdGhyb3cgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBz
aG91bGQgcmV0dXJuIGFuIGludmFsaWQgdmFsdWUuICovCit2b2lkIHRzdF9RU2NyaXB0RW5naW5l
OjpldmFsdWF0ZSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVZFUklGWTIo
ZW5naW5lLmV2YWx1YXRlKCIxKzEiKS5pc1ZhbGlkKCksICJ0aGUgZXhwcmVzc2lvbiBzaG91bGQg
YmUgZXZhbHVhdGVkIGFuZCBhbiB2YWxpZCByZXN1bHQgc2hvdWxkIGJlIHJldHVybmVkIik7Cisg
ICAgUVZFUklGWTIoZW5naW5lLmV2YWx1YXRlKCJwaW5nIikuaXNWYWxpZCgpLCAiU2NyaXB0IHRo
cm93aW5nIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gc2hvdWxkIHJldHVybiBhbiBleGNlcHRpb24g
dmFsdWUiKTsKK30KKworUVRFU1RfTUFJTih0c3RfUVNjcmlwdEVuZ2luZSkKKyNpbmNsdWRlICJ0
c3RfcXNjcmlwdGVuZ2luZS5tb2MiCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0
cy9xc2NyaXB0dmFsdWUvcXNjcmlwdHZhbHVlLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3Rz
L3FzY3JpcHR2YWx1ZS9xc2NyaXB0dmFsdWUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAuLjFjZTViYzMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90
ZXN0cy9xc2NyaXB0dmFsdWUvcXNjcmlwdHZhbHVlLnBybwpAQCAtMCwwICsxLDcgQEAKK1RFTVBM
QVRFID0gYXBwCitUQVJHRVQgPSB0c3RfcXNjcmlwdHZhbHVlCitRVCArPSB0ZXN0bGliCitpbmNs
dWRlKC4uL3Rlc3RzLnByaSkKKworU09VUkNFUyArPSB0c3RfcXNjcmlwdHZhbHVlLmNwcAorCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWUvdHN0X3FzY3Jp
cHR2YWx1ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWUvdHN0X3Fz
Y3JpcHR2YWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdmM2Zm
ZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1
ZS90c3RfcXNjcmlwdHZhbHVlLmNwcApAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUu
aCIKKyNpbmNsdWRlIDxRdFRlc3QvcXRlc3QuaD4KKworUV9ERUNMQVJFX01FVEFUWVBFKFFTY3Jp
cHRWYWx1ZSopOworUV9ERUNMQVJFX01FVEFUWVBFKFFTY3JpcHRWYWx1ZSk7CisKK2NsYXNzIHRz
dF9RU2NyaXB0VmFsdWUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorCitw
dWJsaWM6CisgICAgdHN0X1FTY3JpcHRWYWx1ZSgpIHt9CisgICAgdmlydHVhbCB+dHN0X1FTY3Jp
cHRWYWx1ZSgpIHt9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXQoKSB7fQorICAgIHZv
aWQgY2xlYW51cCgpIHt9CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCB0b1N0cmluZ19kYXRh
KCk7CisgICAgdm9pZCB0b1N0cmluZygpOworICAgIHZvaWQgY29weUNvbnN0cnVjdG9yX2RhdGEo
KTsKKyAgICB2b2lkIGNvcHlDb25zdHJ1Y3RvcigpOworICAgIHZvaWQgYXNzaWduT3BlcmF0b3Jf
ZGF0YSgpOworICAgIHZvaWQgYXNzaWduT3BlcmF0b3IoKTsKKyAgICB2b2lkIGRhdGFTaGFyaW5n
KCk7CisgICAgdm9pZCBjb25zdHJ1Y3RvcnNfZGF0YSgpOworICAgIHZvaWQgY29uc3RydWN0b3Jz
KCk7CisgICAgdm9pZCBjYWxsKCk7CisKKyAgICAvLyBjb3BpZWQgZnJvbSBRdCdzIFF0U2NyaXB0
LgorICAgIHZvaWQgY3RvcigpOworfTsKKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjdG9yKCkK
K3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZzsKKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
OworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFS
RSh2LmVuZ2luZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAg
IFFTY3JpcHRWYWx1ZSB2KCZlbmcsIFFTY3JpcHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNV
bmRlZmluZWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2Up
OworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9CisgICAgeworICAg
ICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCBRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051
bGwoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAg
ICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9CisgICAgeworICAgICAgICBR
U2NyaXB0VmFsdWUgdigmZW5nLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc0Jvb2xlYW4oKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNCb29sKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0
KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b0Jvb2xlYW4oKSwgZmFsc2UpOworICAg
ICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9CisgICAgeworICAgICAgICBR
U2NyaXB0VmFsdWUgdigmZW5nLCBpbnQoMSkpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVt
YmVyKCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0K
KyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KGludCgweDQzMjExMjM0KSk7CisgICAgICAg
IFFWRVJJRlkodi5pc051bWJlcigpKTsKKyAgICAgICAgUUNPTVBBUkUodi50b0ludDMyKCksIDB4
NDMyMTEyMzQpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZlbmcsIHVp
bnQoMSkpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFD
T01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3Qo
KSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7CisgICAgICAg
IFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3Jp
cHRWYWx1ZSB2KHVpbnQoMHg0MzIxMTIzNCkpOworICAgICAgICBRVkVSSUZZKHYuaXNOdW1iZXIo
KSk7CisgICAgICAgIFFDT01QQVJFKHYudG9VSW50MzIoKSwgdWludCgweDQzMjExMjM0KSk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgMS4wKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVtYmVy
KCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2lu
ZSgpLCAmZW5nKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigxMjM0NTY3
ODkxMC41KTsKKyAgICAgICAgUVZFUklGWSh2LmlzTnVtYmVyKCkpOworICAgICAgICBRQ09NUEFS
RSh2LnRvTnVtYmVyKCksIDEyMzQ1Njc4OTEwLjUpOworICAgIH0KKyAgICB7CisgICAgICAgIFFT
Y3JpcHRWYWx1ZSB2KCZlbmcsICJjaWFvIik7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1N0cmluZygpLCB0cnVlKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9TdHJp
bmcoKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUo
KSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgUVN0
cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Lmlz
T2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBRTGF0aW4x
U3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAg
ICB9CisgICAgLy8gY29weSBjb25zdHJ1Y3Rvciwgb3BlcmF0b3I9CisgICAgeworICAgICAgICBR
U2NyaXB0VmFsdWUgdigmZW5nLCAxLjApOworICAgICAgICBRU2NyaXB0VmFsdWUgdjIodik7Cisg
ICAgICAgIFFDT01QQVJFKHYyLnN0cmljdGx5RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUodjIuZW5naW5lKCksICZlbmcpOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSB2Myh2KTsK
KyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAgICAgICBR
Q09NUEFSRSh2My5zdHJpY3RseUVxdWFscyh2MiksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2
My5lbmdpbmUoKSwgJmVuZyk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY0KCZlbmcsIDIuMCk7
CisgICAgICAgIFFDT01QQVJFKHY0LnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAg
IHYzID0gdjQ7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7
CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmljdGx5RXF1YWxzKHY0KSwgdHJ1ZSk7CisKKyAgICAg
ICAgdjIgPSBRU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVh
bHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworCisg
ICAgICAgIFFTY3JpcHRWYWx1ZSB2NSh2KTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlF
cXVhbHModiksIHRydWUpOworICAgICAgICB2ID0gUVNjcmlwdFZhbHVlKCk7CisgICAgICAgIFFD
T01QQVJFKHY1LnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHY1
LnRvTnVtYmVyKCksIDEuMCk7CisgICAgfQorCisgICAgLy8gY29uc3RydWN0b3JzIHRoYXQgdGFr
ZSBubyBlbmdpbmUgYXJndW1lbnQKKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KFFTY3Jp
cHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwg
dHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNVbmRlZmluZWQoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2lu
ZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRW
YWx1ZSB2KFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1Zh
bGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVsbCgpLCB0cnVlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5n
aW5lKCksIChRU2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlw
dFZhbHVlIHYoZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNCb29sZWFuKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2
LmlzQm9vbCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7
CisgICAgICAgIFFDT01QQVJFKHYudG9Cb29sZWFuKCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBB
UkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAg
ICBRU2NyaXB0VmFsdWUgdihpbnQoMSkpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwg
dHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFD
T01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVtYmVy
KCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5naW5lICop
MCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYodWludCgxKSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051
bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUodi5l
bmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2Ny
aXB0VmFsdWUgdigxLjApOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYu
aXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7
CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5naW5lICopMCk7CisgICAg
fQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoImNpYW8iKTsKKyAgICAgICAgUUNPTVBB
UkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNP
TVBBUkUodi50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09N
UEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAg
ICAgIFFTY3JpcHRWYWx1ZSB2KFFTdHJpbmcoImNpYW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYu
aXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1N0cmluZygpLCB0cnVlKTsK
KyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJF
KHYudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUo
di5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgLy8gY29weSBjb25z
dHJ1Y3Rvciwgb3BlcmF0b3I9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigxLjApOwor
ICAgICAgICBRU2NyaXB0VmFsdWUgdjIodik7CisgICAgICAgIFFDT01QQVJFKHYyLnN0cmljdGx5
RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjIuZW5naW5lKCksIChRU2NyaXB0
RW5naW5lICopMCk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYzKHYpOworICAgICAgICBRQ09N
UEFSRSh2My5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLnN0
cmljdGx5RXF1YWxzKHYyKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLmVuZ2luZSgpLCAo
UVNjcmlwdEVuZ2luZSAqKTApOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSB2NCgyLjApOworICAg
ICAgICBRQ09NUEFSRSh2NC5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAgICAgICB2MyA9
IHY0OworICAgICAgICBRQ09NUEFSRSh2My5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAg
ICAgICBRQ09NUEFSRSh2My5zdHJpY3RseUVxdWFscyh2NCksIHRydWUpOworCisgICAgICAgIHYy
ID0gUVNjcmlwdFZhbHVlKCk7CisgICAgICAgIFFDT01QQVJFKHYyLnN0cmljdGx5RXF1YWxzKHYp
LCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKworICAgICAg
ICBRU2NyaXB0VmFsdWUgdjUodik7CisgICAgICAgIFFDT01QQVJFKHY1LnN0cmljdGx5RXF1YWxz
KHYpLCB0cnVlKTsKKyAgICAgICAgdiA9IFFTY3JpcHRWYWx1ZSgpOworICAgICAgICBRQ09NUEFS
RSh2NS5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2NS50b051
bWJlcigpLCAxLjApOworICAgIH0KKworICAgIC8vIDAgZW5naW5lCisgICAgUVZFUklGWShRU2Ny
aXB0VmFsdWUoMCwgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSkuaXNVbmRlZmluZWQoKSk7
CisgICAgUVZFUklGWShRU2NyaXB0VmFsdWUoMCwgUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpLmlz
TnVsbCgpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCBmYWxzZSkuaXNCb29sKCkpOwor
ICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIGludCgxKSkuaXNOdW1iZXIoKSk7CisgICAgUVZF
UklGWShRU2NyaXB0VmFsdWUoMCwgdWludCgxKSkuaXNOdW1iZXIoKSk7CisgICAgUVZFUklGWShR
U2NyaXB0VmFsdWUoMCwgMS4wKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1
ZSgwLCAiY2lhbyIpLmlzU3RyaW5nKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIFFT
dHJpbmcoImNpYW8iKSkuaXNTdHJpbmcoKSk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6
dG9TdHJpbmdfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigiY29kZSIp
OworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oInJlc3VsdCIpOworCisgICAgUVRlc3Q6
Om5ld1Jvdygic3RyaW5nIikgPDwgIidoZWxsbyciIDw8ICJoZWxsbyI7CisgICAgUVRlc3Q6Om5l
d1Jvdygic3RyaW5nIHV0ZiIpIDw8ICInxIXFm8SHxbzFusOzxYLFhMSZJyIgPDwgIsSFxZvEh8W8
xbrDs8WCxYTEmSI7CisgICAgUVRlc3Q6Om5ld1JvdygiZXhwcmVzc2lvbiIpIDw8ICIxICsgNCIg
PDwgIjUiOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwiKSA8PCAibnVsbCIgPDwgIm51bGwiOwor
ICAgIFFUZXN0OjpuZXdSb3coImJvb2xlYW4iKSA8PCAiZmFsc2UiIDw8ICJmYWxzZSI7CisgICAg
UVRlc3Q6Om5ld1JvdygidW5kZWZpbmVkIikgPDwgInVuZGVmaW5lZCIgPDwgInVuZGVmaW5lZCI7
CisgICAgUVRlc3Q6Om5ld1Jvdygib2JqZWN0IikgPDwgIm5ldyBPYmplY3QiIDw8ICJbb2JqZWN0
IE9iamVjdF0iOworfQorCisvKiBUZXN0IGNvbnZlcnNpb24gdG8gc3RyaW5nIGZyb20gZGlmZmVy
ZW50IEpTQyB0eXBlcyAqLwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZygpCit7Cisg
ICAgUUZFVENIKFFTdHJpbmcsIGNvZGUpOworICAgIFFGRVRDSChRU3RyaW5nLCByZXN1bHQpOwor
CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUUNPTVBBUkUoZW5naW5lLmV2YWx1YXRl
KGNvZGUpLnRvU3RyaW5nKCksIHJlc3VsdCk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6
Y29weUNvbnN0cnVjdG9yX2RhdGEoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAg
IFFTY3JpcHRWYWx1ZSBubnVtYmVyKDEyMyk7CisgICAgUVNjcmlwdFZhbHVlIG5zdHJpbmcoInBp
bmciKTsKKyAgICBRU2NyaXB0VmFsdWUgbnVtYmVyKGVuZ2luZS5ldmFsdWF0ZSgiMSIpKTsKKyAg
ICBRU2NyaXB0VmFsdWUgc3RyaW5nKGVuZ2luZS5ldmFsdWF0ZSgiJ2ZvbyciKSk7CisgICAgUVNj
cmlwdFZhbHVlIG9iamVjdChlbmdpbmUuZXZhbHVhdGUoIm5ldyBPYmplY3QiKSk7CisgICAgUVNj
cmlwdFZhbHVlIHVuZGVmaW5lZChlbmdpbmUuZXZhbHVhdGUoInVuZGVmaW5lZCIpKTsKKyAgICBR
U2NyaXB0VmFsdWUgbnVsbChlbmdpbmUuZXZhbHVhdGUoIm51bGwiKSk7CisKKyAgICBRVGVzdDo6
YWRkQ29sdW1uPFFTY3JpcHRWYWx1ZT4oInZhbHVlIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxR
U3RyaW5nPigicmVzdWx0Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJuYXRpdmUgbnVtYmVyIikg
PDwgbm51bWJlciA8PCBRU3RyaW5nOjpudW1iZXIoMTIzKTsKKyAgICBRVGVzdDo6bmV3Um93KCJu
YXRpdmUgc3RyaW5nIikgPDwgbnN0cmluZyA8PCBRU3RyaW5nKCJwaW5nIik7CisgICAgUVRlc3Q6
Om5ld1JvdygibnVtYmVyIikgPDwgbnVtYmVyIDw8ICIxIjsKKyAgICBRVGVzdDo6bmV3Um93KCJz
dHJpbmciKSA8PCBzdHJpbmcgPDwgImZvbyI7CisgICAgUVRlc3Q6Om5ld1Jvdygib2JqZWN0Iikg
PDwgb2JqZWN0IDw8ICJbb2JqZWN0IE9iamVjdF0iOworICAgIFFUZXN0OjpuZXdSb3coInVuZGVm
aW5lZCIpIDw8IHVuZGVmaW5lZCA8PCAidW5kZWZpbmVkIjsKKyAgICBRVGVzdDo6bmV3Um93KCJu
dWxsIikgPDwgbnVsbCA8PCAibnVsbCI7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y29w
eUNvbnN0cnVjdG9yKCkKK3sKKyAgICBRRkVUQ0goUVNjcmlwdFZhbHVlLCB2YWx1ZSk7CisgICAg
UUZFVENIKFFTdHJpbmcsIHJlc3VsdCk7CisKKyAgICBRVkVSSUZZKHZhbHVlLmlzVmFsaWQoKSk7
CisgICAgUVNjcmlwdFZhbHVlIHRtcCh2YWx1ZSk7CisgICAgUVZFUklGWSh0bXAuaXNWYWxpZCgp
KTsKKyAgICBRQ09NUEFSRSh0bXAudG9TdHJpbmcoKSwgcmVzdWx0KTsKK30KKwordm9pZCB0c3Rf
UVNjcmlwdFZhbHVlOjphc3NpZ25PcGVyYXRvcl9kYXRhKCkKK3sKKyAgICBjb3B5Q29uc3RydWN0
b3JfZGF0YSgpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yKCkK
K3sKKyAgICBRRkVUQ0goUVNjcmlwdFZhbHVlLCB2YWx1ZSk7CisgICAgUUZFVENIKFFTdHJpbmcs
IHJlc3VsdCk7CisKKyAgICBRU2NyaXB0VmFsdWUgdG1wOworICAgIHRtcCA9IHZhbHVlOworICAg
IFFWRVJJRlkodG1wLmlzVmFsaWQoKSk7CisgICAgUUNPTVBBUkUodG1wLnRvU3RyaW5nKCksIHJl
c3VsdCk7Cit9CisKKy8qIFRlc3QgaW50ZXJuYWwgZGF0YSBzaGFyaW5nIGJldHdlZW4gYSBkaWZm
cmVuZXQgUVNjcmlwdFZhbHVlLiAqLwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpkYXRhU2hhcmlu
ZygpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIHYxOwor
ICAgIFFTY3JpcHRWYWx1ZSB2Mih2MSk7CisKKyAgICB2MSA9IGVuZ2luZS5ldmFsdWF0ZSgiMSIp
OyAvLyB2MSA9PSAxIDsgdjIgaW52YWxpZC4KKyAgICBRVkVSSUZZKHYxLmlzVmFsaWQoKSk7Cisg
ICAgUVZFUklGWSghdjIuaXNWYWxpZCgpKTsKKworICAgIHYyID0gdjE7IC8vIHYxID09IDE7IHYy
ID09IDEuCisgICAgUVZFUklGWSh2MS5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkodjIuaXNWYWxp
ZCgpKTsKKworICAgIHYxID0gZW5naW5lLmV2YWx1YXRlKCJvYmogPSBuZXcgRGF0ZSIpOyAvLyB2
MSA9PSBbb2JqZWN0IERhdGVdIDsgdjIgPT0gMS4KKyAgICBRVkVSSUZZKHYxLmlzVmFsaWQoKSk7
CisgICAgUVZFUklGWSh2Mi5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkodjIudG9TdHJpbmcoKSAh
PSB2MS50b1N0cmluZygpKTsKKworICAgIC8vIFRPRE8gYWRkIG9iamVjdCBtYW5pcHVsYXRpb24g
KHYxIGFuZCB2MiBwb2ludCB0byB0aGUgc2FtZSBvYmplY3QpLgorfQorCit2b2lkIHRzdF9RU2Ny
aXB0VmFsdWU6OmNvbnN0cnVjdG9yc19kYXRhKCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2lu
ZTsKKworICAgIFFUZXN0OjphZGRDb2x1bW48UVNjcmlwdFZhbHVlPigidmFsdWUiKTsKKyAgICBR
VGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJzdHJpbmciKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1u
PGJvb2w+KCJ2YWxpZCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oIm9iamVjdCIpOwor
CisgICAgUVRlc3Q6Om5ld1JvdygiaW52YWxpZCIpIDw8IFFTY3JpcHRWYWx1ZSgpIDw8IFFTdHJp
bmcoKSA8PCBmYWxzZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJudW1iZXIiKSA8PCBR
U2NyaXB0VmFsdWUoLTIxKSA8PCBRU3RyaW5nOjpudW1iZXIoLTIxKSA8PCB0cnVlIDw8IGZhbHNl
OworICAgIFFUZXN0OjpuZXdSb3coImJvb2wiKSA8PCBRU2NyaXB0VmFsdWUodHJ1ZSkgPDwgUVN0
cmluZygidHJ1ZSIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygiZG91Ymxl
IikgPDwgUVNjcmlwdFZhbHVlKDIxLjEyKSA8PCBRU3RyaW5nOjpudW1iZXIoMjEuMTIpIDw8IHRy
dWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygic3RyaW5nIikgPDwgUVNjcmlwdFZhbHVl
KCJBbGFNYUtvdGEiKSA8PCBRU3RyaW5nKCJBbGFNYUtvdGEiKSA8PCB0cnVlIDw8IGZhbHNlOwor
ICAgIFFUZXN0OjpuZXdSb3coIm9iamVjdCIpIDw8IGVuZ2luZS5ldmFsdWF0ZSgibmV3IE9iamVj
dCIpIDw8IFFTdHJpbmcoIltvYmplY3QgT2JqZWN0XSIpIDw8IHRydWUgPDwgdHJ1ZTsKKyAgICBR
VGVzdDo6bmV3Um93KCJudWxsIikgPDwgUVNjcmlwdFZhbHVlKFFTY3JpcHRWYWx1ZTo6TnVsbFZh
bHVlKTw8IFFTdHJpbmcoIm51bGwiKSA8PCB0cnVlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdS
b3coInVuZGVmIikgPDwgUVNjcmlwdFZhbHVlKFFTY3JpcHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWUp
PDwgUVN0cmluZygidW5kZWZpbmVkIikgPDwgdHJ1ZSA8PCBmYWxzZTsKK30KKwordm9pZCB0c3Rf
UVNjcmlwdFZhbHVlOjpjb25zdHJ1Y3RvcnMoKQoreworICAgIFFGRVRDSChRU2NyaXB0VmFsdWUs
IHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywgc3RyaW5nKTsKKyAgICBRRkVUQ0goYm9vbCwg
dmFsaWQpOworICAgIFFGRVRDSChib29sLCBvYmplY3QpOworCisgICAgUUNPTVBBUkUodmFsdWUu
aXNWYWxpZCgpLCB2YWxpZCk7CisgICAgUUNPTVBBUkUodmFsdWUudG9TdHJpbmcoKSwgc3RyaW5n
KTsKKyAgICBRQ09NUEFSRSh2YWx1ZS5pc09iamVjdCgpLCBvYmplY3QpOworfQorCit2b2lkIHRz
dF9RU2NyaXB0VmFsdWU6OmNhbGwoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAg
IFFTY3JpcHRWYWx1ZSBwaW5nID0gZW5naW5lLmV2YWx1YXRlKCIoIGZ1bmN0aW9uKCkge3JldHVy
biAncGluZyc7fSApIik7CisgICAgUVNjcmlwdFZhbHVlIGluY3IgPSBlbmdpbmUuZXZhbHVhdGUo
IiggZnVuY3Rpb24oaSkge3JldHVybiBpICsgMTt9ICkiKTsKKyAgICBRU2NyaXB0VmFsdWUgb25l
KDEpOworICAgIFFTY3JpcHRWYWx1ZSBmaXZlKDUpOworICAgIFFTY3JpcHRWYWx1ZSByZXN1bHQ7
CisKKyAgICBRVkVSSUZZKG9uZS5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkoZml2ZS5pc1ZhbGlk
KCkpOworCisgICAgUVZFUklGWShwaW5nLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWShwaW5nLmlz
RnVuY3Rpb24oKSk7CisgICAgcmVzdWx0ID0gcGluZy5jYWxsKCk7CisgICAgUVZFUklGWShyZXN1
bHQuaXNWYWxpZCgpKTsKKyAgICBRQ09NUEFSRShyZXN1bHQudG9TdHJpbmcoKSwgUVN0cmluZzo6
ZnJvbVV0ZjgoInBpbmciKSk7CisKKyAgICBRVkVSSUZZKGluY3IuaXNWYWxpZCgpKTsKKyAgICBR
VkVSSUZZKGluY3IuaXNGdW5jdGlvbigpKTsKKyAgICByZXN1bHQgPSBpbmNyLmNhbGwoUVNjcmlw
dFZhbHVlKCksIFFTY3JpcHRWYWx1ZUxpc3QoKSA8PCBvbmUpOworICAgIFFWRVJJRlkocmVzdWx0
LmlzVmFsaWQoKSk7CisgICAgUUNPTVBBUkUocmVzdWx0LnRvU3RyaW5nKCksIFFTdHJpbmcoIjIi
KSk7CisKKyAgICBRQ09NUEFSRShpbmNyLmNhbGwoUVNjcmlwdFZhbHVlKCksIFFTY3JpcHRWYWx1
ZUxpc3QoKSA8PCBmaXZlKS50b1N0cmluZygpLCBRU3RyaW5nKCI2IikpOworCisgICAgUVZFUklG
WShpbmNyLmNhbGwoKS5pc1ZhbGlkKCkpOyAvLyBFeGNlcHRpb24uCit9CisKK1FURVNUX01BSU4o
dHN0X1FTY3JpcHRWYWx1ZSkKKyNpbmNsdWRlICJ0c3RfcXNjcmlwdHZhbHVlLm1vYyIKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnByaSBiL0phdmFTY3JpcHRDb3Jl
L3F0L3Rlc3RzL3Rlc3RzLnByaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
ZTRiOGIxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMu
cHJpCkBAIC0wLDAgKzEsMjggQEAKK2lzRW1wdHkoT1VUUFVUX0RJUikgeworICAgIENPTkZJRyhk
ZWJ1ZywgZGVidWd8cmVsZWFzZSkgeworICAgICAgICBPVVRQVVRfRElSPSQkUFdEL1dlYktpdEJ1
aWxkL0RlYnVnCisgICAgfSBlbHNlIHsgIyBSZWxlYXNlCisgICAgICAgIE9VVFBVVF9ESVI9JCRQ
V0QvV2ViS2l0QnVpbGQvUmVsZWFzZQorICAgIH0KK30KKworCitRTUFLRV9SUEFUSERJUiA9ICQk
T1VUUFVUX0RJUi9saWIgJCRRTUFLRV9SUEFUSERJUgorUU1BS0VfTElCRElSID0gJCRPVVRQVVRf
RElSL2xpYiAkJFFNQUtFX0xJQkRJUgorbWFjOiFzdGF0aWM6Y29udGFpbnMoUVRfQ09ORklHLCBx
dF9mcmFtZXdvcmspOiFDT05GSUcod2Via2l0X25vX2ZyYW1ld29yaykgeworICAgIExJQlMgKz0g
LWZyYW1ld29yayBRdEphdmFTY3JpcHQKKyAgICBRTUFLRV9GUkFNRVdPUktQQVRIID0gJCRPVVRQ
VVRfRElSL2xpYiAkJFFNQUtFX0ZSQU1FV09SS1BBVEgKK30gZWxzZSB7CisgICAgd2luMzItKnx3
aW5jZSogeworICAgICAgICBMSUJTICs9IC1sUXRKYXZhU2NyaXB0JCR7UVRfTUFKT1JfVkVSU0lP
Tn0KKyAgICB9IGVsc2UgeworICAgICAgICBMSUJTICs9IC1sUXRKYXZhU2NyaXB0CisgICAgfQor
fQorCitDT05GSUcocmVsZWFzZSwgZGVidWd8cmVsZWFzZSkgeworICAgIERFRklORVMgKz0gTkRF
QlVHCit9CisKK0lOQ0xVREVQQVRIICs9ICQkUFdELy4uL2FwaQorCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90
ZXN0cy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1ZWRiMQotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAtMCww
ICsxLDMgQEAKK1RFTVBMQVRFID0gc3ViZGlycworU1VCRElSUyA9ICAgcXNjcmlwdGVuZ2luZSBc
CisgICAgICAgICAgICBxc2NyaXB0dmFsdWUKZGlmZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJL
aXQucHJvCmluZGV4IDliNWQyNTAuLjI5YTNhOGUgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysr
IGIvV2ViS2l0LnBybwpAQCAtMjEsNCArMjEsMTAgQEAgU1VCRElSUyArPSBcCiAKIH0KIAorYnVp
bGQtcXRzY3JpcHQgeworICAgIFNVQkRJUlMgKz0gXAorICAgICAgICBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvUXRTY3JpcHQucHJvIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMKK30K
KwogaW5jbHVkZShXZWJLaXQvcXQvZG9jcy9kb2NzLnByaSkKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGI3NmRjYjkuLjY0MTIxMzAg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDEwLTAxLTIwICBKZWRyemVqIE5vd2Fja2kgIDxqZWRyemVq
Lm5vd2Fja2lAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpcnN0IHN0ZXBzIG9mIHRoZSBRdFNjcmlwdCBBUEkuCisgICAgICAgIAor
ICAgICAgICBUd28gbmV3IGNsYXNzZXMgd2VyZSBjcmVhdGVkOyBRU2NyaXB0RW5naW5lIGFuZCBR
U2NyaXB0VmFsdWUuCisgICAgICAgIFRoZSBmaXJzdCBzaG91bGQgZW5jYXBzdWxhdGUgYSBqYXZh
c2NyaXB0IGNvbnRleHQgYW5kIHRoZSBzZWNvbmQgYSBzY3JpcHQKKyAgICAgICAgdmFsdWUuCisg
ICAgICAgIAorICAgICAgICBUaGlzIEFQSSBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudCwgc28gaXQg
aXNuJ3QgY29tcGlsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgVG8gdHJpZ2dlciBjb21waWxhdGlv
biwgcGFzcyAtLXFtYWtlYXJnPSJDT05GSUcrPWJ1aWxkLXF0c2NyaXB0IiB0bworICAgICAgICBi
dWlsZC13ZWJraXQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyNTY1CisKKyAgICAgICAgKiBkb2NzL3F0d2Via2l0LnFkb2Njb25mOgorCiAyMDEw
LTAxLTE5ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RvY3MvcXR3ZWJr
aXQucWRvY2NvbmYgYi9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZgppbmRleCA4ZWU4
ZjY5Li4yOTJjMTI0IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29u
ZgorKysgYi9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZgpAQCAtNCw3ICs0LDcgQEAg
cHJvamVjdCAgICAgPSBxdHdlYmtpdAogZGVzY3JpcHRpb24gPSAiUXQgV2ViS2l0IEFQSSBEb2N1
bWVudGF0aW9uIgogCiBoZWFkZXJkaXJzID0gJFNSQ0RJUi9XZWJLaXQvcXQvQXBpCi1zb3VyY2Vk
aXJzID0gJFNSQ0RJUi9XZWJLaXQvcXQvQXBpICRTUkNESVIvV2ViS2l0L3F0L2RvY3MKK3NvdXJj
ZWRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9BcGkgJFNSQ0RJUi9XZWJLaXQvcXQvZG9jcyAkU1JD
RElSL0phdmFTY3JpcHRDb3JlL3F0L2FwaQogb3V0cHV0ZGlyID0gJE9VVFBVVF9ESVIvZG9jL2h0
bWwKIG91dHB1dGZvcm1hdHMgPSBIVE1MCiBzb3VyY2VzLmZpbGVleHRlbnNpb25zICA9ICIqLmNw
cCAqLmRvYyAqLnFkb2MgKi5oIgo=
</data>
<flag name="review"
          id="29372"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="29373"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47112</attachid>
            <date>2010-01-21 05:43:46 -0800</date>
            <delta_ts>2010-01-26 03:20:25 -0800</delta_ts>
            <desc>First steps of QtScript v6</desc>
            <filename>initV6.diff</filename>
            <type>text/plain</type>
            <size>82087</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2YjBlMDg0Li4xZTk4ZmVh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3Qg
c3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4KKyAgICAg
ICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4dCBhbmQg
dGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxlZCBieSBk
ZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1ha2Vhcmc9
IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKworICAg
ICAgICAqIFdlYktpdC5wcm86CisKIDIwMTAtMDEtMjAgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3Iu
YXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDY5NjQzMTMuLjkyOTI2NGUgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMjYgQEAKKzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmlyc3Qgc3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3
byBuZXcgY2xhc3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1
ZS4KKyAgICAgICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29u
dGV4dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21w
aWxlZCBieSBkZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0t
cW1ha2Vhcmc9IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtp
dC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1
NjUKKworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86IEFkZGVkLgorICAgICAgICAqIHF0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0Q29udmVy
dGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmU6OlFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdEVuZ2luZTo6flFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6ZXZh
bHVhdGUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UpOgorICAgICAg
ICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2Ny
aXB0ZW5naW5lX3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpR
U2NyaXB0RW5naW5lUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6flFT
Y3JpcHRFbmdpbmVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpldmFs
dWF0ZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oOiBBZGRlZC4KKyAgICAg
ICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZVBy
aXZhdGU6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpt
YWtlSlNWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCk6Cisg
ICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp+UVNjcmlwdFZh
bHVlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWU6OmlzQm9vbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNO
dWxsKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzRXJyb3IpOgor
ICAgICAgICAoUVNjcmlwdFZhbHVlOjppc09iamVjdCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6
OmlzRnVuY3Rpb24pOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp0b1N0cmluZyk6CisgICAgICAg
IChRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29s
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6dG9JbnRlZ2VyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9JbnQzMik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9V
SW50MTYpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6ZW5naW5lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6c3RyaWN0
bHlFcXVhbHMpOgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0dmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChRU2NyaXB0VmFsdWU6Oik6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmg6
IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6KToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2Ny
aXB0VmFsdWVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNCb29sKToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzTnVsbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1N0cmluZyk6CisgICAg
ICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWVQcml2YXRlOjppc0Vycm9yKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6Omlz
T2JqZWN0KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rpb24pOgorICAg
ICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAoUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6dG9OdW1iZXIpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9C
b29sKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcik6CisgICAgICAg
IChRU2NyaXB0VmFsdWVQcml2YXRlOjp0b0ludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVBy
aXZhdGU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvVUludDE2
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVxdWFscyk6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQ
cml2YXRlOjphc3NpZ25FbmdpbmUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y2Fs
bCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdFZhbHVlUHJpdmF0ZTo6Y29udGV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRl
Ojp2YWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpvYmplY3QpOgorICAgICAg
ICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aW5oZXJpdHMpOgorICAgICAgICAoUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6aXNKU0Jhc2VkKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVt
YmVyQmFzZWQpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCk6
CisgICAgICAgICogcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmg6IEFkZGVkLgorICAgICAgICAqIHF0
L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlwdGVuZ2luZS5wcm86IEFkZGVkLgorICAgICAgICAq
IHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjp0c3RfUVNjcmlwdEVuZ2luZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6fnRzdF9RU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RU2Ny
aXB0RW5naW5lOjppbml0KToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjbGVhbnVwKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHR2
YWx1ZS9xc2NyaXB0dmFsdWUucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxdC90ZXN0cy9xc2NyaXB0
dmFsdWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZTo6dHN0X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp+dHN0
X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjppbml0KToKKyAgICAg
ICAgKHRzdF9RU2NyaXB0VmFsdWU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZTo6Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRhKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
VmFsdWU6OmNvcHlDb25zdHJ1Y3Rvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6
OmNvcHlDb25zdHJ1Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjphc3NpZ25PcGVy
YXRvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKToKKyAgICAgICAgKHRzdF9R
U2NyaXB0VmFsdWU6OmNvbnN0cnVjdG9yc19kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFs
dWU6OmNvbnN0cnVjdG9ycyk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAg
ICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcmk6IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3Rl
c3RzLnBybzogQWRkZWQuCisKIDIwMTAtMDEtMTkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdFNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
NzExOTUyZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlw
dC5wcm8KQEAgLTAsMCArMSwzNyBAQAorVEFSR0VUICAgICA9IFF0SmF2YVNjcmlwdAorVEVNUExB
VEUgICA9IGxpYgorUVQgICAgICAgICA9IGNvcmUKKworSU5DTFVERVBBVEggKz0gJCRQV0QKKwor
Q09ORklHICs9IGJ1aWxkaW5nLWxpYnMKK0pBVkFTQ1JJUFRDT1JFX0pJVCA9IHllcworCitpc0Vt
cHR5KEpTQ19HRU5FUkFURURfU09VUkNFU19ESVIpOkpTQ19HRU5FUkFURURfU09VUkNFU19ESVIg
PSAuLi8uLi9nZW5lcmF0ZWQKK0NPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSkgeworICAgIE9C
SkVDVFNfRElSID0gb2JqL2RlYnVnCit9IGVsc2UgeyAjIFJlbGVhc2UKKyAgICBPQkpFQ1RTX0RJ
UiA9IG9iai9yZWxlYXNlCit9CisKK2luY2x1ZGUoJCRQV0QvLi4vLi4vLi4vV2ViS2l0LnByaSkK
K2luY2x1ZGUoJCRQV0QvLi4vLi4vSmF2YVNjcmlwdENvcmUucHJpKQorCitJTkNMVURFUEFUSCAr
PSAkJFBXRC8uLi8uLi9BUEkKKworU09VUkNFUyArPSAgJCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAg
XAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2luZV9wLmNwcCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKworSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9i
YWwuaCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXAorICAgICAgICAgICAg
JCRQV0QvcXNjcmlwdGVuZ2luZV9wLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVl
LmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHZhbHVlX3AuaCBcCisgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0Y29udmVydGVyX3AuaCBcCisKKworIXN0YXRpYzogREVGSU5FUyArPSBRVF9N
QUtFRExMCisKK0RFU1RESVIgPSAkJE9VVFBVVF9ESVIvbGliCisKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jM2NhNDFmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fz
Y3JpcHRjb252ZXJ0ZXJfcC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgcXNjcmlwdGNvbnZlcnRlcl9wX2gKKyNkZWZpbmUgcXNjcmlwdGNvbnZlcnRlcl9w
X2gKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxR
dENvcmUvcXN0cmluZy5oPgorCisvKgorICBcaW50ZXJuYWwKKyAgXGNsYXNzIFFTY3JpcHRDb252
ZXJ0ZXIKKyAgUVNjcmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5naW5lIGhlbHBlciBjbGFzcy4gVGhp
cyBjbGFzcydzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGNvbnZlcnQgdmFsdWVzCisgIGJldHdlZW4g
SlMgdmFsdWVzIGFuZCBRdC9DKysgdmFsdWVzLgorCisgIFRoaXMgaXMgYSBuaWNlIHdheSB0byBp
bmxpbmUgdGhlc2UgZnVuY3Rpb25zIGluIGJvdGggUVNjcmlwdFZhbHVlIGFuZCBRU2NyaXB0RW5n
aW5lLgorKi8KK2NsYXNzIFFTY3JpcHRDb252ZXJ0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBR
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IEpTU3RyaW5nUmVmIHN0cikKKyAgICB7CisgICAgICAgIHJl
dHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENo
YXJhY3RlcnNQdHIoc3RyKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cikpOworICAgIH0KKyAgICBz
dGF0aWMgSlNTdHJpbmdSZWYgdG9TdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0ci50b1V0ZjgoKS5j
b25zdERhdGEoKSk7CisgICAgfQorICAgIHN0YXRpYyBKU1N0cmluZ1JlZiB0b1N0cmluZyhjb25z
dCBjaGFyKiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoc3RyKTsKKyAgICB9Cit9OworCisjZW5kaWYgLy8gcXNjcmlwdGNvbnZlcnRlcl9w
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwLi5mMTJmNDEwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdp
bmUuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHR2
YWx1ZV9wLmgiCisKKy8qIQorICAgIENvbnN0cnVjdHMgYSBRU2NyaXB0RW5naW5lIG9iamVjdC4K
KworICAgIFRoZSBnbG9iYWxPYmplY3QoKSBpcyBpbml0aWFsaXplZCB0byBoYXZlIHByb3BlcnRp
ZXMgYXMgZGVzY3JpYmVkIGluIEVDTUEtMjYyLCBTZWN0aW9uIDE1LjEuCisqLworUVNjcmlwdEVu
Z2luZTo6UVNjcmlwdEVuZ2luZSgpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdEVuZ2luZVByaXZh
dGUodGhpcykpCit7Cit9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoaXMgUVNjcmlwdEVuZ2luZS4K
KyovCitRU2NyaXB0RW5naW5lOjp+UVNjcmlwdEVuZ2luZSgpCit7Cit9CisKKy8qIQorICAgIEV2
YWx1YXRlcyBcYSBwcm9ncmFtLCB1c2luZyBcYSBsaW5lTnVtYmVyIGFzIHRoZSBiYXNlIGxpbmUg
bnVtYmVyLAorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24uCisK
KyAgICBUaGUgc2NyaXB0IGNvZGUgd2lsbCBiZSBldmFsdWF0ZWQgaW4gdGhlIGN1cnJlbnQgY29u
dGV4dC4KKworICAgIFRoZSBldmFsdWF0aW9uIG9mIFxhIHByb2dyYW0gY2FuIGNhdXNlIGFuIGV4
Y2VwdGlvbiBpbiB0aGUKKyAgICBlbmdpbmU7IGluIHRoaXMgY2FzZSB0aGUgcmV0dXJuIHZhbHVl
IHdpbGwgYmUgdGhlIGV4Y2VwdGlvbgorICAgIHRoYXQgd2FzIHRocm93biAodHlwaWNhbGx5IGFu
IFxje0Vycm9yfSBvYmplY3QpLiBZb3UgY2FuIGNhbGwKKyAgICBoYXNVbmNhdWdodEV4Y2VwdGlv
bigpIHRvIGRldGVybWluZSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgaW4KKyAgICB0aGUgbGFz
dCBjYWxsIHRvIGV2YWx1YXRlKCkuCisKKyAgICBcYSBsaW5lTnVtYmVyIGlzIHVzZWQgdG8gc3Bl
Y2lmeSBhIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGZvciBcYQorICAgIHByb2dyYW07IGxpbmUgbnVt
YmVyIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IHRoZSBlbmdpbmUgdGhhdCBwZXJ0YWluCisgICAg
dG8gdGhpcyBldmFsdWF0aW9uIChlLmcuIHVuY2F1Z2h0RXhjZXB0aW9uTGluZU51bWJlcigpKSB3
aWxsIGJlCisgICAgYmFzZWQgb24gdGhpcyBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIGlmIFxhIHBy
b2dyYW0gY29uc2lzdHMgb2YgdHdvCisgICAgbGluZXMgb2YgY29kZSwgYW5kIHRoZSBzdGF0ZW1l
bnQgb24gdGhlIHNlY29uZCBsaW5lIGNhdXNlcyBhIHNjcmlwdAorICAgIGV4Y2VwdGlvbiwgdW5j
YXVnaHRFeGNlcHRpb25MaW5lTnVtYmVyKCkgd291bGQgcmV0dXJuIHRoZSBnaXZlbiBcYQorICAg
IGxpbmVOdW1iZXIgcGx1cyBvbmUuIFdoZW4gbm8gc3RhcnRpbmcgbGluZSBudW1iZXIgaXMgc3Bl
Y2lmaWVkLCBsaW5lCisgICAgbnVtYmVycyB3aWxsIGJlIDEtYmFzZWQuCisKKyAgICBcYSBmaWxl
TmFtZSBpcyB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuIEZvciBleGFtcGxlIGluIGVycm9yIG9i
amVjdHMKKyAgICB0aGUgZmlsZSBuYW1lIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgImZpbGVO
YW1lIiBwcm9wZXJ0eSBpZiBpdCdzCisgICAgcHJvdmlkZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLgor
Ki8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBw
cm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgaW50IGxpbmVOdW1iZXIpCit7CisgICAg
cmV0dXJuIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChkX3B0ci0+ZXZhbHVhdGUocHJvZ3JhbSwg
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpKTsKK30KKworLyohCisgICAgUnVucyB0aGUgZ2FyYmFnZSBj
b2xsZWN0b3IuCisKKyAgICBUaGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2lsbCBhdHRlbXB0IHRvIHJl
Y2xhaW0gbWVtb3J5IGJ5IGxvY2F0aW5nIGFuZCBkaXNwb3Npbmcgb2Ygb2JqZWN0cyB0aGF0IGFy
ZQorICAgIG5vIGxvbmdlciByZWFjaGFibGUgaW4gdGhlIHNjcmlwdCBlbnZpcm9ubWVudC4KKwor
ICAgIE5vcm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbjsgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yIHdpbGwgYXV0b21hdGljYWxseSBiZSBpbnZva2VkCisgICAgd2hlbiB0
aGUgUVNjcmlwdEVuZ2luZSBkZWNpZGVzIHRoYXQgaXQncyB3aXNlIHRvIGRvIHNvIChpLmUuIHdo
ZW4gYSBjZXJ0YWluIG51bWJlciBvZiBuZXcgb2JqZWN0cworICAgIGhhdmUgYmVlbiBjcmVhdGVk
KS4gSG93ZXZlciwgeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZXhwbGljaXRseSByZXF1
ZXN0IHRoYXQgZ2FyYmFnZQorICAgIGNvbGxlY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBhcyBz
b29uIGFzIHBvc3NpYmxlLgorKi8KK3ZvaWQgUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2Uo
KQoreworICAgIGRfcHRyLT5jb2xsZWN0R2FyYmFnZSgpOworfQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0ZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM3NjY5
MgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0
ZW5naW5lX2gKKyNkZWZpbmUgcXNjcmlwdGVuZ2luZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcW9i
amVjdC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nLmg+CisKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKK2NsYXNzIFFTY3JpcHRFbmdpbmVQ
cml2YXRlOworCisvLyBJbnRlcm5hbCB0eXBlZGVmCit0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVk
RGF0YVBvaW50ZXI8UVNjcmlwdEVuZ2luZVByaXZhdGU+IFFTY3JpcHRFbmdpbmVQdHI7CisKK2Ns
YXNzIFFTY3JpcHRFbmdpbmUKKyAgICA6IHB1YmxpYyBRT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBR
U2NyaXB0RW5naW5lKCk7CisgICAgflFTY3JpcHRFbmdpbmUoKTsKKworICAgIFFTY3JpcHRWYWx1
ZSBldmFsdWF0ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFt
ZSA9IFFTdHJpbmcoKSwgaW50IGxpbmVOdW1iZXIgPSAxKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJi
YWdlKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRl
OworCisgICAgUVNjcmlwdEVuZ2luZVB0ciBkX3B0cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41YWYwYjZkCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgi
CisKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorCisvKiEKKyAgICBDb25zdHJ1Y3RzIGEg
ZGVmYXVsdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSBvYmplY3QsIGEgbmV3IGdsb2JhbCBjb250ZXh0
IHdpbGwgYmUgY3JlYXRlZC4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0RW5naW5lUHJpdmF0
ZTo6UVNjcmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lKQorICAg
IDogcV9wdHIoY29uc3RfY2FzdDxRU2NyaXB0RW5naW5lKj4oZW5naW5lKSkKKyAgICAsIG1fY29u
dGV4dChKU0dsb2JhbENvbnRleHRDcmVhdGUoMCkpCit7Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2
YXRlOjp+UVNjcmlwdEVuZ2luZVByaXZhdGUoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVh
c2UoY29udGV4dCgpKTsKK30KKworLyohCisgICAgRXZhbHVhdGVzIHByb2dyYW0gYW5kIHJldHVy
bnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKyAgICBcaW50ZXJuYWwKKyovCitRU2Ny
aXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6ZXZhbHVhdGUoY29uc3QgUVN0
cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVyKQor
eworICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHBy
b2dyYW0pOworICAgIEpTU3RyaW5nUmVmIGZpbGUgPSBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmlu
ZyhmaWxlTmFtZSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb247CisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQoKSwgc2NyaXB0LCAvKiBHbG9iYWwgT2Jq
ZWN0ICovIDAsIGZpbGUsIGxpbmVOdW1iZXIsICZleGNlcHRpb24pOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgZXhjZXB0aW9u
KTsgLy8gcmV0dXJucyBhbiBleGNlcHRpb24KKyAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVBy
aXZhdGUodGhpcywgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
X3AuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZThjZTJiCi0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRlbmdp
bmVfcF9oCisjZGVmaW5lIHFzY3JpcHRlbmdpbmVfcF9oCisKKyNpbmNsdWRlICJxc2NyaXB0Y29u
dmVydGVyX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlw
dHZhbHVlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1
ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nLmg+CisK
K2NsYXNzIFFTY3JpcHRFbmdpbmU7CisKK2NsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlCisgICAg
ICAgIDogcHVibGljIFFTaGFyZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVNjcmlwdEVu
Z2luZVB0ciBnZXQoY29uc3QgUVNjcmlwdEVuZ2luZSogcSkgeyByZXR1cm4gcSA/IHEtPmRfcHRy
IDogUVNjcmlwdEVuZ2luZVB0cigpOyB9CisgICAgc3RhdGljIFFTY3JpcHRFbmdpbmUqIGdldChj
b25zdCBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZCkgeyByZXR1cm4gZCA/IGQtPnFfcHRyIDogMDsg
fQorCisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSopOworICAg
IH5RU2NyaXB0RW5naW5lUHJpdmF0ZSgpOworCisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZXZh
bHVhdGUoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGlu
dCBsaW5lTnVtYmVyKTsKKyAgICBpbmxpbmUgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworCisgICAg
aW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoZG91YmxlIG51bWJlcikgY29uc3Q7CisgICAg
aW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoaW50IG51bWJlcikgY29uc3Q7CisgICAgaW5s
aW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUodWludCBudW1iZXIpIGNvbnN0OworICAgIGlubGlu
ZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3Q7Cisg
ICAgaW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoYm9vbCBudW1iZXIpIGNvbnN0OworICAg
IGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVl
IHZhbHVlKSBjb25zdDsKKworICAgIGlubGluZSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCgp
IGNvbnN0OworcHJpdmF0ZToKKyAgICBRU2NyaXB0RW5naW5lKiBxX3B0cjsKKyAgICBKU0dsb2Jh
bENvbnRleHRSZWYgbV9jb250ZXh0OworfTsKKwordm9pZCBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIEpTR2FyYmFnZUNvbGxlY3QoY29udGV4dCgpKTsKK30K
KworSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoZG91YmxlIG51
bWJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCgpLCBu
dW1iZXIpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1
ZShpbnQgbnVtYmVyKSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0KCksIG51bWJlcik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1h
a2VKU1ZhbHVlKHVpbnQgbnVtYmVyKSBjb25zdAoreworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51
bWJlcihjb250ZXh0KCksIG51bWJlcik7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVBy
aXZhdGU6Om1ha2VKU1ZhbHVlKGNvbnN0IFFTdHJpbmcmIHN0cmluZykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCgpLCBRU2NyaXB0Q29udmVydGVyOjp0b1N0
cmluZyhzdHJpbmcpKTsKK30KKworSlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFr
ZUpTVmFsdWUoYm9vbCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29s
ZWFuKGNvbnRleHQoKSwgdmFsdWUpOworfQorCitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2
YXRlOjptYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3QK
K3sKKyAgICBpZiAodmFsdWUgPT0gUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCgpKTsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmIFFTY3JpcHRFbmdp
bmVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0OworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Y3ZGVhMwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuY3BwCkBAIC0wLDAgKzEsNTUzIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0
dmFsdWUuaCIKKworI2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0
ZW5naW5lX3AuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9xZGVidWcuaD4KKworLyohCisgICAgQ29uc3RydWN0cyBhbiBpbnZhbGlkIHZhbHVlLgorKi8K
K1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKCkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKCkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1
ZSB3aXRoIGEgYm9vbGVhbiBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1
ZShib29sIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUp
KQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIG51
bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShpbnQgdmFsdWUp
CisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8q
IQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVl
LgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKHVpbnQgdmFsdWUpCisgICAgOiBkX3B0
cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1
Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgbnVtYmVyIFxhIHZhbHVlLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKHFzcmVhbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2Ny
aXB0VmFsdWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcg
UVNjcmlwdFZhbHVlIHdpdGggYSBzdHJpbmcgXGEgdmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpR
U2NyaXB0VmFsdWUoY29uc3QgUVN0cmluZyYgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlw
dFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFT
Y3JpcHRWYWx1ZSB3aXRoIGEgc3BlY2lhbCBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFT
Y3JpcHRWYWx1ZShTcGVjaWFsVmFsdWUgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZh
bHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3Jp
cHRWYWx1ZSB3aXRoIGEgc3RyaW5nIFxhIHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlw
dFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVBy
aXZhdGUoUVN0cmluZzo6ZnJvbVV0ZjgodmFsdWUpKSkKK3sKK30KKworLyohCisgICAgQmxvY2sg
YXV0b21hdGljIGNvbnZlcnRpb24gdG8gYm9vbAorICAgIFxpbnRlcm5hbAorKi8KK1FTY3JpcHRW
YWx1ZTo6UVNjcmlwdFZhbHVlKHZvaWQqIGQpCit7CisgICAgUV9BU1NFUlQoZmFsc2UpOworfQor
CisvKiEKKyAgICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSBmcm9tIHByaXZhdGUKKyAg
ICBcaW50ZXJuYWwKKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0VmFsdWVQ
cml2YXRlKiBkKQorICAgIDogZF9wdHIoZCkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisg
IENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIGJvb2xlYW4gXGEgdmFsdWUg
YW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgYm9vbCB2YWx1ZSkK
KyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgdmFsdWUpKQorewor
fQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUg
d2l0aCB0aGUgaW50ZWdlciBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNj
cmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVu
Z2luZSogZW5naW5lLCBpbnQgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0
cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIHVuc2lnbmVkIGludGVnZXIgXGEgdmFs
dWUgYW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorICovCitR
U2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdpbmUsIHVpbnQgdmFs
dWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkK
K3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZh
bHVlIHdpdGggdGhlIHFzcmVhbCBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhl
IHNjcmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlw
dEVuZ2luZSogZW5naW5lLCBxc3JlYWwgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZh
bHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisg
IENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIHN0cmluZyBcYSB2YWx1ZSBh
bmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBRU3RyaW5n
JiB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgdmFs
dWUpKQoreworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2Ny
aXB0VmFsdWUgd2l0aCB0aGUgc3RyaW5nIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0
aCB0aGUgc2NyaXB0IFxhIGVuZ2luZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShR
U2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHZhbHVlKQorICAgIDogZF9wdHIobmV3
IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCBRU3RyaW5nOjpmcm9tVXRmOCh2YWx1ZSkpKQor
eworfQorCisvKiEKKyAgXG9ic29sZXRlCisKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFs
dWUgd2l0aCB0aGUgc3BlY2lhbCBcYSB2YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhl
IHNjcmlwdCBcYSBlbmdpbmUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlw
dEVuZ2luZSogZW5naW5lLCBTcGVjaWFsVmFsdWUgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNj
cmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisgIENvbnN0cnVj
dHMgYSBuZXcgUVNjcmlwdFZhbHVlIHRoYXQgaXMgYSBjb3B5IG9mIFxhIG90aGVyLgorCisgIE5v
dGUgdGhhdCBpZiBcYSBvdGhlciBpcyBhbiBvYmplY3QgKGkuZS4sIGlzT2JqZWN0KCkgd291bGQg
cmV0dXJuCisgIHRydWUpLCB0aGVuIG9ubHkgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcg
b2JqZWN0IGlzIGNvcGllZCBpbnRvCisgIHRoZSBuZXcgc2NyaXB0IHZhbHVlIChpLmUuLCB0aGUg
b2JqZWN0IGl0c2VsZiBpcyBub3QgY29waWVkKS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRW
YWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKQorICAgIDogZF9wdHIob3RoZXIuZF9wdHIp
Cit7Cit9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoaXMgUVNjcmlwdFZhbHVlLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6flFTY3JpcHRWYWx1ZSgpCit7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYg
dGhpcyBRU2NyaXB0VmFsdWUgaXMgdmFsaWQ7IG90aGVyd2lzZSByZXR1cm5zCisgIGZhbHNlLgor
Ki8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9w
dHItPmlzVmFsaWQoKTsKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRW
YWx1ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgQm9vbGVhbjsKKyAgb3RoZXJ3aXNlIHJldHVy
bnMgZmFsc2UuCisKKyAgXHNhIHRvQm9vbCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzQm9v
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc0Jvb2woKTsKK30KKworLyohCisgIFxv
YnNvbGV0ZQorCisgIFVzZSBpc0Jvb2woKSBpbnN0ZWFkLgorICBSZXR1cm5zIHRydWUgaWYgdGhp
cyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIEJvb2xlYW47CisgIG90aGVy
d2lzZSByZXR1cm5zIGZhbHNlLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Jvb2xlYW4oKSBj
b25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNCb29sKCk7Cit9CisKKy8qIQorICBSZXR1cm5z
IHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bWJl
cjsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIHRvTnVtYmVyKCkKKyovCiti
b29sIFFTY3JpcHRWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+
aXNOdW1iZXIoKTsKK30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1
ZSBpcyBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgTnVsbDsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFs
c2UuCisKKyAgXHNhIFFTY3JpcHRFbmdpbmU6Om51bGxWYWx1ZSgpCisqLworYm9vbCBRU2NyaXB0
VmFsdWU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc051bGwoKTsKK30K
KworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBvZiB0aGUgcHJp
bWl0aXZlIHR5cGUgU3RyaW5nOworICBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKworICBcc2Eg
dG9TdHJpbmcoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRfcHRyLT5pc1N0cmluZygpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlm
IHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmltaXRpdmUgdHlwZSBVbmRlZmluZWQ7Cisg
IG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSBRU2NyaXB0RW5naW5lOjp1bmRlZmlu
ZWRWYWx1ZSgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZF9wdHItPmlzVW5kZWZpbmVkKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0IG9mIHRoZSBFcnJvciBjbGFzczsK
KyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIFFTY3JpcHRDb250ZXh0Ojp0aHJv
d0Vycm9yKCkKKyovCitib29sIFFTY3JpcHRWYWx1ZTo6aXNFcnJvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRfcHRyLT5pc0Vycm9yKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhp
cyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIE9iamVjdCB0eXBlOyBvdGhlcndpc2UKKyAgcmV0dXJu
cyBmYWxzZS4KKworICBOb3RlIHRoYXQgZnVuY3Rpb24gdmFsdWVzLCB2YXJpYW50IHZhbHVlcywg
YW5kIFFPYmplY3QgdmFsdWVzIGFyZQorICBvYmplY3RzLCBzbyB0aGlzIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZSBmb3Igc3VjaCB2YWx1ZXMuCisKKyAgXHNhIHRvT2JqZWN0KCksIFFTY3JpcHRFbmdp
bmU6Om5ld09iamVjdCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzT2JqZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZF9wdHItPmlzT2JqZWN0KCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYSBmdW5jdGlvbjsgb3RoZXJ3aXNlIHJldHVybnMK
KyAgZmFsc2UuCisKKyAgXHNhIGNhbGwoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Z1bmN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzRnVuY3Rpb24oKTsKK30KKworLyoh
CisgIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1ZSwgYXMgZGVm
aW5lZCBpbgorICBcbHtFQ01BLTI2Mn0gc2VjdGlvbiA5LjgsICJUb1N0cmluZyIuCisKKyAgTm90
ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlwdCBlbmdpbmUsIHNpbmNlIHRo
ZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB0b1N0cmluZygpIGZ1bmN0aW9uIChh
bmQgcG9zc2libHkgdmFsdWVPZigpKSBpbiBhbgorICBhdHRlbXB0IHRvIGNvbnZlcnQgdGhlIG9i
amVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkKKyAgcmVzdWx0aW5nIGluIGFuIHVu
Y2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSBpc1N0cmluZygpCisqLworUVN0cmlu
ZyBRU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRv
U3RyaW5nKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBudW1iZXIgdmFsdWUgb2YgdGhpcyBR
U2NyaXB0VmFsdWUsIGFzIGRlZmluZWQgaW4KKyAgXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS4zLCAi
VG9OdW1iZXIiLgorCisgIE5vdGUgdGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmpl
Y3QsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3Jp
cHQgZW5naW5lLCBzaW5jZSB0aGUgZW5naW5lIHdpbGwgY2FsbAorICB0aGUgb2JqZWN0J3MgdmFs
dWVPZigpIGZ1bmN0aW9uIChhbmQgcG9zc2libHkgdG9TdHJpbmcoKSkgaW4gYW4KKyAgYXR0ZW1w
dCB0byBjb252ZXJ0IHRoZSBvYmplY3QgdG8gYSBwcmltaXRpdmUgdmFsdWUgKHBvc3NpYmx5Cisg
IHJlc3VsdGluZyBpbiBhbiB1bmNhdWdodCBzY3JpcHQgZXhjZXB0aW9uKS4KKworICBcc2EgaXNO
dW1iZXIoKSwgdG9JbnRlZ2VyKCksIHRvSW50MzIoKSwgdG9VSW50MzIoKSwgdG9VSW50MTYoKQor
Ki8KK3FzcmVhbCBRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZF9wdHItPnRvTnVtYmVyKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBib29sZWFuIHZhbHVl
IG9mIHRoaXMgUVNjcmlwdFZhbHVlLCB1c2luZyB0aGUgY29udmVyc2lvbgorICBydWxlcyBkZXNj
cmliZWQgaW4gXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS4yLCAiVG9Cb29sZWFuIi4KKworICBOb3Rl
IHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24KKyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhl
IGVuZ2luZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5k
IHBvc3NpYmx5IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2Jq
ZWN0IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5j
YXVnaHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIGlzQm9vbCgpCisqLworYm9vbCBRU2Ny
aXB0VmFsdWU6OnRvQm9vbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0Jvb2woKTsK
K30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIFVzZSB0b0Jvb2woKSBpbnN0ZWFkLgorKi8KK2Jv
b2wgUVNjcmlwdFZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+
dG9Cb29sKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMg
UVNjcmlwdFZhbHVlLCB1c2luZyB0aGUgY29udmVyc2lvbgorICBydWxlcyBkZXNjcmliZWQgaW4g
XGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS40LCAiVG9JbnRlZ2VyIi4KKworICBOb3RlIHRoYXQgaWYg
dGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAg
aGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3
aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5
IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEg
cHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2Ny
aXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIHRvTnVtYmVyKCkKKyovCitxc3JlYWwgUVNjcmlwdFZh
bHVlOjp0b0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9JbnRlZ2VyKCk7
Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBzaWduZWQgMzItYml0IGludGVnZXIgdmFsdWUgb2Yg
dGhpcyBRU2NyaXB0VmFsdWUsIHVzaW5nCisgIHRoZSBjb252ZXJzaW9uIHJ1bGVzIGRlc2NyaWJl
ZCBpbiBcbHtFQ01BLTI2Mn0gc2VjdGlvbiA5LjUsICJUb0ludDMyIi4KKworICBOb3RlIHRoYXQg
aWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24K
KyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2lu
ZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3Np
Ymx5IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRv
IGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQg
c2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIHRvTnVtYmVyKCksIHRvVUludDMyKCkKKyovCitx
aW50MzIgUVNjcmlwdFZhbHVlOjp0b0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHIt
PnRvSW50MzIoKTsKK30KKworLyohCisgIFJldHVybnMgdGhlIHVuc2lnbmVkIDMyLWJpdCBpbnRl
Z2VyIHZhbHVlIG9mIHRoaXMgUVNjcmlwdFZhbHVlLCB1c2luZworICB0aGUgY29udmVyc2lvbiBy
dWxlcyBkZXNjcmliZWQgaW4gXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS42LCAiVG9VaW50MzIiLgor
CisgIE5vdGUgdGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBhbiBvYmplY3QsIGNhbGxpbmcg
dGhpcyBmdW5jdGlvbgorICBoYXMgc2lkZSBlZmZlY3RzIG9uIHRoZSBzY3JpcHQgZW5naW5lLCBz
aW5jZSB0aGUgZW5naW5lIHdpbGwgY2FsbAorICB0aGUgb2JqZWN0J3MgdmFsdWVPZigpIGZ1bmN0
aW9uIChhbmQgcG9zc2libHkgdG9TdHJpbmcoKSkgaW4gYW4KKyAgYXR0ZW1wdCB0byBjb252ZXJ0
IHRoZSBvYmplY3QgdG8gYSBwcmltaXRpdmUgdmFsdWUgKHBvc3NpYmx5CisgIHJlc3VsdGluZyBp
biBhbiB1bmNhdWdodCBzY3JpcHQgZXhjZXB0aW9uKS4KKworICBcc2EgdG9OdW1iZXIoKSwgdG9J
bnQzMigpCisqLworcXVpbnQzMiBRU2NyaXB0VmFsdWU6OnRvVUludDMyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZF9wdHItPnRvVUludDMyKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSB1bnNp
Z25lZCAxNi1iaXQgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1ZSwgdXNpbmcKKyAg
dGhlIGNvbnZlcnNpb24gcnVsZXMgZGVzY3JpYmVkIGluIFxse0VDTUEtMjYyfSBzZWN0aW9uIDku
NywgIlRvVWludDE2Ii4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4g
b2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUg
c2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdz
IHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0
dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEgcHJpbWl0aXZlIHZhbHVlIChwb3NzaWJs
eQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNh
IHRvTnVtYmVyKCkKKyovCitxdWludDE2IFFTY3JpcHRWYWx1ZTo6dG9VSW50MTYoKSBjb25zdAor
eworICAgIHJldHVybiBkX3B0ci0+dG9VSW50MTYoKTsKK30KKworLyohCisgIENhbGxzIHRoaXMg
UVNjcmlwdFZhbHVlIGFzIGEgZnVuY3Rpb24sIHVzaW5nIFxhIHRoaXNPYmplY3QgYXMKKyAgdGhl
IGB0aGlzJyBvYmplY3QgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBwYXNzaW5nIFxhIGFyZ3MK
KyAgYXMgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbi4gUmV0dXJucyB0aGUgdmFsdWUgcmV0dXJu
ZWQgZnJvbQorICB0aGUgZnVuY3Rpb24uCisKKyAgSWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgbm90
IGEgZnVuY3Rpb24sIGNhbGwoKSBkb2VzIG5vdGhpbmcKKyAgYW5kIHJldHVybnMgYW4gaW52YWxp
ZCBRU2NyaXB0VmFsdWUuCisKKyAgTm90ZSB0aGF0IGlmIFxhIHRoaXNPYmplY3QgaXMgbm90IGFu
IG9iamVjdCwgdGhlIGdsb2JhbCBvYmplY3QKKyAgKHNlZSBcbHtRU2NyaXB0RW5naW5lOjpnbG9i
YWxPYmplY3QoKX0pIHdpbGwgYmUgdXNlZCBhcyB0aGUKKyAgYHRoaXMnIG9iamVjdC4KKworICBD
YWxsaW5nIGNhbGwoKSBjYW4gY2F1c2UgYW4gZXhjZXB0aW9uIHRvIG9jY3VyIGluIHRoZSBzY3Jp
cHQgZW5naW5lOworICBpbiB0aGF0IGNhc2UsIGNhbGwoKSByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0
IHdhcyB0aHJvd24gKHR5cGljYWxseSBhbgorICBcY3tFcnJvcn0gb2JqZWN0KS4gWW91IGNhbiBj
YWxsCisgIFFTY3JpcHRFbmdpbmU6Omhhc1VuY2F1Z2h0RXhjZXB0aW9uKCkgdG8gZGV0ZXJtaW5l
IGlmIGFuIGV4Y2VwdGlvbgorICBvY2N1cnJlZC4KKworICBcc25pcHBldCBkb2Mvc3JjL3NuaXBw
ZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0dmFsdWUuY3BwIDIKKworICBcc2EgY29uc3RydWN0
KCkKKyovCitRU2NyaXB0VmFsdWUgUVNjcmlwdFZhbHVlOjpjYWxsKGNvbnN0IFFTY3JpcHRWYWx1
ZSYgdGhpc09iamVjdCwgY29uc3QgUVNjcmlwdFZhbHVlTGlzdCYgYXJncykKK3sKKyAgICByZXR1
cm4gZF9wdHItPmNhbGwodGhpc09iamVjdC5kX3B0ci5kYXRhKCksIGFyZ3MpOworfQorCisvKiEK
KyAgUmV0dXJucyB0aGUgUVNjcmlwdEVuZ2luZSB0aGF0IGNyZWF0ZWQgdGhpcyBRU2NyaXB0VmFs
dWUsCisgIG9yIDAgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgaW52YWxpZCBvciB0aGUgdmFsdWUg
aXMgbm90CisgIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZW5naW5lLgorKi8KK1FTY3Jp
cHRFbmdpbmUqIFFTY3JpcHRWYWx1ZTo6ZW5naW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNj
cmlwdEVuZ2luZVByaXZhdGU6OmdldChkX3B0ci0+ZW5naW5lKCkpOworfQorCisvKiEKKyAgQXNz
aWducyB0aGUgXGEgb3RoZXIgdmFsdWUgdG8gdGhpcyBRU2NyaXB0VmFsdWUuCisKKyAgTm90ZSB0
aGF0IGlmIFxhIG90aGVyIGlzIGFuIG9iamVjdCAoaXNPYmplY3QoKSByZXR1cm5zIHRydWUpLAor
ICBvbmx5IGEgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdCB3aWxsIGJlIGFzc2ln
bmVkOworICB0aGUgb2JqZWN0IGl0c2VsZiB3aWxsIG5vdCBiZSBjb3BpZWQuCisqLworUVNjcmlw
dFZhbHVlJiBRU2NyaXB0VmFsdWU6Om9wZXJhdG9yPShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVy
KQoreworICAgIGRfcHRyID0gb3RoZXIuZF9wdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCisv
KiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGVxdWFsIHRvIFxhIG90
aGVyLCBvdGhlcndpc2UKKyAgcmV0dXJucyBmYWxzZS4gVGhlIGNvbXBhcmlzb24gZm9sbG93cyB0
aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluCisgIFxse0VDTUEtMjYyfSBzZWN0aW9uIDExLjkuMywg
IlRoZSBBYnN0cmFjdCBFcXVhbGl0eSBDb21wYXJpc29uCisgIEFsZ29yaXRobSIuCisKKyAgVGhp
cyBmdW5jdGlvbiBjYW4gcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgdHlwZSBvZiB0aGlzIFFTY3Jp
cHRWYWx1ZQorICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgXGEgb3RoZXIgdmFs
dWU7IGkuZS4gdGhlCisgIGNvbXBhcmlzb24gaXMgbm90IHN0cmljdC4gIEZvciBleGFtcGxlLCBj
b21wYXJpbmcgdGhlIG51bWJlciA5IHRvCisgIHRoZSBzdHJpbmcgIjkiIHJldHVybnMgdHJ1ZTsg
Y29tcGFyaW5nIGFuIHVuZGVmaW5lZCB2YWx1ZSB0byBhIG51bGwKKyAgdmFsdWUgcmV0dXJucyB0
cnVlOyBjb21wYXJpbmcgYSBcY3tOdW1iZXJ9IG9iamVjdCB3aG9zZSBwcmltaXRpdmUKKyAgdmFs
dWUgaXMgNiB0byBhIFxje1N0cmluZ30gb2JqZWN0IHdob3NlIHByaW1pdGl2ZSB2YWx1ZSBpcyAi
NiIKKyAgcmV0dXJucyB0cnVlOyBhbmQgY29tcGFyaW5nIHRoZSBudW1iZXIgMSB0byB0aGUgYm9v
bGVhbiB2YWx1ZQorICBcY3t0cnVlfSByZXR1cm5zIHRydWUuIElmIHlvdSB3YW50IHRvIHBlcmZv
cm0gYSBjb21wYXJpc29uCisgIHdpdGhvdXQgc3VjaCBpbXBsaWNpdCB2YWx1ZSBjb252ZXJzaW9u
LCB1c2Ugc3RyaWN0bHlFcXVhbHMoKS4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFs
dWUgb3IgdGhlIFxhIG90aGVyIHZhbHVlIGFyZSBvYmplY3RzLAorICBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24gaGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UKKyAgdGhl
IGVuZ2luZSB3aWxsIGNhbGwgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBv
c3NpYmx5CisgIHRvU3RyaW5nKCkpIGluIGFuIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0
IHRvIGEgcHJpbWl0aXZlIHZhbHVlCisgIChwb3NzaWJseSByZXN1bHRpbmcgaW4gYW4gdW5jYXVn
aHQgc2NyaXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIHN0cmljdGx5RXF1YWxzKCksIGxlc3NUaGFu
KCkKKyovCitib29sIFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyID09IG90aGVyLmRfcHRyIHx8IGRfcHRyLT5l
cXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7Cit9CisKKy8qIQorICBSZXR1
cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgZXF1YWwgdG8gXGEgb3RoZXIgdXNpbmcg
c3RyaWN0CisgIGNvbXBhcmlzb24gKG5vIGNvbnZlcnNpb24pLCBvdGhlcndpc2UgcmV0dXJucyBm
YWxzZS4gVGhlIGNvbXBhcmlzb24KKyAgZm9sbG93cyB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGlu
IFxse0VDTUEtMjYyfSBzZWN0aW9uIDExLjkuNiwgIlRoZQorICBTdHJpY3QgRXF1YWxpdHkgQ29t
cGFyaXNvbiBBbGdvcml0aG0iLgorCisgIElmIHRoZSB0eXBlIG9mIHRoaXMgUVNjcmlwdFZhbHVl
IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB0eXBlIG9mIHRoZQorICBcYSBvdGhlciB2YWx1ZSwgdGhp
cyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBJZiB0aGUgdHlwZXMgYXJlIGVxdWFsLAorICB0aGUg
cmVzdWx0IGRlcGVuZHMgb24gdGhlIHR5cGUsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgdGFi
bGU6CisKKyAgICBcdGFibGUKKyAgICBcaGVhZGVyIFxvIFR5cGUgXG8gUmVzdWx0CisgICAgXHJv
dyAgICBcbyBVbmRlZmluZWQgIFxvIHRydWUKKyAgICBccm93ICAgIFxvIE51bGwgICAgICAgXG8g
dHJ1ZQorICAgIFxyb3cgICAgXG8gQm9vbGVhbiAgICBcbyB0cnVlIGlmIGJvdGggdmFsdWVzIGFy
ZSB0cnVlLCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIE51bWJlciAgICAgXG8gZmFs
c2UgaWYgZWl0aGVyIHZhbHVlIGlzIE5hTiAoTm90LWEtTnVtYmVyKTsgdHJ1ZSBpZiB2YWx1ZXMg
YXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIFN0cmluZyAgICAgXG8g
dHJ1ZSBpZiBib3RoIHZhbHVlcyBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFy
YWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIE9iamVjdCAgICAgXG8gdHJ1
ZSBpZiBib3RoIHZhbHVlcyByZWZlciB0byB0aGUgc2FtZSBvYmplY3QsIGZhbHNlIG90aGVyd2lz
ZQorICAgIFxlbmR0YWJsZQorCisgIFxzYSBlcXVhbHMoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVl
OjpzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBkX3B0ciA9PSBvdGhlci5kX3B0ciB8fCBkX3B0ci0+c3RyaWN0bHlFcXVhbHMoUVNj
cmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7Cit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dHZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ1YWVkMwotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuaApAQCAt
MCwwICsxLDk5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHR2YWx1ZV9o
CisjZGVmaW5lIHFzY3JpcHR2YWx1ZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcWxpc3QuaD4KKyNp
bmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdEVuZ2luZTsKK2Ns
YXNzIFFTY3JpcHRWYWx1ZVByaXZhdGU7CisKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKK3R5cGVkZWYg
UUxpc3Q8UVNjcmlwdFZhbHVlPiBRU2NyaXB0VmFsdWVMaXN0OworCit0eXBlZGVmIGRvdWJsZSBx
c3JlYWw7CisKK2NsYXNzIFFTY3JpcHRWYWx1ZSB7CitwdWJsaWM6ICAgIAorICAgIGVudW0gU3Bl
Y2lhbFZhbHVlIHsKKyAgICAgICAgTnVsbFZhbHVlLAorICAgICAgICBVbmRlZmluZWRWYWx1ZQor
ICAgIH07CisKKyAgICBRU2NyaXB0VmFsdWUoKTsKKyAgICBRU2NyaXB0VmFsdWUoYm9vbCB2YWx1
ZSk7CisgICAgUVNjcmlwdFZhbHVlKGludCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKHVpbnQg
dmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShxc3JlYWwgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1
ZShjb25zdCBRU3RyaW5nJiB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKGNvbnN0IGNoYXIqIHZh
bHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoU3BlY2lhbFZhbHVlIHZhbHVlKTsKKyAgICBRU2NyaXB0
VmFsdWUoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcik7CisKKyAgICBRU2NyaXB0VmFsdWUoUVNj
cmlwdEVuZ2luZSogZW5naW5lLCBib29sIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlw
dEVuZ2luZSogZW5naW5lLCBpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5n
aW5lKiBlbmdpbmUsIHVpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5l
KiBlbmdpbmUsIHFzcmVhbCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUq
IGVuZ2luZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0
RW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNj
cmlwdEVuZ2luZSogZW5naW5lLCBTcGVjaWFsVmFsdWUgdmFsdWUpOworCisgICAgflFTY3JpcHRW
YWx1ZSgpOworCisgICAgUVNjcmlwdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFZhbHVl
JiBvdGhlcik7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikgY29u
c3Q7CisgICAgYm9vbCBzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBj
b25zdDsKKworICAgIFFTY3JpcHRFbmdpbmUqIGVuZ2luZSgpIGNvbnN0OworCisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBpc0Jvb2woKSBjb25zdDsKKyAgICBib29sIGlzQm9v
bGVhbigpIGNvbnN0OworICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKKyAgICBib29sIGlzRnVu
Y3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNTdHJp
bmcoKSBjb25zdDsKKyAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CisgICAgYm9vbCBpc09i
amVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNFcnJvcigpIGNvbnN0OworCisgICAgUVN0cmluZyB0
b1N0cmluZygpIGNvbnN0OworICAgIHFzcmVhbCB0b051bWJlcigpIGNvbnN0OworICAgIGJvb2wg
dG9Cb29sKCkgY29uc3Q7CisgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAgICBxc3JlYWwg
dG9JbnRlZ2VyKCkgY29uc3Q7CisgICAgcWludDMyIHRvSW50MzIoKSBjb25zdDsKKyAgICBxdWlu
dDMyIHRvVUludDMyKCkgY29uc3Q7CisgICAgcXVpbnQxNiB0b1VJbnQxNigpIGNvbnN0OworCisg
ICAgUVNjcmlwdFZhbHVlIGNhbGwoY29uc3QgUVNjcmlwdFZhbHVlJiB0aGlzT2JqZWN0ID0gUVNj
cmlwdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVNjcmlwdFZhbHVlTGlz
dCYgYXJncyA9IFFTY3JpcHRWYWx1ZUxpc3QoKSk7CisKK3ByaXZhdGU6CisgICAgUVNjcmlwdFZh
bHVlKHZvaWQqKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlUHJpdmF0ZSopOworCisg
ICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFsdWVQcml2YXRlPiBkX3B0
cjsKKworICAgIGZyaWVuZCBjbGFzcyBRU2NyaXB0VmFsdWVQcml2YXRlOworfTsKKworI2VuZGlm
IC8vIHFzY3JpcHR2YWx1ZV9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNj
cmlwdHZhbHVlX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVfcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhOWJmOTUKLS0tIC9kZXYvbnVsbAor
KysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlX3AuaApAQCAtMCwwICsxLDcx
OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0dmFsdWVfcF9oCisjZGVm
aW5lIHFzY3JpcHR2YWx1ZV9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgor
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxRdENvcmUv
cXNoYXJlZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdEVuZ2luZTsKK2NsYXNzIFFTY3JpcHRWYWx1
ZTsKKworLyoKKyAgXGludGVybmFsCisgIFxjbGFzcyBRU2NyaXB0VmFsdWVQcml2YXRlCisKKyAg
SW1wbGVtZW50YXRpb24gb2YgUVNjcmlwdFZhbHVlLgorICBUaGUgaW1wbGVtZW50YXRpb24gaXMg
YmFzZWQgb24gYSBzdGF0ZSBtYWNoaW5lLiBUaGUgc3RhdGVzIG5hbWVzIGFyZSBpbmNsdWRlZCBp
bgorICBRU2NyaXB0VmFsdWVQcml2YXRlOjpTdGF0ZXMuIEVhY2ggbWV0aG9kIHNob3VsZCBjaGVj
ayBmb3IgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZW4gcGVyZm9ybSBhCisgIGNvcnJlY3QgYWN0
aW9uLgorCisgIFN0YXRlczoKKyAgICBJbnZhbGlkIC0+IFFTVlAgaXMgaW52YWxpZCwgbm8gYXNz
dW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYWJvdXQgY2xhc3MgbWVtYmVycyAoYXBhcnQgZnJvbSBt
X3ZhbHVlKS4KKyAgICBDU3RyaW5nIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9tIFFTdHJpbmcgb3Ig
Y29uc3QgY2hhciogYW5kIG5vIEpTQyBlbmdpbmUgaGFzIGJlZW4gYXNzb2NpYXRlZCB5ZXQuCisg
ICAgICAgIEN1cnJlbnQgdmFsdWUgaXMga2VwdCBpbiBtX3N0cmluZywKKyAgICBDTnVtYmVyIC0+
IFFTVlAgaXMgY3JlYXRlZCBmcm9tIGludCwgdWludCwgZG91YmxlLi4uIGFuZCBubyBKU0MgZW5n
aW5lIGhhcyBiZWVuIGJpbmQgeWV0LiBDdXJyZW50CisgICAgICAgIHZhbHVlIGlzIGtlcHQgaW4g
bV9udW1iZXIKKyAgICBDQm9vbCAtPiBRU1ZQIGlzIGNyZWF0ZWQgZnJvbSBib29sIGFuZCBubyBK
U0MgZW5naW5lIGhhcyBiZWVuIGFzc29jaWF0ZWQgeWV0LiBDdXJyZW50IHZhbHVlIGlzIGtlcHQK
KyAgICAgICAgaW4gbV9udW1iZXIKKyAgICBDU3BlY2lhbCAtPiBRU1ZQIGlzIFVuZGVmaW5lZCBv
ciBOdWxsLCBidXQgYSBKU0MgZW5naW5lIGhhc24ndCBiZWVuIGFzc29jaWF0ZWQgeWV0LCBjdXJy
ZW50IHZhbHVlCisgICAgICAgIGlzIGtlcHQgaW4gbV9udW1iZXIgKGNhc3Qgb2YgUVNjcmlwdFZh
bHVlOjpTcGVjaWFsVmFsdWUpCisgICAgSlNWYWx1ZSAtPiBRU1ZQIGlzIGFzc29jaWF0ZWQgd2l0
aCBlbmdpbmUsIGJ1dCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhYm91dCByZWFsIHR5cGUsIHRo
ZSBzdGF0ZQorICAgICAgICBoYXZlIHJlYWxseSBzaG9ydCBsaXZlIGN5Y2xlLiBOb3JtYWxseSBp
dCBpcyBjcmVhdGVkIGFzIGEgZnVuY3Rpb24gY2FsbCByZXN1bHQuCisgICAgSlNOYXRpdmUgLT4g
UVNWUCBpcyBhc3NvY2lhdGVkIHdpdGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlz
bid0IGEgSmF2YVNjcmlwdCBvYmplY3QuCisgICAgSlNPYmplY3QgLT4gUVNWUCBpcyBhc3NvY2lh
dGVkIHdpdGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlzIGEgSmF2YVNjcmlwdCBv
YmplY3QuCisKKyAgRWFjaCBzdGF0ZSBrZWVwIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8g
aW52b2tlIGFsbCBtZXRob2RzLCBpZiBub3QgaXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8KKyAgYSBw
cm9wZXIgc3RhdGUuIENoYW5nZWQgc3RhdGUgc2hvdWxkbid0IGJlIHJldmVydGVkLgorKi8KKwor
Y2xhc3MgUVNjcmlwdFZhbHVlUHJpdmF0ZQorICAgIDogcHVibGljIFFTaGFyZWREYXRhIHsKK3B1
YmxpYzoKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGdldChjb25zdCBR
U2NyaXB0VmFsdWUmIHEpOworICAgIGlubGluZSBzdGF0aWMgUVNjcmlwdFZhbHVlIGdldChjb25z
dCBRU2NyaXB0VmFsdWVQcml2YXRlKiBkKTsKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1
ZSBnZXQoUVNjcmlwdFZhbHVlUHJpdmF0ZSogZCk7CisKKyAgICBpbmxpbmUgflFTY3JpcHRWYWx1
ZVByaXZhdGUoKTsKKworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKCk7CisgICAgaW5s
aW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoUVN0cmluZyBzdHJpbmcpOworICAgIGlubGluZSBRU2Ny
aXB0VmFsdWVQcml2YXRlKGJvb2wgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2
YXRlKGludCBudW1iZXIpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKHVpbnQgbnVt
YmVyKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShxc3JlYWwgbnVtYmVyKTsKKyAg
ICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2
YWx1ZSk7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5n
aW5lKiBlbmdpbmUsIGJvb2wgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRl
KGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50IHZhbHVlKTsKKyAgICBpbmxpbmUgUVNj
cmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIHVpbnQgdmFsdWUp
OworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVu
Z2luZSwgcXNyZWFsIHZhbHVlKTsKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25z
dCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsKKyAgICBpbmxp
bmUgUVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUsIFFTY3Jp
cHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKTsKKworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQ
cml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUsIEpTVmFsdWVSZWYgdmFs
dWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmVQ
cml2YXRlKiBlbmdpbmUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIG9iamVjdCk7CisK
KyAgICBpbmxpbmUgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNCb29s
KCk7CisgICAgaW5saW5lIGJvb2wgaXNOdW1iZXIoKTsKKyAgICBpbmxpbmUgYm9vbCBpc051bGwo
KTsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZygpOworICAgIGlubGluZSBib29sIGlzVW5kZWZp
bmVkKCk7CisgICAgaW5saW5lIGJvb2wgaXNFcnJvcigpOworICAgIGlubGluZSBib29sIGlzT2Jq
ZWN0KCk7CisgICAgaW5saW5lIGJvb2wgaXNGdW5jdGlvbigpOworCisgICAgaW5saW5lIFFTdHJp
bmcgdG9TdHJpbmcoKTsKKyAgICBpbmxpbmUgcXNyZWFsIHRvTnVtYmVyKCkgY29uc3Q7CisgICAg
aW5saW5lIGJvb2wgdG9Cb29sKCkgY29uc3Q7CisgICAgaW5saW5lIHFzcmVhbCB0b0ludGVnZXIo
KSBjb25zdDsKKyAgICBpbmxpbmUgcWludDMyIHRvSW50MzIoKSBjb25zdDsKKyAgICBpbmxpbmUg
cXVpbnQzMiB0b1VJbnQzMigpIGNvbnN0OworICAgIGlubGluZSBxdWludDE2IHRvVUludDE2KCkg
Y29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBlcXVhbHMoUVNjcmlwdFZhbHVlUHJpdmF0ZSogb3Ro
ZXIpOworICAgIGlubGluZSBib29sIHN0cmljdGx5RXF1YWxzKGNvbnN0IFFTY3JpcHRWYWx1ZVBy
aXZhdGUqIG90aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBhc3NpZ25FbmdpbmUoUVNjcmlw
dEVuZ2luZVByaXZhdGUqIGVuZ2luZSk7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0
ZSogY2FsbChjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiAsIGNvbnN0IFFTY3JpcHRWYWx1ZUxp
c3QmIGFyZ3MpOworCisgICAgaW5saW5lIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0KCkgY29u
c3Q7CisgICAgaW5saW5lIEpTVmFsdWVSZWYgdmFsdWUoKSBjb25zdDsKKyAgICBpbmxpbmUgSlNP
YmplY3RSZWYgb2JqZWN0KCkgY29uc3Q7CisgICAgaW5saW5lIFFTY3JpcHRFbmdpbmVQcml2YXRl
KiBlbmdpbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBQbGVhc2UsIHVwZGF0ZSBjbGFz
cyBkb2N1bWVudGF0aW9uIHdoZW4geW91IGNoYW5nZSB0aGUgZW51bS4KKyAgICBlbnVtIFN0YXRl
cyB7CisgICAgICAgIEludmFsaWQgPSAwLAorICAgICAgICBDU3RyaW5nID0gMHgxMDAwLAorICAg
ICAgICBDTnVtYmVyLAorICAgICAgICBDQm9vbCwKKyAgICAgICAgQ1NwZWNpYWwsCisgICAgICAg
IEpTVmFsdWUgPSAweDIwMDAsIC8vIEpTIHZhbHVlcyBhcmUgZXF1YWwgb3IgaGlnaGVyIHRoZW4g
dGhpcyB2YWx1ZS4KKyAgICAgICAgSlNOYXRpdmUsCisgICAgICAgIEpTT2JqZWN0CisgICAgfSBt
X3N0YXRlOworICAgIFFTY3JpcHRFbmdpbmVQdHIgbV9lbmdpbmU7CisgICAgUVN0cmluZyBtX3N0
cmluZzsKKyAgICBxc3JlYWwgbV9udW1iZXI7CisgICAgSlNWYWx1ZVJlZiBtX3ZhbHVlOworICAg
IEpTT2JqZWN0UmVmIG1fb2JqZWN0OworCisgICAgaW5saW5lIHZvaWQgc2V0VmFsdWUoSlNWYWx1
ZVJlZik7CisKKyAgICBpbmxpbmUgYm9vbCBpbmhlcml0cyhjb25zdCBjaGFyKik7CisKKyAgICBp
bmxpbmUgYm9vbCBpc0pTQmFzZWQoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc051bWJlckJh
c2VkKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNTdHJpbmdCYXNlZCgpIGNvbnN0OworfTsK
KworUVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGNvbnN0IFFT
Y3JpcHRWYWx1ZSYgcSkgeyByZXR1cm4gcS5kX3B0ci5kYXRhKCk7IH0KKworUVNjcmlwdFZhbHVl
IFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiBkKQor
eworICAgIHJldHVybiBRU2NyaXB0VmFsdWUoY29uc3RfY2FzdDxRU2NyaXB0VmFsdWVQcml2YXRl
Kj4oZCkpOworfQorCitRU2NyaXB0VmFsdWUgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KFFTY3Jp
cHRWYWx1ZVByaXZhdGUqIGQpCit7CisgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZShkKTsKK30KKwor
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6flFTY3JpcHRWYWx1ZVByaXZhdGUoKQoreworICAgIGlmICht
X3ZhbHVlKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7Cit9
CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoKQorICAgIDogbV9z
dGF0ZShJbnZhbGlkKQorICAgICwgbV92YWx1ZSgwKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKFFTdHJpbmcgc3RyaW5nKQorICAgIDogbV9zdGF0ZShD
U3RyaW5nKQorICAgICwgbV9zdHJpbmcoc3RyaW5nKQorICAgICwgbV92YWx1ZSgwKQoreworfQor
CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGJvb2wgdmFsdWUpCisg
ICAgOiBtX3N0YXRlKENCb29sKQorICAgICwgbV9udW1iZXIodmFsdWUpCisgICAgLCBtX3ZhbHVl
KDApCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoaW50
IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAsIG1fbnVtYmVyKG51bWJlcikK
KyAgICAsIG1fdmFsdWUoMCkKK3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZh
bHVlUHJpdmF0ZSh1aW50IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAsIG1f
bnVtYmVyKG51bWJlcikKKyAgICAsIG1fdmFsdWUoMCkKK3sKK30KKworUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShxc3JlYWwgbnVtYmVyKQorICAgIDogbV9zdGF0ZShD
TnVtYmVyKQorICAgICwgbV9udW1iZXIobnVtYmVyKQorICAgICwgbV92YWx1ZSgwKQoreworfQor
CitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKFFTY3JpcHRWYWx1ZTo6
U3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogbV9zdGF0ZShDU3BlY2lhbCkKKyAgICAsIG1fbnVt
YmVyKHZhbHVlKQorICAgICwgbV92YWx1ZSgwKQoreworfQorCitRU2NyaXB0VmFsdWVQcml2YXRl
OjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgYm9vbCB2
YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0RW5n
aW5lUHJpdmF0ZTo6Z2V0KGVuZ2luZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAg
Ly8gc2xvd2VyIHBhdGggcmVpbml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ0Jvb2w7
CisgICAgICAgIG1fbnVtYmVyID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fdmFsdWUgPSBtX2VuZ2luZS0+bWFrZUpTVmFsdWUodmFsdWUpOwor
ICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0KCksIG1fdmFsdWUpOworICAgIH0KK30KKwor
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5n
aW5lKiBlbmdpbmUsIGludCB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNOYXRpdmUpCisgICAgLCBt
X2VuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGVuZ2luZSkpCit7CisgICAgaWYgKCFl
bmdpbmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBhdGggcmVpbml0aWFsaXphdGlvbgorICAgICAg
ICBtX3N0YXRlID0gQ051bWJlcjsKKyAgICAgICAgbV9udW1iZXIgPSB2YWx1ZTsKKyAgICAgICAg
bV92YWx1ZSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5t
YWtlSlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQoKSwgbV92
YWx1ZSk7CisgICAgfQorfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2
YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgdWludCB2YWx1ZSkKKyAgICA6IG1fc3Rh
dGUoSlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGVu
Z2luZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBhdGggcmVp
bml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ051bWJlcjsKKyAgICAgICAgbV9udW1i
ZXIgPSB2YWx1ZTsKKyAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV92YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVQ
cm90ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7CisgICAgfQorfQorCitRU2NyaXB0VmFsdWVQcml2
YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgcXNy
ZWFsIHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKKyAgICAsIG1fZW5naW5lKFFTY3Jp
cHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAg
ICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBD
TnVtYmVyOworICAgICAgICBtX251bWJlciA9IHZhbHVlOworICAgICAgICBtX3ZhbHVlID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVlKHZh
bHVlKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgpLCBtX3ZhbHVlKTsKKyAgICB9
Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNj
cmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKKyAgICA6IG1fc3RhdGUo
SlNOYXRpdmUpCisgICAgLCBtX2VuZ2luZShRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGVuZ2lu
ZSkpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBhdGggcmVpbml0
aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ1N0cmluZzsKKyAgICAgICAgbV9zdHJpbmcg
PSB2YWx1ZTsKKyAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92
YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVQcm90
ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7CisgICAgfQorfQorCitRU2NyaXB0VmFsdWVQcml2YXRl
OjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgUVNjcmlw
dFZhbHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpCisgICAgOiBtX3N0YXRlKEpTTmF0aXZlKQorICAg
ICwgbV9lbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChlbmdpbmUpKQoreworICAgIGlm
ICghZW5naW5lKSB7CisgICAgICAgIC8vIHNsb3dlciBwYXRoIHJlaW5pdGlhbGl6YXRpb24KKyAg
ICAgICAgbV9zdGF0ZSA9IENTcGVjaWFsOworICAgICAgICBtX251bWJlciA9IHZhbHVlOworICAg
ICAgICBtX3ZhbHVlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3ZhbHVlID0gbV9lbmdp
bmUtPm1ha2VKU1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgp
LCBtX3ZhbHVlKTsKKyAgICB9Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1
ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2
YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNWYWx1ZSkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8
UVNjcmlwdEVuZ2luZVByaXZhdGUqPihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sK
KyAgICBRX0FTU0VSVChlbmdpbmUpOworICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQoKSwgbV92
YWx1ZSk7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29u
c3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmpl
Y3RSZWYgb2JqZWN0KQorICAgIDogbV9zdGF0ZShKU09iamVjdCkKKyAgICAsIG1fZW5naW5lKGNv
bnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUqPihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICAsIG1fb2JqZWN0KG9iamVjdCkKK3sKKyAgICBRX0FTU0VSVChlbmdpbmUpOwor
ICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7Cit9CisKK2Jvb2wgUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gSW52YWxp
ZDsgfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzQm9vbCgpCit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBDQm9vbDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQoKSwgdmFsdWUoKSk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0
VmFsdWVQcml2YXRlOjppc051bWJlcigpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBDTnVtYmVyOgorICAgICAgICByZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBKU1ZhbHVl
OgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgICAgIHJldHVy
biBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzTnVsbCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBDU3BlY2lhbDoK
KyAgICAgICAgcmV0dXJuIG1fbnVtYmVyID09IHN0YXRpY19jYXN0PGludD4oUVNjcmlwdFZhbHVl
OjpOdWxsVmFsdWUpOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAg
ICBjYXNlIEpTTmF0aXZlOgorICAgICAgICByZXR1cm4gSlNWYWx1ZUlzTnVsbChjb250ZXh0KCks
IHZhbHVlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNTdHJpbmcoKQoreworICAgIHN3aXRjaCAo
bV9zdGF0ZSkgeworICAgIGNhc2UgQ1N0cmluZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRW
YWx1ZVByaXZhdGU6OmlzVW5kZWZpbmVkKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAg
ICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gc3RhdGljX2Nhc3Q8
aW50PihRU2NyaXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVlKTsKKyAgICBjYXNlIEpTVmFsdWU6Cisg
ICAgICAgIGlmIChpc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAvLyBGYWxsLXRocm91Z2guCisgICAgY2FzZSBKU05hdGl2ZToKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVJc1VuZGVmaW5lZChjb250ZXh0KCksIHZhbHVlKCkpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
aXNFcnJvcigpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgor
ICAgICAgICBpZiAoIWlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4g
aW5oZXJpdHMoIkVycm9yIik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc09iamVjdCgpCit7CisgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBtX29iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0KCksIHZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKKyAgICAgICAgaWYgKCFt
X29iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZSA9IEpT
T2JqZWN0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rp
b24oKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAg
ICAgbV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNl
cHRpb24gKi8gMCk7CisgICAgICAgIGlmICghbV9vYmplY3QpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAgICAgLy8gRmFsbC10aHJv
dWdoLgorICAgIGNhc2UgSlNPYmplY3Q6CisgICAgICAgIHJldHVybiBKU09iamVjdElzRnVuY3Rp
b24oY29udGV4dCgpLCBvYmplY3QoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworUVN0cmluZyBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b1N0cmluZygp
Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBy
ZXR1cm4gUVN0cmluZygpOworICAgIGNhc2UgQ0Jvb2w6CisgICAgICAgIHJldHVybiBtX251bWJl
ciA/IFFTdHJpbmc6OmZyb21MYXRpbjEoInRydWUiKSA6IFFTdHJpbmc6OmZyb21MYXRpbjEoImZh
bHNlIik7CisgICAgY2FzZSBDU3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmc7CisgICAg
Y2FzZSBDTnVtYmVyOgorICAgICAgICByZXR1cm4gUVN0cmluZzo6bnVtYmVyKG1fbnVtYmVyKTsK
KyAgICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gUVNjcmlwdFZh
bHVlOjpOdWxsVmFsdWUgPyBRU3RyaW5nOjpmcm9tTGF0aW4xKCJudWxsIikgOiBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJ1bmRlZmluZWQiKTsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgY2FzZSBKU05h
dGl2ZToKKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gUVNjcmlwdENvbnZlcnRl
cjo6dG9TdHJpbmcoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0KCksIHZhbHVlKCksIC8qIGV4
Y2VwdGlvbiAqLyAwKSk7CisgICAgfQorCisgICAgUV9BU1NFUlRfWChmYWxzZSwgInRvU3RyaW5n
KCkiLCAiTm90IGFsbCBzdGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcmV2aW91cyBzd2l0Y2gg
c3RhdGVtZW50LiIpOworICAgIHJldHVybiBRU3RyaW5nKCk7IC8vIEF2b2lkIGNvbXBpbGVyIHdh
cm5pbmcuCit9CisKK3FzcmVhbCBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b051bWJlcigpIGNvbnN0
Cit7CisgICAgLy8gVE9ETyBDaGVjayBpdC4KKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBj
YXNlIEpTVmFsdWU6CisgICAgY2FzZSBKU05hdGl2ZToKKyAgICBjYXNlIEpTT2JqZWN0OgorICAg
ICAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0
aW9uICovIDApOworICAgIGNhc2UgQ051bWJlcjoKKyAgICBjYXNlIENCb29sOgorICAgICAgICBy
ZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBJbnZhbGlkOgorICAgIGNhc2UgQ1NwZWNpYWw6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAgIHJldHVybiBt
X3N0cmluZy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgUV9BU1NFUlRfWChmYWxzZSwgInRvTnVt
YmVyKCkiLCAiTm90IGFsbCBzdGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcmV2aW91cyBzd2l0
Y2ggc3RhdGVtZW50LiIpOworICAgIHJldHVybiAwOyAvLyBBdm9pZCBjb21waWxlciB3YXJuaW5n
LgorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvQm9vbCgpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgIGNhc2UgSlNOYXRpdmU6
CisgICAgY2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBjYXNlIENOdW1iZXI6CisgICAgY2FzZSBDQm9vbDoKKyAg
ICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIGNhc2UgSW52YWxpZDoKKyAgICBjYXNlIENTcGVj
aWFsOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDU3RyaW5nOgorICAgICAgICBy
ZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOworICAgIH0KKworICAgIFFfQVNTRVJUX1goZmFsc2Us
ICJ0b0Jvb2woKSIsICJOb3QgYWxsIHN0YXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHByZXZpb3Vz
IHN3aXRjaCBzdGF0ZW1lbnQuIik7CisgICAgcmV0dXJuIGZhbHNlOyAvLyBBdm9pZCBjb21waWxl
ciB3YXJuaW5nLgorfQorCitxc3JlYWwgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9JbnRlZ2VyKCkg
Y29uc3QKK3sKKyAgICAvLyBUT0RPIGl0IGlzIG5vdCB0cnVlIGltcGxlbWVudGF0aW9uIQorICAg
IHJldHVybiB0b051bWJlcigpOworfQorCitxaW50MzIgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9J
bnQzMigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlv
biEKKyAgICByZXR1cm4gdG9OdW1iZXIoKTsKK30KKworcXVpbnQzMiBRU2NyaXB0VmFsdWVQcml2
YXRlOjp0b1VJbnQzMigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBs
ZW1lbnRhdGlvbiEKKyAgICByZXR1cm4gdG9OdW1iZXIoKTsKK30KKworcXVpbnQxNiBRU2NyaXB0
VmFsdWVQcml2YXRlOjp0b1VJbnQxNigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3Qg
dHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICByZXR1cm4gdG9OdW1iZXIoKTsKK30KKworCitib29s
IFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVxdWFscyhRU2NyaXB0VmFsdWVQcml2YXRlKiBvdGhlcikK
K3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhb3RoZXItPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKChtX3N0YXRlID09IG90aGVyLT5tX3N0YXRlKSAmJiAhaXNK
U0Jhc2VkKCkpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyQmFzZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX251bWJlciA9PSBvdGhlci0+bV9udW1iZXI7CisgICAgICAgIHJldHVybiBtX3N0cmlu
ZyA9PSBvdGhlci0+bV9zdHJpbmc7CisgICAgfQorCisgICAgaWYgKGlzSlNCYXNlZCgpICYmICFv
dGhlci0+aXNKU0Jhc2VkKCkpIHsKKyAgICAgICAgaWYgKCFvdGhlci0+YXNzaWduRW5naW5lKGVu
Z2luZSgpKSkgeworICAgICAgICAgICAgcVdhcm5pbmcoImVxdWFscygpOiBDYW5ub3QgY29tcGFy
ZSB0byBhIHZhbHVlIGNyZWF0ZWQgaW4gYSBkaWZmZXJlbnQgZW5naW5lIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFpc0pTQmFzZWQoKSAm
JiBvdGhlci0+aXNKU0Jhc2VkKCkpIHsKKyAgICAgICAgaWYgKCFvdGhlci0+YXNzaWduRW5naW5l
KG90aGVyLT5lbmdpbmUoKSkpIHsKKyAgICAgICAgICAgIHFXYXJuaW5nKCJlcXVhbHMoKTogQ2Fu
bm90IGNvbXBhcmUgdG8gYSB2YWx1ZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IEpTVmFsdWVJc0VxdWFsKGNvbnRleHQoKSwgdmFsdWUoKSwgb3RoZXItPnZhbHVlKCksIC8qIGV4
Y2VwdGlvbiAqLyAwKTsKK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVx
dWFscyhjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAo
bV9zdGF0ZSAhPSBvdGhlci0+bV9zdGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChpc0pTQmFzZWQoKSkgeworICAgICAgICBpZiAob3RoZXItPmVuZ2luZSgpICE9IGVuZ2luZSgp
KSB7CisgICAgICAgICAgICBxV2FybmluZygic3RyaWN0bHlFcXVhbHMoKTogQ2Fubm90IGNvbXBh
cmUgdG8gYSB2YWx1ZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNTdHJp
Y3RFcXVhbChjb250ZXh0KCksIHZhbHVlKCksIG90aGVyLT52YWx1ZSgpKTsKKyAgICB9CisgICAg
aWYgKGlzU3RyaW5nQmFzZWQoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5t
X3N0cmluZzsKKyAgICBpZiAoaXNOdW1iZXJCYXNlZCgpKQorICAgICAgICByZXR1cm4gbV9udW1i
ZXIgPT0gb3RoZXItPm1fbnVtYmVyOworCisgICAgcmV0dXJuIGZhbHNlOyAvLyBJbnZhbGlkIHN0
YXRlLgorfQorCisvKiEKKyAgVHJpZXMgdG8gYXNzaWduIFxhIGVuZ2luZSB0byB0aGlzIHZhbHVl
LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLwor
Ym9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjphc3NpZ25FbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZh
dGUqIGVuZ2luZSkKK3sKKyAgICBKU1ZhbHVlUmVmIHZhbHVlOworICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgIGNhc2UgQ0Jvb2w6CisgICAgICAgIHZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1
ZShzdGF0aWNfY2FzdDxib29sPihtX251bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTdHJpbmc6CisgICAgICAgIHZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZShtX3N0cmluZyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ051bWJlcjoKKyAgICAgICAgdmFsdWUgPSBlbmdp
bmUtPm1ha2VKU1ZhbHVlKG1fbnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU3Bl
Y2lhbDoKKyAgICAgICAgdmFsdWUgPSBlbmdpbmUtPm1ha2VKU1ZhbHVlKHN0YXRpY19jYXN0PFFT
Y3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlPihtX251bWJlcikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBpZiAoIWlzSlNCYXNlZCgpKQorICAgICAgICAgICAgUV9BU1NF
UlRfWCghaXNKU0Jhc2VkKCksICJhc3NpZ25FbmdpbmUoKSIsICJOb3QgYWxsIHN0YXRlcyBhcmUg
aW5jbHVkZWQgaW4gdGhlIHByZXZpb3VzIHN3aXRjaCBzdGF0ZW1lbnQuIik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHFXYXJuaW5nKCJKU1ZhbHVlIGNhbid0IGJlIHJhc3NpZ25lZCB0byBh
biBhbm90aGVyIGVuZ2luZS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBz
ZXRWYWx1ZSh2YWx1ZSk7CisgICAgbV9lbmdpbmUgPSBjb25zdF9jYXN0PFFTY3JpcHRFbmdpbmVQ
cml2YXRlKj4oZW5naW5lKTsKKyAgICBtX3N0YXRlID0gSlNOYXRpdmU7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmNhbGwo
Y29uc3QgUVNjcmlwdFZhbHVlUHJpdmF0ZSogLCBjb25zdCBRU2NyaXB0VmFsdWVMaXN0ICZhcmdz
KQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAg
bV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRp
b24gKi8gMCk7CisgICAgICAgIGlmICghb2JqZWN0KCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUg
PSBKU1ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlOwor
ICAgICAgICB9CisgICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAgICAgLy8gRmFsbC10
aHJvdWdoLgorICAgIGNhc2UgSlNPYmplY3Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENv
bnZlcnQgYWxsIGFyZ3VtZW50cyBhbmQgYmluZCB0byB0aGUgZW5naW5lLgorICAgICAgICAgICAg
aW50IGFyZ2MgPSBhcmdzLnNpemUoKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndlthcmdj
XTsKKyAgICAgICAgICAgIFFTY3JpcHRWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGkgPSBhcmdz
LmNvbnN0QmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBpICE9IGFyZ3MuY29u
c3RFbmQoKTsgaisrLCBpKyspIHsKKyAgICAgICAgICAgICAgICBRU2NyaXB0VmFsdWVQcml2YXRl
KiB2YWx1ZSA9IFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldCgqaSk7CisgICAgICAgICAgICAgICAg
aWYgKCF2YWx1ZS0+YXNzaWduRW5naW5lKGVuZ2luZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBxV2FybmluZygiUVNjcmlwdFZhbHVlOjpjYWxsKCkgZmFpbGVkOiBjYW5ub3QgY2FsbCBmdW5j
dGlvbiB3aXRoIHZhbHVlcyBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGFyZ3Zbal0gPSB2YWx1ZS0+dmFsdWUoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbAorICAgICAgICAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQoKSwgb2JqZWN0KCksIC8qIHRoaXNPYmplY3Qg
Ki8gMCwgYXJnYywgYXJndiwgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCAm
JiBleGNlcHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2
YXRlKGVuZ2luZSgpLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiAhZXhj
ZXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShl
bmdpbmUoKSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAvLyB0aGlzIFFTViBpcyBub3Qg
YSBmdW5jdGlvbiA8LS0gIXJlc3VsdCAmJiAhZXhjZXB0aW9uLiBGYWxsLXRocm91Z2guCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlOworICAgIH0K
K30KKworUVNjcmlwdEVuZ2luZVByaXZhdGUqIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVuZ2luZSgp
IGNvbnN0Cit7CisgICAgLy8gQXMgbG9uZyBhcyBtX2VuZ2luZSBpcyBhbiBhdXRvaW5pdGlhbGl6
YXRlZCBwb2ludGVyIHdlIGNhbiBzYWZlbHkgcmV0dXJuIGl0IHdpdGhvdXQKKyAgICAvLyBjaGVj
a2luZyBjdXJyZW50IHN0YXRlLgorICAgIHJldHVybiBtX2VuZ2luZS5kYXRhKCk7Cit9CisKK0pT
R2xvYmFsQ29udGV4dFJlZiBRU2NyaXB0VmFsdWVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QKK3sK
KyAgICBRX0FTU0VSVChpc0pTQmFzZWQoKSk7CisgICAgcmV0dXJuIG1fZW5naW5lLT5jb250ZXh0
KCk7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dmFsdWUoKSBjb25zdAor
eworICAgIFFfQVNTRVJUKGlzSlNCYXNlZCgpKTsKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKwor
SlNPYmplY3RSZWYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6b2JqZWN0KCkgY29uc3QKK3sKKyAgICBR
X0FTU0VSVChtX3N0YXRlID09IEpTT2JqZWN0KTsKKyAgICByZXR1cm4gbV9vYmplY3Q7Cit9CisK
K3ZvaWQgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6c2V0VmFsdWUoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sK
KyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0KCksIG1f
dmFsdWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgp
LCB2YWx1ZSk7CisgICAgbV92YWx1ZSA9IHZhbHVlOworfQorCisvKiEKKyAgXGludGVybmFsCisg
IFJldHVybnMgdHJ1ZSBpZiBRU1YgaXMgY3JlYXRlZCBmcm9tIGNvbnN0cnVjdG9yIHdpdGggdGhl
IGdpdmVuIFxhIG5hbWUsIGl0IGhhcyB0byBiZSBhCisgIGJ1aWx0LWluIHR5cGUuCisqLworYm9v
bCBRU2NyaXB0VmFsdWVQcml2YXRlOjppbmhlcml0cyhjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IFFfQVNTRVJUKGlzSlNCYXNlZCgpKTsKKyAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCgpKTsKKyAgICBKU1ZhbHVlUmVmIGVycm9y
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0KCksIGdsb2JhbE9iamVjdCwgUVNjcmlwdENv
bnZlcnRlcjo6dG9TdHJpbmcobmFtZSksIDApOworICAgIHJldHVybiBKU1ZhbHVlSXNJbnN0YW5j
ZU9mQ29uc3RydWN0b3IoY29udGV4dCgpLCB2YWx1ZSgpLCBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCgpLCBlcnJvciwgLyogZXhjZXB0aW9uICovIDApLCAvKiBleGNlcHRpb24gKi8gMCk7Cit9CisK
Ky8qIQorICBcaW50ZXJuYWwKKyAgUmV0dXJucyB0cnVlIGlmIFFTViBoYXZlIGFuIGVuZ2luZSBh
c3NvY2lhdGVkLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNKU0Jhc2VkKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBKU1ZhbHVlOyB9CisKKy8qIQorICBcaW50ZXJuYWwKKyAg
UmV0dXJucyB0cnVlIGlmIGN1cnJlbnQgdmFsdWUgb2YgUVNWIGlzIHBsYWNlZCBpbiBtX251bWJl
ci4KKyovCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyQmFzZWQoKSBjb25zdCB7
IHJldHVybiAhaXNKU0Jhc2VkKCkgJiYgIWlzU3RyaW5nQmFzZWQoKSAmJiBtX3N0YXRlICE9IElu
dmFsaWQ7IH0KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5zIHRydWUgaWYgY3VycmVudCB2
YWx1ZSBvZiBRU1YgaXMgcGxhY2VkIGluIG1fc3RyaW5nLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ1N0cmlu
ZzsgfQorCisjZW5kaWYgLy8gcXNjcmlwdHZhbHVlX3BfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXRz
Y3JpcHRnbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTc0OWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFs
LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxdHNjcmlw
dGdsb2JhbF9oCisjZGVmaW5lIHF0c2NyaXB0Z2xvYmFsX2gKKworI2luY2x1ZGUgPFF0Q29yZS9x
Z2xvYmFsLmg+CisKKyNpZiBkZWZpbmVkKFFfT1NfV0lOKSB8fCBkZWZpbmVkKFFfT1NfU1lNQklB
TikKKyMgIGlmIGRlZmluZWQoUVRfTk9ETEwpCisjICBlbGlmIGRlZmluZWQoUVRfTUFLRURMTCkg
ICAgICAgIC8qIGNyZWF0ZSBhIFF0IERMTCBsaWJyYXJ5ICovCisjICAgIGlmIGRlZmluZWQoUVRf
QlVJTERfSkFWQVNDUklQVF9MSUIpCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQg
UV9ERUNMX0VYUE9SVAorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBP
UlQgUV9ERUNMX0lNUE9SVAorIyAgICBlbmRpZgorIyAgZWxpZiBkZWZpbmVkKFFUX0RMTCkgLyog
dXNlIGEgUXQgRExMIGxpYnJhcnkgKi8KKyMgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBPUlQK
KyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoUVRfU0hBUkVEKQorIyAgZGVmaW5lIFFf
SkFWQVNDUklQVF9FWFBPUlQgUV9ERUNMX0VYUE9SVAorI2Vsc2UKKyMgIGRlZmluZSBRX0pBVkFT
Q1JJUFRfRVhQT1JUCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUucHJvIGIvSmF2YVNjcmlwdENv
cmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5lLnBybwpuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZGMwOTAyCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNj
cmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5lLnBybwpAQCAtMCww
ICsxLDcgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSB0c3RfcXNjcmlwdGVuZ2luZQorUVQg
Kz0gdGVzdGxpYgoraW5jbHVkZSguLi90ZXN0cy5wcmkpCisKK1NPVVJDRVMgKz0gdHN0X3FzY3Jp
cHRlbmdpbmUuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3Jp
cHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMv
cXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uYmNiZjNiYQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisj
aW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSA8UXRUZXN0L3F0ZXN0Lmg+CisKK2Ns
YXNzIHRzdF9RU2NyaXB0RW5naW5lCisgICAgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKKworcHVibGljOgorICAgIHRzdF9RU2NyaXB0RW5naW5lKCkge30KKyAgICB2aXJ0dWFsIH50
c3RfUVNjcmlwdEVuZ2luZSgpIHt9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXQoKSB7
fQorICAgIHZvaWQgY2xlYW51cCgpIHt9CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBldmFs
dWF0ZSgpOworICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKK307CisKKy8qIEV2YWx1YXRpbmcg
YSBzY3JpcHQgdGhhdCB0aHJvdyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIHNob3VsZCByZXR1cm4g
YW4gaW52YWxpZCB2YWx1ZS4gKi8KK3ZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6OmV2YWx1YXRlKCkK
K3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRVkVSSUZZMihlbmdpbmUuZXZhbHVh
dGUoIjErMSIpLmlzVmFsaWQoKSwgInRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBldmFsdWF0ZWQg
YW5kIGFuIHZhbGlkIHJlc3VsdCBzaG91bGQgYmUgcmV0dXJuZWQiKTsKKyAgICBRVkVSSUZZMihl
bmdpbmUuZXZhbHVhdGUoInBpbmciKS5pc1ZhbGlkKCksICJTY3JpcHQgdGhyb3dpbmcgYW4gdW5o
YW5kbGVkIGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIGFuIGV4Y2VwdGlvbiB2YWx1ZSIpOworfQor
CisvKiBUZXN0IGdhcmJhZ2UgY29sbGVjdGlvbiwgYXQgbGVhc3QgdHJ5IHRvIG5vdCBjcmFzaC4g
Ki8KK3ZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICBRU2Ny
aXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUgZm9vID0gZW5naW5lLmV2YWx1YXRl
KCIoIGZ1bmN0aW9uIGZvbygpIHtyZXR1cm4gJ3BvbmcnO30gKSIpOworICAgIFFWRVJJRlkoZm9v
LmlzRnVuY3Rpb24oKSk7CisgICAgZW5naW5lLmNvbGxlY3RHYXJiYWdlKCk7CisgICAgUUNPTVBB
UkUoZm9vLmNhbGwoKS50b1N0cmluZygpLCBRU3RyaW5nOjpmcm9tQXNjaWkoInBvbmciKSk7Cit9
CitRVEVTVF9NQUlOKHRzdF9RU2NyaXB0RW5naW5lKQorI2luY2x1ZGUgInRzdF9xc2NyaXB0ZW5n
aW5lLm1vYyIKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1
ZS9xc2NyaXB0dmFsdWUucHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVl
L3FzY3JpcHR2YWx1ZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNl
NWJjMwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2
YWx1ZS9xc2NyaXB0dmFsdWUucHJvCkBAIC0wLDAgKzEsNyBAQAorVEVNUExBVEUgPSBhcHAKK1RB
UkdFVCA9IHRzdF9xc2NyaXB0dmFsdWUKK1FUICs9IHRlc3RsaWIKK2luY2x1ZGUoLi4vdGVzdHMu
cHJpKQorCitTT1VSQ0VTICs9IHRzdF9xc2NyaXB0dmFsdWUuY3BwCisKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZhbHVlLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZhbHVlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2YzZmZmCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlL3RzdF9xc2NyaXB0
dmFsdWUuY3BwCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAicXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUg
PFF0VGVzdC9xdGVzdC5oPgorCitRX0RFQ0xBUkVfTUVUQVRZUEUoUVNjcmlwdFZhbHVlKik7CitR
X0RFQ0xBUkVfTUVUQVRZUEUoUVNjcmlwdFZhbHVlKTsKKworY2xhc3MgdHN0X1FTY3JpcHRWYWx1
ZQorICAgIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICB0
c3RfUVNjcmlwdFZhbHVlKCkge30KKyAgICB2aXJ0dWFsIH50c3RfUVNjcmlwdFZhbHVlKCkge30K
KworcHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpIHt9CisgICAgdm9pZCBjbGVhbnVwKCkg
e30KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHRvU3RyaW5nX2RhdGEoKTsKKyAgICB2b2lk
IHRvU3RyaW5nKCk7CisgICAgdm9pZCBjb3B5Q29uc3RydWN0b3JfZGF0YSgpOworICAgIHZvaWQg
Y29weUNvbnN0cnVjdG9yKCk7CisgICAgdm9pZCBhc3NpZ25PcGVyYXRvcl9kYXRhKCk7CisgICAg
dm9pZCBhc3NpZ25PcGVyYXRvcigpOworICAgIHZvaWQgZGF0YVNoYXJpbmcoKTsKKyAgICB2b2lk
IGNvbnN0cnVjdG9yc19kYXRhKCk7CisgICAgdm9pZCBjb25zdHJ1Y3RvcnMoKTsKKyAgICB2b2lk
IGNhbGwoKTsKKworICAgIC8vIGNvcGllZCBmcm9tIFF0J3MgUXRTY3JpcHQuCisgICAgdm9pZCBj
dG9yKCk7Cit9OworCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmN0b3IoKQoreworICAgIFFTY3Jp
cHRFbmdpbmUgZW5nOworICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY7CisgICAgICAgIFFD
T01QQVJFKHYuaXNWYWxpZCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCks
IChRU2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVl
IHYoJmVuZywgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7CisgICAgICAgIFFDT01QQVJF
KHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFD
T01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRW
YWx1ZSB2KCZlbmcsIFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICAgICAgUUNPTVBBUkUo
di5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVsbCgpLCB0cnVlKTsK
KyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJF
KHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
KCZlbmcsIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzQm9vbGVhbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c0Jvb2woKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOwor
ICAgICAgICBRQ09NUEFSRSh2LnRvQm9vbGVhbigpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJF
KHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
KCZlbmcsIGludCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAg
ICAgICAgUUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsK
KyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgUVNjcmlwdFZhbHVlIHYoaW50KDB4NDMyMTEyMzQpKTsKKyAgICAgICAgUVZFUklGWSh2Lmlz
TnVtYmVyKCkpOworICAgICAgICBRQ09NUEFSRSh2LnRvSW50MzIoKSwgMHg0MzIxMTIzNCk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgdWludCgxKSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051
bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUodi5l
bmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYodWlu
dCgweDQzMjExMjM0KSk7CisgICAgICAgIFFWRVJJRlkodi5pc051bWJlcigpKTsKKyAgICAgICAg
UUNPTVBBUkUodi50b1VJbnQzMigpLCB1aW50KDB4NDMyMTEyMzQpKTsKKyAgICB9CisgICAgewor
ICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2Lmlz
VmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7Cisg
ICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2
LnRvTnVtYmVyKCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEyMzQ1Njc4OTEwLjUpOworICAg
ICAgICBRVkVSSUZZKHYuaXNOdW1iZXIoKSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIo
KSwgMTIzNDU2Nzg5MTAuNSk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYo
JmVuZywgImNpYW8iKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Lmlz
T2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygpLCBRTGF0aW4x
U3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAg
ICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCBRU3RyaW5nKCJjaWFvIikp
OworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJF
KHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFs
c2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoImNpYW8i
KSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICAvLyBj
b3B5IGNvbnN0cnVjdG9yLCBvcGVyYXRvcj0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2
KCZlbmcsIDEuMCk7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBB
UkUodjIuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2Mi5lbmdp
bmUoKSwgJmVuZyk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYzKHYpOworICAgICAgICBRQ09N
UEFSRSh2My5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLnN0
cmljdGx5RXF1YWxzKHYyKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYzLmVuZ2luZSgpLCAm
ZW5nKTsKKworICAgICAgICBRU2NyaXB0VmFsdWUgdjQoJmVuZywgMi4wKTsKKyAgICAgICAgUUNP
TVBBUkUodjQuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgdjMgPSB2NDsKKyAg
ICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNP
TVBBUkUodjMuc3RyaWN0bHlFcXVhbHModjQpLCB0cnVlKTsKKworICAgICAgICB2MiA9IFFTY3Jp
cHRWYWx1ZSgpOworICAgICAgICBRQ09NUEFSRSh2Mi5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2Up
OworICAgICAgICBRQ09NUEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7CisKKyAgICAgICAgUVNjcmlw
dFZhbHVlIHY1KHYpOworICAgICAgICBRQ09NUEFSRSh2NS5zdHJpY3RseUVxdWFscyh2KSwgdHJ1
ZSk7CisgICAgICAgIHYgPSBRU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3Ry
aWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodjUudG9OdW1iZXIoKSwg
MS4wKTsKKyAgICB9CisKKyAgICAvLyBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG5vIGVuZ2luZSBh
cmd1bWVudAorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlwdFZhbHVlOjpVbmRl
ZmluZWRWYWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc1VuZGVmaW5lZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5p
c09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0
RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoUVNjcmlw
dFZhbHVlOjpOdWxsVmFsdWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7
CisgICAgICAgIFFDT01QQVJFKHYuaXNOdWxsKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2
LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3Jp
cHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihmYWxz
ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBB
UkUodi5pc0Jvb2xlYW4oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNCb29sKCksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNP
TVBBUkUodi50b0Jvb2xlYW4oKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgp
LCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1
ZSB2KGludCgxKSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09i
amVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAg
ICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdih1aW50KDEpKTsKKyAgICAgICAgUUNPTVBBUkUo
di5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVtYmVyKCksIHRydWUp
OworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBB
UkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNj
cmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEu
MCk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBB
UkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBm
YWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKyAgICAgICAgUUNP
TVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAg
ICAgICBRU2NyaXB0VmFsdWUgdigiY2lhbyIpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3Ry
aW5nKCksIFFMYXRpbjFTdHJpbmcoImNpYW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5l
KCksIChRU2NyaXB0RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZh
bHVlIHYoUVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzU3RyaW5nKCksIHRydWUpOworICAgICAgICBRQ09N
UEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b1N0cmluZygp
LCBRTGF0aW4xU3RyaW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAo
UVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICAvLyBjb3B5IGNvbnN0cnVjdG9yLCBvcGVy
YXRvcj0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KDEuMCk7CisgICAgICAgIFFTY3Jp
cHRWYWx1ZSB2Mih2KTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRSh2Mi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsK
KworICAgICAgICBRU2NyaXB0VmFsdWUgdjModik7CisgICAgICAgIFFDT01QQVJFKHYzLnN0cmlj
dGx5RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHMo
djIpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuZW5naW5lKCksIChRU2NyaXB0RW5naW5l
ICopMCk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY0KDIuMCk7CisgICAgICAgIFFDT01QQVJF
KHY0LnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIHYzID0gdjQ7CisgICAgICAg
IFFDT01QQVJFKHYzLnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJF
KHYzLnN0cmljdGx5RXF1YWxzKHY0KSwgdHJ1ZSk7CisKKyAgICAgICAgdjIgPSBRU2NyaXB0VmFs
dWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjIuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAg
ICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworCisgICAgICAgIFFTY3JpcHRWYWx1
ZSB2NSh2KTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlFcXVhbHModiksIHRydWUpOwor
ICAgICAgICB2ID0gUVNjcmlwdFZhbHVlKCk7CisgICAgICAgIFFDT01QQVJFKHY1LnN0cmljdGx5
RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHY1LnRvTnVtYmVyKCksIDEuMCk7
CisgICAgfQorCisgICAgLy8gMCBlbmdpbmUKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCBR
U2NyaXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVlKS5pc1VuZGVmaW5lZCgpKTsKKyAgICBRVkVSSUZZ
KFFTY3JpcHRWYWx1ZSgwLCBRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSkuaXNOdWxsKCkpOworICAg
IFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIGZhbHNlKS5pc0Jvb2woKSk7CisgICAgUVZFUklGWShR
U2NyaXB0VmFsdWUoMCwgaW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRW
YWx1ZSgwLCB1aW50KDEpKS5pc051bWJlcigpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgw
LCAxLjApLmlzTnVtYmVyKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsICJjaWFvIiku
aXNTdHJpbmcoKSk7CisgICAgUVZFUklGWShRU2NyaXB0VmFsdWUoMCwgUVN0cmluZygiY2lhbyIp
KS5pc1N0cmluZygpKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRh
KCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJjb2RlIik7CisgICAgUVRlc3Q6
OmFkZENvbHVtbjxRU3RyaW5nPigicmVzdWx0Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJp
bmciKSA8PCAiJ2hlbGxvJyIgPDwgImhlbGxvIjsKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmcg
dXRmIikgPDwgIifEhcWbxIfFvMW6w7PFgsWExJknIiA8PCAixIXFm8SHxbzFusOzxYLFhMSZIjsK
KyAgICBRVGVzdDo6bmV3Um93KCJleHByZXNzaW9uIikgPDwgIjEgKyA0IiA8PCAiNSI7CisgICAg
UVRlc3Q6Om5ld1JvdygibnVsbCIpIDw8ICJudWxsIiA8PCAibnVsbCI7CisgICAgUVRlc3Q6Om5l
d1JvdygiYm9vbGVhbiIpIDw8ICJmYWxzZSIgPDwgImZhbHNlIjsKKyAgICBRVGVzdDo6bmV3Um93
KCJ1bmRlZmluZWQiKSA8PCAidW5kZWZpbmVkIiA8PCAidW5kZWZpbmVkIjsKKyAgICBRVGVzdDo6
bmV3Um93KCJvYmplY3QiKSA8PCAibmV3IE9iamVjdCIgPDwgIltvYmplY3QgT2JqZWN0XSI7Cit9
CisKKy8qIFRlc3QgY29udmVyc2lvbiB0byBzdHJpbmcgZnJvbSBkaWZmZXJlbnQgSlNDIHR5cGVz
ICovCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkKK3sKKyAgICBRRkVUQ0goUVN0
cmluZywgY29kZSk7CisgICAgUUZFVENIKFFTdHJpbmcsIHJlc3VsdCk7CisKKyAgICBRU2NyaXB0
RW5naW5lIGVuZ2luZTsKKyAgICBRQ09NUEFSRShlbmdpbmUuZXZhbHVhdGUoY29kZSkudG9TdHJp
bmcoKSwgcmVzdWx0KTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0
b3JfZGF0YSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVl
IG5udW1iZXIoMTIzKTsKKyAgICBRU2NyaXB0VmFsdWUgbnN0cmluZygicGluZyIpOworICAgIFFT
Y3JpcHRWYWx1ZSBudW1iZXIoZW5naW5lLmV2YWx1YXRlKCIxIikpOworICAgIFFTY3JpcHRWYWx1
ZSBzdHJpbmcoZW5naW5lLmV2YWx1YXRlKCInZm9vJyIpKTsKKyAgICBRU2NyaXB0VmFsdWUgb2Jq
ZWN0KGVuZ2luZS5ldmFsdWF0ZSgibmV3IE9iamVjdCIpKTsKKyAgICBRU2NyaXB0VmFsdWUgdW5k
ZWZpbmVkKGVuZ2luZS5ldmFsdWF0ZSgidW5kZWZpbmVkIikpOworICAgIFFTY3JpcHRWYWx1ZSBu
dWxsKGVuZ2luZS5ldmFsdWF0ZSgibnVsbCIpKTsKKworICAgIFFUZXN0OjphZGRDb2x1bW48UVNj
cmlwdFZhbHVlPigidmFsdWUiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJyZXN1
bHQiKTsKKworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBudW1iZXIiKSA8PCBubnVtYmVyIDw8
IFFTdHJpbmc6Om51bWJlcigxMjMpOworICAgIFFUZXN0OjpuZXdSb3coIm5hdGl2ZSBzdHJpbmci
KSA8PCBuc3RyaW5nIDw8IFFTdHJpbmcoInBpbmciKTsKKyAgICBRVGVzdDo6bmV3Um93KCJudW1i
ZXIiKSA8PCBudW1iZXIgPDwgIjEiOworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIpIDw8IHN0
cmluZyA8PCAiZm9vIjsKKyAgICBRVGVzdDo6bmV3Um93KCJvYmplY3QiKSA8PCBvYmplY3QgPDwg
IltvYmplY3QgT2JqZWN0XSI7CisgICAgUVRlc3Q6Om5ld1JvdygidW5kZWZpbmVkIikgPDwgdW5k
ZWZpbmVkIDw8ICJ1bmRlZmluZWQiOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwiKSA8PCBudWxs
IDw8ICJudWxsIjsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb3B5Q29uc3RydWN0b3Io
KQoreworICAgIFFGRVRDSChRU2NyaXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmlu
ZywgcmVzdWx0KTsKKworICAgIFFWRVJJRlkodmFsdWUuaXNWYWxpZCgpKTsKKyAgICBRU2NyaXB0
VmFsdWUgdG1wKHZhbHVlKTsKKyAgICBRVkVSSUZZKHRtcC5pc1ZhbGlkKCkpOworICAgIFFDT01Q
QVJFKHRtcC50b1N0cmluZygpLCByZXN1bHQpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6
OmFzc2lnbk9wZXJhdG9yX2RhdGEoKQoreworICAgIGNvcHlDb25zdHJ1Y3Rvcl9kYXRhKCk7Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3IoKQoreworICAgIFFGRVRD
SChRU2NyaXB0VmFsdWUsIHZhbHVlKTsKKyAgICBRRkVUQ0goUVN0cmluZywgcmVzdWx0KTsKKwor
ICAgIFFTY3JpcHRWYWx1ZSB0bXA7CisgICAgdG1wID0gdmFsdWU7CisgICAgUVZFUklGWSh0bXAu
aXNWYWxpZCgpKTsKKyAgICBRQ09NUEFSRSh0bXAudG9TdHJpbmcoKSwgcmVzdWx0KTsKK30KKwor
LyogVGVzdCBpbnRlcm5hbCBkYXRhIHNoYXJpbmcgYmV0d2VlbiBhIGRpZmZyZW5ldCBRU2NyaXB0
VmFsdWUuICovCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKCkKK3sKKyAgICBR
U2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUgdjE7CisgICAgUVNjcmlwdFZh
bHVlIHYyKHYxKTsKKworICAgIHYxID0gZW5naW5lLmV2YWx1YXRlKCIxIik7IC8vIHYxID09IDEg
OyB2MiBpbnZhbGlkLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKCF2
Mi5pc1ZhbGlkKCkpOworCisgICAgdjIgPSB2MTsgLy8gdjEgPT0gMTsgdjIgPT0gMS4KKyAgICBR
VkVSSUZZKHYxLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi5pc1ZhbGlkKCkpOworCisgICAg
djEgPSBlbmdpbmUuZXZhbHVhdGUoIm9iaiA9IG5ldyBEYXRlIik7IC8vIHYxID09IFtvYmplY3Qg
RGF0ZV0gOyB2MiA9PSAxLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZ
KHYyLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWSh2Mi50b1N0cmluZygpICE9IHYxLnRvU3RyaW5n
KCkpOworCisgICAgLy8gVE9ETyBhZGQgb2JqZWN0IG1hbmlwdWxhdGlvbiAodjEgYW5kIHYyIHBv
aW50IHRvIHRoZSBzYW1lIG9iamVjdCkuCit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y29u
c3RydWN0b3JzX2RhdGEoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworCisgICAgUVRl
c3Q6OmFkZENvbHVtbjxRU2NyaXB0VmFsdWU+KCJ2YWx1ZSIpOworICAgIFFUZXN0OjphZGRDb2x1
bW48UVN0cmluZz4oInN0cmluZyIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oInZhbGlk
Iik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigib2JqZWN0Iik7CisKKyAgICBRVGVzdDo6
bmV3Um93KCJpbnZhbGlkIikgPDwgUVNjcmlwdFZhbHVlKCkgPDwgUVN0cmluZygpIDw8IGZhbHNl
IDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdSb3coIm51bWJlciIpIDw8IFFTY3JpcHRWYWx1ZSgt
MjEpIDw8IFFTdHJpbmc6Om51bWJlcigtMjEpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6
Om5ld1JvdygiYm9vbCIpIDw8IFFTY3JpcHRWYWx1ZSh0cnVlKSA8PCBRU3RyaW5nKCJ0cnVlIikg
PDwgdHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJkb3VibGUiKSA8PCBRU2NyaXB0
VmFsdWUoMjEuMTIpIDw8IFFTdHJpbmc6Om51bWJlcigyMS4xMikgPDwgdHJ1ZSA8PCBmYWxzZTsK
KyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmciKSA8PCBRU2NyaXB0VmFsdWUoIkFsYU1hS290YSIp
IDw8IFFTdHJpbmcoIkFsYU1hS290YSIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5l
d1Jvdygib2JqZWN0IikgPDwgZW5naW5lLmV2YWx1YXRlKCJuZXcgT2JqZWN0IikgPDwgUVN0cmlu
ZygiW29iamVjdCBPYmplY3RdIikgPDwgdHJ1ZSA8PCB0cnVlOworICAgIFFUZXN0OjpuZXdSb3co
Im51bGwiKSA8PCBRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpPDwgUVN0cmlu
ZygibnVsbCIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1JvdygidW5kZWYiKSA8
PCBRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk8PCBRU3RyaW5nKCJ1
bmRlZmluZWQiKSA8PCB0cnVlIDw8IGZhbHNlOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6
OmNvbnN0cnVjdG9ycygpCit7CisgICAgUUZFVENIKFFTY3JpcHRWYWx1ZSwgdmFsdWUpOworICAg
IFFGRVRDSChRU3RyaW5nLCBzdHJpbmcpOworICAgIFFGRVRDSChib29sLCB2YWxpZCk7CisgICAg
UUZFVENIKGJvb2wsIG9iamVjdCk7CisKKyAgICBRQ09NUEFSRSh2YWx1ZS5pc1ZhbGlkKCksIHZh
bGlkKTsKKyAgICBRQ09NUEFSRSh2YWx1ZS50b1N0cmluZygpLCBzdHJpbmcpOworICAgIFFDT01Q
QVJFKHZhbHVlLmlzT2JqZWN0KCksIG9iamVjdCk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1
ZTo6Y2FsbCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVl
IHBpbmcgPSBlbmdpbmUuZXZhbHVhdGUoIiggZnVuY3Rpb24oKSB7cmV0dXJuICdwaW5nJzt9ICki
KTsKKyAgICBRU2NyaXB0VmFsdWUgaW5jciA9IGVuZ2luZS5ldmFsdWF0ZSgiKCBmdW5jdGlvbihp
KSB7cmV0dXJuIGkgKyAxO30gKSIpOworICAgIFFTY3JpcHRWYWx1ZSBvbmUoMSk7CisgICAgUVNj
cmlwdFZhbHVlIGZpdmUoNSk7CisgICAgUVNjcmlwdFZhbHVlIHJlc3VsdDsKKworICAgIFFWRVJJ
Rlkob25lLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWShmaXZlLmlzVmFsaWQoKSk7CisKKyAgICBR
VkVSSUZZKHBpbmcuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHBpbmcuaXNGdW5jdGlvbigpKTsK
KyAgICByZXN1bHQgPSBwaW5nLmNhbGwoKTsKKyAgICBRVkVSSUZZKHJlc3VsdC5pc1ZhbGlkKCkp
OworICAgIFFDT01QQVJFKHJlc3VsdC50b1N0cmluZygpLCBRU3RyaW5nOjpmcm9tVXRmOCgicGlu
ZyIpKTsKKworICAgIFFWRVJJRlkoaW5jci5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkoaW5jci5p
c0Z1bmN0aW9uKCkpOworICAgIHJlc3VsdCA9IGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwgUVNj
cmlwdFZhbHVlTGlzdCgpIDw8IG9uZSk7CisgICAgUVZFUklGWShyZXN1bHQuaXNWYWxpZCgpKTsK
KyAgICBRQ09NUEFSRShyZXN1bHQudG9TdHJpbmcoKSwgUVN0cmluZygiMiIpKTsKKworICAgIFFD
T01QQVJFKGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwgUVNjcmlwdFZhbHVlTGlzdCgpIDw8IGZp
dmUpLnRvU3RyaW5nKCksIFFTdHJpbmcoIjYiKSk7CisKKyAgICBRVkVSSUZZKGluY3IuY2FsbCgp
LmlzVmFsaWQoKSk7IC8vIEV4Y2VwdGlvbi4KK30KKworUVRFU1RfTUFJTih0c3RfUVNjcmlwdFZh
bHVlKQorI2luY2x1ZGUgInRzdF9xc2NyaXB0dmFsdWUubW9jIgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJpIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVz
dHMucHJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGI4YjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcmkKQEAgLTAsMCAr
MSwyOCBAQAoraXNFbXB0eShPVVRQVVRfRElSKSB7CisgICAgQ09ORklHKGRlYnVnLCBkZWJ1Z3xy
ZWxlYXNlKSB7CisgICAgICAgIE9VVFBVVF9ESVI9JCRQV0QvV2ViS2l0QnVpbGQvRGVidWcKKyAg
ICB9IGVsc2UgeyAjIFJlbGVhc2UKKyAgICAgICAgT1VUUFVUX0RJUj0kJFBXRC9XZWJLaXRCdWls
ZC9SZWxlYXNlCisgICAgfQorfQorCisKK1FNQUtFX1JQQVRIRElSID0gJCRPVVRQVVRfRElSL2xp
YiAkJFFNQUtFX1JQQVRIRElSCitRTUFLRV9MSUJESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1B
S0VfTElCRElSCittYWM6IXN0YXRpYzpjb250YWlucyhRVF9DT05GSUcsIHF0X2ZyYW1ld29yayk6
IUNPTkZJRyh3ZWJraXRfbm9fZnJhbWV3b3JrKSB7CisgICAgTElCUyArPSAtZnJhbWV3b3JrIFF0
SmF2YVNjcmlwdAorICAgIFFNQUtFX0ZSQU1FV09SS1BBVEggPSAkJE9VVFBVVF9ESVIvbGliICQk
UU1BS0VfRlJBTUVXT1JLUEFUSAorfSBlbHNlIHsKKyAgICB3aW4zMi0qfHdpbmNlKiB7CisgICAg
ICAgIExJQlMgKz0gLWxRdEphdmFTY3JpcHQkJHtRVF9NQUpPUl9WRVJTSU9OfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIExJQlMgKz0gLWxRdEphdmFTY3JpcHQKKyAgICB9Cit9CisKK0NPTkZJRyhy
ZWxlYXNlLCBkZWJ1Z3xyZWxlYXNlKSB7CisgICAgREVGSU5FUyArPSBOREVCVUcKK30KKworSU5D
TFVERVBBVEggKz0gJCRQV0QvLi4vYXBpCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0
L3Rlc3RzL3Rlc3RzLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVlZGIxCi0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0wLDAgKzEsMyBAQAorVEVN
UExBVEUgPSBzdWJkaXJzCitTVUJESVJTID0gICBxc2NyaXB0ZW5naW5lIFwKKyAgICAgICAgICAg
IHFzY3JpcHR2YWx1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXgg
OWI1ZDI1MC4uMjlhM2E4ZSAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJv
CkBAIC0yMSw0ICsyMSwxMCBAQCBTVUJESVJTICs9IFwKIAogfQogCitidWlsZC1xdHNjcmlwdCB7
CisgICAgU1VCRElSUyArPSBcCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlw
dC5wcm8gXAorICAgICAgICBKYXZhU2NyaXB0Q29yZS9xdC90ZXN0cworfQorCiBpbmNsdWRlKFdl
YktpdC9xdC9kb2NzL2RvY3MucHJpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYjc2ZGNiOS4uNjQxMjEzMCAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBu
ZXcgY2xhc3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4K
KyAgICAgICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4
dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxl
ZCBieSBkZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1h
a2Vhcmc9IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUK
KworICAgICAgICAqIGRvY3MvcXR3ZWJraXQucWRvY2NvbmY6CisKIDIwMTAtMDEtMTkgIFN0ZXZl
IEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZG9jcy9xdHdlYmtpdC5xZG9jY29uZiBi
L1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCmluZGV4IDhlZThmNjkuLjI5MmMxMjQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCisrKyBiL1dlYktp
dC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mCkBAIC00LDcgKzQsNyBAQCBwcm9qZWN0ICAgICA9
IHF0d2Via2l0CiBkZXNjcmlwdGlvbiA9ICJRdCBXZWJLaXQgQVBJIERvY3VtZW50YXRpb24iCiAK
IGhlYWRlcmRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9BcGkKLXNvdXJjZWRpcnMgPSAkU1JDRElS
L1dlYktpdC9xdC9BcGkgJFNSQ0RJUi9XZWJLaXQvcXQvZG9jcworc291cmNlZGlycyA9ICRTUkNE
SVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kb2NzICRTUkNESVIvSmF2YVNjcmlw
dENvcmUvcXQvYXBpCiBvdXRwdXRkaXIgPSAkT1VUUFVUX0RJUi9kb2MvaHRtbAogb3V0cHV0Zm9y
bWF0cyA9IEhUTUwKIHNvdXJjZXMuZmlsZWV4dGVuc2lvbnMgID0gIiouY3BwICouZG9jICoucWRv
YyAqLmgiCg==
</data>
<flag name="review"
          id="29497"
          type_id="1"
          status="-"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="29498"
          type_id="3"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47397</attachid>
            <date>2010-01-26 03:20:25 -0800</date>
            <delta_ts>2010-01-26 05:00:22 -0800</delta_ts>
            <desc>First steps of QtScript v7</desc>
            <filename>initV7.diff</filename>
            <type>text/plain</type>
            <size>82509</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2YjBlMDg0Li4xZTk4ZmVh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3Qg
c3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3byBuZXcgY2xh
c3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1ZS4KKyAgICAg
ICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29udGV4dCBhbmQg
dGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21waWxlZCBieSBk
ZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0tcW1ha2Vhcmc9
IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtpdC4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1NjUKKworICAg
ICAgICAqIFdlYktpdC5wcm86CisKIDIwMTAtMDEtMjAgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3Iu
YXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDY5NjQzMTMuLjkyOTI2NGUgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMjYgQEAKKzIwMTAtMDEtMjAgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmlyc3Qgc3RlcHMgb2YgdGhlIFF0U2NyaXB0IEFQSS4KKyAgICAgICAgCisgICAgICAgIFR3
byBuZXcgY2xhc3NlcyB3ZXJlIGNyZWF0ZWQ7IFFTY3JpcHRFbmdpbmUgYW5kIFFTY3JpcHRWYWx1
ZS4KKyAgICAgICAgVGhlIGZpcnN0IHNob3VsZCBlbmNhcHN1bGF0ZSBhIGphdmFzY3JpcHQgY29u
dGV4dCBhbmQgdGhlIHNlY29uZCBhIHNjcmlwdAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgQVBJIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LCBzbyBpdCBpc24ndCBjb21w
aWxlZCBieSBkZWZhdWx0LgorICAgICAgICBUbyB0cmlnZ2VyIGNvbXBpbGF0aW9uLCBwYXNzIC0t
cW1ha2Vhcmc9IkNPTkZJRys9YnVpbGQtcXRzY3JpcHQiIHRvCisgICAgICAgIGJ1aWxkLXdlYmtp
dC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1
NjUKKworICAgICAgICAqIHF0L2FwaS9RdFNjcmlwdC5wcm86IEFkZGVkLgorICAgICAgICAqIHF0
L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0Q29udmVy
dGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmU6OlFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdEVuZ2luZTo6flFTY3JpcHRFbmdpbmUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6ZXZh
bHVhdGUpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZTo6Y29sbGVjdEdhcmJhZ2UpOgorICAgICAg
ICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmg6IEFkZGVkLgorICAgICAgICAqIHF0L2FwaS9xc2Ny
aXB0ZW5naW5lX3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpR
U2NyaXB0RW5naW5lUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6flFT
Y3JpcHRFbmdpbmVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpldmFs
dWF0ZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oOiBBZGRlZC4KKyAgICAg
ICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQpOgorICAgICAgICAoUVNjcmlwdEVuZ2luZVBy
aXZhdGU6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpt
YWtlSlNWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCk6Cisg
ICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjpRU2NyaXB0VmFsdWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp+UVNjcmlwdFZh
bHVlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWU6OmlzQm9vbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNO
dWxsKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoUVNjcmlw
dFZhbHVlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6OmlzRXJyb3IpOgor
ICAgICAgICAoUVNjcmlwdFZhbHVlOjppc09iamVjdCk6CisgICAgICAgIChRU2NyaXB0VmFsdWU6
OmlzRnVuY3Rpb24pOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjp0b1N0cmluZyk6CisgICAgICAg
IChRU2NyaXB0VmFsdWU6OnRvTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29s
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6dG9JbnRlZ2VyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9JbnQzMik6CisgICAg
ICAgIChRU2NyaXB0VmFsdWU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6dG9V
SW50MTYpOgorICAgICAgICAoUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAgICAgICAgKFFTY3JpcHRW
YWx1ZTo6ZW5naW5lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZTo6c3RyaWN0
bHlFcXVhbHMpOgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0dmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChRU2NyaXB0VmFsdWU6Oik6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmg6
IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6KToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2Ny
aXB0VmFsdWVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNCb29sKToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmlzTnVsbCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1N0cmluZyk6CisgICAg
ICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjppc1VuZGVmaW5lZCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWVQcml2YXRlOjppc0Vycm9yKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6Omlz
T2JqZWN0KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rpb24pOgorICAg
ICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAoUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6dG9OdW1iZXIpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9C
b29sKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvSW50ZWdlcik6CisgICAgICAg
IChRU2NyaXB0VmFsdWVQcml2YXRlOjp0b0ludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVBy
aXZhdGU6OnRvVUludDMyKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OnRvVUludDE2
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVxdWFscyk6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQ
cml2YXRlOjphc3NpZ25FbmdpbmUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Y2Fs
bCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjplbmdpbmUpOgorICAgICAgICAoUVNj
cmlwdFZhbHVlUHJpdmF0ZTo6Y29udGV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRl
Ojp2YWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVQcml2YXRlOjpvYmplY3QpOgorICAgICAg
ICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aW5oZXJpdHMpOgorICAgICAgICAoUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6aXNKU0Jhc2VkKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVt
YmVyQmFzZWQpOgorICAgICAgICAoUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCk6
CisgICAgICAgICogcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmg6IEFkZGVkLgorICAgICAgICAqIHF0
L3Rlc3RzL3FzY3JpcHRlbmdpbmUvcXNjcmlwdGVuZ2luZS5wcm86IEFkZGVkLgorICAgICAgICAq
IHF0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjp0c3RfUVNjcmlwdEVuZ2luZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6fnRzdF9RU2NyaXB0RW5naW5lKToKKyAgICAgICAgKHRzdF9RU2Ny
aXB0RW5naW5lOjppbml0KToKKyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjbGVhbnVwKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICh0
c3RfUVNjcmlwdEVuZ2luZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHR2
YWx1ZS9xc2NyaXB0dmFsdWUucHJvOiBBZGRlZC4KKyAgICAgICAgKiBxdC90ZXN0cy9xc2NyaXB0
dmFsdWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZTo6dHN0X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp+dHN0
X1FTY3JpcHRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjppbml0KToKKyAgICAg
ICAgKHRzdF9RU2NyaXB0VmFsdWU6OmNsZWFudXApOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZTo6Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjp0b1N0cmluZ19kYXRhKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
VmFsdWU6OmNvcHlDb25zdHJ1Y3Rvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6
OmNvcHlDb25zdHJ1Y3Rvcik6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjphc3NpZ25PcGVy
YXRvcl9kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmFzc2lnbk9wZXJhdG9yKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWU6OmRhdGFTaGFyaW5nKToKKyAgICAgICAgKHRzdF9R
U2NyaXB0VmFsdWU6OmNvbnN0cnVjdG9yc19kYXRhKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFs
dWU6OmNvbnN0cnVjdG9ycyk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlOjpjYWxsKToKKyAg
ICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcmk6IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3Rl
c3RzLnBybzogQWRkZWQuCisKIDIwMTAtMDEtMTkgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9RdFNjcmlwdC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
YzVlMjUzZAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlw
dC5wcm8KQEAgLTAsMCArMSwzNyBAQAorVEFSR0VUICAgICA9IFF0U2NyaXB0CitURU1QTEFURSAg
ID0gbGliCitRVCAgICAgICAgID0gY29yZQorCitJTkNMVURFUEFUSCArPSAkJFBXRAorCitDT05G
SUcgKz0gYnVpbGRpbmctbGlicworSkFWQVNDUklQVENPUkVfSklUID0geWVzCisKK2lzRW1wdHko
SlNDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUik6SlNDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9IC4u
Ly4uL2dlbmVyYXRlZAorQ09ORklHKGRlYnVnLCBkZWJ1Z3xyZWxlYXNlKSB7CisgICAgT0JKRUNU
U19ESVIgPSBvYmovZGVidWcKK30gZWxzZSB7ICMgUmVsZWFzZQorICAgIE9CSkVDVFNfRElSID0g
b2JqL3JlbGVhc2UKK30KKworaW5jbHVkZSgkJFBXRC8uLi8uLi8uLi9XZWJLaXQucHJpKQoraW5j
bHVkZSgkJFBXRC8uLi8uLi9KYXZhU2NyaXB0Q29yZS5wcmkpCisKK0lOQ0xVREVQQVRIICs9ICQk
UFdELy4uLy4uL0FQSQorCitTT1VSQ0VTICs9ICAkJFBXRC9xc2NyaXB0ZW5naW5lLmNwcCBcCisg
ICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lX3AuY3BwIFwKKyAgICAgICAgICAgICQkUFdE
L3FzY3JpcHR2YWx1ZS5jcHAgXAorCitIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5o
IFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRlbmdpbmUuaCBcCisgICAgICAgICAgICAkJFBX
RC9xc2NyaXB0ZW5naW5lX3AuaCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWUuaCBc
CisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWVfcC5oIFwKKyAgICAgICAgICAgICQkUFdE
L3FzY3JpcHRjb252ZXJ0ZXJfcC5oIFwKKworCishc3RhdGljOiBERUZJTkVTICs9IFFUX01BS0VE
TEwKKworREVTVERJUiA9ICQkT1VUUFVUX0RJUi9saWIKKwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRjb252ZXJ0ZXJfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHRjb252ZXJ0ZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmMzY2E0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dGNvbnZlcnRlcl9wLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBxc2NyaXB0Y29udmVydGVyX3BfaAorI2RlZmluZSBxc2NyaXB0Y29udmVydGVyX3BfaAor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nLmg+CisKKy8qCisgIFxpbnRlcm5hbAorICBcY2xhc3MgUVNjcmlwdENvbnZlcnRl
cgorICBRU2NyaXB0VmFsdWUgYW5kIFFTY3JpcHRFbmdpbmUgaGVscGVyIGNsYXNzLiBUaGlzIGNs
YXNzJ3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gY29udmVydCB2YWx1ZXMKKyAgYmV0d2VlbiBKUyB2
YWx1ZXMgYW5kIFF0L0MrKyB2YWx1ZXMuCisKKyAgVGhpcyBpcyBhIG5pY2Ugd2F5IHRvIGlubGlu
ZSB0aGVzZSBmdW5jdGlvbnMgaW4gYm90aCBRU2NyaXB0VmFsdWUgYW5kIFFTY3JpcHRFbmdpbmUu
CisqLworY2xhc3MgUVNjcmlwdENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFFTdHJp
bmcgdG9TdHJpbmcoY29uc3QgSlNTdHJpbmdSZWYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFj
dGVyc1B0cihzdHIpKSwgSlNTdHJpbmdHZXRMZW5ndGgoc3RyKSk7CisgICAgfQorICAgIHN0YXRp
YyBKU1N0cmluZ1JlZiB0b1N0cmluZyhjb25zdCBRU3RyaW5nJiBzdHIpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyLnRvVXRmOCgpLmNvbnN0
RGF0YSgpKTsKKyAgICB9CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIHRvU3RyaW5nKGNvbnN0IGNo
YXIqIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdHIpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBxc2NyaXB0Y29udmVydGVyX3BfaApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLmYxMmY0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5o
IgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVl
X3AuaCIKKworLyohCisgICAgQ29uc3RydWN0cyBhIFFTY3JpcHRFbmdpbmUgb2JqZWN0LgorCisg
ICAgVGhlIGdsb2JhbE9iamVjdCgpIGlzIGluaXRpYWxpemVkIHRvIGhhdmUgcHJvcGVydGllcyBh
cyBkZXNjcmliZWQgaW4gRUNNQS0yNjIsIFNlY3Rpb24gMTUuMS4KKyovCitRU2NyaXB0RW5naW5l
OjpRU2NyaXB0RW5naW5lKCkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0RW5naW5lUHJpdmF0ZSh0
aGlzKSkKK3sKK30KKworLyohCisgICAgRGVzdHJveXMgdGhpcyBRU2NyaXB0RW5naW5lLgorKi8K
K1FTY3JpcHRFbmdpbmU6On5RU2NyaXB0RW5naW5lKCkKK3sKK30KKworLyohCisgICAgRXZhbHVh
dGVzIFxhIHByb2dyYW0sIHVzaW5nIFxhIGxpbmVOdW1iZXIgYXMgdGhlIGJhc2UgbGluZSBudW1i
ZXIsCisgICAgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKworICAg
IFRoZSBzY3JpcHQgY29kZSB3aWxsIGJlIGV2YWx1YXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0
LgorCisgICAgVGhlIGV2YWx1YXRpb24gb2YgXGEgcHJvZ3JhbSBjYW4gY2F1c2UgYW4gZXhjZXB0
aW9uIGluIHRoZQorICAgIGVuZ2luZTsgaW4gdGhpcyBjYXNlIHRoZSByZXR1cm4gdmFsdWUgd2ls
bCBiZSB0aGUgZXhjZXB0aW9uCisgICAgdGhhdCB3YXMgdGhyb3duICh0eXBpY2FsbHkgYW4gXGN7
RXJyb3J9IG9iamVjdCkuIFlvdSBjYW4gY2FsbAorICAgIGhhc1VuY2F1Z2h0RXhjZXB0aW9uKCkg
dG8gZGV0ZXJtaW5lIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbgorICAgIHRoZSBsYXN0IGNh
bGwgdG8gZXZhbHVhdGUoKS4KKworICAgIFxhIGxpbmVOdW1iZXIgaXMgdXNlZCB0byBzcGVjaWZ5
IGEgc3RhcnRpbmcgbGluZSBudW1iZXIgZm9yIFxhCisgICAgcHJvZ3JhbTsgbGluZSBudW1iZXIg
aW5mb3JtYXRpb24gcmVwb3J0ZWQgYnkgdGhlIGVuZ2luZSB0aGF0IHBlcnRhaW4KKyAgICB0byB0
aGlzIGV2YWx1YXRpb24gKGUuZy4gdW5jYXVnaHRFeGNlcHRpb25MaW5lTnVtYmVyKCkpIHdpbGwg
YmUKKyAgICBiYXNlZCBvbiB0aGlzIGFyZ3VtZW50LiBGb3IgZXhhbXBsZSwgaWYgXGEgcHJvZ3Jh
bSBjb25zaXN0cyBvZiB0d28KKyAgICBsaW5lcyBvZiBjb2RlLCBhbmQgdGhlIHN0YXRlbWVudCBv
biB0aGUgc2Vjb25kIGxpbmUgY2F1c2VzIGEgc2NyaXB0CisgICAgZXhjZXB0aW9uLCB1bmNhdWdo
dEV4Y2VwdGlvbkxpbmVOdW1iZXIoKSB3b3VsZCByZXR1cm4gdGhlIGdpdmVuIFxhCisgICAgbGlu
ZU51bWJlciBwbHVzIG9uZS4gV2hlbiBubyBzdGFydGluZyBsaW5lIG51bWJlciBpcyBzcGVjaWZp
ZWQsIGxpbmUKKyAgICBudW1iZXJzIHdpbGwgYmUgMS1iYXNlZC4KKworICAgIFxhIGZpbGVOYW1l
IGlzIHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZy4gRm9yIGV4YW1wbGUgaW4gZXJyb3Igb2JqZWN0
cworICAgIHRoZSBmaWxlIG5hbWUgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSAiZmlsZU5hbWUi
IHByb3BlcnR5IGlmIGl0J3MKKyAgICBwcm92aWRlZCB3aXRoIHRoaXMgZnVuY3Rpb24uCisqLwor
UVNjcmlwdFZhbHVlIFFTY3JpcHRFbmdpbmU6OmV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dy
YW0sIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBpbnQgbGluZU51bWJlcikKK3sKKyAgICByZXR1
cm4gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRfcHRyLT5ldmFsdWF0ZShwcm9ncmFtLCBmaWxl
TmFtZSwgbGluZU51bWJlcikpOworfQorCisvKiEKKyAgICBSdW5zIHRoZSBnYXJiYWdlIGNvbGxl
Y3Rvci4KKworICAgIFRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aWxsIGF0dGVtcHQgdG8gcmVjbGFp
bSBtZW1vcnkgYnkgbG9jYXRpbmcgYW5kIGRpc3Bvc2luZyBvZiBvYmplY3RzIHRoYXQgYXJlCisg
ICAgbm8gbG9uZ2VyIHJlYWNoYWJsZSBpbiB0aGUgc2NyaXB0IGVudmlyb25tZW50LgorCisgICAg
Tm9ybWFsbHkgeW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uOyB0aGUgZ2FyYmFn
ZSBjb2xsZWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGludm9rZWQKKyAgICB3aGVuIHRoZSBR
U2NyaXB0RW5naW5lIGRlY2lkZXMgdGhhdCBpdCdzIHdpc2UgdG8gZG8gc28gKGkuZS4gd2hlbiBh
IGNlcnRhaW4gbnVtYmVyIG9mIG5ldyBvYmplY3RzCisgICAgaGF2ZSBiZWVuIGNyZWF0ZWQpLiBI
b3dldmVyLCB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBleHBsaWNpdGx5IHJlcXVlc3Qg
dGhhdCBnYXJiYWdlCisgICAgY29sbGVjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIGFzIHNvb24g
YXMgcG9zc2libGUuCisqLwordm9pZCBRU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSgpCit7
CisgICAgZF9wdHItPmNvbGxlY3RHYXJiYWdlKCk7Cit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZjYxZDM1Ci0t
LSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaApA
QCAtMCwwICsxLDQ3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRlbmdp
bmVfaAorI2RlZmluZSBxc2NyaXB0ZW5naW5lX2gKKworI2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0
Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRkYXRhLmg+CisjaW5jbHVkZSA8UXRDb3JlL3Fz
dHJpbmcuaD4KKworY2xhc3MgUVNjcmlwdFZhbHVlOworY2xhc3MgUVNjcmlwdEVuZ2luZVByaXZh
dGU7CisKKy8vIEludGVybmFsIHR5cGVkZWYKK3R5cGVkZWYgUUV4cGxpY2l0bHlTaGFyZWREYXRh
UG9pbnRlcjxRU2NyaXB0RW5naW5lUHJpdmF0ZT4gUVNjcmlwdEVuZ2luZVB0cjsKKworY2xhc3Mg
UVNjcmlwdEVuZ2luZSA6IHB1YmxpYyBRT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBRU2NyaXB0RW5n
aW5lKCk7CisgICAgflFTY3JpcHRFbmdpbmUoKTsKKworICAgIFFTY3JpcHRWYWx1ZSBldmFsdWF0
ZShjb25zdCBRU3RyaW5nJiBwcm9ncmFtLCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSA9IFFTdHJp
bmcoKSwgaW50IGxpbmVOdW1iZXIgPSAxKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlOworCisgICAg
UVNjcmlwdEVuZ2luZVB0ciBkX3B0cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZV9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kZThhMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisKKyNpbmNs
dWRlICJxc2NyaXB0dmFsdWVfcC5oIgorCisvKiEKKyAgICBDb25zdHJ1Y3RzIGEgZGVmYXVsdCBR
U2NyaXB0RW5naW5lUHJpdmF0ZSBvYmplY3QsIGEgbmV3IGdsb2JhbCBjb250ZXh0IHdpbGwgYmUg
Y3JlYXRlZC4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0RW5naW5lUHJpdmF0ZTo6UVNjcmlw
dEVuZ2luZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lKQorICAgIDogcV9wdHIo
Y29uc3RfY2FzdDxRU2NyaXB0RW5naW5lKj4oZW5naW5lKSkKKyAgICAsIG1fY29udGV4dChKU0ds
b2JhbENvbnRleHRDcmVhdGUoMCkpCit7Cit9CisKK1FTY3JpcHRFbmdpbmVQcml2YXRlOjp+UVNj
cmlwdEVuZ2luZVByaXZhdGUoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250
ZXh0KTsKK30KKworLyohCisgICAgRXZhbHVhdGVzIHByb2dyYW0gYW5kIHJldHVybnMgdGhlIHJl
c3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0VmFsdWVQ
cml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6ZXZhbHVhdGUoY29uc3QgUVN0cmluZyYgcHJv
Z3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGludCBsaW5lTnVtYmVyKQoreworICAgIEpT
U3RyaW5nUmVmIHNjcmlwdCA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKHByb2dyYW0pOwor
ICAgIEpTU3RyaW5nUmVmIGZpbGUgPSBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhmaWxlTmFt
ZSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb247CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBK
U0V2YWx1YXRlU2NyaXB0KG1fY29udGV4dCwgc2NyaXB0LCAvKiBHbG9iYWwgT2JqZWN0ICovIDAs
IGZpbGUsIGxpbmVOdW1iZXIsICZleGNlcHRpb24pOworICAgIGlmICghcmVzdWx0KQorICAgICAg
ICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgZXhjZXB0aW9uKTsgLy8gcmV0
dXJucyBhbiBleGNlcHRpb24KKyAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhp
cywgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0
ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTI3YzQyCi0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCkBAIC0wLDAgKzEsOTgg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNjcmlwdGVuZ2luZV9wX2gKKyNkZWZp
bmUgcXNjcmlwdGVuZ2luZV9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgor
I2luY2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3Fz
aGFyZWRkYXRhLmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KKworY2xhc3MgUVNjcmlw
dEVuZ2luZTsKKworY2xhc3MgUVNjcmlwdEVuZ2luZVByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERh
dGEgeworcHVibGljOgorICAgIHN0YXRpYyBRU2NyaXB0RW5naW5lUHRyIGdldChjb25zdCBRU2Ny
aXB0RW5naW5lKiBxKSB7IFFfQVNTRVJUKHEpOyByZXR1cm4gcS0+ZF9wdHI7IH0KKyAgICBzdGF0
aWMgUVNjcmlwdEVuZ2luZSogZ2V0KGNvbnN0IFFTY3JpcHRFbmdpbmVQcml2YXRlKiBkKSB7IFFf
QVNTRVJUKGQpOyByZXR1cm4gZC0+cV9wdHI7IH0KKworICAgIFFTY3JpcHRFbmdpbmVQcml2YXRl
KGNvbnN0IFFTY3JpcHRFbmdpbmUqKTsKKyAgICB+UVNjcmlwdEVuZ2luZVByaXZhdGUoKTsKKwor
ICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dyYW0s
IGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBpbnQgbGluZU51bWJlcik7CisgICAgaW5saW5lIHZv
aWQgY29sbGVjdEdhcmJhZ2UoKTsKKworICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVl
KGRvdWJsZSBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVl
KGludCBudW1iZXIpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKHVp
bnQgbnVtYmVyKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiBtYWtlSlNWYWx1ZShjb25z
dCBRU3RyaW5nJiBzdHJpbmcpIGNvbnN0OworICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1Zh
bHVlKGJvb2wgbnVtYmVyKSBjb25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiBtYWtlSlNWYWx1
ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3Q7CisKKyAgICBpbmxpbmUg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgUVNjcmlw
dEVuZ2luZSogcV9wdHI7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKK307CisK
K3ZvaWQgUVNjcmlwdEVuZ2luZVByaXZhdGU6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICBKU0dh
cmJhZ2VDb2xsZWN0KG1fY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdEVuZ2luZVBy
aXZhdGU6Om1ha2VKU1ZhbHVlKGRvdWJsZSBudW1iZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlTnVtYmVyKG1fY29udGV4dCwgbnVtYmVyKTsKK30KKworSlNWYWx1ZVJlZiBRU2Ny
aXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoaW50IG51bWJlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0LCBudW1iZXIpOworfQorCitKU1ZhbHVl
UmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1ZSh1aW50IG51bWJlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0LCBudW1iZXIpOworfQor
CitKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1ZShjb25zdCBRU3Ry
aW5nJiBzdHJpbmcpIGNvbnN0Cit7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKG1fY29u
dGV4dCwgUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcoc3RyaW5nKSk7Cit9CisKK0pTVmFsdWVS
ZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKGJvb2wgdmFsdWUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihtX2NvbnRleHQsIHZhbHVlKTsKK30KKwor
SlNWYWx1ZVJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bWFrZUpTVmFsdWUoUVNjcmlwdFZhbHVl
OjpTcGVjaWFsVmFsdWUgdmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKHZhbHVlID09IFFTY3JpcHRW
YWx1ZTo6TnVsbFZhbHVlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKG1fY29udGV4
dCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKG1fY29udGV4dCk7Cit9CisKK0pT
R2xvYmFsQ29udGV4dFJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0dmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyN2Zl
MDQKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVl
LmNwcApAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0
ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9wLmgiCisjaW5jbHVkZSAicXNjcmlw
dHZhbHVlX3AuaCIKKyNpbmNsdWRlIDxRdENvcmUvcWRlYnVnLmg+CisKKy8qIQorICAgIENvbnN0
cnVjdHMgYW4gaW52YWxpZCB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZSgp
CisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSgpKQoreworfQorCisvKiEKKyAg
Q29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIGJvb2xlYW4gXGEgdmFsdWUuCisq
LworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoYm9vbCB2YWx1ZSkKKyAgICA6IGRfcHRyKG5l
dyBRU2NyaXB0VmFsdWVQcml2YXRlKHZhbHVlKSkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMg
YSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggYSBudW1iZXIgXGEgdmFsdWUuCisqLworUVNjcmlwdFZh
bHVlOjpRU2NyaXB0VmFsdWUoaW50IHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1
ZVByaXZhdGUodmFsdWUpKQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0
VmFsdWUgd2l0aCBhIG51bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRW
YWx1ZSh1aW50IHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFs
dWUpKQoreworfQorCisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBh
IG51bWJlciBcYSB2YWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShxc3JlYWwg
dmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh2YWx1ZSkpCit7Cit9
CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIGEgc3RyaW5nIFxh
IHZhbHVlLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKGNvbnN0IFFTdHJpbmcmIHZh
bHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUpKQoreworfQor
CisvKiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIHNwZWNpYWwgXGEg
dmFsdWUuCisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoU3BlY2lhbFZhbHVlIHZhbHVl
KQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodmFsdWUpKQoreworfQorCisv
KiEKKyAgQ29uc3RydWN0cyBhIG5ldyBRU2NyaXB0VmFsdWUgd2l0aCBhIHN0cmluZyBcYSB2YWx1
ZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkKKyAg
ICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKFFTdHJpbmc6OmZyb21VdGY4KHZhbHVl
KSkpCit7Cit9CisKKy8qIQorICAgIEJsb2NrIGF1dG9tYXRpYyBjb252ZXJ0aW9uIHRvIGJvb2wK
KyAgICBcaW50ZXJuYWwKKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZSh2b2lkKiBkKQor
eworICAgIFFfQVNTRVJUKGZhbHNlKTsKK30KKworLyohCisgICAgQ29uc3RydWN0cyBhIG5ldyBR
U2NyaXB0VmFsdWUgZnJvbSBwcml2YXRlCisgICAgXGludGVybmFsCisqLworUVNjcmlwdFZhbHVl
OjpRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlUHJpdmF0ZSogZCkKKyAgICA6IGRfcHRyKGQpCit7
Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1
ZSB3aXRoIHRoZSBib29sZWFuIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0aCB0aGUg
c2NyaXB0IFxhIGVuZ2luZS4KKyovCitRU2NyaXB0VmFsdWU6OlFTY3JpcHRWYWx1ZShRU2NyaXB0
RW5naW5lKiBlbmdpbmUsIGJvb2wgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNjcmlwdFZhbHVl
UHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisgIENv
bnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIGludGVnZXIgXGEgdmFsdWUgYW5k
CisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3JpcHRW
YWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgaW50IHZhbHVlKQorICAg
IDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9CisK
Ky8qIQorICBcb2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRo
IHRoZSB1bnNpZ25lZCBpbnRlZ2VyIFxhIHZhbHVlIGFuZAorICByZWdpc3RlcnMgaXQgd2l0aCB0
aGUgc2NyaXB0IFxhIGVuZ2luZS4KKyAqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNj
cmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRW
YWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKwor
ICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB3aXRoIHRoZSBxc3JlYWwgXGEgdmFsdWUg
YW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgcXNyZWFsIHZhbHVl
KQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1ZSkpCit7
Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKworICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1
ZSB3aXRoIHRoZSBzdHJpbmcgXGEgdmFsdWUgYW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBz
Y3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3JpcHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRF
bmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCisgICAgOiBkX3B0cihuZXcgUVNj
cmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIHZhbHVlKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0
ZQorCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIHN0cmluZyBcYSB2
YWx1ZSBhbmQKKyAgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHNjcmlwdCBcYSBlbmdpbmUuCisqLwor
UVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2luZSogZW5naW5lLCBjb25zdCBj
aGFyKiB2YWx1ZSkKKyAgICA6IGRfcHRyKG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwg
UVN0cmluZzo6ZnJvbVV0ZjgodmFsdWUpKSkKK3sKK30KKworLyohCisgIFxvYnNvbGV0ZQorCisg
IENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFZhbHVlIHdpdGggdGhlIHNwZWNpYWwgXGEgdmFsdWUg
YW5kCisgIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSBzY3JpcHQgXGEgZW5naW5lLgorKi8KK1FTY3Jp
cHRWYWx1ZTo6UVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgU3BlY2lhbFZhbHVl
IHZhbHVlKQorICAgIDogZF9wdHIobmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lLCB2YWx1
ZSkpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFTY3JpcHRWYWx1ZSB0aGF0IGlz
IGEgY29weSBvZiBcYSBvdGhlci4KKworICBOb3RlIHRoYXQgaWYgXGEgb3RoZXIgaXMgYW4gb2Jq
ZWN0IChpLmUuLCBpc09iamVjdCgpIHdvdWxkIHJldHVybgorICB0cnVlKSwgdGhlbiBvbmx5IGEg
cmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcyBjb3BpZWQgaW50bworICB0aGUg
bmV3IHNjcmlwdCB2YWx1ZSAoaS5lLiwgdGhlIG9iamVjdCBpdHNlbGYgaXMgbm90IGNvcGllZCku
CisqLworUVNjcmlwdFZhbHVlOjpRU2NyaXB0VmFsdWUoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhl
cikKKyAgICA6IGRfcHRyKG90aGVyLmRfcHRyKQoreworfQorCisvKiEKKyAgICBEZXN0cm95cyB0
aGlzIFFTY3JpcHRWYWx1ZS4KKyovCitRU2NyaXB0VmFsdWU6On5RU2NyaXB0VmFsdWUoKQorewor
fQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIHZhbGlkOyBv
dGhlcndpc2UgcmV0dXJucworICBmYWxzZS4KKyovCitib29sIFFTY3JpcHRWYWx1ZTo6aXNWYWxp
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc1ZhbGlkKCk7Cit9CisKKy8qIQorICBS
ZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBl
IEJvb2xlYW47CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSB0b0Jvb2woKQor
Ki8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc0Jvb2woKSBjb25zdAoreworICAgIHJldHVybiBkX3B0
ci0+aXNCb29sKCk7Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKworICBVc2UgaXNCb29sKCkgaW5z
dGVhZC4KKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBwcmlt
aXRpdmUgdHlwZSBCb29sZWFuOworICBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyovCitib29s
IFFTY3JpcHRWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlz
Qm9vbCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlz
IG9mIHRoZSBwcmltaXRpdmUgdHlwZSBOdW1iZXI7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNl
LgorCisgIFxzYSB0b051bWJlcigpCisqLworYm9vbCBRU2NyaXB0VmFsdWU6OmlzTnVtYmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPmlzTnVtYmVyKCk7Cit9CisKKy8qIQorICBSZXR1
cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51
bGw7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorCisgIFxzYSBRU2NyaXB0RW5naW5lOjpu
dWxsVmFsdWUoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjppc051bGwoKSBjb25zdAoreworICAg
IHJldHVybiBkX3B0ci0+aXNOdWxsKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhp
cyBRU2NyaXB0VmFsdWUgaXMgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIFN0cmluZzsKKyAgb3RoZXJ3
aXNlIHJldHVybnMgZmFsc2UuCisKKyAgXHNhIHRvU3RyaW5nKCkKKyovCitib29sIFFTY3JpcHRW
YWx1ZTo6aXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNTdHJpbmcoKTsK
K30KKworLyohCisgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBpcyBvZiB0aGUg
cHJpbWl0aXZlIHR5cGUgVW5kZWZpbmVkOworICBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKwor
ICBcc2EgUVNjcmlwdEVuZ2luZTo6dW5kZWZpbmVkVmFsdWUoKQorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc1VuZGVmaW5l
ZCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFu
IG9iamVjdCBvZiB0aGUgRXJyb3IgY2xhc3M7CisgIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgor
CisgIFxzYSBRU2NyaXB0Q29udGV4dDo6dGhyb3dFcnJvcigpCisqLworYm9vbCBRU2NyaXB0VmFs
dWU6OmlzRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNFcnJvcigpOworfQor
CisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIG9mIHRoZSBPYmpl
Y3QgdHlwZTsgb3RoZXJ3aXNlCisgIHJldHVybnMgZmFsc2UuCisKKyAgTm90ZSB0aGF0IGZ1bmN0
aW9uIHZhbHVlcywgdmFyaWFudCB2YWx1ZXMsIGFuZCBRT2JqZWN0IHZhbHVlcyBhcmUKKyAgb2Jq
ZWN0cywgc28gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHN1Y2ggdmFsdWVzLgorCisg
IFxzYSB0b09iamVjdCgpLCBRU2NyaXB0RW5naW5lOjpuZXdPYmplY3QoKQorKi8KK2Jvb2wgUVNj
cmlwdFZhbHVlOjppc09iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5pc09iamVj
dCgpOworfQorCisvKiEKKyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGEg
ZnVuY3Rpb247IG90aGVyd2lzZSByZXR1cm5zCisgIGZhbHNlLgorCisgIFxzYSBjYWxsKCkKKyov
Citib29sIFFTY3JpcHRWYWx1ZTo6aXNGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRf
cHRyLT5pc0Z1bmN0aW9uKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUg
b2YgdGhpcyBRU2NyaXB0VmFsdWUsIGFzIGRlZmluZWQgaW4KKyAgXGx7RUNNQS0yNjJ9IHNlY3Rp
b24gOS44LCAiVG9TdHJpbmciLgorCisgIE5vdGUgdGhhdCBpZiB0aGlzIFFTY3JpcHRWYWx1ZSBp
cyBhbiBvYmplY3QsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICBoYXMgc2lkZSBlZmZlY3RzIG9u
IHRoZSBzY3JpcHQgZW5naW5lLCBzaW5jZSB0aGUgZW5naW5lIHdpbGwgY2FsbAorICB0aGUgb2Jq
ZWN0J3MgdG9TdHJpbmcoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5IHZhbHVlT2YoKSkgaW4gYW4K
KyAgYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSBvYmplY3QgdG8gYSBwcmltaXRpdmUgdmFsdWUgKHBv
c3NpYmx5CisgIHJlc3VsdGluZyBpbiBhbiB1bmNhdWdodCBzY3JpcHQgZXhjZXB0aW9uKS4KKwor
ICBcc2EgaXNTdHJpbmcoKQorKi8KK1FTdHJpbmcgUVNjcmlwdFZhbHVlOjp0b1N0cmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b1N0cmluZygpOworfQorCisvKiEKKyAgUmV0dXJu
cyB0aGUgbnVtYmVyIHZhbHVlIG9mIHRoaXMgUVNjcmlwdFZhbHVlLCBhcyBkZWZpbmVkIGluCisg
IFxse0VDTUEtMjYyfSBzZWN0aW9uIDkuMywgIlRvTnVtYmVyIi4KKworICBOb3RlIHRoYXQgaWYg
dGhpcyBRU2NyaXB0VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAg
aGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3
aWxsIGNhbGwKKyAgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5
IHRvU3RyaW5nKCkpIGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEg
cHJpbWl0aXZlIHZhbHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2Ny
aXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIGlzTnVtYmVyKCksIHRvSW50ZWdlcigpLCB0b0ludDMy
KCksIHRvVUludDMyKCksIHRvVUludDE2KCkKKyovCitxc3JlYWwgUVNjcmlwdFZhbHVlOjp0b051
bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b051bWJlcigpOworfQorCisvKiEK
KyAgUmV0dXJucyB0aGUgYm9vbGVhbiB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1ZSwgdXNpbmcg
dGhlIGNvbnZlcnNpb24KKyAgcnVsZXMgZGVzY3JpYmVkIGluIFxse0VDTUEtMjYyfSBzZWN0aW9u
IDkuMiwgIlRvQm9vbGVhbiIuCisKKyAgTm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlz
IGFuIG9iamVjdCwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24g
dGhlIHNjcmlwdCBlbmdpbmUsIHNpbmNlIHRoZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmpl
Y3QncyB2YWx1ZU9mKCkgZnVuY3Rpb24gKGFuZCBwb3NzaWJseSB0b1N0cmluZygpKSBpbiBhbgor
ICBhdHRlbXB0IHRvIGNvbnZlcnQgdGhlIG9iamVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9z
c2libHkKKyAgcmVzdWx0aW5nIGluIGFuIHVuY2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisg
IFxzYSBpc0Jvb2woKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjp0b0Jvb2woKSBjb25zdAorewor
ICAgIHJldHVybiBkX3B0ci0+dG9Cb29sKCk7Cit9CisKKy8qIQorICBcb2Jzb2xldGUKKworICBV
c2UgdG9Cb29sKCkgaW5zdGVhZC4KKyovCitib29sIFFTY3JpcHRWYWx1ZTo6dG9Cb29sZWFuKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvQm9vbCgpOworfQorCisvKiEKKyAgUmV0dXJu
cyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1ZSwgdXNpbmcgdGhlIGNvbnZl
cnNpb24KKyAgcnVsZXMgZGVzY3JpYmVkIGluIFxse0VDTUEtMjYyfSBzZWN0aW9uIDkuNCwgIlRv
SW50ZWdlciIuCisKKyAgTm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVj
dCwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlw
dCBlbmdpbmUsIHNpbmNlIHRoZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB2YWx1
ZU9mKCkgZnVuY3Rpb24gKGFuZCBwb3NzaWJseSB0b1N0cmluZygpKSBpbiBhbgorICBhdHRlbXB0
IHRvIGNvbnZlcnQgdGhlIG9iamVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkKKyAg
cmVzdWx0aW5nIGluIGFuIHVuY2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSB0b051
bWJlcigpCisqLworcXNyZWFsIFFTY3JpcHRWYWx1ZTo6dG9JbnRlZ2VyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZF9wdHItPnRvSW50ZWdlcigpOworfQorCisvKiEKKyAgUmV0dXJucyB0aGUgc2ln
bmVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgUVNjcmlwdFZhbHVlLCB1c2luZworICB0
aGUgY29udmVyc2lvbiBydWxlcyBkZXNjcmliZWQgaW4gXGx7RUNNQS0yNjJ9IHNlY3Rpb24gOS41
LCAiVG9JbnQzMiIuCisKKyAgTm90ZSB0aGF0IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9i
amVjdCwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNj
cmlwdCBlbmdpbmUsIHNpbmNlIHRoZSBlbmdpbmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB2
YWx1ZU9mKCkgZnVuY3Rpb24gKGFuZCBwb3NzaWJseSB0b1N0cmluZygpKSBpbiBhbgorICBhdHRl
bXB0IHRvIGNvbnZlcnQgdGhlIG9iamVjdCB0byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkK
KyAgcmVzdWx0aW5nIGluIGFuIHVuY2F1Z2h0IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSB0
b051bWJlcigpLCB0b1VJbnQzMigpCisqLworcWludDMyIFFTY3JpcHRWYWx1ZTo6dG9JbnQzMigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b0ludDMyKCk7Cit9CisKKy8qIQorICBSZXR1
cm5zIHRoZSB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIFFTY3JpcHRWYWx1
ZSwgdXNpbmcKKyAgdGhlIGNvbnZlcnNpb24gcnVsZXMgZGVzY3JpYmVkIGluIFxse0VDTUEtMjYy
fSBzZWN0aW9uIDkuNiwgIlRvVWludDMyIi4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0
VmFsdWUgaXMgYW4gb2JqZWN0LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgaGFzIHNpZGUgZWZm
ZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UgdGhlIGVuZ2luZSB3aWxsIGNhbGwKKyAg
dGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5IHRvU3RyaW5nKCkp
IGluIGFuCisgIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEgcHJpbWl0aXZlIHZh
bHVlIChwb3NzaWJseQorICByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2NyaXB0IGV4Y2VwdGlv
bikuCisKKyAgXHNhIHRvTnVtYmVyKCksIHRvSW50MzIoKQorKi8KK3F1aW50MzIgUVNjcmlwdFZh
bHVlOjp0b1VJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b1VJbnQzMigpOwor
fQorCisvKiEKKyAgUmV0dXJucyB0aGUgdW5zaWduZWQgMTYtYml0IGludGVnZXIgdmFsdWUgb2Yg
dGhpcyBRU2NyaXB0VmFsdWUsIHVzaW5nCisgIHRoZSBjb252ZXJzaW9uIHJ1bGVzIGRlc2NyaWJl
ZCBpbiBcbHtFQ01BLTI2Mn0gc2VjdGlvbiA5LjcsICJUb1VpbnQxNiIuCisKKyAgTm90ZSB0aGF0
IGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbGluZyB0aGlzIGZ1bmN0aW9u
CisgIGhhcyBzaWRlIGVmZmVjdHMgb24gdGhlIHNjcmlwdCBlbmdpbmUsIHNpbmNlIHRoZSBlbmdp
bmUgd2lsbCBjYWxsCisgIHRoZSBvYmplY3QncyB2YWx1ZU9mKCkgZnVuY3Rpb24gKGFuZCBwb3Nz
aWJseSB0b1N0cmluZygpKSBpbiBhbgorICBhdHRlbXB0IHRvIGNvbnZlcnQgdGhlIG9iamVjdCB0
byBhIHByaW1pdGl2ZSB2YWx1ZSAocG9zc2libHkKKyAgcmVzdWx0aW5nIGluIGFuIHVuY2F1Z2h0
IHNjcmlwdCBleGNlcHRpb24pLgorCisgIFxzYSB0b051bWJlcigpCisqLworcXVpbnQxNiBRU2Ny
aXB0VmFsdWU6OnRvVUludDE2KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvVUludDE2
KCk7Cit9CisKKy8qIQorICBDYWxscyB0aGlzIFFTY3JpcHRWYWx1ZSBhcyBhIGZ1bmN0aW9uLCB1
c2luZyBcYSB0aGlzT2JqZWN0IGFzCisgIHRoZSBgdGhpcycgb2JqZWN0IGluIHRoZSBmdW5jdGlv
biBjYWxsLCBhbmQgcGFzc2luZyBcYSBhcmdzCisgIGFzIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rp
b24uIFJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAgdGhlIGZ1bmN0aW9uLgorCisg
IElmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uLCBjYWxsKCkgZG9lcyBub3Ro
aW5nCisgIGFuZCByZXR1cm5zIGFuIGludmFsaWQgUVNjcmlwdFZhbHVlLgorCisgIE5vdGUgdGhh
dCBpZiBcYSB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QsIHRoZSBnbG9iYWwgb2JqZWN0Cisg
IChzZWUgXGx7UVNjcmlwdEVuZ2luZTo6Z2xvYmFsT2JqZWN0KCl9KSB3aWxsIGJlIHVzZWQgYXMg
dGhlCisgIGB0aGlzJyBvYmplY3QuCisKKyAgQ2FsbGluZyBjYWxsKCkgY2FuIGNhdXNlIGFuIGV4
Y2VwdGlvbiB0byBvY2N1ciBpbiB0aGUgc2NyaXB0IGVuZ2luZTsKKyAgaW4gdGhhdCBjYXNlLCBj
YWxsKCkgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgdGhyb3duICh0eXBpY2FsbHkgYW4KKyAg
XGN7RXJyb3J9IG9iamVjdCkuIFlvdSBjYW4gY2FsbAorICBRU2NyaXB0RW5naW5lOjpoYXNVbmNh
dWdodEV4Y2VwdGlvbigpIHRvIGRldGVybWluZSBpZiBhbiBleGNlcHRpb24KKyAgb2NjdXJyZWQu
CisKKyAgXHNuaXBwZXQgZG9jL3NyYy9zbmlwcGV0cy9jb2RlL3NyY19zY3JpcHRfcXNjcmlwdHZh
bHVlLmNwcCAyCisKKyAgXHNhIGNvbnN0cnVjdCgpCisqLworUVNjcmlwdFZhbHVlIFFTY3JpcHRW
YWx1ZTo6Y2FsbChjb25zdCBRU2NyaXB0VmFsdWUmIHRoaXNPYmplY3QsIGNvbnN0IFFTY3JpcHRW
YWx1ZUxpc3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIGRfcHRyLT5jYWxsKHRoaXNPYmplY3QuZF9w
dHIuZGF0YSgpLCBhcmdzKTsKK30KKworLyohCisgIFJldHVybnMgdGhlIFFTY3JpcHRFbmdpbmUg
dGhhdCBjcmVhdGVkIHRoaXMgUVNjcmlwdFZhbHVlLAorICBvciAwIGlmIHRoaXMgUVNjcmlwdFZh
bHVlIGlzIGludmFsaWQgb3IgdGhlIHZhbHVlIGlzIG5vdAorICBhc3NvY2lhdGVkIHdpdGggYSBw
YXJ0aWN1bGFyIGVuZ2luZS4KKyovCitRU2NyaXB0RW5naW5lKiBRU2NyaXB0VmFsdWU6OmVuZ2lu
ZSgpIGNvbnN0Cit7CisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSA9IGRfcHRyLT5l
bmdpbmUoKTsKKyAgICBpZiAoZW5naW5lKQorICAgICAgICByZXR1cm4gUVNjcmlwdEVuZ2luZVBy
aXZhdGU6OmdldChlbmdpbmUpOworICAgIHJldHVybiAwOworfQorCisvKiEKKyAgQXNzaWducyB0
aGUgXGEgb3RoZXIgdmFsdWUgdG8gdGhpcyBRU2NyaXB0VmFsdWUuCisKKyAgTm90ZSB0aGF0IGlm
IFxhIG90aGVyIGlzIGFuIG9iamVjdCAoaXNPYmplY3QoKSByZXR1cm5zIHRydWUpLAorICBvbmx5
IGEgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdCB3aWxsIGJlIGFzc2lnbmVkOwor
ICB0aGUgb2JqZWN0IGl0c2VsZiB3aWxsIG5vdCBiZSBjb3BpZWQuCisqLworUVNjcmlwdFZhbHVl
JiBRU2NyaXB0VmFsdWU6Om9wZXJhdG9yPShjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKQorewor
ICAgIGRfcHRyID0gb3RoZXIuZF9wdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCisvKiEKKyAg
UmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGVxdWFsIHRvIFxhIG90aGVyLCBv
dGhlcndpc2UKKyAgcmV0dXJucyBmYWxzZS4gVGhlIGNvbXBhcmlzb24gZm9sbG93cyB0aGUgYmVo
YXZpb3IgZGVzY3JpYmVkIGluCisgIFxse0VDTUEtMjYyfSBzZWN0aW9uIDExLjkuMywgIlRoZSBB
YnN0cmFjdCBFcXVhbGl0eSBDb21wYXJpc29uCisgIEFsZ29yaXRobSIuCisKKyAgVGhpcyBmdW5j
dGlvbiBjYW4gcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgdHlwZSBvZiB0aGlzIFFTY3JpcHRWYWx1
ZQorICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgXGEgb3RoZXIgdmFsdWU7IGku
ZS4gdGhlCisgIGNvbXBhcmlzb24gaXMgbm90IHN0cmljdC4gIEZvciBleGFtcGxlLCBjb21wYXJp
bmcgdGhlIG51bWJlciA5IHRvCisgIHRoZSBzdHJpbmcgIjkiIHJldHVybnMgdHJ1ZTsgY29tcGFy
aW5nIGFuIHVuZGVmaW5lZCB2YWx1ZSB0byBhIG51bGwKKyAgdmFsdWUgcmV0dXJucyB0cnVlOyBj
b21wYXJpbmcgYSBcY3tOdW1iZXJ9IG9iamVjdCB3aG9zZSBwcmltaXRpdmUKKyAgdmFsdWUgaXMg
NiB0byBhIFxje1N0cmluZ30gb2JqZWN0IHdob3NlIHByaW1pdGl2ZSB2YWx1ZSBpcyAiNiIKKyAg
cmV0dXJucyB0cnVlOyBhbmQgY29tcGFyaW5nIHRoZSBudW1iZXIgMSB0byB0aGUgYm9vbGVhbiB2
YWx1ZQorICBcY3t0cnVlfSByZXR1cm5zIHRydWUuIElmIHlvdSB3YW50IHRvIHBlcmZvcm0gYSBj
b21wYXJpc29uCisgIHdpdGhvdXQgc3VjaCBpbXBsaWNpdCB2YWx1ZSBjb252ZXJzaW9uLCB1c2Ug
c3RyaWN0bHlFcXVhbHMoKS4KKworICBOb3RlIHRoYXQgaWYgdGhpcyBRU2NyaXB0VmFsdWUgb3Ig
dGhlIFxhIG90aGVyIHZhbHVlIGFyZSBvYmplY3RzLAorICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24g
aGFzIHNpZGUgZWZmZWN0cyBvbiB0aGUgc2NyaXB0IGVuZ2luZSwgc2luY2UKKyAgdGhlIGVuZ2lu
ZSB3aWxsIGNhbGwgdGhlIG9iamVjdCdzIHZhbHVlT2YoKSBmdW5jdGlvbiAoYW5kIHBvc3NpYmx5
CisgIHRvU3RyaW5nKCkpIGluIGFuIGF0dGVtcHQgdG8gY29udmVydCB0aGUgb2JqZWN0IHRvIGEg
cHJpbWl0aXZlIHZhbHVlCisgIChwb3NzaWJseSByZXN1bHRpbmcgaW4gYW4gdW5jYXVnaHQgc2Ny
aXB0IGV4Y2VwdGlvbikuCisKKyAgXHNhIHN0cmljdGx5RXF1YWxzKCksIGxlc3NUaGFuKCkKKyov
Citib29sIFFTY3JpcHRWYWx1ZTo6ZXF1YWxzKGNvbnN0IFFTY3JpcHRWYWx1ZSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRfcHRyID09IG90aGVyLmRfcHRyIHx8IGRfcHRyLT5lcXVhbHMo
UVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBRU2NyaXB0VmFsdWUgaXMgZXF1YWwgdG8gXGEgb3RoZXIgdXNpbmcgc3RyaWN0
CisgIGNvbXBhcmlzb24gKG5vIGNvbnZlcnNpb24pLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4g
VGhlIGNvbXBhcmlzb24KKyAgZm9sbG93cyB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluIFxse0VD
TUEtMjYyfSBzZWN0aW9uIDExLjkuNiwgIlRoZQorICBTdHJpY3QgRXF1YWxpdHkgQ29tcGFyaXNv
biBBbGdvcml0aG0iLgorCisgIElmIHRoZSB0eXBlIG9mIHRoaXMgUVNjcmlwdFZhbHVlIGlzIGRp
ZmZlcmVudCBmcm9tIHRoZSB0eXBlIG9mIHRoZQorICBcYSBvdGhlciB2YWx1ZSwgdGhpcyBmdW5j
dGlvbiByZXR1cm5zIGZhbHNlLiBJZiB0aGUgdHlwZXMgYXJlIGVxdWFsLAorICB0aGUgcmVzdWx0
IGRlcGVuZHMgb24gdGhlIHR5cGUsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CisK
KyAgICBcdGFibGUKKyAgICBcaGVhZGVyIFxvIFR5cGUgXG8gUmVzdWx0CisgICAgXHJvdyAgICBc
byBVbmRlZmluZWQgIFxvIHRydWUKKyAgICBccm93ICAgIFxvIE51bGwgICAgICAgXG8gdHJ1ZQor
ICAgIFxyb3cgICAgXG8gQm9vbGVhbiAgICBcbyB0cnVlIGlmIGJvdGggdmFsdWVzIGFyZSB0cnVl
LCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIE51bWJlciAgICAgXG8gZmFsc2UgaWYg
ZWl0aGVyIHZhbHVlIGlzIE5hTiAoTm90LWEtTnVtYmVyKTsgdHJ1ZSBpZiB2YWx1ZXMgYXJlIGVx
dWFsLCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIFN0cmluZyAgICAgXG8gdHJ1ZSBp
ZiBib3RoIHZhbHVlcyBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJz
LCBmYWxzZSBvdGhlcndpc2UKKyAgICBccm93ICAgIFxvIE9iamVjdCAgICAgXG8gdHJ1ZSBpZiBi
b3RoIHZhbHVlcyByZWZlciB0byB0aGUgc2FtZSBvYmplY3QsIGZhbHNlIG90aGVyd2lzZQorICAg
IFxlbmR0YWJsZQorCisgIFxzYSBlcXVhbHMoKQorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlOjpzdHJp
Y3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBkX3B0ciA9PSBvdGhlci5kX3B0ciB8fCBkX3B0ci0+c3RyaWN0bHlFcXVhbHMoUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6Z2V0KG90aGVyKSk7Cit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdHZhbHVlLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVl
LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ1YWVkMwotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWUuaApAQCAtMCwwICsx
LDk5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHR2YWx1ZV9oCisjZGVm
aW5lIHFzY3JpcHR2YWx1ZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcWxpc3QuaD4KKyNpbmNsdWRl
IDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdEVuZ2luZTsKK2NsYXNzIFFT
Y3JpcHRWYWx1ZVByaXZhdGU7CisKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKK3R5cGVkZWYgUUxpc3Q8
UVNjcmlwdFZhbHVlPiBRU2NyaXB0VmFsdWVMaXN0OworCit0eXBlZGVmIGRvdWJsZSBxc3JlYWw7
CisKK2NsYXNzIFFTY3JpcHRWYWx1ZSB7CitwdWJsaWM6ICAgIAorICAgIGVudW0gU3BlY2lhbFZh
bHVlIHsKKyAgICAgICAgTnVsbFZhbHVlLAorICAgICAgICBVbmRlZmluZWRWYWx1ZQorICAgIH07
CisKKyAgICBRU2NyaXB0VmFsdWUoKTsKKyAgICBRU2NyaXB0VmFsdWUoYm9vbCB2YWx1ZSk7Cisg
ICAgUVNjcmlwdFZhbHVlKGludCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKHVpbnQgdmFsdWUp
OworICAgIFFTY3JpcHRWYWx1ZShxc3JlYWwgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShjb25z
dCBRU3RyaW5nJiB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsK
KyAgICBRU2NyaXB0VmFsdWUoU3BlY2lhbFZhbHVlIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUo
Y29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcik7CisKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVu
Z2luZSogZW5naW5lLCBib29sIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVuZ2lu
ZSogZW5naW5lLCBpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBl
bmdpbmUsIHVpbnQgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5lKiBlbmdp
bmUsIHFzcmVhbCB2YWx1ZSk7CisgICAgUVNjcmlwdFZhbHVlKFFTY3JpcHRFbmdpbmUqIGVuZ2lu
ZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIFFTY3JpcHRWYWx1ZShRU2NyaXB0RW5naW5l
KiBlbmdpbmUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdEVu
Z2luZSogZW5naW5lLCBTcGVjaWFsVmFsdWUgdmFsdWUpOworCisgICAgflFTY3JpcHRWYWx1ZSgp
OworCisgICAgUVNjcmlwdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhl
cik7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0VmFsdWUmIG90aGVyKSBjb25zdDsK
KworICAgIFFTY3JpcHRFbmdpbmUqIGVuZ2luZSgpIGNvbnN0OworCisgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3Q7CisgICAgYm9vbCBpc0Jvb2woKSBjb25zdDsKKyAgICBib29sIGlzQm9vbGVhbigp
IGNvbnN0OworICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKKyAgICBib29sIGlzRnVuY3Rpb24o
KSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNTdHJpbmcoKSBj
b25zdDsKKyAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CisgICAgYm9vbCBpc09iamVjdCgp
IGNvbnN0OworICAgIGJvb2wgaXNFcnJvcigpIGNvbnN0OworCisgICAgUVN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OworICAgIHFzcmVhbCB0b051bWJlcigpIGNvbnN0OworICAgIGJvb2wgdG9Cb29s
KCkgY29uc3Q7CisgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAgICBxc3JlYWwgdG9JbnRl
Z2VyKCkgY29uc3Q7CisgICAgcWludDMyIHRvSW50MzIoKSBjb25zdDsKKyAgICBxdWludDMyIHRv
VUludDMyKCkgY29uc3Q7CisgICAgcXVpbnQxNiB0b1VJbnQxNigpIGNvbnN0OworCisgICAgUVNj
cmlwdFZhbHVlIGNhbGwoY29uc3QgUVNjcmlwdFZhbHVlJiB0aGlzT2JqZWN0ID0gUVNjcmlwdFZh
bHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVNjcmlwdFZhbHVlTGlzdCYgYXJn
cyA9IFFTY3JpcHRWYWx1ZUxpc3QoKSk7CisKK3ByaXZhdGU6CisgICAgUVNjcmlwdFZhbHVlKHZv
aWQqKTsKKyAgICBRU2NyaXB0VmFsdWUoUVNjcmlwdFZhbHVlUHJpdmF0ZSopOworCisgICAgUUV4
cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFsdWVQcml2YXRlPiBkX3B0cjsKKwor
ICAgIGZyaWVuZCBjbGFzcyBRU2NyaXB0VmFsdWVQcml2YXRlOworfTsKKworI2VuZGlmIC8vIHFz
Y3JpcHR2YWx1ZV9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZh
bHVlX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVfcC5oCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjZDM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9K
YXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlX3AuaApAQCAtMCwwICsxLDcxOCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0dmFsdWVfcF9oCisjZGVmaW5lIHFz
Y3JpcHR2YWx1ZV9wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgorI2luY2x1
ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJl
ZGRhdGEuaD4KKworY2xhc3MgUVNjcmlwdEVuZ2luZTsKK2NsYXNzIFFTY3JpcHRWYWx1ZTsKKwor
LyoKKyAgXGludGVybmFsCisgIFxjbGFzcyBRU2NyaXB0VmFsdWVQcml2YXRlCisKKyAgSW1wbGVt
ZW50YXRpb24gb2YgUVNjcmlwdFZhbHVlLgorICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQg
b24gYSBzdGF0ZSBtYWNoaW5lLiBUaGUgc3RhdGVzIG5hbWVzIGFyZSBpbmNsdWRlZCBpbgorICBR
U2NyaXB0VmFsdWVQcml2YXRlOjpTdGF0ZXMuIEVhY2ggbWV0aG9kIHNob3VsZCBjaGVjayBmb3Ig
dGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZW4gcGVyZm9ybSBhCisgIGNvcnJlY3QgYWN0aW9uLgor
CisgIFN0YXRlczoKKyAgICBJbnZhbGlkIC0+IFFTVlAgaXMgaW52YWxpZCwgbm8gYXNzdW1wdGlv
bnMgc2hvdWxkIGJlIG1hZGUgYWJvdXQgY2xhc3MgbWVtYmVycyAoYXBhcnQgZnJvbSBtX3ZhbHVl
KS4KKyAgICBDU3RyaW5nIC0+IFFTVlAgaXMgY3JlYXRlZCBmcm9tIFFTdHJpbmcgb3IgY29uc3Qg
Y2hhciogYW5kIG5vIEpTQyBlbmdpbmUgaGFzIGJlZW4gYXNzb2NpYXRlZCB5ZXQuCisgICAgICAg
IEN1cnJlbnQgdmFsdWUgaXMga2VwdCBpbiBtX3N0cmluZywKKyAgICBDTnVtYmVyIC0+IFFTVlAg
aXMgY3JlYXRlZCBmcm9tIGludCwgdWludCwgZG91YmxlLi4uIGFuZCBubyBKU0MgZW5naW5lIGhh
cyBiZWVuIGJpbmQgeWV0LiBDdXJyZW50CisgICAgICAgIHZhbHVlIGlzIGtlcHQgaW4gbV9udW1i
ZXIKKyAgICBDQm9vbCAtPiBRU1ZQIGlzIGNyZWF0ZWQgZnJvbSBib29sIGFuZCBubyBKU0MgZW5n
aW5lIGhhcyBiZWVuIGFzc29jaWF0ZWQgeWV0LiBDdXJyZW50IHZhbHVlIGlzIGtlcHQKKyAgICAg
ICAgaW4gbV9udW1iZXIKKyAgICBDU3BlY2lhbCAtPiBRU1ZQIGlzIFVuZGVmaW5lZCBvciBOdWxs
LCBidXQgYSBKU0MgZW5naW5lIGhhc24ndCBiZWVuIGFzc29jaWF0ZWQgeWV0LCBjdXJyZW50IHZh
bHVlCisgICAgICAgIGlzIGtlcHQgaW4gbV9udW1iZXIgKGNhc3Qgb2YgUVNjcmlwdFZhbHVlOjpT
cGVjaWFsVmFsdWUpCisgICAgSlNWYWx1ZSAtPiBRU1ZQIGlzIGFzc29jaWF0ZWQgd2l0aCBlbmdp
bmUsIGJ1dCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhYm91dCByZWFsIHR5cGUsIHRoZSBzdGF0
ZQorICAgICAgICBoYXZlIHJlYWxseSBzaG9ydCBsaXZlIGN5Y2xlLiBOb3JtYWxseSBpdCBpcyBj
cmVhdGVkIGFzIGEgZnVuY3Rpb24gY2FsbCByZXN1bHQuCisgICAgSlNOYXRpdmUgLT4gUVNWUCBp
cyBhc3NvY2lhdGVkIHdpdGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlzbid0IGEg
SmF2YVNjcmlwdCBvYmplY3QuCisgICAgSlNPYmplY3QgLT4gUVNWUCBpcyBhc3NvY2lhdGVkIHdp
dGggZW5naW5lLCBhbmQgaXQgaXMgc3VyZSB0aGF0IGl0IGlzIGEgSmF2YVNjcmlwdCBvYmplY3Qu
CisKKyAgRWFjaCBzdGF0ZSBrZWVwIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaW52b2tl
IGFsbCBtZXRob2RzLCBpZiBub3QgaXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8KKyAgYSBwcm9wZXIg
c3RhdGUuIENoYW5nZWQgc3RhdGUgc2hvdWxkbid0IGJlIHJldmVydGVkLgorKi8KKworY2xhc3Mg
UVNjcmlwdFZhbHVlUHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAg
aW5saW5lIHN0YXRpYyBRU2NyaXB0VmFsdWVQcml2YXRlKiBnZXQoY29uc3QgUVNjcmlwdFZhbHVl
JiBxKTsKKyAgICBpbmxpbmUgc3RhdGljIFFTY3JpcHRWYWx1ZSBnZXQoY29uc3QgUVNjcmlwdFZh
bHVlUHJpdmF0ZSogZCk7CisgICAgaW5saW5lIHN0YXRpYyBRU2NyaXB0VmFsdWUgZ2V0KFFTY3Jp
cHRWYWx1ZVByaXZhdGUqIGQpOworCisgICAgaW5saW5lIH5RU2NyaXB0VmFsdWVQcml2YXRlKCk7
CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZSgpOworICAgIGlubGluZSBRU2NyaXB0
VmFsdWVQcml2YXRlKGNvbnN0IFFTdHJpbmcmIHN0cmluZyk7CisgICAgaW5saW5lIFFTY3JpcHRW
YWx1ZVByaXZhdGUoYm9vbCB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUo
aW50IG51bWJlcik7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUodWludCBudW1iZXIp
OworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKHFzcmVhbCBudW1iZXIpOworICAgIGlu
bGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKFFTY3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVl
KTsKKworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUq
IGVuZ2luZSwgYm9vbCB2YWx1ZSk7CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29u
c3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBpbnQgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0
VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgdWludCB2YWx1ZSk7Cisg
ICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5l
LCBxc3JlYWwgdmFsdWUpOworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFT
Y3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIGlubGluZSBR
U2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgUVNjcmlwdFZh
bHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpOworCisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZh
dGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSk7
CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZh
dGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYgb2JqZWN0KTsKKworICAg
IGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0Jvb2woKTsK
KyAgICBpbmxpbmUgYm9vbCBpc051bWJlcigpOworICAgIGlubGluZSBib29sIGlzTnVsbCgpOwor
ICAgIGlubGluZSBib29sIGlzU3RyaW5nKCk7CisgICAgaW5saW5lIGJvb2wgaXNVbmRlZmluZWQo
KTsKKyAgICBpbmxpbmUgYm9vbCBpc0Vycm9yKCk7CisgICAgaW5saW5lIGJvb2wgaXNPYmplY3Qo
KTsKKyAgICBpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uKCk7CisKKyAgICBpbmxpbmUgUVN0cmluZyB0
b1N0cmluZygpIGNvbnN0OworICAgIGlubGluZSBxc3JlYWwgdG9OdW1iZXIoKSBjb25zdDsKKyAg
ICBpbmxpbmUgYm9vbCB0b0Jvb2woKSBjb25zdDsKKyAgICBpbmxpbmUgcXNyZWFsIHRvSW50ZWdl
cigpIGNvbnN0OworICAgIGlubGluZSBxaW50MzIgdG9JbnQzMigpIGNvbnN0OworICAgIGlubGlu
ZSBxdWludDMyIHRvVUludDMyKCkgY29uc3Q7CisgICAgaW5saW5lIHF1aW50MTYgdG9VSW50MTYo
KSBjb25zdDsKKworICAgIGlubGluZSBib29sIGVxdWFscyhRU2NyaXB0VmFsdWVQcml2YXRlKiBv
dGhlcik7CisgICAgaW5saW5lIGJvb2wgc3RyaWN0bHlFcXVhbHMoY29uc3QgUVNjcmlwdFZhbHVl
UHJpdmF0ZSogb3RoZXIpIGNvbnN0OworICAgIGlubGluZSBib29sIGFzc2lnbkVuZ2luZShRU2Ny
aXB0RW5naW5lUHJpdmF0ZSogZW5naW5lKTsKKworICAgIGlubGluZSBRU2NyaXB0VmFsdWVQcml2
YXRlKiBjYWxsKGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqICwgY29uc3QgUVNjcmlwdFZhbHVl
TGlzdCYgYXJncyk7CisKKyAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQoKSBj
b25zdDsKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiB2YWx1ZSgpIGNvbnN0OworICAgIGlubGluZSBK
U09iamVjdFJlZiBvYmplY3QoKSBjb25zdDsKKyAgICBpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZh
dGUqIGVuZ2luZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFBsZWFzZSwgdXBkYXRlIGNs
YXNzIGRvY3VtZW50YXRpb24gd2hlbiB5b3UgY2hhbmdlIHRoZSBlbnVtLgorICAgIGVudW0gU3Rh
dGVzIHsKKyAgICAgICAgSW52YWxpZCA9IDAsCisgICAgICAgIENTdHJpbmcgPSAweDEwMDAsCisg
ICAgICAgIENOdW1iZXIsCisgICAgICAgIENCb29sLAorICAgICAgICBDU3BlY2lhbCwKKyAgICAg
ICAgSlNWYWx1ZSA9IDB4MjAwMCwgLy8gSlMgdmFsdWVzIGFyZSBlcXVhbCBvciBoaWdoZXIgdGhl
biB0aGlzIHZhbHVlLgorICAgICAgICBKU05hdGl2ZSwKKyAgICAgICAgSlNPYmplY3QKKyAgICB9
IG1fc3RhdGU7CisgICAgUVNjcmlwdEVuZ2luZVB0ciBtX2VuZ2luZTsKKyAgICBRU3RyaW5nIG1f
c3RyaW5nOworICAgIHFzcmVhbCBtX251bWJlcjsKKyAgICBKU1ZhbHVlUmVmIG1fdmFsdWU7Cisg
ICAgSlNPYmplY3RSZWYgbV9vYmplY3Q7CisKKyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShKU1Zh
bHVlUmVmKTsKKworICAgIGlubGluZSBib29sIGluaGVyaXRzKGNvbnN0IGNoYXIqKTsKKworICAg
IGlubGluZSBib29sIGlzSlNCYXNlZCgpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzTnVtYmVy
QmFzZWQoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZ0Jhc2VkKCkgY29uc3Q7Cit9
OworCitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoY29uc3Qg
UVNjcmlwdFZhbHVlJiBxKSB7IHJldHVybiBxLmRfcHRyLmRhdGEoKTsgfQorCitRU2NyaXB0VmFs
dWUgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqIGQp
Cit7CisgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZShjb25zdF9jYXN0PFFTY3JpcHRWYWx1ZVByaXZh
dGUqPihkKSk7Cit9CisKK1FTY3JpcHRWYWx1ZSBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoUVNj
cmlwdFZhbHVlUHJpdmF0ZSogZCkKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlKGQpOworfQor
CitRU2NyaXB0VmFsdWVQcml2YXRlOjp+UVNjcmlwdFZhbHVlUHJpdmF0ZSgpCit7CisgICAgaWYg
KG1fdmFsdWUpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCgpLCBtX3ZhbHVlKTsK
K30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZSgpCisgICAgOiBt
X3N0YXRlKEludmFsaWQpCisgICAgLCBtX3ZhbHVlKDApCit7Cit9CisKK1FTY3JpcHRWYWx1ZVBy
aXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVN0cmluZyYgc3RyaW5nKQorICAgIDog
bV9zdGF0ZShDU3RyaW5nKQorICAgICwgbV9zdHJpbmcoc3RyaW5nKQorICAgICwgbV92YWx1ZSgw
KQoreworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGJvb2wg
dmFsdWUpCisgICAgOiBtX3N0YXRlKENCb29sKQorICAgICwgbV9udW1iZXIodmFsdWUpCisgICAg
LCBtX3ZhbHVlKDApCit7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVBy
aXZhdGUoaW50IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikKKyAgICAsIG1fbnVtYmVy
KG51bWJlcikKKyAgICAsIG1fdmFsdWUoMCkKK3sKK30KKworUVNjcmlwdFZhbHVlUHJpdmF0ZTo6
UVNjcmlwdFZhbHVlUHJpdmF0ZSh1aW50IG51bWJlcikKKyAgICA6IG1fc3RhdGUoQ051bWJlcikK
KyAgICAsIG1fbnVtYmVyKG51bWJlcikKKyAgICAsIG1fdmFsdWUoMCkKK3sKK30KKworUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6UVNjcmlwdFZhbHVlUHJpdmF0ZShxc3JlYWwgbnVtYmVyKQorICAgIDog
bV9zdGF0ZShDTnVtYmVyKQorICAgICwgbV9udW1iZXIobnVtYmVyKQorICAgICwgbV92YWx1ZSgw
KQoreworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKFFTY3Jp
cHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKQorICAgIDogbV9zdGF0ZShDU3BlY2lhbCkKKyAg
ICAsIG1fbnVtYmVyKHZhbHVlKQorICAgICwgbV92YWx1ZSgwKQoreworfQorCitRU2NyaXB0VmFs
dWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2lu
ZSwgYm9vbCB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNOYXRpdmUpCit7CisgICAgaWYgKCFlbmdp
bmUpIHsKKyAgICAgICAgLy8gc2xvd2VyIHBhdGggcmVpbml0aWFsaXphdGlvbgorICAgICAgICBt
X3N0YXRlID0gQ0Jvb2w7CisgICAgICAgIG1fbnVtYmVyID0gdmFsdWU7CisgICAgICAgIG1fdmFs
dWUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW5naW5lID0gUVNjcmlwdEVuZ2luZVBy
aXZhdGU6OmdldChlbmdpbmUpOworICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VKU1Zh
bHVlKHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgpLCBtX3ZhbHVlKTsK
KyAgICB9Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29u
c3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCBpbnQgdmFsdWUpCisgICAgOiBtX3N0YXRlKEpTTmF0
aXZlKQoreworICAgIGlmICghZW5naW5lKSB7CisgICAgICAgIC8vIHNsb3dlciBwYXRoIHJlaW5p
dGlhbGl6YXRpb24KKyAgICAgICAgbV9zdGF0ZSA9IENOdW1iZXI7CisgICAgICAgIG1fbnVtYmVy
ID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
ZW5naW5lID0gUVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChlbmdpbmUpOworICAgICAgICBtX3Zh
bHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVByb3Rl
Y3QoY29udGV4dCgpLCBtX3ZhbHVlKTsKKyAgICB9Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6
OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZSogZW5naW5lLCB1aW50IHZh
bHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkKK3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAg
ICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxpemF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBD
TnVtYmVyOworICAgICAgICBtX251bWJlciA9IHZhbHVlOworICAgICAgICBtX3ZhbHVlID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2VuZ2luZSA9IFFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQoZW5naW5lKTsKKyAgICAgICAgbV92YWx1ZSA9IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1
ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7CisgICAgfQor
fQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2NyaXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3Jp
cHRFbmdpbmUqIGVuZ2luZSwgcXNyZWFsIHZhbHVlKQorICAgIDogbV9zdGF0ZShKU05hdGl2ZSkK
K3sKKyAgICBpZiAoIWVuZ2luZSkgeworICAgICAgICAvLyBzbG93ZXIgcGF0aCByZWluaXRpYWxp
emF0aW9uCisgICAgICAgIG1fc3RhdGUgPSBDTnVtYmVyOworICAgICAgICBtX251bWJlciA9IHZh
bHVlOworICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VuZ2lu
ZSA9IFFTY3JpcHRFbmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKTsKKyAgICAgICAgbV92YWx1ZSA9
IG1fZW5naW5lLT5tYWtlSlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNv
bnRleHQoKSwgbV92YWx1ZSk7CisgICAgfQorfQorCitRU2NyaXB0VmFsdWVQcml2YXRlOjpRU2Ny
aXB0VmFsdWVQcml2YXRlKGNvbnN0IFFTY3JpcHRFbmdpbmUqIGVuZ2luZSwgY29uc3QgUVN0cmlu
ZyYgdmFsdWUpCisgICAgOiBtX3N0YXRlKEpTTmF0aXZlKQoreworICAgIGlmICghZW5naW5lKSB7
CisgICAgICAgIC8vIHNsb3dlciBwYXRoIHJlaW5pdGlhbGl6YXRpb24KKyAgICAgICAgbV9zdGF0
ZSA9IENTdHJpbmc7CisgICAgICAgIG1fc3RyaW5nID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUg
PSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW5naW5lID0gUVNjcmlwdEVuZ2luZVByaXZh
dGU6OmdldChlbmdpbmUpOworICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVl
KHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgpLCBtX3ZhbHVlKTsKKyAg
ICB9Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3Qg
UVNjcmlwdEVuZ2luZSogZW5naW5lLCBRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkK
KyAgICA6IG1fc3RhdGUoSlNOYXRpdmUpCit7CisgICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAg
Ly8gc2xvd2VyIHBhdGggcmVpbml0aWFsaXphdGlvbgorICAgICAgICBtX3N0YXRlID0gQ1NwZWNp
YWw7CisgICAgICAgIG1fbnVtYmVyID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUgPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fZW5naW5lID0gUVNjcmlwdEVuZ2luZVByaXZhdGU6OmdldChl
bmdpbmUpOworICAgICAgICBtX3ZhbHVlID0gbV9lbmdpbmUtPm1ha2VKU1ZhbHVlKHZhbHVlKTsK
KyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCgpLCBtX3ZhbHVlKTsKKyAgICB9Cit9CisK
K1FTY3JpcHRWYWx1ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVu
Z2luZVByaXZhdGUqIGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSkKKyAgICA6IG1fc3RhdGUoSlNW
YWx1ZSkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVByaXZhdGUqPihl
bmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBRX0FTU0VSVChlbmdpbmUpOwor
ICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQoKSwgbV92YWx1ZSk7Cit9CisKK1FTY3JpcHRWYWx1
ZVByaXZhdGU6OlFTY3JpcHRWYWx1ZVByaXZhdGUoY29uc3QgUVNjcmlwdEVuZ2luZVByaXZhdGUq
IGVuZ2luZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYgb2JqZWN0KQorICAgIDogbV9z
dGF0ZShKU09iamVjdCkKKyAgICAsIG1fZW5naW5lKGNvbnN0X2Nhc3Q8UVNjcmlwdEVuZ2luZVBy
aXZhdGUqPihlbmdpbmUpKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fb2JqZWN0KG9i
amVjdCkKK3sKKyAgICBRX0FTU0VSVChlbmdpbmUpOworICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRl
eHQoKSwgbV92YWx1ZSk7Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gSW52YWxpZDsgfQorCitib29sIFFTY3JpcHRWYWx1
ZVByaXZhdGU6OmlzQm9vbCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBD
Qm9vbDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBp
ZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFs
bC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNC
b29sZWFuKGNvbnRleHQoKSwgdmFsdWUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppc051bWJlcigp
Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBDTnVtYmVyOgorICAgICAgICBy
ZXR1cm4gbV9udW1iZXI7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoaXNPYmplY3Qo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFsbC10aHJvdWdoLgor
ICAgIGNhc2UgSlNOYXRpdmU6CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4
dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVsbCgpCit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBDU3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVy
ID09IHN0YXRpY19jYXN0PGludD4oUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpOworICAgIGNhc2Ug
SlNWYWx1ZToKKyAgICAgICAgaWYgKGlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICBjYXNlIEpTTmF0aXZlOgorICAgICAg
ICByZXR1cm4gSlNWYWx1ZUlzTnVsbChjb250ZXh0KCksIHZhbHVlKCkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJp
dmF0ZTo6aXNTdHJpbmcoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ1N0
cmluZzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBp
ZiAoaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFs
bC10aHJvdWdoLgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCgpLCB2YWx1ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzVW5kZWZpbmVk
KCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIENTcGVjaWFsOgorICAgICAg
ICByZXR1cm4gbV9udW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihRU2NyaXB0VmFsdWU6OlVuZGVm
aW5lZFZhbHVlKTsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIGlmIChpc09iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAg
Y2FzZSBKU05hdGl2ZToKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
KCksIHZhbHVlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNFcnJvcigpCit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBpZiAoIWlzT2JqZWN0KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAg
ICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gaW5oZXJpdHMoIkVycm9yIik7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBRU2NyaXB0
VmFsdWVQcml2YXRlOjppc09iamVjdCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBKU1ZhbHVlOgor
ICAgICAgICBtX29iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0KCksIHZhbHVlKCksIC8q
IGV4Y2VwdGlvbiAqLyAwKTsKKyAgICAgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZSA9IEpTT2JqZWN0OworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgbV9vYmplY3QgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRpb24gKi8gMCk7CisgICAgICAgIGlm
ICghbV9vYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fc3RhdGUg
PSBKU09iamVjdDsKKyAgICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgIGNhc2UgSlNPYmplY3Q6
CisgICAgICAgIHJldHVybiBKU09iamVjdElzRnVuY3Rpb24oY29udGV4dCgpLCBvYmplY3QoKSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworUVN0cmlu
ZyBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoICht
X3N0YXRlKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICByZXR1cm4gUVN0cmluZygpOwor
ICAgIGNhc2UgQ0Jvb2w6CisgICAgICAgIHJldHVybiBtX251bWJlciA/IFFTdHJpbmc6OmZyb21M
YXRpbjEoInRydWUiKSA6IFFTdHJpbmc6OmZyb21MYXRpbjEoImZhbHNlIik7CisgICAgY2FzZSBD
U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmc7CisgICAgY2FzZSBDTnVtYmVyOgorICAg
ICAgICByZXR1cm4gUVN0cmluZzo6bnVtYmVyKG1fbnVtYmVyKTsKKyAgICBjYXNlIENTcGVjaWFs
OgorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUgPyBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJudWxsIikgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJ1bmRlZmlu
ZWQiKTsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgY2FzZSBKU05hdGl2ZToKKyAgICBjYXNlIEpT
T2JqZWN0OgorICAgICAgICByZXR1cm4gUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0KCksIHZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKSk7Cisg
ICAgfQorCisgICAgUV9BU1NFUlRfWChmYWxzZSwgInRvU3RyaW5nKCkiLCAiTm90IGFsbCBzdGF0
ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcmV2aW91cyBzd2l0Y2ggc3RhdGVtZW50LiIpOworICAg
IHJldHVybiBRU3RyaW5nKCk7IC8vIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCit9CisKK3FzcmVh
bCBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b051bWJlcigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBD
aGVjayBpdC4KKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAg
Y2FzZSBKU05hdGl2ZToKKyAgICBjYXNlIEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApOworICAgIGNh
c2UgQ051bWJlcjoKKyAgICBjYXNlIENCb29sOgorICAgICAgICByZXR1cm4gbV9udW1iZXI7Cisg
ICAgY2FzZSBJbnZhbGlkOgorICAgIGNhc2UgQ1NwZWNpYWw6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAgIHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgUV9BU1NFUlRfWChmYWxzZSwgInRvTnVtYmVyKCkiLCAiTm90IGFsbCBz
dGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcmV2aW91cyBzd2l0Y2ggc3RhdGVtZW50LiIpOwor
ICAgIHJldHVybiAwOyAvLyBBdm9pZCBjb21waWxlciB3YXJuaW5nLgorfQorCitib29sIFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OnRvQm9vbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBKU1ZhbHVlOgorICAgIGNhc2UgSlNOYXRpdmU6CisgICAgY2FzZSBKU09iamVj
dDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCgpLCB2YWx1ZSgpKTsK
KyAgICBjYXNlIENOdW1iZXI6CisgICAgY2FzZSBDQm9vbDoKKyAgICAgICAgcmV0dXJuIG1fbnVt
YmVyOworICAgIGNhc2UgSW52YWxpZDoKKyAgICBjYXNlIENTcGVjaWFsOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBDU3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmcuaXNF
bXB0eSgpOworICAgIH0KKworICAgIFFfQVNTRVJUX1goZmFsc2UsICJ0b0Jvb2woKSIsICJOb3Qg
YWxsIHN0YXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHByZXZpb3VzIHN3aXRjaCBzdGF0ZW1lbnQu
Iik7CisgICAgcmV0dXJuIGZhbHNlOyAvLyBBdm9pZCBjb21waWxlciB3YXJuaW5nLgorfQorCitx
c3JlYWwgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9JbnRlZ2VyKCkgY29uc3QKK3sKKyAgICAvLyBU
T0RPIGl0IGlzIG5vdCB0cnVlIGltcGxlbWVudGF0aW9uIQorICAgIHJldHVybiB0b051bWJlcigp
OworfQorCitxaW50MzIgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9JbnQzMigpIGNvbnN0Cit7Cisg
ICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICByZXR1cm4gdG9O
dW1iZXIoKTsKK30KKworcXVpbnQzMiBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b1VJbnQzMigpIGNv
bnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlvbiEKKyAgICBy
ZXR1cm4gdG9OdW1iZXIoKTsKK30KKworcXVpbnQxNiBRU2NyaXB0VmFsdWVQcml2YXRlOjp0b1VJ
bnQxNigpIGNvbnN0Cit7CisgICAgLy8gVE9ETyBpdCBpcyBub3QgdHJ1ZSBpbXBsZW1lbnRhdGlv
biEKKyAgICByZXR1cm4gdG9OdW1iZXIoKTsKK30KKworCitib29sIFFTY3JpcHRWYWx1ZVByaXZh
dGU6OmVxdWFscyhRU2NyaXB0VmFsdWVQcml2YXRlKiBvdGhlcikKK3sKKyAgICBpZiAoIWlzVmFs
aWQoKSB8fCAhb3RoZXItPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKChtX3N0YXRlID09IG90aGVyLT5tX3N0YXRlKSAmJiAhaXNKU0Jhc2VkKCkpIHsKKyAgICAg
ICAgaWYgKGlzTnVtYmVyQmFzZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBtX251bWJlciA9PSBv
dGhlci0+bV9udW1iZXI7CisgICAgICAgIHJldHVybiBtX3N0cmluZyA9PSBvdGhlci0+bV9zdHJp
bmc7CisgICAgfQorCisgICAgaWYgKGlzSlNCYXNlZCgpICYmICFvdGhlci0+aXNKU0Jhc2VkKCkp
IHsKKyAgICAgICAgaWYgKCFvdGhlci0+YXNzaWduRW5naW5lKGVuZ2luZSgpKSkgeworICAgICAg
ICAgICAgcVdhcm5pbmcoImVxdWFscygpOiBDYW5ub3QgY29tcGFyZSB0byBhIHZhbHVlIGNyZWF0
ZWQgaW4gYSBkaWZmZXJlbnQgZW5naW5lIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFpc0pTQmFzZWQoKSAmJiBvdGhlci0+aXNKU0Jhc2Vk
KCkpIHsKKyAgICAgICAgaWYgKCFvdGhlci0+YXNzaWduRW5naW5lKG90aGVyLT5lbmdpbmUoKSkp
IHsKKyAgICAgICAgICAgIHFXYXJuaW5nKCJlcXVhbHMoKTogQ2Fubm90IGNvbXBhcmUgdG8gYSB2
YWx1ZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWVJc0VxdWFsKGNv
bnRleHQoKSwgdmFsdWUoKSwgb3RoZXItPnZhbHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKTsKK30K
KworYm9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjpzdHJpY3RseUVxdWFscyhjb25zdCBRU2NyaXB0
VmFsdWVQcml2YXRlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBvdGhlci0+
bV9zdGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc0pTQmFzZWQoKSkgewor
ICAgICAgICBpZiAob3RoZXItPmVuZ2luZSgpICE9IGVuZ2luZSgpKSB7CisgICAgICAgICAgICBx
V2FybmluZygic3RyaWN0bHlFcXVhbHMoKTogQ2Fubm90IGNvbXBhcmUgdG8gYSB2YWx1ZSBjcmVh
dGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0KCks
IHZhbHVlKCksIG90aGVyLT52YWx1ZSgpKTsKKyAgICB9CisgICAgaWYgKGlzU3RyaW5nQmFzZWQo
KSkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsKKyAgICBpZiAo
aXNOdW1iZXJCYXNlZCgpKQorICAgICAgICByZXR1cm4gbV9udW1iZXIgPT0gb3RoZXItPm1fbnVt
YmVyOworCisgICAgcmV0dXJuIGZhbHNlOyAvLyBJbnZhbGlkIHN0YXRlLgorfQorCisvKiEKKyAg
VHJpZXMgdG8gYXNzaWduIFxhIGVuZ2luZSB0byB0aGlzIHZhbHVlLiBSZXR1cm5zIHRydWUgb24g
c3VjY2Vzczsgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0VmFsdWVQ
cml2YXRlOjphc3NpZ25FbmdpbmUoUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSkKK3sKKyAg
ICBKU1ZhbHVlUmVmIHZhbHVlOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgQ0Jv
b2w6CisgICAgICAgIHZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZShzdGF0aWNfY2FzdDxib29s
PihtX251bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTdHJpbmc6CisgICAgICAg
IHZhbHVlID0gZW5naW5lLT5tYWtlSlNWYWx1ZShtX3N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ051bWJlcjoKKyAgICAgICAgdmFsdWUgPSBlbmdpbmUtPm1ha2VKU1ZhbHVlKG1f
bnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU3BlY2lhbDoKKyAgICAgICAgdmFs
dWUgPSBlbmdpbmUtPm1ha2VKU1ZhbHVlKHN0YXRpY19jYXN0PFFTY3JpcHRWYWx1ZTo6U3BlY2lh
bFZhbHVlPihtX251bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBpZiAoIWlzSlNCYXNlZCgpKQorICAgICAgICAgICAgUV9BU1NFUlRfWCghaXNKU0Jhc2VkKCks
ICJhc3NpZ25FbmdpbmUoKSIsICJOb3QgYWxsIHN0YXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHBy
ZXZpb3VzIHN3aXRjaCBzdGF0ZW1lbnQuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHFX
YXJuaW5nKCJKU1ZhbHVlIGNhbid0IGJlIHJhc3NpZ25lZCB0byBhbiBhbm90aGVyIGVuZ2luZS4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2VuZ2luZSA9IGVuZ2luZTsK
KyAgICBtX3N0YXRlID0gSlNOYXRpdmU7CisgICAgc2V0VmFsdWUodmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0VmFsdWVQcml2YXRlOjpj
YWxsKGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqLCBjb25zdCBRU2NyaXB0VmFsdWVMaXN0JiBh
cmdzKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAg
ICAgbV9vYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNl
cHRpb24gKi8gMCk7CisgICAgICAgIGlmICghb2JqZWN0KCkpIHsKKyAgICAgICAgICAgIG1fc3Rh
dGUgPSBKU1ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2YXRl
OworICAgICAgICB9CisgICAgICAgIG1fc3RhdGUgPSBKU09iamVjdDsKKyAgICAgICAgLy8gRmFs
bC10aHJvdWdoLgorICAgIGNhc2UgSlNPYmplY3Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IENvbnZlcnQgYWxsIGFyZ3VtZW50cyBhbmQgYmluZCB0byB0aGUgZW5naW5lLgorICAgICAgICAg
ICAgaW50IGFyZ2MgPSBhcmdzLnNpemUoKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndlth
cmdjXTsKKyAgICAgICAgICAgIFFTY3JpcHRWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGkgPSBh
cmdzLmNvbnN0QmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBpICE9IGFyZ3Mu
Y29uc3RFbmQoKTsgaisrLCBpKyspIHsKKyAgICAgICAgICAgICAgICBRU2NyaXB0VmFsdWVQcml2
YXRlKiB2YWx1ZSA9IFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldCgqaSk7CisgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZS0+YXNzaWduRW5naW5lKGVuZ2luZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBxV2FybmluZygiUVNjcmlwdFZhbHVlOjpjYWxsKCkgZmFpbGVkOiBjYW5ub3QgY2FsbCBm
dW5jdGlvbiB3aXRoIHZhbHVlcyBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGVuZ2luZSIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFyZ3Zbal0gPSB2YWx1ZS0+dmFsdWUoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbAorICAgICAgICAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQg
PSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQoKSwgb2JqZWN0KCksIC8qIHRoaXNPYmpl
Y3QgKi8gMCwgYXJnYywgYXJndiwgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dCAmJiBleGNlcHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQ
cml2YXRlKGVuZ2luZSgpLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiAh
ZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0
ZShlbmdpbmUoKSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAvLyB0aGlzIFFTViBpcyBu
b3QgYSBmdW5jdGlvbiA8LS0gIXJlc3VsdCAmJiAhZXhjZXB0aW9uLiBGYWxsLXRocm91Z2guCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlOworICAg
IH0KK30KKworUVNjcmlwdEVuZ2luZVByaXZhdGUqIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmVuZ2lu
ZSgpIGNvbnN0Cit7CisgICAgLy8gQXMgbG9uZyBhcyBtX2VuZ2luZSBpcyBhbiBhdXRvaW5pdGlh
bGl6YXRlZCBwb2ludGVyIHdlIGNhbiBzYWZlbHkgcmV0dXJuIGl0IHdpdGhvdXQKKyAgICAvLyBj
aGVja2luZyBjdXJyZW50IHN0YXRlLgorICAgIHJldHVybiBtX2VuZ2luZS5kYXRhKCk7Cit9CisK
K0pTR2xvYmFsQ29udGV4dFJlZiBRU2NyaXB0VmFsdWVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QK
K3sKKyAgICBRX0FTU0VSVChpc0pTQmFzZWQoKSk7CisgICAgcmV0dXJuIG1fZW5naW5lLT5jb250
ZXh0KCk7Cit9CisKK0pTVmFsdWVSZWYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dmFsdWUoKSBjb25z
dAoreworICAgIFFfQVNTRVJUKGlzSlNCYXNlZCgpKTsKKyAgICByZXR1cm4gbV92YWx1ZTsKK30K
KworSlNPYmplY3RSZWYgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6b2JqZWN0KCkgY29uc3QKK3sKKyAg
ICBRX0FTU0VSVChtX3N0YXRlID09IEpTT2JqZWN0KTsKKyAgICByZXR1cm4gbV9vYmplY3Q7Cit9
CisKK3ZvaWQgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6c2V0VmFsdWUoSlNWYWx1ZVJlZiB2YWx1ZSkK
K3sKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0KCks
IG1fdmFsdWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4
dCgpLCB2YWx1ZSk7CisgICAgbV92YWx1ZSA9IHZhbHVlOworfQorCisvKiEKKyAgXGludGVybmFs
CisgIFJldHVybnMgdHJ1ZSBpZiBRU1YgaXMgY3JlYXRlZCBmcm9tIGNvbnN0cnVjdG9yIHdpdGgg
dGhlIGdpdmVuIFxhIG5hbWUsIGl0IGhhcyB0byBiZSBhCisgIGJ1aWx0LWluIHR5cGUuCisqLwor
Ym9vbCBRU2NyaXB0VmFsdWVQcml2YXRlOjppbmhlcml0cyhjb25zdCBjaGFyKiBuYW1lKQorewor
ICAgIFFfQVNTRVJUKGlzSlNCYXNlZCgpKTsKKyAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qg
PSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCgpKTsKKyAgICBKU1ZhbHVlUmVmIGVy
cm9yID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0KCksIGdsb2JhbE9iamVjdCwgUVNjcmlw
dENvbnZlcnRlcjo6dG9TdHJpbmcobmFtZSksIDApOworICAgIHJldHVybiBKU1ZhbHVlSXNJbnN0
YW5jZU9mQ29uc3RydWN0b3IoY29udGV4dCgpLCB2YWx1ZSgpLCBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCgpLCBlcnJvciwgLyogZXhjZXB0aW9uICovIDApLCAvKiBleGNlcHRpb24gKi8gMCk7Cit9
CisKKy8qIQorICBcaW50ZXJuYWwKKyAgUmV0dXJucyB0cnVlIGlmIFFTViBoYXZlIGFuIGVuZ2lu
ZSBhc3NvY2lhdGVkLgorKi8KK2Jvb2wgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6aXNKU0Jhc2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBKU1ZhbHVlOyB9CisKKy8qIQorICBcaW50ZXJuYWwK
KyAgUmV0dXJucyB0cnVlIGlmIGN1cnJlbnQgdmFsdWUgb2YgUVNWIGlzIHBsYWNlZCBpbiBtX251
bWJlci4KKyovCitib29sIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmlzTnVtYmVyQmFzZWQoKSBjb25z
dCB7IHJldHVybiAhaXNKU0Jhc2VkKCkgJiYgIWlzU3RyaW5nQmFzZWQoKSAmJiBtX3N0YXRlICE9
IEludmFsaWQ7IH0KKworLyohCisgIFxpbnRlcm5hbAorICBSZXR1cm5zIHRydWUgaWYgY3VycmVu
dCB2YWx1ZSBvZiBRU1YgaXMgcGxhY2VkIGluIG1fc3RyaW5nLgorKi8KK2Jvb2wgUVNjcmlwdFZh
bHVlUHJpdmF0ZTo6aXNTdHJpbmdCYXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQ1N0
cmluZzsgfQorCisjZW5kaWYgLy8gcXNjcmlwdHZhbHVlX3BfaApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xvYmFsLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXRzY3JpcHRnbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTc0
OWMwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3F0c2NyaXB0Z2xv
YmFsLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxdHNj
cmlwdGdsb2JhbF9oCisjZGVmaW5lIHF0c2NyaXB0Z2xvYmFsX2gKKworI2luY2x1ZGUgPFF0Q29y
ZS9xZ2xvYmFsLmg+CisKKyNpZiBkZWZpbmVkKFFfT1NfV0lOKSB8fCBkZWZpbmVkKFFfT1NfU1lN
QklBTikKKyMgIGlmIGRlZmluZWQoUVRfTk9ETEwpCisjICBlbGlmIGRlZmluZWQoUVRfTUFLRURM
TCkgICAgICAgIC8qIGNyZWF0ZSBhIFF0IERMTCBsaWJyYXJ5ICovCisjICAgIGlmIGRlZmluZWQo
UVRfQlVJTERfSkFWQVNDUklQVF9MSUIpCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBP
UlQgUV9ERUNMX0VYUE9SVAorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9F
WFBPUlQgUV9ERUNMX0lNUE9SVAorIyAgICBlbmRpZgorIyAgZWxpZiBkZWZpbmVkKFFUX0RMTCkg
LyogdXNlIGEgUXQgRExMIGxpYnJhcnkgKi8KKyMgICAgZGVmaW5lIFFfSkFWQVNDUklQVF9FWFBP
UlQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoUVRfU0hBUkVEKQorIyAgZGVmaW5l
IFFfSkFWQVNDUklQVF9FWFBPUlQgUV9ERUNMX0VYUE9SVAorI2Vsc2UKKyMgIGRlZmluZSBRX0pB
VkFTQ1JJUFRfRVhQT1JUCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUucHJvIGIvSmF2YVNjcmlw
dENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5lLnBybwpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZGMwOTAyCi0tLSAvZGV2L251bGwKKysrIGIvSmF2
YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS9xc2NyaXB0ZW5naW5lLnBybwpAQCAt
MCwwICsxLDcgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSB0c3RfcXNjcmlwdGVuZ2luZQor
UVQgKz0gdGVzdGxpYgoraW5jbHVkZSguLi90ZXN0cy5wcmkpCisKK1NPVVJDRVMgKz0gdHN0X3Fz
Y3JpcHRlbmdpbmUuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Fz
Y3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVz
dHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uMzdmM2QxMQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgi
CisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSA8UXRUZXN0L3F0ZXN0Lmg+CisK
K2NsYXNzIHRzdF9RU2NyaXB0RW5naW5lIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CisKK3B1YmxpYzoKKyAgICB0c3RfUVNjcmlwdEVuZ2luZSgpIHt9CisgICAgdmlydHVhbCB+dHN0
X1FTY3JpcHRFbmdpbmUoKSB7fQorCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBpbml0KCkge30K
KyAgICB2b2lkIGNsZWFudXAoKSB7fQorCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgZXZhbHVh
dGUoKTsKKyAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7Cit9OworCisvKiBFdmFsdWF0aW5nIGEg
c2NyaXB0IHRoYXQgdGhyb3cgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIGFu
IGludmFsaWQgdmFsdWUuICovCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpldmFsdWF0ZSgpCit7
CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVZFUklGWTIoZW5naW5lLmV2YWx1YXRl
KCIxKzEiKS5pc1ZhbGlkKCksICJ0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZXZhbHVhdGVkIGFu
ZCBhbiB2YWxpZCByZXN1bHQgc2hvdWxkIGJlIHJldHVybmVkIik7CisgICAgUVZFUklGWTIoZW5n
aW5lLmV2YWx1YXRlKCJwaW5nIikuaXNWYWxpZCgpLCAiU2NyaXB0IHRocm93aW5nIGFuIHVuaGFu
ZGxlZCBleGNlcHRpb24gc2hvdWxkIHJldHVybiBhbiBleGNlcHRpb24gdmFsdWUiKTsKK30KKwor
LyogVGVzdCBnYXJiYWdlIGNvbGxlY3Rpb24sIGF0IGxlYXN0IHRyeSB0byBub3QgY3Jhc2guICov
Cit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpjb2xsZWN0R2FyYmFnZSgpCit7CisgICAgUVNjcmlw
dEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIGZvbyA9IGVuZ2luZS5ldmFsdWF0ZSgi
KCBmdW5jdGlvbiBmb28oKSB7cmV0dXJuICdwb25nJzt9ICkiKTsKKyAgICBRVkVSSUZZKGZvby5p
c0Z1bmN0aW9uKCkpOworICAgIGVuZ2luZS5jb2xsZWN0R2FyYmFnZSgpOworICAgIFFDT01QQVJF
KGZvby5jYWxsKCkudG9TdHJpbmcoKSwgUVN0cmluZzo6ZnJvbUFzY2lpKCJwb25nIikpOworfQor
UVRFU1RfTUFJTih0c3RfUVNjcmlwdEVuZ2luZSkKKyNpbmNsdWRlICJ0c3RfcXNjcmlwdGVuZ2lu
ZS5tb2MiCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWUv
cXNjcmlwdHZhbHVlLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS9x
c2NyaXB0dmFsdWUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjZTVi
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFs
dWUvcXNjcmlwdHZhbHVlLnBybwpAQCAtMCwwICsxLDcgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJH
RVQgPSB0c3RfcXNjcmlwdHZhbHVlCitRVCArPSB0ZXN0bGliCitpbmNsdWRlKC4uL3Rlc3RzLnBy
aSkKKworU09VUkNFUyArPSB0c3RfcXNjcmlwdHZhbHVlLmNwcAorCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWUvdHN0X3FzY3JpcHR2YWx1ZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM2YTFhNgotLS0gL2Rldi9udWxs
CisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZS90c3RfcXNjcmlwdHZh
bHVlLmNwcApAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
InFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0dmFsdWUuaCIKKyNpbmNsdWRlIDxR
dFRlc3QvcXRlc3QuaD4KKworUV9ERUNMQVJFX01FVEFUWVBFKFFTY3JpcHRWYWx1ZSopOworUV9E
RUNMQVJFX01FVEFUWVBFKFFTY3JpcHRWYWx1ZSk7CisKK2NsYXNzIHRzdF9RU2NyaXB0VmFsdWUg
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9RU2Ny
aXB0VmFsdWUoKSB7fQorICAgIHZpcnR1YWwgfnRzdF9RU2NyaXB0VmFsdWUoKSB7fQorCitwcml2
YXRlIHNsb3RzOgorICAgIHZvaWQgdG9TdHJpbmdfZGF0YSgpOworICAgIHZvaWQgdG9TdHJpbmco
KTsKKyAgICB2b2lkIGNvcHlDb25zdHJ1Y3Rvcl9kYXRhKCk7CisgICAgdm9pZCBjb3B5Q29uc3Ry
dWN0b3IoKTsKKyAgICB2b2lkIGFzc2lnbk9wZXJhdG9yX2RhdGEoKTsKKyAgICB2b2lkIGFzc2ln
bk9wZXJhdG9yKCk7CisgICAgdm9pZCBkYXRhU2hhcmluZygpOworICAgIHZvaWQgY29uc3RydWN0
b3JzX2RhdGEoKTsKKyAgICB2b2lkIGNvbnN0cnVjdG9ycygpOworICAgIHZvaWQgY2FsbCgpOwor
CisgICAgLy8gY29waWVkIGZyb20gUXQncyBRdFNjcmlwdC4KKyAgICB2b2lkIGN0b3IoKTsKK307
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y3RvcigpCit7CisgICAgUVNjcmlwdEVuZ2luZSBl
bmc7CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdjsKKyAgICAgICAgUUNPTVBBUkUodi5p
c1ZhbGlkKCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRF
bmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCBR
U2NyaXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlk
KCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVW5kZWZpbmVkKCksIHRydWUpOworICAg
ICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5l
bmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVu
ZywgUVNjcmlwdFZhbHVlOjpOdWxsVmFsdWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdWxsKCksIHRydWUpOworICAgICAgICBR
Q09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUo
KSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgZmFs
c2UpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01Q
QVJFKHYuaXNCb29sZWFuKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzQm9vbCgpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFD
T01QQVJFKHYudG9Cb29sZWFuKCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUo
KSwgJmVuZyk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgaW50
KDEpKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09N
UEFSRSh2LmlzTnVtYmVyKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCks
IGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBR
Q09NUEFSRSh2LmVuZ2luZSgpLCAmZW5nKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0
VmFsdWUgdihpbnQoMHg0MzIxMTIzNCkpOworICAgICAgICBRVkVSSUZZKHYuaXNOdW1iZXIoKSk7
CisgICAgICAgIFFDT01QQVJFKHYudG9JbnQzMigpLCAweDQzMjExMjM0KTsKKyAgICB9CisgICAg
eworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCB1aW50KDEpKTsKKyAgICAgICAgUUNPTVBB
UkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVtYmVyKCksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgUUNP
TVBBUkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAm
ZW5nKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdih1aW50KDB4NDMyMTEy
MzQpKTsKKyAgICAgICAgUVZFUklGWSh2LmlzTnVtYmVyKCkpOworICAgICAgICBRQ09NUEFSRSh2
LnRvVUludDMyKCksIHVpbnQoMHg0MzIxMTIzNCkpOworICAgIH0KKyAgICB7CisgICAgICAgIFFT
Y3JpcHRWYWx1ZSB2KCZlbmcsIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9OdW1iZXIo
KSwgMS4wKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAg
IHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoMTIzNDU2Nzg5MTAuNSk7CisgICAgICAgIFFWRVJJ
Rlkodi5pc051bWJlcigpKTsKKyAgICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxMjM0NTY3
ODkxMC41KTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdigmZW5nLCAiY2lh
byIpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01Q
QVJFKHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwg
ZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoImNp
YW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksICZlbmcpOworICAgIH0KKyAgICB7
CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KCZlbmcsIFFTdHJpbmcoImNpYW8iKSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1N0cmlu
ZygpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc09iamVjdCgpLCBmYWxzZSk7CisgICAg
ICAgIFFDT01QQVJFKHYudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiY2lhbyIpKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgJmVuZyk7CisgICAgfQorICAgIC8vIGNvcHkgY29uc3Ry
dWN0b3IsIG9wZXJhdG9yPQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoJmVuZywgMS4w
KTsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYyKHYpOworICAgICAgICBRQ09NUEFSRSh2Mi5zdHJp
Y3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYyLmVuZ2luZSgpLCAmZW5n
KTsKKworICAgICAgICBRU2NyaXB0VmFsdWUgdjModik7CisgICAgICAgIFFDT01QQVJFKHYzLnN0
cmljdGx5RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVh
bHModjIpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuZW5naW5lKCksICZlbmcpOworCisg
ICAgICAgIFFTY3JpcHRWYWx1ZSB2NCgmZW5nLCAyLjApOworICAgICAgICBRQ09NUEFSRSh2NC5z
dHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAgICAgICB2MyA9IHY0OworICAgICAgICBRQ09N
UEFSRSh2My5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2My5z
dHJpY3RseUVxdWFscyh2NCksIHRydWUpOworCisgICAgICAgIHYyID0gUVNjcmlwdFZhbHVlKCk7
CisgICAgICAgIFFDT01QQVJFKHYyLnN0cmljdGx5RXF1YWxzKHYpLCBmYWxzZSk7CisgICAgICAg
IFFDT01QQVJFKHYudG9OdW1iZXIoKSwgMS4wKTsKKworICAgICAgICBRU2NyaXB0VmFsdWUgdjUo
dik7CisgICAgICAgIFFDT01QQVJFKHY1LnN0cmljdGx5RXF1YWxzKHYpLCB0cnVlKTsKKyAgICAg
ICAgdiA9IFFTY3JpcHRWYWx1ZSgpOworICAgICAgICBRQ09NUEFSRSh2NS5zdHJpY3RseUVxdWFs
cyh2KSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2NS50b051bWJlcigpLCAxLjApOworICAg
IH0KKworICAgIC8vIGNvbnN0cnVjdG9ycyB0aGF0IHRha2Ugbm8gZW5naW5lIGFyZ3VtZW50Cisg
ICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihRU2NyaXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVl
KTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFS
RSh2LmlzVW5kZWZpbmVkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCks
IGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikw
KTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihRU2NyaXB0VmFsdWU6Ok51
bGxWYWx1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAg
UUNPTVBBUkUodi5pc051bGwoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNPYmplY3Qo
KSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlwdEVuZ2luZSAq
KTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSB2KGZhbHNlKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzQm9v
bGVhbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUodi5pc0Jvb2woKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRv
Qm9vbGVhbigpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0
RW5naW5lICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoaW50KDEp
KTsKKyAgICAgICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFS
RSh2LmlzTnVtYmVyKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZh
bHNlKTsKKyAgICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09N
UEFSRSh2LmVuZ2luZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAg
ICAgIFFTY3JpcHRWYWx1ZSB2KHVpbnQoMSkpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQo
KSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKHYuaXNPYmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvTnVt
YmVyKCksIDEuMCk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5naW5l
ICopMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoMS4wKTsKKyAgICAg
ICAgUUNPTVBBUkUodi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzTnVt
YmVyKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2LmlzT2JqZWN0KCksIGZhbHNlKTsKKyAg
ICAgICAgUUNPTVBBUkUodi50b051bWJlcigpLCAxLjApOworICAgICAgICBRQ09NUEFSRSh2LmVu
Z2luZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3Jp
cHRWYWx1ZSB2KCJjaWFvIik7CisgICAgICAgIFFDT01QQVJFKHYuaXNWYWxpZCgpLCB0cnVlKTsK
KyAgICAgICAgUUNPTVBBUkUodi5pc1N0cmluZygpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUo
di5pc09iamVjdCgpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKHYudG9TdHJpbmcoKSwgUUxh
dGluMVN0cmluZygiY2lhbyIpKTsKKyAgICAgICAgUUNPTVBBUkUodi5lbmdpbmUoKSwgKFFTY3Jp
cHRFbmdpbmUgKikwKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgdihRU3Ry
aW5nKCJjaWFvIikpOworICAgICAgICBRQ09NUEFSRSh2LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYuaXNTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHYuaXNP
YmplY3QoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRSh2LnRvU3RyaW5nKCksIFFMYXRpbjFT
dHJpbmcoImNpYW8iKSk7CisgICAgICAgIFFDT01QQVJFKHYuZW5naW5lKCksIChRU2NyaXB0RW5n
aW5lICopMCk7CisgICAgfQorICAgIC8vIGNvcHkgY29uc3RydWN0b3IsIG9wZXJhdG9yPQorICAg
IHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYoMS4wKTsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHYy
KHYpOworICAgICAgICBRQ09NUEFSRSh2Mi5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKHYyLmVuZ2luZSgpLCAoUVNjcmlwdEVuZ2luZSAqKTApOworCisgICAgICAg
IFFTY3JpcHRWYWx1ZSB2Myh2KTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0bHlFcXVhbHMo
diksIHRydWUpOworICAgICAgICBRQ09NUEFSRSh2My5zdHJpY3RseUVxdWFscyh2MiksIHRydWUp
OworICAgICAgICBRQ09NUEFSRSh2My5lbmdpbmUoKSwgKFFTY3JpcHRFbmdpbmUgKikwKTsKKwor
ICAgICAgICBRU2NyaXB0VmFsdWUgdjQoMi4wKTsKKyAgICAgICAgUUNPTVBBUkUodjQuc3RyaWN0
bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgdjMgPSB2NDsKKyAgICAgICAgUUNPTVBBUkUo
djMuc3RyaWN0bHlFcXVhbHModiksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodjMuc3RyaWN0
bHlFcXVhbHModjQpLCB0cnVlKTsKKworICAgICAgICB2MiA9IFFTY3JpcHRWYWx1ZSgpOworICAg
ICAgICBRQ09NUEFSRSh2Mi5zdHJpY3RseUVxdWFscyh2KSwgZmFsc2UpOworICAgICAgICBRQ09N
UEFSRSh2LnRvTnVtYmVyKCksIDEuMCk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHY1KHYpOwor
ICAgICAgICBRQ09NUEFSRSh2NS5zdHJpY3RseUVxdWFscyh2KSwgdHJ1ZSk7CisgICAgICAgIHYg
PSBRU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgUUNPTVBBUkUodjUuc3RyaWN0bHlFcXVhbHModiks
IGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUodjUudG9OdW1iZXIoKSwgMS4wKTsKKyAgICB9CisK
KyAgICAvLyAwIGVuZ2luZQorICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIFFTY3JpcHRWYWx1
ZTo6VW5kZWZpbmVkVmFsdWUpLmlzVW5kZWZpbmVkKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZh
bHVlKDAsIFFTY3JpcHRWYWx1ZTo6TnVsbFZhbHVlKS5pc051bGwoKSk7CisgICAgUVZFUklGWShR
U2NyaXB0VmFsdWUoMCwgZmFsc2UpLmlzQm9vbCgpKTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1
ZSgwLCBpbnQoMSkpLmlzTnVtYmVyKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIHVp
bnQoMSkpLmlzTnVtYmVyKCkpOworICAgIFFWRVJJRlkoUVNjcmlwdFZhbHVlKDAsIDEuMCkuaXNO
dW1iZXIoKSk7CisgICAgUVZFUklGWShRU2NyaXB0VmFsdWUoMCwgImNpYW8iKS5pc1N0cmluZygp
KTsKKyAgICBRVkVSSUZZKFFTY3JpcHRWYWx1ZSgwLCBRU3RyaW5nKCJjaWFvIikpLmlzU3RyaW5n
KCkpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OnRvU3RyaW5nX2RhdGEoKQoreworICAg
IFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4oImNvZGUiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1u
PFFTdHJpbmc+KCJyZXN1bHQiKTsKKworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIpIDw8IFFT
dHJpbmc6OmZyb21Bc2NpaSgiJ2hlbGxvJyIpIDw8IFFTdHJpbmc6OmZyb21Bc2NpaSgiaGVsbG8i
KTsKKyAgICBRVGVzdDo6bmV3Um93KCJzdHJpbmcgdXRmIikgPDwgUVN0cmluZzo6ZnJvbVV0Zjgo
IifEhcWbxIfFvMW6w7PFgsWExJknIikgPDwgUVN0cmluZzo6ZnJvbVV0ZjgoIsSFxZvEh8W8xbrD
s8WCxYTEmSIpOworICAgIFFUZXN0OjpuZXdSb3coImV4cHJlc3Npb24iKSA8PCBRU3RyaW5nOjpm
cm9tQXNjaWkoIjEgKyA0IikgPDwgUVN0cmluZzo6ZnJvbUFzY2lpKCI1Iik7CisgICAgUVRlc3Q6
Om5ld1JvdygibnVsbCIpIDw8IFFTdHJpbmc6OmZyb21Bc2NpaSgibnVsbCIpIDw8IFFTdHJpbmc6
OmZyb21Bc2NpaSgibnVsbCIpOworICAgIFFUZXN0OjpuZXdSb3coImJvb2xlYW4iKSA8PCBRU3Ry
aW5nOjpmcm9tQXNjaWkoImZhbHNlIikgPDwgUVN0cmluZzo6ZnJvbUFzY2lpKCJmYWxzZSIpOwor
ICAgIFFUZXN0OjpuZXdSb3coInVuZGVmaW5lZCIpIDw8IFFTdHJpbmc6OmZyb21Bc2NpaSgidW5k
ZWZpbmVkIikgPDwgUVN0cmluZzo6ZnJvbUFzY2lpKCJ1bmRlZmluZWQiKTsKKyAgICBRVGVzdDo6
bmV3Um93KCJvYmplY3QiKSA8PCBRU3RyaW5nOjpmcm9tQXNjaWkoIm5ldyBPYmplY3QiKSA8PCBR
U3RyaW5nOjpmcm9tQXNjaWkoIltvYmplY3QgT2JqZWN0XSIpOworfQorCisvKiBUZXN0IGNvbnZl
cnNpb24gdG8gc3RyaW5nIGZyb20gZGlmZmVyZW50IEpTQyB0eXBlcyAqLwordm9pZCB0c3RfUVNj
cmlwdFZhbHVlOjp0b1N0cmluZygpCit7CisgICAgUUZFVENIKFFTdHJpbmcsIGNvZGUpOworICAg
IFFGRVRDSChRU3RyaW5nLCByZXN1bHQpOworCisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7Cisg
ICAgUUNPTVBBUkUoZW5naW5lLmV2YWx1YXRlKGNvZGUpLnRvU3RyaW5nKCksIHJlc3VsdCk7Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y29weUNvbnN0cnVjdG9yX2RhdGEoKQoreworICAg
IFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZSBubnVtYmVyKDEyMyk7Cisg
ICAgUVNjcmlwdFZhbHVlIG5zdHJpbmcoInBpbmciKTsKKyAgICBRU2NyaXB0VmFsdWUgbnVtYmVy
KGVuZ2luZS5ldmFsdWF0ZSgiMSIpKTsKKyAgICBRU2NyaXB0VmFsdWUgc3RyaW5nKGVuZ2luZS5l
dmFsdWF0ZSgiJ2ZvbyciKSk7CisgICAgUVNjcmlwdFZhbHVlIG9iamVjdChlbmdpbmUuZXZhbHVh
dGUoIm5ldyBPYmplY3QiKSk7CisgICAgUVNjcmlwdFZhbHVlIHVuZGVmaW5lZChlbmdpbmUuZXZh
bHVhdGUoInVuZGVmaW5lZCIpKTsKKyAgICBRU2NyaXB0VmFsdWUgbnVsbChlbmdpbmUuZXZhbHVh
dGUoIm51bGwiKSk7CisKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTY3JpcHRWYWx1ZT4oInZhbHVl
Iik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigicmVzdWx0Iik7CisKKyAgICBRVGVz
dDo6bmV3Um93KCJuYXRpdmUgbnVtYmVyIikgPDwgbm51bWJlciA8PCBRU3RyaW5nOjpudW1iZXIo
MTIzKTsKKyAgICBRVGVzdDo6bmV3Um93KCJuYXRpdmUgc3RyaW5nIikgPDwgbnN0cmluZyA8PCBR
U3RyaW5nKCJwaW5nIik7CisgICAgUVRlc3Q6Om5ld1JvdygibnVtYmVyIikgPDwgbnVtYmVyIDw8
IFFTdHJpbmc6OmZyb21Bc2NpaSgiMSIpOworICAgIFFUZXN0OjpuZXdSb3coInN0cmluZyIpIDw8
IHN0cmluZyA8PCBRU3RyaW5nOjpmcm9tQXNjaWkoImZvbyIpOworICAgIFFUZXN0OjpuZXdSb3co
Im9iamVjdCIpIDw8IG9iamVjdCA8PCBRU3RyaW5nOjpmcm9tQXNjaWkoIltvYmplY3QgT2JqZWN0
XSIpOworICAgIFFUZXN0OjpuZXdSb3coInVuZGVmaW5lZCIpIDw8IHVuZGVmaW5lZCA8PCBRU3Ry
aW5nOjpmcm9tQXNjaWkoInVuZGVmaW5lZCIpOworICAgIFFUZXN0OjpuZXdSb3coIm51bGwiKSA8
PCBudWxsIDw8IFFTdHJpbmc6OmZyb21Bc2NpaSgibnVsbCIpOworfQorCit2b2lkIHRzdF9RU2Ny
aXB0VmFsdWU6OmNvcHlDb25zdHJ1Y3RvcigpCit7CisgICAgUUZFVENIKFFTY3JpcHRWYWx1ZSwg
dmFsdWUpOworICAgIFFGRVRDSChRU3RyaW5nLCByZXN1bHQpOworCisgICAgUVZFUklGWSh2YWx1
ZS5pc1ZhbGlkKCkpOworICAgIFFTY3JpcHRWYWx1ZSB0bXAodmFsdWUpOworICAgIFFWRVJJRlko
dG1wLmlzVmFsaWQoKSk7CisgICAgUUNPTVBBUkUodG1wLnRvU3RyaW5nKCksIHJlc3VsdCk7Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6YXNzaWduT3BlcmF0b3JfZGF0YSgpCit7CisgICAg
Y29weUNvbnN0cnVjdG9yX2RhdGEoKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlOjphc3Np
Z25PcGVyYXRvcigpCit7CisgICAgUUZFVENIKFFTY3JpcHRWYWx1ZSwgdmFsdWUpOworICAgIFFG
RVRDSChRU3RyaW5nLCByZXN1bHQpOworCisgICAgUVNjcmlwdFZhbHVlIHRtcDsKKyAgICB0bXAg
PSB2YWx1ZTsKKyAgICBRVkVSSUZZKHRtcC5pc1ZhbGlkKCkpOworICAgIFFDT01QQVJFKHRtcC50
b1N0cmluZygpLCByZXN1bHQpOworfQorCisvKiBUZXN0IGludGVybmFsIGRhdGEgc2hhcmluZyBi
ZXR3ZWVuIGEgZGlmZnJlbmV0IFFTY3JpcHRWYWx1ZS4gKi8KK3ZvaWQgdHN0X1FTY3JpcHRWYWx1
ZTo6ZGF0YVNoYXJpbmcoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3Jp
cHRWYWx1ZSB2MTsKKyAgICBRU2NyaXB0VmFsdWUgdjIodjEpOworCisgICAgdjEgPSBlbmdpbmUu
ZXZhbHVhdGUoIjEiKTsgLy8gdjEgPT0gMSA7IHYyIGludmFsaWQuCisgICAgUVZFUklGWSh2MS5p
c1ZhbGlkKCkpOworICAgIFFWRVJJRlkoIXYyLmlzVmFsaWQoKSk7CisKKyAgICB2MiA9IHYxOyAv
LyB2MSA9PSAxOyB2MiA9PSAxLgorICAgIFFWRVJJRlkodjEuaXNWYWxpZCgpKTsKKyAgICBRVkVS
SUZZKHYyLmlzVmFsaWQoKSk7CisKKyAgICB2MSA9IGVuZ2luZS5ldmFsdWF0ZSgib2JqID0gbmV3
IERhdGUiKTsgLy8gdjEgPT0gW29iamVjdCBEYXRlXSA7IHYyID09IDEuCisgICAgUVZFUklGWSh2
MS5pc1ZhbGlkKCkpOworICAgIFFWRVJJRlkodjIuaXNWYWxpZCgpKTsKKyAgICBRVkVSSUZZKHYy
LnRvU3RyaW5nKCkgIT0gdjEudG9TdHJpbmcoKSk7CisKKyAgICAvLyBUT0RPIGFkZCBvYmplY3Qg
bWFuaXB1bGF0aW9uICh2MSBhbmQgdjIgcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0KS4KK30KKwor
dm9pZCB0c3RfUVNjcmlwdFZhbHVlOjpjb25zdHJ1Y3RvcnNfZGF0YSgpCit7CisgICAgUVNjcmlw
dEVuZ2luZSBlbmdpbmU7CisKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTY3JpcHRWYWx1ZT4oInZh
bHVlIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxRU3RyaW5nPigic3RyaW5nIik7CisgICAgUVRl
c3Q6OmFkZENvbHVtbjxib29sPigidmFsaWQiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+
KCJvYmplY3QiKTsKKworICAgIFFUZXN0OjpuZXdSb3coImludmFsaWQiKSA8PCBRU2NyaXB0VmFs
dWUoKSA8PCBRU3RyaW5nKCkgPDwgZmFsc2UgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygi
bnVtYmVyIikgPDwgUVNjcmlwdFZhbHVlKC0yMSkgPDwgUVN0cmluZzo6bnVtYmVyKC0yMSkgPDwg
dHJ1ZSA8PCBmYWxzZTsKKyAgICBRVGVzdDo6bmV3Um93KCJib29sIikgPDwgUVNjcmlwdFZhbHVl
KHRydWUpIDw8IFFTdHJpbmc6OmZyb21Bc2NpaSgidHJ1ZSIpIDw8IHRydWUgPDwgZmFsc2U7Cisg
ICAgUVRlc3Q6Om5ld1JvdygiZG91YmxlIikgPDwgUVNjcmlwdFZhbHVlKDIxLjEyKSA8PCBRU3Ry
aW5nOjpudW1iZXIoMjEuMTIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygi
c3RyaW5nIikgPDwgUVNjcmlwdFZhbHVlKCJBbGFNYUtvdGEiKSA8PCBRU3RyaW5nOjpmcm9tQXNj
aWkoIkFsYU1hS290YSIpIDw8IHRydWUgPDwgZmFsc2U7CisgICAgUVRlc3Q6Om5ld1Jvdygib2Jq
ZWN0IikgPDwgZW5naW5lLmV2YWx1YXRlKCJuZXcgT2JqZWN0IikgPDwgUVN0cmluZzo6ZnJvbUFz
Y2lpKCJbb2JqZWN0IE9iamVjdF0iKSA8PCB0cnVlIDw8IHRydWU7CisgICAgUVRlc3Q6Om5ld1Jv
dygibnVsbCIpIDw8IFFTY3JpcHRWYWx1ZShRU2NyaXB0VmFsdWU6Ok51bGxWYWx1ZSk8PCBRU3Ry
aW5nOjpmcm9tQXNjaWkoIm51bGwiKSA8PCB0cnVlIDw8IGZhbHNlOworICAgIFFUZXN0OjpuZXdS
b3coInVuZGVmIikgPDwgUVNjcmlwdFZhbHVlKFFTY3JpcHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWUp
PDwgUVN0cmluZzo6ZnJvbUFzY2lpKCJ1bmRlZmluZWQiKSA8PCB0cnVlIDw8IGZhbHNlOworfQor
Cit2b2lkIHRzdF9RU2NyaXB0VmFsdWU6OmNvbnN0cnVjdG9ycygpCit7CisgICAgUUZFVENIKFFT
Y3JpcHRWYWx1ZSwgdmFsdWUpOworICAgIFFGRVRDSChRU3RyaW5nLCBzdHJpbmcpOworICAgIFFG
RVRDSChib29sLCB2YWxpZCk7CisgICAgUUZFVENIKGJvb2wsIG9iamVjdCk7CisKKyAgICBRQ09N
UEFSRSh2YWx1ZS5pc1ZhbGlkKCksIHZhbGlkKTsKKyAgICBRQ09NUEFSRSh2YWx1ZS50b1N0cmlu
ZygpLCBzdHJpbmcpOworICAgIFFDT01QQVJFKHZhbHVlLmlzT2JqZWN0KCksIG9iamVjdCk7Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZTo6Y2FsbCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBl
bmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIHBpbmcgPSBlbmdpbmUuZXZhbHVhdGUoIiggZnVuY3Rp
b24oKSB7cmV0dXJuICdwaW5nJzt9ICkiKTsKKyAgICBRU2NyaXB0VmFsdWUgaW5jciA9IGVuZ2lu
ZS5ldmFsdWF0ZSgiKCBmdW5jdGlvbihpKSB7cmV0dXJuIGkgKyAxO30gKSIpOworICAgIFFTY3Jp
cHRWYWx1ZSBvbmUoMSk7CisgICAgUVNjcmlwdFZhbHVlIGZpdmUoNSk7CisgICAgUVNjcmlwdFZh
bHVlIHJlc3VsdDsKKworICAgIFFWRVJJRlkob25lLmlzVmFsaWQoKSk7CisgICAgUVZFUklGWShm
aXZlLmlzVmFsaWQoKSk7CisKKyAgICBRVkVSSUZZKHBpbmcuaXNWYWxpZCgpKTsKKyAgICBRVkVS
SUZZKHBpbmcuaXNGdW5jdGlvbigpKTsKKyAgICByZXN1bHQgPSBwaW5nLmNhbGwoKTsKKyAgICBR
VkVSSUZZKHJlc3VsdC5pc1ZhbGlkKCkpOworICAgIFFDT01QQVJFKHJlc3VsdC50b1N0cmluZygp
LCBRU3RyaW5nOjpmcm9tVXRmOCgicGluZyIpKTsKKworICAgIFFWRVJJRlkoaW5jci5pc1ZhbGlk
KCkpOworICAgIFFWRVJJRlkoaW5jci5pc0Z1bmN0aW9uKCkpOworICAgIHJlc3VsdCA9IGluY3Iu
Y2FsbChRU2NyaXB0VmFsdWUoKSwgUVNjcmlwdFZhbHVlTGlzdCgpIDw8IG9uZSk7CisgICAgUVZF
UklGWShyZXN1bHQuaXNWYWxpZCgpKTsKKyAgICBRQ09NUEFSRShyZXN1bHQudG9TdHJpbmcoKSwg
UVN0cmluZygiMiIpKTsKKworICAgIFFDT01QQVJFKGluY3IuY2FsbChRU2NyaXB0VmFsdWUoKSwg
UVNjcmlwdFZhbHVlTGlzdCgpIDw8IGZpdmUpLnRvU3RyaW5nKCksIFFTdHJpbmc6OmZyb21Bc2Np
aSgiNiIpKTsKKworICAgIFFWRVJJRlkoaW5jci5jYWxsKCkuaXNWYWxpZCgpKTsgLy8gRXhjZXB0
aW9uLgorfQorCitRVEVTVF9NQUlOKHRzdF9RU2NyaXB0VmFsdWUpCisjaW5jbHVkZSAidHN0X3Fz
Y3JpcHR2YWx1ZS5tb2MiCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0
cy5wcmkgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcmkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlMjM4ZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnByaQpAQCAtMCwwICsxLDI4IEBACitpc0VtcHR5KE9VVFBV
VF9ESVIpIHsKKyAgICBDT05GSUcoZGVidWcsIGRlYnVnfHJlbGVhc2UpIHsKKyAgICAgICAgT1VU
UFVUX0RJUj0kJFBXRC9XZWJLaXRCdWlsZC9EZWJ1ZworICAgIH0gZWxzZSB7ICMgUmVsZWFzZQor
ICAgICAgICBPVVRQVVRfRElSPSQkUFdEL1dlYktpdEJ1aWxkL1JlbGVhc2UKKyAgICB9Cit9CisK
KworUU1BS0VfUlBBVEhESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKK1FN
QUtFX0xJQkRJUiA9ICQkT1VUUFVUX0RJUi9saWIgJCRRTUFLRV9MSUJESVIKK21hYzohc3RhdGlj
OmNvbnRhaW5zKFFUX0NPTkZJRywgcXRfZnJhbWV3b3JrKTohQ09ORklHKHdlYmtpdF9ub19mcmFt
ZXdvcmspIHsKKyAgICBMSUJTICs9IC1mcmFtZXdvcmsgUXRTY3JpcHQKKyAgICBRTUFLRV9GUkFN
RVdPUktQQVRIID0gJCRPVVRQVVRfRElSL2xpYiAkJFFNQUtFX0ZSQU1FV09SS1BBVEgKK30gZWxz
ZSB7CisgICAgd2luMzItKnx3aW5jZSogeworICAgICAgICBMSUJTICs9IC1sUXRTY3JpcHQkJHtR
VF9NQUpPUl9WRVJTSU9OfQorICAgIH0gZWxzZSB7CisgICAgICAgIExJQlMgKz0gLWxRdFNjcmlw
dAorICAgIH0KK30KKworQ09ORklHKHJlbGVhc2UsIGRlYnVnfHJlbGVhc2UpIHsKKyAgICBERUZJ
TkVTICs9IE5ERUJVRworfQorCitJTkNMVURFUEFUSCArPSAkJFBXRC8uLi9hcGkKKwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvIGIvSmF2YVNjcmlwdENvcmUv
cXQvdGVzdHMvdGVzdHMucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZl
NWVkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5w
cm8KQEAgLTAsMCArMSwzIEBACitURU1QTEFURSA9IHN1YmRpcnMKK1NVQkRJUlMgPSAgIHFzY3Jp
cHRlbmdpbmUgXAorICAgICAgICAgICAgcXNjcmlwdHZhbHVlCmRpZmYgLS1naXQgYS9XZWJLaXQu
cHJvIGIvV2ViS2l0LnBybwppbmRleCA5YjVkMjUwLi4yOWEzYThlIDEwMDY0NAotLS0gYS9XZWJL
aXQucHJvCisrKyBiL1dlYktpdC5wcm8KQEAgLTIxLDQgKzIxLDEwIEBAIFNVQkRJUlMgKz0gXAog
CiB9CiAKK2J1aWxkLXF0c2NyaXB0IHsKKyAgICBTVUJESVJTICs9IFwKKyAgICAgICAgSmF2YVNj
cmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybyBcCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3F0
L3Rlc3RzCit9CisKIGluY2x1ZGUoV2ViS2l0L3F0L2RvY3MvZG9jcy5wcmkpCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBiNzZkY2I5
Li42NDEyMTMwIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wMS0yMCAgSmVkcnplaiBOb3dhY2tp
ICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXJzdCBzdGVwcyBvZiB0aGUgUXRTY3JpcHQgQVBJLgor
ICAgICAgICAKKyAgICAgICAgVHdvIG5ldyBjbGFzc2VzIHdlcmUgY3JlYXRlZDsgUVNjcmlwdEVu
Z2luZSBhbmQgUVNjcmlwdFZhbHVlLgorICAgICAgICBUaGUgZmlyc3Qgc2hvdWxkIGVuY2Fwc3Vs
YXRlIGEgamF2YXNjcmlwdCBjb250ZXh0IGFuZCB0aGUgc2Vjb25kIGEgc2NyaXB0CisgICAgICAg
IHZhbHVlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBBUEkgaXMgc3RpbGwgaW4gZGV2ZWxvcG1l
bnQsIHNvIGl0IGlzbid0IGNvbXBpbGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIFRvIHRyaWdnZXIg
Y29tcGlsYXRpb24sIHBhc3MgLS1xbWFrZWFyZz0iQ09ORklHKz1idWlsZC1xdHNjcmlwdCIgdG8K
KyAgICAgICAgYnVpbGQtd2Via2l0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMjU2NQorCisgICAgICAgICogZG9jcy9xdHdlYmtpdC5xZG9jY29u
ZjoKKwogMjAxMC0wMS0xOSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9k
b2NzL3F0d2Via2l0LnFkb2Njb25mIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYK
aW5kZXggOGVlOGY2OS4uMjkyYzEyNCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L2RvY3MvcXR3ZWJr
aXQucWRvY2NvbmYKKysrIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYKQEAgLTQs
NyArNCw3IEBAIHByb2plY3QgICAgID0gcXR3ZWJraXQKIGRlc2NyaXB0aW9uID0gIlF0IFdlYktp
dCBBUEkgRG9jdW1lbnRhdGlvbiIKIAogaGVhZGVyZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0L0Fw
aQotc291cmNlZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9k
b2NzCitzb3VyY2VkaXJzID0gJFNSQ0RJUi9XZWJLaXQvcXQvQXBpICRTUkNESVIvV2ViS2l0L3F0
L2RvY3MgJFNSQ0RJUi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkKIG91dHB1dGRpciA9ICRPVVRQVVRf
RElSL2RvYy9odG1sCiBvdXRwdXRmb3JtYXRzID0gSFRNTAogc291cmNlcy5maWxlZXh0ZW5zaW9u
cyAgPSAiKi5jcHAgKi5kb2MgKi5xZG9jICouaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>