<?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>84907</bug_id>
          
          <creation_ts>2012-04-25 16:52:14 -0700</creation_ts>
          <short_desc>Memory wasted in JSString for non-rope strings</short_desc>
          <delta_ts>2012-04-27 16:50:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>610164</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-25 16:52:14 -0700</bug_when>
    <thetext>JSString effectively has four pointers to data, a UString, which contains a pointer to a StringImpl, and 3 pointers to other JSStrings in the case the string is a rope made up of other strings.

For strings created from a UString or as a substring of another JSString, the three &quot;fiber&quot; pointers are not used.

We can save the space of these three pointers by splitting JSString into a class that has a UString and another class that is a rope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610183</commentid>
    <comment_count>1</comment_count>
      <attachid>138902</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-25 17:08:57 -0700</bug_when>
    <thetext>Created attachment 138902
Proposed Patch

This appears overall neutral on performance tests.  The only test that looks like it might slow down in SunSpider string-base64.  Other SunSpider tests seem to offset that loss so that SunSpider nets out with no change.

Benchmark report for SunSpider, V8, and Kraken on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Baseline&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/jsc (r115220)
&quot;StringSplit&quot; at /Volumes/Data/src/webkit.work/WebKitBuild/Release/jsc (r115220)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                             Baseline              StringSplit                                   
SunSpider:
   3d-cube                                7.1923+-0.0878          7.1591+-0.1012       
   3d-morph                               7.3342+-0.1166    ?     7.3962+-0.0787       ?
   3d-raytrace                            9.6550+-0.1114          9.5425+-0.0897         might be 1.0118x faster
   access-binary-trees                    1.8062+-0.0146    ?     1.8078+-0.0155       ?
   access-fannkuch                        7.4821+-0.0565    ?     7.5589+-0.0891       ? might be 1.0103x slower
   access-nbody                           3.8797+-0.0511    ?     3.8995+-0.0594       ?
   access-nsieve                          3.6100+-0.0518    ?     3.6761+-0.0453       ? might be 1.0183x slower
   bitops-3bit-bits-in-byte               1.3877+-0.0126          1.3839+-0.0155       
   bitops-bits-in-byte                    5.4218+-0.0903          5.3617+-0.0706         might be 1.0112x faster
   bitops-bitwise-and                     3.4084+-0.0385    ?     3.4516+-0.0456       ? might be 1.0127x slower
   bitops-nsieve-bits                     3.3156+-0.0421    !     3.3741+-0.0106       ! definitely 1.0176x slower
   controlflow-recursive                  2.4107+-0.0339    ?     2.4555+-0.0269       ? might be 1.0185x slower
   crypto-aes                             8.1091+-0.0905          8.0742+-0.1588       
   crypto-md5                             3.3620+-0.0474          3.3256+-0.0533         might be 1.0110x faster
   crypto-sha1                            2.6600+-0.0604    ?     2.6639+-0.0488       ?
   date-format-tofte                     11.1965+-0.2238    ?    11.2499+-0.1706       ?
   date-format-xparb                     11.0137+-0.1682         10.7141+-0.1453         might be 1.0280x faster
   math-cordic                            4.1943+-0.0542          4.1473+-0.0333         might be 1.0113x faster
   math-partial-sums                      9.7927+-0.1006          9.7874+-0.0972       
   math-spectral-norm                     2.8539+-0.0344          2.8480+-0.0384       
   regexp-dna                             9.7621+-0.0957    ?     9.7827+-0.1204       ?
   string-base64                          4.7095+-0.0715    !     4.8647+-0.0832       ! definitely 1.0330x slower
   string-fasta                           7.3884+-0.0862          7.3108+-0.1465         might be 1.0106x faster
   string-tagcloud                       12.9977+-0.1691         12.9032+-0.1906       
   string-unpack-code                    21.6388+-0.3067         21.5812+-0.2760       
   string-validate-input                  6.6081+-0.1529          6.5152+-0.1037         might be 1.0143x faster

   &lt;arithmetic&gt; *                         6.6612+-0.0349          6.6475+-0.0364         might be 1.0021x faster
   &lt;geometric&gt;                            5.4346+-0.0310    ?     5.4368+-0.0296       ? might be 1.0004x slower
   &lt;harmonic&gt;                             4.3992+-0.0283    ?     4.4095+-0.0260       ? might be 1.0023x slower

                                             Baseline              StringSplit                                   
V8:
   crypto                                75.6874+-0.6223         75.3308+-0.5333       
   deltablue                            154.9205+-1.1508    ?   155.4980+-1.4269       ?
   earley-boyer                          95.1838+-1.3352         94.8811+-1.4211       
   raytrace                              53.1343+-0.2090    ?    53.3965+-0.4181       ?
   regexp                                95.1276+-0.4268         94.7119+-0.4922       
   richards                             141.0346+-1.0650        139.7111+-0.5126       
   splay                                 90.4939+-11.5016   ?    90.6910+-10.9277      ?

   &lt;arithmetic&gt;                         100.7975+-1.8471        100.6029+-1.8123         might be 1.0019x faster
   &lt;geometric&gt; *                         95.2155+-1.8432         95.0883+-1.8053         might be 1.0013x faster
   &lt;harmonic&gt;                            89.7821+-1.6562         89.7419+-1.6340         might be 1.0004x faster

                                             Baseline              StringSplit                                   
Kraken:
   ai-astar                             821.3973+-10.8685   ?   822.8782+-10.8859      ?
   audio-beat-detection                 196.3768+-1.2337        195.9786+-1.0787       
   audio-dft                            289.4762+-2.0124    ?   291.9755+-3.5931       ?
   audio-fft                            118.2653+-0.4089    ?   118.5623+-0.3563       ?
   audio-oscillator                     305.7648+-1.4518    ?   307.1338+-1.4232       ?
   imaging-darkroom                     297.0695+-8.0269        296.6311+-8.5114       
   imaging-desaturate                   221.4177+-0.3711    ?   221.4266+-0.4326       ?
   imaging-gaussian-blur                459.9391+-2.2574        458.4150+-0.6549       
   json-parse-financial                  63.0999+-0.2543    ^    62.0548+-0.2780       ^ definitely 1.0168x faster
   json-stringify-tinderbox              79.7542+-1.2215    ^    77.9880+-0.3781       ^ definitely 1.0226x faster
   stanford-crypto-aes                   84.5476+-0.4595         83.8717+-0.4741       
   stanford-crypto-ccm                   77.8462+-0.8944         76.5901+-0.7101         might be 1.0164x faster
   stanford-crypto-pbkdf2               186.2330+-0.8928    ?   187.4214+-0.9307       ?
   stanford-crypto-sha256-iterative      89.8800+-0.2906         89.8685+-0.5059       

   &lt;arithmetic&gt; *                       235.0763+-1.0246        235.0568+-1.2835         might be 1.0001x faster
   &lt;geometric&gt;                          176.4131+-0.5488        175.8282+-0.5446         might be 1.0033x faster
   &lt;harmonic&gt;                           138.4484+-0.3933    ^   137.3959+-0.2900       ^ definitely 1.0077x faster

                                             Baseline              StringSplit                                   
All benchmarks:
   &lt;arithmetic&gt;                          88.7200+-0.4915         88.6777+-0.5338         might be 1.0005x faster
   &lt;geometric&gt;                           23.4720+-0.1403         23.4495+-0.1426         might be 1.0010x faster
   &lt;harmonic&gt;                             7.7185+-0.0497    ?     7.7350+-0.0458       ? might be 1.0021x slower

                                             Baseline              StringSplit                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.0219+-0.4465         52.9607+-0.4533         might be 1.0012x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610193</commentid>
    <comment_count>2</comment_count>
      <attachid>138902</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-25 17:16:32 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12524875</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610198</commentid>
    <comment_count>3</comment_count>
      <attachid>138902</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-25 17:22:54 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12524874</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610209</commentid>
    <comment_count>4</comment_count>
      <attachid>138902</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-25 17:32:15 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12525690</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610247</commentid>
    <comment_count>5</comment_count>
      <attachid>138902</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-25 18:03:26 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12535412</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610269</commentid>
    <comment_count>6</comment_count>
      <attachid>138902</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-25 18:19:31 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12520724</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610314</commentid>
    <comment_count>7</comment_count>
      <attachid>138902</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-25 19:33:32 -0700</bug_when>
    <thetext>Comment on attachment 138902
Proposed Patch

Attachment 138902 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12518741</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610693</commentid>
    <comment_count>8</comment_count>
      <attachid>139017</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-26 09:59:38 -0700</bug_when>
    <thetext>Created attachment 139017
Patch with Speculative Build Fix

clang doesn&apos;t produce the errors.

Added jsString() and jsStringFromArguments() as friends to JSRopeString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610707</commentid>
    <comment_count>9</comment_count>
      <attachid>139017</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-26 10:21:14 -0700</bug_when>
    <thetext>Comment on attachment 139017
Patch with Speculative Build Fix

Attachment 139017 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12529895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610812</commentid>
    <comment_count>10</comment_count>
      <attachid>139041</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-26 12:21:14 -0700</bug_when>
    <thetext>Created attachment 139041
Updated patch with speculative Windows fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610858</commentid>
    <comment_count>11</comment_count>
      <attachid>139041</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-26 12:58:37 -0700</bug_when>
    <thetext>Comment on attachment 139041
Updated patch with speculative Windows fix

Attachment 139041 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12490900</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610910</commentid>
    <comment_count>12</comment_count>
      <attachid>139058</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-26 13:35:27 -0700</bug_when>
    <thetext>Created attachment 139058
Another Windows build fix - added new symbol to exports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611156</commentid>
    <comment_count>13</comment_count>
      <attachid>139058</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-26 18:24:24 -0700</bug_when>
    <thetext>Comment on attachment 139058
Another Windows build fix - added new symbol to exports

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

Looks good, but some small tweaks required before landing.

&gt; Source/JavaScriptCore/runtime/JSString.cpp:63
&gt; +    if (thisObject-&gt;isJSRopeStringObject())
&gt; +        JSRopeString::visitChildren(thisObject, visitor);
&gt; +}
&gt; +
&gt; +void JSRopeString::visitChildren(JSString* thisObject, SlotVisitor&amp; visitor)

It&apos;s slightly dirty pool to have two classes with distinct GC visit functions but identical ClassInfos. ClassInfo is supposed to contain a pointer to an object&apos;s visitChildren function. It&apos;s also against our convention to have a subclass &quot;visitChildren&quot; function that never calls its base class&apos;s &quot;visitChildren&quot; function.

I think a slightly better way to represent this is to fold the rope-style marking code into JSString::visitChildren. That way, JSString&apos;s ClassInfo is still &quot;true&quot;, and JSRopeString is just an implementation detail for the fact that a JSString may be variable-sized.

&gt; Source/JavaScriptCore/runtime/JSString.cpp:65
&gt; +    JSRopeString* thisObjectAsRope = reinterpret_cast&lt;JSRopeString*&gt;(thisObject);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

&gt; Source/JavaScriptCore/runtime/JSString.cpp:157
&gt; +            JSRopeString* currentFiberAsRope = reinterpret_cast&lt;JSRopeString*&gt;(currentFiber);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

&gt; Source/JavaScriptCore/runtime/JSString.cpp:186
&gt; +            JSRopeString* currentFiberAsRope = reinterpret_cast&lt;JSRopeString*&gt;(currentFiber);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

&gt; Source/JavaScriptCore/runtime/JSString.h:167
&gt; +        bool isRope() const { return m_value.isNull(); }
&gt; +        bool is8Bit() const { return m_is8Bit; }
&gt; +        bool isJSRopeStringObject() const { return m_isJSRopeStringObject; }

I&apos;d rather not have two different ways to ask &quot;Am I a rope?&quot; -- It&apos;s hard to tell which one to use when. Instead, please always use the existing isRope() function, and remove the new one.

&gt; Source/JavaScriptCore/runtime/JSString.h:349
&gt; +            reinterpret_cast&lt;const JSRopeString*&gt;(this)-&gt;resolveRope(exec);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

&gt; Source/JavaScriptCore/runtime/JSString.h:356
&gt; +            reinterpret_cast&lt;const JSRopeString*&gt;(this)-&gt;resolveRope(0);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

&gt; Source/JavaScriptCore/runtime/JSString.h:364
&gt; +            return reinterpret_cast&lt;JSRopeString*&gt;(this)-&gt;getIndexSlowCase(exec, i);

static_cast is the C++ cast for casting a base class pointer to a subclass pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611670</commentid>
    <comment_count>14</comment_count>
      <attachid>139228</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-27 10:53:09 -0700</bug_when>
    <thetext>Created attachment 139228
Patch updated from review comments

(In reply to comment #13)
&gt; (From update of attachment 139058 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139058&amp;action=review
&gt; 
&gt; Looks good, but some small tweaks required before landing.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSString.cpp:63
&gt; &gt; +    if (thisObject-&gt;isJSRopeStringObject())
&gt; &gt; +        JSRopeString::visitChildren(thisObject, visitor);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void JSRopeString::visitChildren(JSString* thisObject, SlotVisitor&amp; visitor)
&gt; 
&gt; It&apos;s slightly dirty pool to have two classes with distinct GC visit functions but identical ClassInfos. ClassInfo is supposed to contain a pointer to an object&apos;s visitChildren function. It&apos;s also against our convention to have a subclass &quot;visitChildren&quot; function that never calls its base class&apos;s &quot;visitChildren&quot; function.
&gt; 
&gt; I think a slightly better way to represent this is to fold the rope-style marking code into JSString::visitChildren. That way, JSString&apos;s ClassInfo is still &quot;true&quot;, and JSRopeString is just an implementation detail for the fact that a JSString may be variable-sized.

Modified static JSRopeString::visitChildren() to JSRopeString::visitFibers().

&gt; &gt; Source/JavaScriptCore/runtime/JSString.cpp:65
&gt; &gt; +    JSRopeString* thisObjectAsRope = reinterpret_cast&lt;JSRopeString*&gt;(thisObject);
&gt; 
&gt; static_cast is the C++ cast for casting a base class pointer to a subclass pointer.

Fixed all cited reinterpret_casts to static_casts.

&gt; &gt; Source/JavaScriptCore/runtime/JSString.h:167
&gt; &gt; +        bool isRope() const { return m_value.isNull(); }
&gt; &gt; +        bool is8Bit() const { return m_is8Bit; }
&gt; &gt; +        bool isJSRopeStringObject() const { return m_isJSRopeStringObject; }
&gt; 
&gt; I&apos;d rather not have two different ways to ask &quot;Am I a rope?&quot; -- It&apos;s hard to tell which one to use when. Instead, please always use the existing isRope() function, and remove the new one.

They actually serve two different purposes.  isRope() is really isUnresolvedRope() so I changed it&apos;s name.  When a JSRopeString is created, isRope() (now isUnresolvedRope()) is true, but when the rope is resolved, it becomes false.  isJSRopeStringObject() will be true throughout the life of the JSRopeObject and is used only in JSString::visitChildren() to make sure we visit the fibers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611692</commentid>
    <comment_count>15</comment_count>
      <attachid>139233</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-27 11:08:53 -0700</bug_when>
    <thetext>Created attachment 139233
Updated patch after talking to Geoff about isRope / isJSRopeObject()

Eliminated isJSRopeObject() and reverted isUnresolvedRope() to isRope().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611961</commentid>
    <comment_count>16</comment_count>
      <attachid>139233</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-27 15:45:54 -0700</bug_when>
    <thetext>Comment on attachment 139233
Updated patch after talking to Geoff about isRope / isJSRopeObject()

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612023</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-04-27 16:50:47 -0700</bug_when>
    <thetext>Committed r115516: &lt;http://trac.webkit.org/changeset/115516&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138902</attachid>
            <date>2012-04-25 17:08:57 -0700</date>
            <delta_ts>2012-04-26 09:59:38 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>84907.patch</filename>
            <type>text/plain</type>
            <size>23940</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MjYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEyLTA0LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoQ2xhc3NJbmZvKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZVNsb3dDYXNlOCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkp
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aXNSb3BlKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzOEJpdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
Ojppc0pTUm9wZVN0cmluZ09iamVjdCk6CisgICAgICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAg
ICAoUm9wZUJ1aWxkZXIpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVy
OjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6
OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OnJlbGVh
c2UpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OkpTUm9wZVN0cmluZyk6CisgICAgICAgIChKU0M6
OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OmNyZWF0ZU51bGwpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0
cnlHZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRJbmRleCk6CisgICAgICAg
IChKU0M6OmpzU3RyaW5nQnVpbGRlcik6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6
CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJn
dW1lbnRzKToKKwogMjAxMi0wNC0yNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIEJpb2xhYiBkaXNhc3RlciBjcmFzaGVzIG9uIFRvVApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDYgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAogICAgIH0sIFwKLSAgICBzaXplb2YoQ2xhc3NOYW1l
KSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKICAgICBzdHJ1Y3Qg
Q2xhc3NJbmZvIHsKQEAgLTE4MCw4ICsxNzksNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJl
ciB7IFwKIAogICAgICAgICBNZXRob2RUYWJsZSBtZXRob2RUYWJsZTsKIAotICAgICAgICBzaXpl
X3QgY2VsbFNpemU7Ci0gICAgICAgIAogICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5
U3RvcmFnZVR5cGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXApCiAgICAgewogI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IFQ6OnNfaW5m
by5jZWxsU2l6ZSk7CiAgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlh
bGl6aW5nT2JqZWN0KCkpOwogICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDExNTIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsOSArMzYsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Vic3RyaW5nRnJvbVJvcGVDCiAK
IGNvbnN0IENsYXNzSW5mbyBKU1N0cmluZzo6c19pbmZvID0geyAic3RyaW5nIiwgMCwgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1N0cmluZykgfTsKIAotdm9pZCBKU1N0cmluZzo6Um9wZUJ1
aWxkZXI6OmV4cGFuZCgpCit2b2lkIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OmV4cGFuZCgp
CiB7Ci0gICAgQVNTRVJUKG1faW5kZXggPT0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoKTsKKyAgICBBU1NFUlQobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoKTsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBtX2pzU3RyaW5nOwogICAgIG1f
anNTdHJpbmcgPSBqc1N0cmluZ0J1aWxkZXIoJm1fZ2xvYmFsRGF0YSk7CiAgICAgbV9pbmRleCA9
IDA7CkBAIC01NSwxMyArNTUsMjMgQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIHRoaXNP
YmplY3QtPm1fZmliZXJzW2ldOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2ZpYmVyc1tpXSk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmlzSlNSb3BlU3Ry
aW5nT2JqZWN0KCkpCisgICAgICAgIEpTUm9wZVN0cmluZzo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKK30KKwordm9pZCBKU1JvcGVTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNT
dHJpbmcqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTUm9wZVN0
cmluZyogdGhpc09iamVjdEFzUm9wZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4o
dGhpc09iamVjdCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoICYmIHRoaXNPYmplY3RBc1JvcGUtPm1fZmliZXJzW2ldOyArK2kpCisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0QXNSb3BlLT5tX2ZpYmVyc1tpXSk7CiB9CiAKLXZv
aWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3ZvaWQgSlNS
b3BlU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzUm9wZSgpKTsKKyAgICBBU1NFUlQoaXNKU1JvcGVTdHJpbmdPYmplY3QoKSk7CiAKICAg
ICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKQEAgLTEyOCw3ICsxMzgs
NyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAvLyBWZWN0b3Ig
YmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNhdGVuYXRpb24sIGJ1dCBieSB3b3JraW5nIGJhY2t3
YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmlsbCB0aGUgcXVldWUgd2l0aCB0aGUgbnVtYmVyIG9m
IHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxldmVsIGluIGEKIC8vIHJvcGUtb2Ytcm9wZXMuKSAg
ICAKLXZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKiBidWZmZXIpIGNv
bnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqIGJ1ZmZl
cikgY29uc3QKIHsKICAgICBMQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsgLy8g
V2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSByb3BlLgogICAgIFZlY3RvcjxK
U1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFB1dHRpbmcgc3RyaW5ncyBpbnRvIGEgVmVjdG9y
IGlzIG9ubHkgT0sgYmVjYXVzZSB0aGVyZSBhcmUgbm8gR0MgcG9pbnRzIGluIHRoaXMgbWV0aG9k
LgpAQCAtMTQ0LDggKzE1NCw5IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4
KExDaGEKICAgICAgICAgd29ya1F1ZXVlLnJlbW92ZUxhc3QoKTsKIAogICAgICAgICBpZiAoY3Vy
cmVudEZpYmVyLT5pc1JvcGUoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBjdXJyZW50RmliZXItPm1fZmliZXJzW2ldOyAr
K2kpCi0gICAgICAgICAgICAgICAgd29ya1F1ZXVlLmFwcGVuZChjdXJyZW50RmliZXItPm1fZmli
ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogY3VycmVudEZpYmVyQXNS
b3BlID0gcmVpbnRlcnByZXRfY2FzdDxKU1JvcGVTdHJpbmcqPihjdXJyZW50RmliZXIpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAm
JiBjdXJyZW50RmliZXJBc1JvcGUtPm1fZmliZXJzW2ldOyArK2kpCisgICAgICAgICAgICAgICAg
d29ya1F1ZXVlLmFwcGVuZChjdXJyZW50RmliZXJBc1JvcGUtPm1fZmliZXJzW2ldLmdldCgpKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTE1OSw3ICsxNzAsNyBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhCiAgICAgQVNTRVJUKCFpc1Jv
cGUoKSk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqIGJ1
ZmZlcikgY29uc3QKK3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFy
KiBidWZmZXIpIGNvbnN0CiB7CiAgICAgVUNoYXIqIHBvc2l0aW9uID0gYnVmZmVyICsgbV9sZW5n
dGg7IC8vIFdlIHdpbGwgYmUgd29ya2luZyBiYWNrd2FyZHMgb3ZlciB0aGUgcm9wZS4KICAgICBW
ZWN0b3I8SlNTdHJpbmcqLCAzMj4gd29ya1F1ZXVlOyAvLyBUaGVzZSBzdHJpbmdzIGFyZSBrZXB0
IGFsaXZlIGJ5IHRoZSBwYXJlbnQgcm9wZSwgc28gdXNpbmcgYSBWZWN0b3IgaXMgT0suCkBAIC0x
NzIsOCArMTgzLDkgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhcgog
ICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgIGlmIChjdXJyZW50Rmli
ZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4
SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV07ICsraSkKLSAg
ICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV0u
Z2V0KCkpOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBjdXJyZW50RmliZXJBc1JvcGUgPSBy
ZWludGVycHJldF9jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJlcik7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJl
bnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgICAgICAgICB3b3JrUXVl
dWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV0uZ2V0KCkpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTg3LDcgKzE5OSw3IEBAIHZvaWQgSlNT
dHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIKICAgICBBU1NFUlQoIWlzUm9wZSgpKTsK
IH0KIAotdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
dm9pZCBKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1f
ZmliZXJzW2ldOyArK2kpCiAgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7CkBAIC0xOTcsNyAr
MjA5LDcgQEAgdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleAogICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiB9CiAKLUpTU3RyaW5nKiBKU1N0cmluZzo6
Z2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCitKU1N0cmluZyog
SlNSb3BlU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKIHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIHJlc29sdmVSb3BlKGV4ZWMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTUy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpT
U3RyaW5nOworICAgIGNsYXNzIEpTUm9wZVN0cmluZzsKICAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKICAgICBKU1N0cmluZyoganNFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEqKTsK
QEAgLTU4LDU1ICs1OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU1N0cmluZyoganNPd25l
ZFN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJik7IAogICAgIEpTU3RyaW5nKiBq
c093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgCiAKLSAgICBKU1N0cmlu
ZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIEpTUm9wZVN0cmluZyoganNT
dHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOwogCiAgICAgY2xhc3MgSlNTdHJpbmcgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTcGVj
aWFsaXplZFRodW5rSklUOworICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3RyaW5nOwogICAg
ICAgICBmcmllbmQgc3RydWN0IFRodW5rSGVscGVyczsKLSAgICAgICAgZnJpZW5kIEpTU3RyaW5n
KiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICAgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
ICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgUm9w
ZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICAgICAgICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAgICAgLCBtX2pzU3RyaW5nKGpzU3Ry
aW5nQnVpbGRlcigmZ2xvYmFsRGF0YSkpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYXBwZW5kKEpT
U3RyaW5nKiBqc1N0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobV9p
bmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgIGV4cGFuZCgpOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fZmliZXJzW21f
aW5kZXgrK10uc2V0KG1fZ2xvYmFsRGF0YSwgbV9qc1N0cmluZywganNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIG1fanNTdHJpbmctPm1fbGVuZ3RoICs9IGpzU3RyaW5nLT5tX2xlbmd0aDsKLSAg
ICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2lzOEJpdCA9IG1fanNTdHJpbmctPm1faXM4Qml0
ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNT
dHJpbmcqIHJlbGVhc2UoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTU3RyaW5n
KiB0bXAgPSBtX2pzU3RyaW5nOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAwOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0bXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9Ci0KLSAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7Ci0KLSAgICAgICAgICAgIEpT
R2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwotICAgICAgICAgICAgSlNTdHJpbmcqIG1fanNTdHJp
bmc7Ci0gICAgICAgICAgICBzaXplX3QgbV9pbmRleDsKLSAgICAgICAgfTsKLQogICAgIHByaXZh
dGU6CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGds
b2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQpAQCAtMTE5LDE5ICs4NSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9sZW5ndGgg
PSAwOwotICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBsZW5n
dGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAg
ICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmltcGwo
KS0+aXM4Qml0KCk7CisgICAgICAgICAgICBtX2lzSlNSb3BlU3RyaW5nT2JqZWN0ID0gZmFsc2U7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCkBAIC0xNDAsMzUgKzEwMCwx
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgICAgICBt
X2lzOEJpdCA9IG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKTsKKyAgICAgICAgICAgIG1faXNKU1Jv
cGVTdHJpbmdPYmplY3QgPSBmYWxzZTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3Ry
aW5nKiBzMikKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5n
dGgoKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0
KCkpOwotICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsK
LSAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
ICsgczMtPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYm
IHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKLSAgICAgICAgICAgIG1fZmliZXJzWzBd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7Ci0gICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgczIpOwotICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHMzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBKU1N0cmluZyog
Y3JlYXRlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3QgPSBmYWxz
ZTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpT
U3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHZhbHVlKQogICAgICAgICB7CkBAIC0xNzksMTggKzEyMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBs
ZW5ndGgsIGNvc3QpOwogICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICAgICAgfQot
ICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0
cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbmV3U3Ry
aW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOwotICAgICAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBK
U1N0cmluZyogczMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIHMxLCBzMiwgczMpOwotICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3du
ZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwpAQCAtMjAwLDE4ICsxMzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAg
ICAgIH0KIAotICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgICAgICAg
ICByZXNvbHZlUm9wZShleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJlc29sdmVSb3Bl
KDApOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgY29u
c3QgVVN0cmluZyYgdmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGNvbnN0IFVTdHJp
bmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKQEAgLTIyNiw3ICsxNDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0
dXJuIGkgPCBtX2xlbmd0aDsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRl
KiwgdW5zaWduZWQpOwotICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewpAQCAtMjQwLDMwICsxNjEsMjYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBib29sIGlzUm9wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KKyAgICAgICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQorICAgICAgICBib29sIGlzSlNSb3BlU3RyaW5nT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc0pTUm9wZVN0cmluZ09iamVjdDsgfQorCisgICAgICAg
IC8vIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIFVTdHJpbmcgb3IgYSByb3Bl
IG9mIGZpYmVycy4KKyAgICAgICAgYm9vbCBtX2lzOEJpdCA6IDE7CisgICAgICAgIGJvb2wgbV9p
c0pTUm9wZVN0cmluZ09iamVjdCA6IDE7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAg
ICAgICBtdXRhYmxlIFVTdHJpbmcgbV92YWx1ZTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIAotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmVSb3BlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAg
ICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7Ci0gICAgICAgIHZvaWQg
cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OwotICAgICAgICB2b2lkIG91dE9mTWVt
b3J5KEV4ZWNTdGF0ZSopIGNvbnN0OwotCiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlz
T2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIC8vIEFjdHVhbGx5IGdldFBy
b3BlcnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5U2xvdCAoc2VlIEpTQ2VsbCkuCiAgICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoID0gMzsKLQotICAgICAgICAvLyBB
IHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBm
aWJlcnMuCi0gICAgICAgIGJvb2wgbV9pczhCaXQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKLSAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7Ci0gICAgICAgIG11dGFibGUg
Rml4ZWRBcnJheTxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+LCBzX21heEludGVybmFsUm9wZUxlbmd0
aD4gbV9maWJlcnM7Ci0KLSAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlLmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9p
czhCaXQ7IH0KICAgICAgICAgVVN0cmluZyYgc3RyaW5nKCkgeyBBU1NFUlQoIWlzUm9wZSgpKTsg
cmV0dXJuIG1fdmFsdWU7IH0KIAogICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVj
U3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CkBAIC0yNzIsNiArMTg5LDExNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB9
OwogCisgICAgY2xhc3MgSlNSb3BlU3RyaW5nIDogcHVibGljIEpTU3RyaW5nIHsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTU3RyaW5nOworCisgICAgICAgIGZyaWVuZCBKU1JvcGVTdHJpbmcqIGpz
U3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqKTsKKworICAgICAgICBjbGFzcyBSb3BlQnVpbGRl
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFJvcGVCdWlsZGVyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgICAgICAgICAsIG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZnbG9iYWxEYXRhKSkKKyAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2b2lkIGFwcGVuZChKU1N0cmluZyoganNTdHJpbmcpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKG1faW5kZXggPT0gSlNSb3BlU3RyaW5nOjpzX21heEludGVy
bmFsUm9wZUxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgICAg
ICAgICAgbV9qc1N0cmluZy0+bV9maWJlcnNbbV9pbmRleCsrXS5zZXQobV9nbG9iYWxEYXRhLCBt
X2pzU3RyaW5nLCBqc1N0cmluZyk7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9sZW5n
dGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1f
aXM4Qml0ID0gbV9qc1N0cmluZy0+bV9pczhCaXQgJiYganNTdHJpbmctPm1faXM4Qml0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIHJlbGVhc2UoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZyogdG1wID0gbV9qc1N0cmluZzsK
KyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dG1wOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJl
dHVybiBtX2pzU3RyaW5nLT5tX2xlbmd0aDsgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICB2b2lkIGV4cGFuZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbV9qc1N0cmluZzsK
KyAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBKU1JvcGVTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgICAgICAgICAgOiBKU1N0cmluZyhnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+
bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4
Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmpl
Y3QgPSB0cnVlOworICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHMxKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcq
IHMzKQorICAgICAgICB7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
ICsgczMtPmxlbmd0aCgpOworICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYm
IHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVT
dHJpbmdPYmplY3QgPSB0cnVlOworICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHMxKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBzMik7CisgICAgICAgICAgICBtX2ZpYmVyc1syXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
czMpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTU3RyaW5nOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3Qg
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEpTUm9wZVN0cmluZyogY3JlYXRl
TnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpT
Um9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3Bl
U3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5n
KiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcq
IG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNSb3BlU3RyaW5nKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbmV3
U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOworICAgICAgICAgICAg
cmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMy
LCBKU1N0cmluZyogczMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbmV3
U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxE
YXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBuZXdTdHJp
bmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMiwgczMpOworICAgICAgICAgICAg
cmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNTdHJpbmcqLCBTbG90VmlzaXRvciYpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNvbHZlUm9wZShFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhciopIGNvbnN0OworICAgICAg
ICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqKSBjb25zdDsKKyAgICAgICAgdm9pZCBv
dXRPZk1lbW9yeShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIEpTU3RyaW5n
KiBnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKworICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggPSAzOworICAgICAgICAK
KyAgICAgICAgbXV0YWJsZSBGaXhlZEFycmF5PFdyaXRlQmFycmllcjxKU1N0cmluZz4sIHNfbWF4
SW50ZXJuYWxSb3BlTGVuZ3RoPiBtX2ZpYmVyczsKKyAgICB9OworCiAgICAgSlNTdHJpbmcqIGFz
U3RyaW5nKEpTVmFsdWUpOwogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVl
IHZhbHVlKQpAQCAtMzE2LDExICszNDIsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzLmltcGwoKSk7CiAgICAgfQogCisg
ICAgaW5saW5lIGNvbnN0IFVTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNSb3BlKCkpCisgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZShleGVjKTsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0IFVTdHJp
bmcmIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNS
b3BlKCkpCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+
KHRoaXMpLT5yZXNvbHZlUm9wZSgwKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQor
CiAgICAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKICAg
ICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgcmV0dXJuIGdldEluZGV4U2xvd0Nhc2Uo
ZXhlYywgaSk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1JvcGVTdHJp
bmcqPih0aGlzKS0+Z2V0SW5kZXhTbG93Q2FzZShleGVjLCBpKTsKICAgICAgICAgQVNTRVJUKGkg
PCBtX3ZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nKGV4ZWMsIG1fdmFsdWUsIGkpOwogICAgIH0KQEAgLTM5Miw5ICs0MzIsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVy
KCpnbG9iYWxEYXRhLCBzLmltcGwoKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTU3RyaW5nKiBq
c1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIGlubGluZSBKU1Jv
cGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAg
ewotICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZU51bGwoKmdsb2JhbERhdGEpOworICAg
ICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKCpnbG9iYWxEYXRhKTsKICAgICB9
CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7
IHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCkpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMTUyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICgobGVu
Z3RoMSArIGxlbmd0aDIpIDwgbGVuZ3RoMSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CiAKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgczEsIHMyKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGds
b2JhbERhdGEsIHMxLCBzMik7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcm
IHUyLCBjb25zdCBVU3RyaW5nJiB1MykKQEAgLTY5LDEzICs2OSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgaWYgKChsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMpIDwgbGVuZ3RoMykK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKLSAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhn
bG9iYWxEYXRhLCB1MSksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUyKSwganNTdHJpbmcoZ2xvYmFs
RGF0YSwgdTMpKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRh
LCB1MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3Ms
IHVuc2lnbmVkIGNvdW50KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJv
cGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRl
ciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3Ro
ID0gMDsKIApAQCAtOTMsNyArOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1
aWxkZXIoKmdsb2JhbERhdGEpOworICAgICAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJv
cGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKSk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gMDsK
</data>
<flag name="commit-queue"
          id="144399"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139017</attachid>
            <date>2012-04-26 09:59:38 -0700</date>
            <delta_ts>2012-04-26 12:21:14 -0700</delta_ts>
            <desc>Patch with Speculative Build Fix</desc>
            <filename>84907-1.patch</filename>
            <type>text/plain</type>
            <size>24191</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MjYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEyLTA0LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoQ2xhc3NJbmZvKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZVNsb3dDYXNlOCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkp
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aXNSb3BlKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzOEJpdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
Ojppc0pTUm9wZVN0cmluZ09iamVjdCk6CisgICAgICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAg
ICAoUm9wZUJ1aWxkZXIpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVy
OjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6
OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OnJlbGVh
c2UpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OkpTUm9wZVN0cmluZyk6CisgICAgICAgIChKU0M6
OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OmNyZWF0ZU51bGwpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0
cnlHZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRJbmRleCk6CisgICAgICAg
IChKU0M6OmpzU3RyaW5nQnVpbGRlcik6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6
CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJn
dW1lbnRzKToKKwogMjAxMi0wNC0yNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIEJpb2xhYiBkaXNhc3RlciBjcmFzaGVzIG9uIFRvVApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDYgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAogICAgIH0sIFwKLSAgICBzaXplb2YoQ2xhc3NOYW1l
KSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKICAgICBzdHJ1Y3Qg
Q2xhc3NJbmZvIHsKQEAgLTE4MCw4ICsxNzksNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJl
ciB7IFwKIAogICAgICAgICBNZXRob2RUYWJsZSBtZXRob2RUYWJsZTsKIAotICAgICAgICBzaXpl
X3QgY2VsbFNpemU7Ci0gICAgICAgIAogICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5
U3RvcmFnZVR5cGU7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXApCiAgICAgewogI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IFQ6OnNfaW5m
by5jZWxsU2l6ZSk7CiAgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlh
bGl6aW5nT2JqZWN0KCkpOwogICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDExNTIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsOSArMzYsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Vic3RyaW5nRnJvbVJvcGVDCiAK
IGNvbnN0IENsYXNzSW5mbyBKU1N0cmluZzo6c19pbmZvID0geyAic3RyaW5nIiwgMCwgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1N0cmluZykgfTsKIAotdm9pZCBKU1N0cmluZzo6Um9wZUJ1
aWxkZXI6OmV4cGFuZCgpCit2b2lkIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OmV4cGFuZCgp
CiB7Ci0gICAgQVNTRVJUKG1faW5kZXggPT0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoKTsKKyAgICBBU1NFUlQobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoKTsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBtX2pzU3RyaW5nOwogICAgIG1f
anNTdHJpbmcgPSBqc1N0cmluZ0J1aWxkZXIoJm1fZ2xvYmFsRGF0YSk7CiAgICAgbV9pbmRleCA9
IDA7CkBAIC01NSwxMyArNTUsMjMgQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogewogICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nKj4o
Y2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIHRoaXNP
YmplY3QtPm1fZmliZXJzW2ldOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2ZpYmVyc1tpXSk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmlzSlNSb3BlU3Ry
aW5nT2JqZWN0KCkpCisgICAgICAgIEpTUm9wZVN0cmluZzo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKK30KKwordm9pZCBKU1JvcGVTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNT
dHJpbmcqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTUm9wZVN0
cmluZyogdGhpc09iamVjdEFzUm9wZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4o
dGhpc09iamVjdCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoICYmIHRoaXNPYmplY3RBc1JvcGUtPm1fZmliZXJzW2ldOyArK2kpCisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0QXNSb3BlLT5tX2ZpYmVyc1tpXSk7CiB9CiAKLXZv
aWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3ZvaWQgSlNS
b3BlU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzUm9wZSgpKTsKKyAgICBBU1NFUlQoaXNKU1JvcGVTdHJpbmdPYmplY3QoKSk7CiAKICAg
ICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKQEAgLTEyOCw3ICsxMzgs
NyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAvLyBWZWN0b3Ig
YmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNhdGVuYXRpb24sIGJ1dCBieSB3b3JraW5nIGJhY2t3
YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmlsbCB0aGUgcXVldWUgd2l0aCB0aGUgbnVtYmVyIG9m
IHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxldmVsIGluIGEKIC8vIHJvcGUtb2Ytcm9wZXMuKSAg
ICAKLXZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKiBidWZmZXIpIGNv
bnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqIGJ1ZmZl
cikgY29uc3QKIHsKICAgICBMQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsgLy8g
V2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSByb3BlLgogICAgIFZlY3RvcjxK
U1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFB1dHRpbmcgc3RyaW5ncyBpbnRvIGEgVmVjdG9y
IGlzIG9ubHkgT0sgYmVjYXVzZSB0aGVyZSBhcmUgbm8gR0MgcG9pbnRzIGluIHRoaXMgbWV0aG9k
LgpAQCAtMTQ0LDggKzE1NCw5IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4
KExDaGEKICAgICAgICAgd29ya1F1ZXVlLnJlbW92ZUxhc3QoKTsKIAogICAgICAgICBpZiAoY3Vy
cmVudEZpYmVyLT5pc1JvcGUoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBjdXJyZW50RmliZXItPm1fZmliZXJzW2ldOyAr
K2kpCi0gICAgICAgICAgICAgICAgd29ya1F1ZXVlLmFwcGVuZChjdXJyZW50RmliZXItPm1fZmli
ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogY3VycmVudEZpYmVyQXNS
b3BlID0gcmVpbnRlcnByZXRfY2FzdDxKU1JvcGVTdHJpbmcqPihjdXJyZW50RmliZXIpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAm
JiBjdXJyZW50RmliZXJBc1JvcGUtPm1fZmliZXJzW2ldOyArK2kpCisgICAgICAgICAgICAgICAg
d29ya1F1ZXVlLmFwcGVuZChjdXJyZW50RmliZXJBc1JvcGUtPm1fZmliZXJzW2ldLmdldCgpKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTE1OSw3ICsxNzAsNyBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhCiAgICAgQVNTRVJUKCFpc1Jv
cGUoKSk7CiB9CiAKLXZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqIGJ1
ZmZlcikgY29uc3QKK3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFy
KiBidWZmZXIpIGNvbnN0CiB7CiAgICAgVUNoYXIqIHBvc2l0aW9uID0gYnVmZmVyICsgbV9sZW5n
dGg7IC8vIFdlIHdpbGwgYmUgd29ya2luZyBiYWNrd2FyZHMgb3ZlciB0aGUgcm9wZS4KICAgICBW
ZWN0b3I8SlNTdHJpbmcqLCAzMj4gd29ya1F1ZXVlOyAvLyBUaGVzZSBzdHJpbmdzIGFyZSBrZXB0
IGFsaXZlIGJ5IHRoZSBwYXJlbnQgcm9wZSwgc28gdXNpbmcgYSBWZWN0b3IgaXMgT0suCkBAIC0x
NzIsOCArMTgzLDkgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhcgog
ICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgIGlmIChjdXJyZW50Rmli
ZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4
SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV07ICsraSkKLSAg
ICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV0u
Z2V0KCkpOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBjdXJyZW50RmliZXJBc1JvcGUgPSBy
ZWludGVycHJldF9jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJlcik7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJl
bnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgICAgICAgICB3b3JrUXVl
dWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV0uZ2V0KCkpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTg3LDcgKzE5OSw3IEBAIHZvaWQgSlNT
dHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIKICAgICBBU1NFUlQoIWlzUm9wZSgpKTsK
IH0KIAotdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
dm9pZCBKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1f
ZmliZXJzW2ldOyArK2kpCiAgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7CkBAIC0xOTcsNyAr
MjA5LDcgQEAgdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleAogICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiB9CiAKLUpTU3RyaW5nKiBKU1N0cmluZzo6
Z2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCitKU1N0cmluZyog
SlNSb3BlU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKIHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIHJlc29sdmVSb3BlKGV4ZWMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTUy
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpT
U3RyaW5nOworICAgIGNsYXNzIEpTUm9wZVN0cmluZzsKICAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKICAgICBKU1N0cmluZyoganNFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEqKTsK
QEAgLTU4LDU1ICs1OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU1N0cmluZyoganNPd25l
ZFN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJik7IAogICAgIEpTU3RyaW5nKiBq
c093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgCiAKLSAgICBKU1N0cmlu
ZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIEpTUm9wZVN0cmluZyoganNT
dHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOwogCiAgICAgY2xhc3MgSlNTdHJpbmcgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTcGVj
aWFsaXplZFRodW5rSklUOworICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3RyaW5nOwogICAg
ICAgICBmcmllbmQgc3RydWN0IFRodW5rSGVscGVyczsKLSAgICAgICAgZnJpZW5kIEpTU3RyaW5n
KiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICAgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
ICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgUm9w
ZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICAgICAgICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAgICAgLCBtX2pzU3RyaW5nKGpzU3Ry
aW5nQnVpbGRlcigmZ2xvYmFsRGF0YSkpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYXBwZW5kKEpT
U3RyaW5nKiBqc1N0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobV9p
bmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgIGV4cGFuZCgpOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fZmliZXJzW21f
aW5kZXgrK10uc2V0KG1fZ2xvYmFsRGF0YSwgbV9qc1N0cmluZywganNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIG1fanNTdHJpbmctPm1fbGVuZ3RoICs9IGpzU3RyaW5nLT5tX2xlbmd0aDsKLSAg
ICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2lzOEJpdCA9IG1fanNTdHJpbmctPm1faXM4Qml0
ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNT
dHJpbmcqIHJlbGVhc2UoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTU3RyaW5n
KiB0bXAgPSBtX2pzU3RyaW5nOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAwOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0bXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9Ci0KLSAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7Ci0KLSAgICAgICAgICAgIEpT
R2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwotICAgICAgICAgICAgSlNTdHJpbmcqIG1fanNTdHJp
bmc7Ci0gICAgICAgICAgICBzaXplX3QgbV9pbmRleDsKLSAgICAgICAgfTsKLQogICAgIHByaXZh
dGU6CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGds
b2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQpAQCAtMTE5LDE5ICs4NSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9sZW5ndGgg
PSAwOwotICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBsZW5n
dGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAg
ICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmltcGwo
KS0+aXM4Qml0KCk7CisgICAgICAgICAgICBtX2lzSlNSb3BlU3RyaW5nT2JqZWN0ID0gZmFsc2U7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCkBAIC0xNDAsMzUgKzEwMCwx
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgICAgICBt
X2lzOEJpdCA9IG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKTsKKyAgICAgICAgICAgIG1faXNKU1Jv
cGVTdHJpbmdPYmplY3QgPSBmYWxzZTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3Ry
aW5nKiBzMikKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5n
dGgoKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0
KCkpOwotICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsK
LSAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
ICsgczMtPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYm
IHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKLSAgICAgICAgICAgIG1fZmliZXJzWzBd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7Ci0gICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgczIpOwotICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHMzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBKU1N0cmluZyog
Y3JlYXRlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3QgPSBmYWxz
ZTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpT
U3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHZhbHVlKQogICAgICAgICB7CkBAIC0xNzksMTggKzEyMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBs
ZW5ndGgsIGNvc3QpOwogICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICAgICAgfQot
ICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0
cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbmV3U3Ry
aW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOwotICAgICAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBK
U1N0cmluZyogczMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIHMxLCBzMiwgczMpOwotICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3du
ZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwpAQCAtMjAwLDE4ICsxMzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAg
ICAgIH0KIAotICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgICAgICAg
ICByZXNvbHZlUm9wZShleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJlc29sdmVSb3Bl
KDApOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgY29u
c3QgVVN0cmluZyYgdmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGNvbnN0IFVTdHJp
bmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKQEAgLTIyNiw3ICsxNDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0
dXJuIGkgPCBtX2xlbmd0aDsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRl
KiwgdW5zaWduZWQpOwotICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewpAQCAtMjQwLDM4ICsxNjEsMTQ0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgYm9vbCBpc1JvcGUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmlzTnVsbCgpOyB9CisgICAgICAgIGJvb2wgaXM4Qml0KCkg
Y29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KKyAgICAgICAgYm9vbCBpc0pTUm9wZVN0cmluZ09i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNKU1JvcGVTdHJpbmdPYmplY3Q7IH0KKworICAgICAg
ICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgcm9w
ZSBvZiBmaWJlcnMuCisgICAgICAgIGJvb2wgbV9pczhCaXQgOiAxOworICAgICAgICBib29sIG1f
aXNKU1JvcGVTdHJpbmdPYmplY3QgOiAxOworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAg
ICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7CisKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXNvbHZlUm9wZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAg
ICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhciopIGNvbnN0OwotICAgICAgICB2b2lk
IHJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqKSBjb25zdDsKLSAgICAgICAgdm9pZCBvdXRPZk1l
bW9yeShFeGVjU3RhdGUqKSBjb25zdDsKLQogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhp
c09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKIAogICAgICAgICAvLyBBY3R1YWxseSBnZXRQ
cm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QgKHNlZSBKU0NlbGwpLgogICAgICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX21heEludGVybmFsUm9wZUxlbmd0aCA9IDM7Ci0KLSAgICAgICAgLy8g
QSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgZWl0aGVyIGJ5IGEgVVN0cmluZyBvciBhIHJvcGUgb2Yg
ZmliZXJzLgotICAgICAgICBib29sIG1faXM4Qml0IDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7Ci0gICAgICAgIG11dGFibGUgVVN0cmluZyBtX3ZhbHVlOwotICAgICAgICBtdXRhYmxl
IEZpeGVkQXJyYXk8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPiwgc19tYXhJbnRlcm5hbFJvcGVMZW5n
dGg+IG1fZmliZXJzOwotCi0gICAgICAgIGJvb2wgaXNSb3BlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZS5pc051bGwoKTsgfQotICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXM4Qml0OyB9CiAgICAgICAgIFVTdHJpbmcmIHN0cmluZygpIHsgQVNTRVJUKCFpc1JvcGUoKSk7
IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSBq
c1N0cmluZyhFeGVjU3RhdGUqLCBSZWdpc3RlciosIHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAg
ZnJpZW5kIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
dGhpc1ZhbHVlKTsKICAgICAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB9
OwogCisgICAgY2xhc3MgSlNSb3BlU3RyaW5nIDogcHVibGljIEpTU3RyaW5nIHsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTU3RyaW5nOworCisgICAgICAgIGZyaWVuZCBKU1JvcGVTdHJpbmcqIGpz
U3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqKTsKKworICAgICAgICBjbGFzcyBSb3BlQnVpbGRl
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFJvcGVCdWlsZGVyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgICAgICAgICAsIG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZnbG9iYWxEYXRhKSkKKyAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2b2lkIGFwcGVuZChKU1N0cmluZyoganNTdHJpbmcpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKG1faW5kZXggPT0gSlNSb3BlU3RyaW5nOjpzX21heEludGVy
bmFsUm9wZUxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgICAg
ICAgICAgbV9qc1N0cmluZy0+bV9maWJlcnNbbV9pbmRleCsrXS5zZXQobV9nbG9iYWxEYXRhLCBt
X2pzU3RyaW5nLCBqc1N0cmluZyk7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9sZW5n
dGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1f
aXM4Qml0ID0gbV9qc1N0cmluZy0+bV9pczhCaXQgJiYganNTdHJpbmctPm1faXM4Qml0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIHJlbGVhc2UoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZyogdG1wID0gbV9qc1N0cmluZzsK
KyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dG1wOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJl
dHVybiBtX2pzU3RyaW5nLT5tX2xlbmd0aDsgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICB2b2lkIGV4cGFuZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbV9qc1N0cmluZzsK
KyAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBKU1JvcGVTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgICAgICAgICAgOiBKU1N0cmluZyhnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+
bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4
Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmpl
Y3QgPSB0cnVlOworICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHMxKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcq
IHMzKQorICAgICAgICB7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
ICsgczMtPmxlbmd0aCgpOworICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYm
IHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVT
dHJpbmdPYmplY3QgPSB0cnVlOworICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHMxKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBzMik7CisgICAgICAgICAgICBtX2ZpYmVyc1syXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
czMpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTU3RyaW5nOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3Qg
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEpTUm9wZVN0cmluZyogY3JlYXRl
TnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpT
Um9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3Bl
U3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5n
KiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcq
IG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNSb3BlU3RyaW5nKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbmV3
U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOworICAgICAgICAgICAg
cmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMy
LCBKU1N0cmluZyogczMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbmV3
U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxE
YXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBuZXdTdHJp
bmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMiwgczMpOworICAgICAgICAgICAg
cmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNTdHJpbmcqLCBTbG90VmlzaXRvciYpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1bnNpZ25l
ZCk7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKKworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmVS
b3BlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4
KExDaGFyKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciop
IGNvbnN0OworICAgICAgICB2b2lkIG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNvbnN0OworICAg
ICAgICAKKyAgICAgICAgSlNTdHJpbmcqIGdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5z
aWduZWQpOworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21heEludGVybmFsUm9w
ZUxlbmd0aCA9IDM7CisgICAgICAgIAorICAgICAgICBtdXRhYmxlIEZpeGVkQXJyYXk8V3JpdGVC
YXJyaWVyPEpTU3RyaW5nPiwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGg+IG1fZmliZXJzOworICAg
IH07CisKICAgICBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSk7CiAKICAgICBpbmxpbmUgSlNT
dHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCkBAIC0zMTYsMTEgKzM0MywyNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IHMuaW1wbCgpKTsKICAgICB9CiAKKyAgICBpbmxpbmUgY29uc3QgVVN0cmluZyYgSlNTdHJpbmc6
OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1JvcGUo
KSkKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhp
cyktPnJlc29sdmVSb3BlKGV4ZWMpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisK
KyAgICBpbmxpbmUgY29uc3QgVVN0cmluZyYgSlNTdHJpbmc6OnRyeUdldFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1JvcGUoKSkKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlKDApOworICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKICAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpn
ZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NF
UlQoY2FuR2V0SW5kZXgoaSkpOwogICAgICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0SW5kZXhTbG93Q2FzZShleGVjLCBpKTsKKyAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEpTUm9wZVN0cmluZyo+KHRoaXMpLT5nZXRJbmRleFNsb3dDYXNlKGV4ZWMs
IGkpOwogICAgICAgICBBU1NFUlQoaSA8IG1fdmFsdWUubGVuZ3RoKCkpOwogICAgICAgICByZXR1
cm4ganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgbV92YWx1ZSwgaSk7CiAgICAgfQpA
QCAtMzkyLDkgKzQzMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKmdsb2JhbERhdGEsIHMuaW1wbCgpKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCisgICAgaW5saW5lIEpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
TnVsbCgqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZU51
bGwoKmdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2Jh
bERhdGEoKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaWYgKChsZW5ndGgxICsgbGVuZ3RoMikgPCBsZW5ndGgxKQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgICAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzMSwgczIpOworICAgICAgICByZXR1cm4g
SlNSb3BlU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgczEsIHMyKTsKICAgICB9CiAKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQpAQCAtNjksMTMg
KzY5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgy
ICsgbGVuZ3RoMykgPCBsZW5ndGgzKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKIAotICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwganNTdHJpbmcoZ2xvYmFsRGF0
YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MykpOworICAgICAgICByZXR1cm4gSlNSb3Bl
U3RyaW5nOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MSksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUyKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTMpKTsK
ICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQpCiAgICAgewogICAgICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBK
U1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOworICAgICAgICBK
U1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKIAogICAg
ICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwogCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9w
ZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOwogICAgICAgICBy
b3BlQnVpbGRlci5hcHBlbmQodGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgICAgICB1
bnNpZ25lZCBvbGRMZW5ndGggPSAwOwo=
</data>
<flag name="commit-queue"
          id="144557"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139041</attachid>
            <date>2012-04-26 12:21:14 -0700</date>
            <delta_ts>2012-04-26 13:35:27 -0700</delta_ts>
            <desc>Updated patch with speculative Windows fix</desc>
            <filename>84907-2.patch</filename>
            <type>text/plain</type>
            <size>25111</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA0LTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWY6IFJlbW92ZWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKCkKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKENs
YXNzSW5mbyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6YWxs
b2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhwYW5kKToKKyAgICAgICAgKEpTQzo6SlNT
dHJpbmc6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNS
b3BlU3RyaW5nOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93
Q2FzZTgpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5KToKKyAgICAgICAgKEpT
Qzo6SlNSb3BlU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pT
U3RyaW5nLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNTdHJpbmcpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzUm9wZSk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjppczhCaXQpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aXNKU1JvcGVTdHJp
bmdPYmplY3QpOgorICAgICAgICAoSlNSb3BlU3RyaW5nKToKKyAgICAgICAgKFJvcGVCdWlsZGVy
KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6Um9wZUJ1aWxkZXIp
OgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpyZWxlYXNlKToKKyAgICAgICAg
KEpTQzo6SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SlNSb3BlU3RyaW5nOjpKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxs
KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dHJ5R2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpqc1N0cmlu
Z0J1aWxkZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlND
Ojpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50cyk6CisKIDIw
MTItMDQtMjUgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEFkZCBhIHZlcnNpb24gb2YgU3RyaW5nSW1wbDo6ZmluZCgpIHdpdGhvdXQgb2Zmc2V0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZgkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Nyw3ICsyOTcsNiBAQCBFWFBPUlRTCiAgICAgP3Jlc2V0RGF0ZUNhY2hlQEpT
R2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9yZXNpemVAU3RyaW5nQnVpbGRlckBXVEZAQFFB
RVhJQFoKICAgICA/cmVzaXplT3V0T2ZMaW5lQEJpdFZlY3RvckBXVEZAQEFBRVhJQFoKLSAgICA/
cmVzb2x2ZVJvcGVASlNTdHJpbmdASlNDQEBBQkVYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/cmVz
dG9yZUFsbEBQcm9maWxlQEpTQ0BAUUFFWFhaCiAgICAgP3JldHJpZXZlQ2FsbGVyRnJvbVZNQ29k
ZUBJbnRlcnByZXRlckBKU0NAQFFCRT9BVkpTVmFsdWVAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0Z1
bmN0aW9uQDJAQFoKICAgICA/cmV0cmlldmVMYXN0Q2FsbGVyQEludGVycHJldGVyQEpTQ0BAUUJF
WFBBVkV4ZWNTdGF0ZUAyQEFBSDFBQVZVU3RyaW5nQDJAQUFWSlNWYWx1ZUAyQEBaCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTE1MjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCiAgICAgfSwgXAotICAgIHNpemVvZihD
bGFzc05hbWUpLCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIAogICAg
IHN0cnVjdCBDbGFzc0luZm8gewpAQCAtMTgwLDggKzE3OSw2IEBAIHN0cnVjdCBNZW1iZXJDaGVj
ayMjbWVtYmVyIHsgXAogCiAgICAgICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxlOwogCi0gICAg
ICAgIHNpemVfdCBjZWxsU2l6ZTsKLSAgICAgICAgCiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5
cGVkQXJyYXlTdG9yYWdlVHlwZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAgICB7
CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIEFTU0VSVChzaXplb2YoVCkgPT0g
VDo6c19pbmZvLmNlbGxTaXplKTsKICAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2JhbERhdGEoKS0+
aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAgICAgIGhlYXAuZ2xvYmFsRGF0YSgpLT5zZXRJ
bml0aWFsaXppbmdPYmplY3RDbGFzcygmVDo6c19pbmZvKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTE1MjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw5ICszNiw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdWJzdHJpbmdGcm9t
Um9wZUMKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3RyaW5nOjpzX2luZm8gPSB7ICJzdHJpbmciLCAw
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3RyaW5nKSB9OwogCi12b2lkIEpTU3RyaW5n
OjpSb3BlQnVpbGRlcjo6ZXhwYW5kKCkKK3ZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6
ZXhwYW5kKCkKIHsKLSAgICBBU1NFUlQobV9pbmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5h
bFJvcGVMZW5ndGgpOworICAgIEFTU0VSVChtX2luZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJ
bnRlcm5hbFJvcGVMZW5ndGgpOwogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IG1fanNTdHJpbmc7
CiAgICAgbV9qc1N0cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV9nbG9iYWxEYXRhKTsKICAgICBt
X2luZGV4ID0gMDsKQEAgLTU1LDEzICs1NSwyMyBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
dHJpbmcqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGgg
JiYgdGhpc09iamVjdC0+bV9maWJlcnNbaV07ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fZmliZXJzW2ldKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+aXNK
U1JvcGVTdHJpbmdPYmplY3QoKSkKKyAgICAgICAgSlNSb3BlU3RyaW5nOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit2b2lkIEpTUm9wZVN0cmluZzo6dmlzaXRDaGls
ZHJlbihKU1N0cmluZyogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
SlNSb3BlU3RyaW5nKiB0aGlzT2JqZWN0QXNSb3BlID0gcmVpbnRlcnByZXRfY2FzdDxKU1JvcGVT
dHJpbmcqPih0aGlzT2JqZWN0KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJ
bnRlcm5hbFJvcGVMZW5ndGggJiYgdGhpc09iamVjdEFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3RBc1JvcGUtPm1fZmliZXJzW2ldKTsK
IH0KIAotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
dm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNSb3BlKCkpOworICAgIEFTU0VSVChpc0pTUm9wZVN0cmluZ09iamVjdCgp
KTsKIAogICAgIGlmIChpczhCaXQoKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwpAQCAtMTI4
LDcgKzEzOCw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKIC8v
IFZlY3RvciBiZWZvcmUgcGVyZm9ybWluZyBhbnkgY29uY2F0ZW5hdGlvbiwgYnV0IGJ5IHdvcmtp
bmcgYmFja3dhcmRzIHdlIGxpa2VseQogLy8gb25seSBmaWxsIHRoZSBxdWV1ZSB3aXRoIHRoZSBu
dW1iZXIgb2Ygc3Vic3RyaW5ncyBhdCBhbnkgZ2l2ZW4gbGV2ZWwgaW4gYQogLy8gcm9wZS1vZi1y
b3Blcy4pICAgIAotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqIGJ1
ZmZlcikgY29uc3QKK3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hh
ciogYnVmZmVyKSBjb25zdAogewogICAgIExDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlciArIG1fbGVu
Z3RoOyAvLyBXZSB3aWxsIGJlIHdvcmtpbmcgYmFja3dhcmRzIG92ZXIgdGhlIHJvcGUuCiAgICAg
VmVjdG9yPEpTU3RyaW5nKiwgMzI+IHdvcmtRdWV1ZTsgLy8gUHV0dGluZyBzdHJpbmdzIGludG8g
YSBWZWN0b3IgaXMgb25seSBPSyBiZWNhdXNlIHRoZXJlIGFyZSBubyBHQyBwb2ludHMgaW4gdGhp
cyBtZXRob2QuCkBAIC0xNDQsOCArMTU0LDkgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVT
bG93Q2FzZTgoTENoYQogICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCiAgICAgICAg
IGlmIChjdXJyZW50RmliZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJl
cnNbaV07ICsraSkKLSAgICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJl
ci0+bV9maWJlcnNbaV0uZ2V0KCkpOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBjdXJyZW50
RmliZXJBc1JvcGUgPSByZWludGVycHJldF9jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJl
cik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3Bl
TGVuZ3RoICYmIGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAg
ICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV0u
Z2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTU5LDcgKzE3
MCw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGEKICAgICBBU1NF
UlQoIWlzUm9wZSgpKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShV
Q2hhciogYnVmZmVyKSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nh
c2UoVUNoYXIqIGJ1ZmZlcikgY29uc3QKIHsKICAgICBVQ2hhciogcG9zaXRpb24gPSBidWZmZXIg
KyBtX2xlbmd0aDsgLy8gV2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSByb3Bl
LgogICAgIFZlY3RvcjxKU1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFRoZXNlIHN0cmluZ3Mg
YXJlIGtlcHQgYWxpdmUgYnkgdGhlIHBhcmVudCByb3BlLCBzbyB1c2luZyBhIFZlY3RvciBpcyBP
Sy4KQEAgLTE3Miw4ICsxODMsOSBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNl
KFVDaGFyCiAgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAKICAgICAgICAgaWYgKGN1
cnJlbnRGaWJlci0+aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVyLT5tX2ZpYmVyc1tpXTsg
KytpKQotICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQoY3VycmVudEZpYmVyLT5tX2Zp
YmVyc1tpXS5nZXQoKSk7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIGN1cnJlbnRGaWJlckFz
Um9wZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4oY3VycmVudEZpYmVyKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGgg
JiYgY3VycmVudEZpYmVyQXNSb3BlLT5tX2ZpYmVyc1tpXTsgKytpKQorICAgICAgICAgICAgICAg
IHdvcmtRdWV1ZS5hcHBlbmQoY3VycmVudEZpYmVyQXNSb3BlLT5tX2ZpYmVyc1tpXS5nZXQoKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0xODcsNyArMTk5LDcgQEAg
dm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhcgogICAgIEFTU0VSVCghaXNS
b3BlKCkpOwogfQogCi12b2lkIEpTU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5n
dGggJiYgbV9maWJlcnNbaV07ICsraSkKICAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKQEAg
LTE5Nyw3ICsyMDksNyBAQCB2b2lkIEpTU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4
CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIH0KIAotSlNTdHJpbmcqIEpT
U3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK0pT
U3RyaW5nKiBKU1JvcGVTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpKQogewogICAgIEFTU0VSVChpc1JvcGUoKSk7CiAgICAgcmVzb2x2ZVJvcGUoZXhl
Yyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDExNTIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgSlNTdHJpbmc7CisgICAgY2xhc3MgSlNSb3BlU3RyaW5nOwogICAgIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpTR2xvYmFs
RGF0YSopOwpAQCAtNTgsNTUgKzU5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEpTU3RyaW5n
KiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmKTsgCiAgICAgSlNT
dHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYpOyAKIAotICAg
IEpTU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CisgICAgSlNSb3BlU3Ry
aW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICBjbGFzcyBKU1N0cmlu
ZyA6IHB1YmxpYyBKU0NlbGwgewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICAgICAgZnJpZW5kIGNs
YXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU1JvcGVTdHJp
bmc7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwotICAgICAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqKTsKIAogICAgICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICAgICAgY2xhc3MgUm9wZUJ1aWxkZXIgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAg
ICAgICBSb3BlQnVpbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgICAgICAg
ICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICAgICAsIG1fanNTdHJp
bmcoanNTdHJpbmdCdWlsZGVyKCZnbG9iYWxEYXRhKSkKLSAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdm9pZCBh
cHBlbmQoSlNTdHJpbmcqIGpzU3RyaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChtX2luZGV4ID09IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAg
ICAgICAgICAgICAgICAgZXhwYW5kKCk7Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9m
aWJlcnNbbV9pbmRleCsrXS5zZXQobV9nbG9iYWxEYXRhLCBtX2pzU3RyaW5nLCBqc1N0cmluZyk7
Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9sZW5ndGggKz0ganNTdHJpbmctPm1fbGVu
Z3RoOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1faXM4Qml0ID0gbV9qc1N0cmluZy0+
bV9pczhCaXQgJiYganNTdHJpbmctPm1faXM4Qml0OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU1N0cmluZyogcmVsZWFzZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SlNTdHJpbmcqIHRtcCA9IG1fanNTdHJpbmc7Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9
IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9qc1N0cmluZy0+bV9sZW5ndGg7IH0K
LQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdm9pZCBleHBhbmQoKTsKLQotICAgICAg
ICAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7Ci0gICAgICAgICAgICBKU1N0cmluZyog
bV9qc1N0cmluZzsKLSAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OwotICAgICAgICB9OwotCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCkBAIC0xMTksMTkgKzg1LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBt
X2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IHRydWU7Ci0gICAgICAgIH0KLQog
ICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IGxlbmd0aCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVs
bCgpKTsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAg
ICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgICAgICBtX2lzOEJpdCA9IG1fdmFs
dWUuaW1wbCgpLT5pczhCaXQoKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3Qg
PSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKQEAgLTE0MCwz
NSArMTAwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKICAgICAg
ICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICAgICAg
bV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IGZhbHNlOwogICAgICAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBz
MSwgSlNTdHJpbmcqIHMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsg
czItPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYmIHMy
LT5pczhCaXQoKSk7Ci0gICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgczEpOwotICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcqIHMzKQor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+
bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4
Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOwotICAgICAgICAgICAgbV9m
aWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAgICAgICAgIG1fZmliZXJz
WzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAgICAgICAgICBtX2ZpYmVyc1syXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgczMpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEpT
U3RyaW5nKiBjcmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhKTsKLSAg
ICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICAgICAgbV9sZW5ndGggPSAwOworICAgICAg
ICAgICAgbV9pczhCaXQgPSB0cnVlOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVj
dCA9IGZhbHNlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgICAgIHsKQEAgLTE3OSwxOCArMTIzLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIGxlbmd0aCwgY29zdCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAg
ICAgICB9Ci0gICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMik7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3U3RyaW5nOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBKU1N0cmlu
ZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmlu
ZyogczIsIEpTU3RyaW5nKiBzMykKLSAgICAgICAgewotICAgICAgICAgICAgSlNTdHJpbmcqIG5l
d1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRh
LmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG5ld1N0cmluZy0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3U3RyaW5nOwotICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlSGFz
T3RoZXJPd25lcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CkBAIC0yMDAs
MTggKzEzMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAg
ICAgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7
Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYgdHJ5R2V0VmFsdWUoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgICAgICAgICAgcmVz
b2x2ZVJvcGUoMCk7Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgfQorICAg
ICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgY29u
c3QgVVN0cmluZyYgdHJ5R2V0VmFsdWUoKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwpAQCAtMjI2LDcgKzE0OCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQg
aSkgeyByZXR1cm4gaSA8IG1fbGVuZ3RoOyB9CiAgICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleChF
eGVjU3RhdGUqLCB1bnNpZ25lZCk7Ci0gICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleFNsb3dDYXNl
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7CkBAIC0yNDAsMzggKzE2MSwxNDQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBib29sIGlz
Um9wZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KKyAgICAgICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQorICAgICAgICBib29sIGlzSlNSb3Bl
U3RyaW5nT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc0pTUm9wZVN0cmluZ09iamVjdDsgfQor
CisgICAgICAgIC8vIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIFVTdHJpbmcg
b3IgYSByb3BlIG9mIGZpYmVycy4KKyAgICAgICAgYm9vbCBtX2lzOEJpdCA6IDE7CisgICAgICAg
IGJvb2wgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA6IDE7CisgICAgICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOworICAgICAgICBtdXRhYmxlIFVTdHJpbmcgbV92YWx1ZTsKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmVSb3BlKEV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OwotICAgICAgICB2b2lk
IG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNvbnN0OwotCiAgICAgICAgIHN0YXRpYyBKU09iamVj
dCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIC8vIEFjdHVh
bGx5IGdldFByb3BlcnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5U2xvdCAoc2VlIEpTQ2VsbCku
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoID0gMzsKLQotICAg
ICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEg
cm9wZSBvZiBmaWJlcnMuCi0gICAgICAgIGJvb2wgbV9pczhCaXQgOiAxOwotICAgICAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKLSAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7Ci0gICAgICAg
IG11dGFibGUgRml4ZWRBcnJheTxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+LCBzX21heEludGVybmFs
Um9wZUxlbmd0aD4gbV9maWJlcnM7Ci0KLSAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlLmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pczhCaXQ7IH0KICAgICAgICAgVVN0cmluZyYgc3RyaW5nKCkgeyBBU1NFUlQoIWlz
Um9wZSgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0
cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci0gICAgICAgIGZyaWVuZCBK
U1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdW5zaWduZWQgY291bnQpOwot
ICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRlKiwg
SlNWYWx1ZSB0aGlzVmFsdWUpOwogICAgICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwogICAgIH07CiAKKyAgICBjbGFzcyBKU1JvcGVTdHJpbmcgOiBwdWJsaWMgSlNTdHJpbmcgewor
ICAgICAgICBmcmllbmQgY2xhc3MgSlNTdHJpbmc7CisKKyAgICAgICAgZnJpZW5kIEpTUm9wZVN0
cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworCisgICAgICAgIGNsYXNzIFJv
cGVCdWlsZGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgUm9wZUJ1aWxkZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKKyAgICAgICAgICAgICwgbV9qc1N0cmluZyhqc1N0cmluZ0J1aWxkZXIoJmdsb2JhbERh
dGEpKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgYXBwZW5kKEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNf
bWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBleHBhbmQoKTsKKyAg
ICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2ZpYmVyc1ttX2luZGV4KytdLnNldChtX2dsb2Jh
bERhdGEsIG1fanNTdHJpbmcsIGpzU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBtX2pzU3RyaW5n
LT5tX2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5ndGg7CisgICAgICAgICAgICAgICAgbV9qc1N0
cmluZy0+bV9pczhCaXQgPSBtX2pzU3RyaW5nLT5tX2lzOEJpdCAmJiBqc1N0cmluZy0+bV9pczhC
aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogcmVsZWFzZSgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiB0bXAgPSBtX2pz
U3RyaW5nOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAwOworICAgICAgICAgICAgICAg
IHJldHVybiB0bXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9CisKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpT
R2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBtX2pz
U3RyaW5nOworICAgICAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIEpTUm9wZVN0cmluZyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgICAgICAgICA6IEpTU3RyaW5nKGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgeworICAgICAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBtX2xlbmd0
aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0g
KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0
cmluZ09iamVjdCA9IHRydWU7CisgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgczEpOworICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHMyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBK
U1N0cmluZyogczMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+
bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4
Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOworICAgICAgICAgICAgbV9p
c0pTUm9wZVN0cmluZ09iamVjdCA9IHRydWU7CisgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgczEpOworICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHMyKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRh
LCB0aGlzLCBzMyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdHJpbmc6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmlu
Z09iamVjdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgSlNSb3BlU3RyaW5n
KiBjcmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAg
ICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9w
ZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3Ry
aW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAg
ICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAg
ICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0
cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0
cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICAgICAgeworICAgICAgICAgICAgSlNSb3BlU3Ry
aW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+
KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAg
IG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7CisgICAg
ICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU1N0cmluZyosIFNsb3RWaXNpdG9yJik7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqLCBSZWdpc3Rlcios
IHVuc2lnbmVkKTsKKyAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRz
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVT
bG93Q2FzZTgoTENoYXIqKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNl
KFVDaGFyKikgY29uc3Q7CisgICAgICAgIHZvaWQgb3V0T2ZNZW1vcnkoRXhlY1N0YXRlKikgY29u
c3Q7CisgICAgICAgIAorICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50
ZXJuYWxSb3BlTGVuZ3RoID0gMzsKKyAgICAgICAgCisgICAgICAgIG11dGFibGUgRml4ZWRBcnJh
eTxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+LCBzX21heEludGVybmFsUm9wZUxlbmd0aD4gbV9maWJl
cnM7CisgICAgfTsKKwogICAgIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKTsKIAogICAgIGlu
bGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKQEAgLTMxNiwxMSArMzQzLDI1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgcy5pbXBsKCkpOwogICAgIH0KIAorICAgIGlubGluZSBjb25zdCBVU3RyaW5nJiBK
U1N0cmluZzo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzUm9wZSgpKQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU1JvcGVTdHJp
bmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOwor
ICAgIH0KKworICAgIGlubGluZSBjb25zdCBVU3RyaW5nJiBKU1N0cmluZzo6dHJ5R2V0VmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoMCk7Cisg
ICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKwogICAgIGlubGluZSBKU1N0cmluZyogSlNT
dHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7CiAgICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBnZXRJbmRleFNsb3dDYXNlKGV4ZWMsIGkpOworICAgICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4odGhpcyktPmdldEluZGV4U2xvd0Nh
c2UoZXhlYywgaSk7CiAgICAgICAgIEFTU0VSVChpIDwgbV92YWx1ZS5sZW5ndGgoKSk7CiAgICAg
ICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCBtX3ZhbHVlLCBpKTsK
ICAgICB9CkBAIC0zOTIsOSArNDMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgcy5pbXBsKCkpOwog
ICAgIH0KIAotICAgIGlubGluZSBKU1N0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
OjpjcmVhdGVOdWxsKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6
Y3JlYXRlTnVsbCgqZ2xvYmFsRGF0YSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBq
c0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyKSA8IGxlbmd0aDEp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAg
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAg
IHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzMSwgczIpOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBA
IC02OSwxMyArNjksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICgobGVuZ3RoMSAr
IGxlbmd0aDIgKyBsZW5ndGgzKSA8IGxlbmd0aDMpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhn
bG9iYWxEYXRhLCB1MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7CisgICAgICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2Jh
bERhdGEsIHUxKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRh
LCB1MykpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAg
ICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEp
OwogCiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7CiAKQEAgLTkzLDcgKzkzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAgIHsKICAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAg
ICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKKyAgICAg
ICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAg
ICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7Cg==
</data>
<flag name="commit-queue"
          id="144593"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139058</attachid>
            <date>2012-04-26 13:35:27 -0700</date>
            <delta_ts>2012-04-27 10:53:09 -0700</delta_ts>
            <desc>Another Windows build fix - added new symbol to exports</desc>
            <filename>84907-3.patch</filename>
            <type>text/plain</type>
            <size>25213</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTA0LTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWY6IENoYW5nZWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlCisgICAg
ICAgICAgICAgICAgdG8gSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZQorICAgICAgICAqIHJ1bnRp
bWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ2xhc3NJbmZvKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKToK
KyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOCk6CisgICAg
ICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OmdldEluZGV4U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6aXNSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6Omlz
OEJpdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppc0pTUm9wZVN0cmluZ09iamVjdCk6Cisg
ICAgICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoUm9wZUJ1aWxkZXIpOgorICAgICAgICAo
SlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChK
U0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OnJlbGVhc2UpOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OkpTUm9wZVN0cmluZyk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZU51bGwpOgorICAgICAgICAo
SlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp2YWx1
ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0cnlHZXRWYWx1ZSk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nQnVpbGRlcik6Cisg
ICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJndW1lbnRzKToKKwogMjAxMi0wNC0yNSAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGEgdmVy
c2lvbiBvZiBTdHJpbmdJbXBsOjpmaW5kKCkgd2l0aG91dCBvZmZzZXQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lv
biAxMTUyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjk3
LDcgKzI5Nyw3IEBAIEVYUE9SVFMKICAgICA/cmVzZXREYXRlQ2FjaGVASlNHbG9iYWxEYXRhQEpT
Q0BAUUFFWFhaCiAgICAgP3Jlc2l6ZUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9y
ZXNpemVPdXRPZkxpbmVAQml0VmVjdG9yQFdURkBAQUFFWElAWgotICAgID9yZXNvbHZlUm9wZUBK
U1N0cmluZ0BKU0NAQEFCRVhQQVZFeGVjU3RhdGVAMkBAWgorICAgID9yZXNvbHZlUm9wZUBKU1Jv
cGVTdHJpbmdASlNDQEBBQkVYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/cmVzdG9yZUFsbEBQcm9m
aWxlQEpTQ0BAUUFFWFhaCiAgICAgP3JldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZUBJbnRlcnByZXRl
ckBKU0NAQFFCRT9BVkpTVmFsdWVAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0Z1bmN0aW9uQDJAQFoK
ICAgICA/cmV0cmlldmVMYXN0Q2FsbGVyQEludGVycHJldGVyQEpTQ0BAUUJFWFBBVkV4ZWNTdGF0
ZUAyQEFBSDFBQVZVU3RyaW5nQDJAQUFWSlNWYWx1ZUAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw3ICsxMzEsNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNs
YXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yLCBcCiAgICAgfSwgXAotICAgIHNpemVvZihDbGFzc05hbWUpLCBc
CiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIAogICAgIHN0cnVjdCBDbGFz
c0luZm8gewpAQCAtMTgwLDggKzE3OSw2IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsg
XAogCiAgICAgICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxlOwogCi0gICAgICAgIHNpemVfdCBj
ZWxsU2l6ZTsKLSAgICAgICAgCiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlTdG9y
YWdlVHlwZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAgICB7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCi0gICAgICAgIEFTU0VSVChzaXplb2YoVCkgPT0gVDo6c19pbmZvLmNl
bGxTaXplKTsKICAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CiAgICAgICAgIGhlYXAuZ2xvYmFsRGF0YSgpLT5zZXRJbml0aWFsaXppbmdP
YmplY3RDbGFzcygmVDo6c19pbmZvKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5
ICszNiw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdWJzdHJpbmdGcm9tUm9wZUMKIAogY29u
c3QgQ2xhc3NJbmZvIEpTU3RyaW5nOjpzX2luZm8gPSB7ICJzdHJpbmciLCAwLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTU3RyaW5nKSB9OwogCi12b2lkIEpTU3RyaW5nOjpSb3BlQnVpbGRl
cjo6ZXhwYW5kKCkKK3ZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhwYW5kKCkKIHsK
LSAgICBBU1NFUlQobV9pbmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgp
OworICAgIEFTU0VSVChtX2luZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVM
ZW5ndGgpOwogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IG1fanNTdHJpbmc7CiAgICAgbV9qc1N0
cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV9nbG9iYWxEYXRhKTsKICAgICBtX2luZGV4ID0gMDsK
QEAgLTU1LDEzICs1NSwyMyBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxs
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgdGhpc09iamVj
dC0+bV9maWJlcnNbaV07ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fZmliZXJzW2ldKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+aXNKU1JvcGVTdHJpbmdP
YmplY3QoKSkKKyAgICAgICAgSlNSb3BlU3RyaW5nOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworfQorCit2b2lkIEpTUm9wZVN0cmluZzo6dmlzaXRDaGlsZHJlbihKU1N0cmlu
ZyogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNSb3BlU3RyaW5n
KiB0aGlzT2JqZWN0QXNSb3BlID0gcmVpbnRlcnByZXRfY2FzdDxKU1JvcGVTdHJpbmcqPih0aGlz
T2JqZWN0KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVM
ZW5ndGggJiYgdGhpc09iamVjdEFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3RBc1JvcGUtPm1fZmliZXJzW2ldKTsKIH0KIAotdm9pZCBK
U1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAordm9pZCBKU1JvcGVT
dHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNSb3BlKCkpOworICAgIEFTU0VSVChpc0pTUm9wZVN0cmluZ09iamVjdCgpKTsKIAogICAgIGlm
IChpczhCaXQoKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwpAQCAtMTI4LDcgKzEzOCw3IEBA
IHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKIC8vIFZlY3RvciBiZWZv
cmUgcGVyZm9ybWluZyBhbnkgY29uY2F0ZW5hdGlvbiwgYnV0IGJ5IHdvcmtpbmcgYmFja3dhcmRz
IHdlIGxpa2VseQogLy8gb25seSBmaWxsIHRoZSBxdWV1ZSB3aXRoIHRoZSBudW1iZXIgb2Ygc3Vi
c3RyaW5ncyBhdCBhbnkgZ2l2ZW4gbGV2ZWwgaW4gYQogLy8gcm9wZS1vZi1yb3Blcy4pICAgIAot
dm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqIGJ1ZmZlcikgY29uc3QK
K3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhciogYnVmZmVyKSBj
b25zdAogewogICAgIExDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlciArIG1fbGVuZ3RoOyAvLyBXZSB3
aWxsIGJlIHdvcmtpbmcgYmFja3dhcmRzIG92ZXIgdGhlIHJvcGUuCiAgICAgVmVjdG9yPEpTU3Ry
aW5nKiwgMzI+IHdvcmtRdWV1ZTsgLy8gUHV0dGluZyBzdHJpbmdzIGludG8gYSBWZWN0b3IgaXMg
b25seSBPSyBiZWNhdXNlIHRoZXJlIGFyZSBubyBHQyBwb2ludHMgaW4gdGhpcyBtZXRob2QuCkBA
IC0xNDQsOCArMTU0LDkgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENo
YQogICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgIGlmIChjdXJyZW50
RmliZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNf
bWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV07ICsraSkK
LSAgICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlci0+bV9maWJlcnNb
aV0uZ2V0KCkpOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBjdXJyZW50RmliZXJBc1JvcGUg
PSByZWludGVycHJldF9jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJlcik7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1
cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgICAgICAgICB3b3Jr
UXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV0uZ2V0KCkpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTU5LDcgKzE3MCw3IEBAIHZvaWQg
SlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGEKICAgICBBU1NFUlQoIWlzUm9wZSgp
KTsKIH0KIAotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciogYnVmZmVy
KSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqIGJ1
ZmZlcikgY29uc3QKIHsKICAgICBVQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsg
Ly8gV2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSByb3BlLgogICAgIFZlY3Rv
cjxKU1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFRoZXNlIHN0cmluZ3MgYXJlIGtlcHQgYWxp
dmUgYnkgdGhlIHBhcmVudCByb3BlLCBzbyB1c2luZyBhIFZlY3RvciBpcyBPSy4KQEAgLTE3Miw4
ICsxODMsOSBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFyCiAgICAg
ICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRGaWJlci0+
aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRl
cm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVyLT5tX2ZpYmVyc1tpXTsgKytpKQotICAgICAg
ICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQoY3VycmVudEZpYmVyLT5tX2ZpYmVyc1tpXS5nZXQo
KSk7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIGN1cnJlbnRGaWJlckFzUm9wZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4oY3VycmVudEZpYmVyKTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZp
YmVyQXNSb3BlLT5tX2ZpYmVyc1tpXTsgKytpKQorICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5h
cHBlbmQoY3VycmVudEZpYmVyQXNSb3BlLT5tX2ZpYmVyc1tpXS5nZXQoKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0xODcsNyArMTk5LDcgQEAgdm9pZCBKU1N0cmlu
Zzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhcgogICAgIEFTU0VSVCghaXNSb3BlKCkpOwogfQog
Ci12b2lkIEpTU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit2b2lk
IEpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJl
cnNbaV07ICsraSkKICAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKQEAgLTE5Nyw3ICsyMDks
NyBAQCB2b2lkIEpTU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4CiAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIH0KIAotSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJ
bmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK0pTU3RyaW5nKiBKU1Jv
cGVTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQog
ewogICAgIEFTU0VSVChpc1JvcGUoKSk7CiAgICAgcmVzb2x2ZVJvcGUoZXhlYyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDExNTIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNTdHJp
bmc7CisgICAgY2xhc3MgSlNSb3BlU3RyaW5nOwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAogICAgIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSopOwpAQCAt
NTgsNTUgKzU5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEpTU3RyaW5nKiBqc093bmVkU3Ry
aW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmKTsgCiAgICAgSlNTdHJpbmcqIGpzT3du
ZWRTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYpOyAKIAotICAgIEpTU3RyaW5nKiBq
c1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CisgICAgSlNSb3BlU3RyaW5nKiBqc1N0cmlu
Z0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICBjbGFzcyBKU1N0cmluZyA6IHB1YmxpYyBK
U0NlbGwgewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNwZWNpYWxp
emVkVGh1bmtKSVQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU1JvcGVTdHJpbmc7CiAgICAgICAg
IGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwotICAgICAgICBmcmllbmQgSlNTdHJpbmcqIGpz
U3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqKTsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAgICAg
Y2xhc3MgUm9wZUJ1aWxkZXIgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBSb3BlQnVp
bGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgICAgICAgICAgOiBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICAgICAsIG1fanNTdHJpbmcoanNTdHJpbmdC
dWlsZGVyKCZnbG9iYWxEYXRhKSkKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdm9pZCBhcHBlbmQoSlNTdHJp
bmcqIGpzU3RyaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtX2luZGV4
ID09IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAgICAgICAgICAg
ICAgZXhwYW5kKCk7Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9maWJlcnNbbV9pbmRl
eCsrXS5zZXQobV9nbG9iYWxEYXRhLCBtX2pzU3RyaW5nLCBqc1N0cmluZyk7Ci0gICAgICAgICAg
ICAgICAgbV9qc1N0cmluZy0+bV9sZW5ndGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOwotICAgICAg
ICAgICAgICAgIG1fanNTdHJpbmctPm1faXM4Qml0ID0gbV9qc1N0cmluZy0+bV9pczhCaXQgJiYg
anNTdHJpbmctPm1faXM4Qml0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU1N0cmlu
ZyogcmVsZWFzZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNTdHJpbmcqIHRt
cCA9IG1fanNTdHJpbmc7Ci0gICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9IDA7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9qc1N0cmluZy0+bV9sZW5ndGg7IH0KLQotICAgICAgICBw
cml2YXRlOgotICAgICAgICAgICAgdm9pZCBleHBhbmQoKTsKLQotICAgICAgICAgICAgSlNHbG9i
YWxEYXRhJiBtX2dsb2JhbERhdGE7Ci0gICAgICAgICAgICBKU1N0cmluZyogbV9qc1N0cmluZzsK
LSAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OwotICAgICAgICB9OwotCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCkBAIC0xMTksMTkgKzg1LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IDA7
Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IHRydWU7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKICAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9s
ZW5ndGggPSBsZW5ndGg7CiAgICAgICAgICAgICBtX2lzOEJpdCA9IG1fdmFsdWUuaW1wbCgpLT5p
czhCaXQoKTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3QgPSBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKQEAgLTE0MCwzNSArMTAwLDE5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgICAgIG1faXM4
Qml0ID0gbV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0
cmluZ09iamVjdCA9IGZhbHNlOwogICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcq
IHMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgp
OwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7
Ci0gICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOwotICAg
ICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcqIHMzKQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OwotICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkgKyBz
My0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczIt
PmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOwotICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBzMik7Ci0gICAgICAgICAgICBtX2ZpYmVyc1syXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgczMpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVh
dGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAg
SlNTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5n
PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG5l
d1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3U3RyaW5nOworICAgICAgICAgICAgbV9sZW5ndGggPSAwOworICAgICAgICAgICAgbV9pczhC
aXQgPSB0cnVlOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IGZhbHNlOwog
ICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gdmFsdWUpCiAgICAgICAgIHsKQEAgLTE3OSwxOCArMTIzLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0
aCwgY29zdCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgICAgICB9Ci0gICAg
ICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNT
dHJpbmcqIHMxLCBKU1N0cmluZyogczIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RyaW5n
KiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFs
RGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBuZXdTdHJpbmct
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMik7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3U3RyaW5nOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3Ry
aW5nKiBzMykKLSAgICAgICAgewotICAgICAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0
cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwot
ICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CkBAIC0yMDAsMTggKzEzMiw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJl
c29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0K
LSAgICAgICAgY29uc3QgVVN0cmluZyYgdHJ5R2V0VmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgICAgICAgICAgcmVzb2x2ZVJvcGUoMCk7
Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgfQorICAgICAgICBjb25zdCBV
U3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgY29uc3QgVVN0cmluZyYg
dHJ5R2V0VmFsdWUoKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4g
bV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwpAQCAtMjI2LDcgKzE0OCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4g
aSA8IG1fbGVuZ3RoOyB9CiAgICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleChFeGVjU3RhdGUqLCB1
bnNpZ25lZCk7Ci0gICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKQogICAgICAgICB7CkBAIC0yNDAsMzggKzE2MSwxNDQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KKyAgICAgICAgYm9vbCBpczhCaXQoKSBjb25z
dCB7IHJldHVybiBtX2lzOEJpdDsgfQorICAgICAgICBib29sIGlzSlNSb3BlU3RyaW5nT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0pTUm9wZVN0cmluZ09iamVjdDsgfQorCisgICAgICAgIC8v
IEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIFVTdHJpbmcgb3IgYSByb3BlIG9m
IGZpYmVycy4KKyAgICAgICAgYm9vbCBtX2lzOEJpdCA6IDE7CisgICAgICAgIGJvb2wgbV9pc0pT
Um9wZVN0cmluZ09iamVjdCA6IDE7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgICAg
ICBtdXRhYmxlIFVTdHJpbmcgbV92YWx1ZTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJlc29sdmVSb3BlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2
b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVz
b2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OwotICAgICAgICB2b2lkIG91dE9mTWVtb3J5
KEV4ZWNTdGF0ZSopIGNvbnN0OwotCiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2Jq
ZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIC8vIEFjdHVhbGx5IGdldFByb3Bl
cnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5U2xvdCAoc2VlIEpTQ2VsbCkuCiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoID0gMzsKLQotICAgICAgICAvLyBBIHN0
cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBmaWJl
cnMuCi0gICAgICAgIGJvb2wgbV9pczhCaXQgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKLSAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7Ci0gICAgICAgIG11dGFibGUgRml4
ZWRBcnJheTxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+LCBzX21heEludGVybmFsUm9wZUxlbmd0aD4g
bV9maWJlcnM7Ci0KLSAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
LmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhC
aXQ7IH0KICAgICAgICAgVVN0cmluZyYgc3RyaW5nKCkgeyBBU1NFUlQoIWlzUm9wZSgpKTsgcmV0
dXJuIG1fdmFsdWU7IH0KIAogICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3Ry
aW5nKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdW5zaWduZWQgY291bnQpOwotICAgICAgICBmcmll
bmQgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlz
VmFsdWUpOwogICAgICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSos
IEpTU3RyaW5nKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIH07CiAK
KyAgICBjbGFzcyBKU1JvcGVTdHJpbmcgOiBwdWJsaWMgSlNTdHJpbmcgeworICAgICAgICBmcmll
bmQgY2xhc3MgSlNTdHJpbmc7CisKKyAgICAgICAgZnJpZW5kIEpTUm9wZVN0cmluZyoganNTdHJp
bmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworCisgICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAg
ICAgICAgICwgbV9qc1N0cmluZyhqc1N0cmluZ0J1aWxkZXIoJmdsb2JhbERhdGEpKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgYXBwZW5kKEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBleHBhbmQoKTsKKyAgICAgICAgICAgICAg
ICBtX2pzU3RyaW5nLT5tX2ZpYmVyc1ttX2luZGV4KytdLnNldChtX2dsb2JhbERhdGEsIG1fanNT
dHJpbmcsIGpzU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2xlbmd0aCAr
PSBqc1N0cmluZy0+bV9sZW5ndGg7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9pczhC
aXQgPSBtX2pzU3RyaW5nLT5tX2lzOEJpdCAmJiBqc1N0cmluZy0+bV9pczhCaXQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogcmVsZWFzZSgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiB0bXAgPSBtX2pzU3RyaW5nOworICAg
ICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiB0bXA7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJu
IG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IHZvaWQgZXhwYW5kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYg
bV9nbG9iYWxEYXRhOworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBtX2pzU3RyaW5nOworICAg
ICAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIEpTUm9wZVN0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAg
ICAgICAgICA6IEpTU3RyaW5nKGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0
cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5n
dGgoKSArIHMyLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQo
KSAmJiBzMi0+aXM4Qml0KCkpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9
IHRydWU7CisgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEp
OworICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkgKyBz
My0+bGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczIt
PmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmlu
Z09iamVjdCA9IHRydWU7CisgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgczEpOworICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHMyKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgSlNTdHJpbmc6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBjcmVhdGVOdWxs
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgSlNSb3Bl
U3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJp
bmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMx
LCBKU1N0cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbmV3
U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxE
YXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBuZXdTdHJp
bmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAgICAgICByZXR1
cm4gbmV3U3RyaW5nOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpT
U3RyaW5nKiBzMykKKyAgICAgICAgeworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJp
bmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEu
aGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG5ld1N0cmluZy0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7CisgICAgICAgICAgICByZXR1
cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU1N0cmluZyosIFNsb3RWaXNpdG9yJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBm
cmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqLCBSZWdpc3RlciosIHVuc2lnbmVkKTsK
KyAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzb2x2ZVJvcGUo
RXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENo
YXIqKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFyKikgY29u
c3Q7CisgICAgICAgIHZvaWQgb3V0T2ZNZW1vcnkoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAg
IAorICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoID0gMzsKKyAgICAgICAgCisgICAgICAgIG11dGFibGUgRml4ZWRBcnJheTxXcml0ZUJhcnJp
ZXI8SlNTdHJpbmc+LCBzX21heEludGVybmFsUm9wZUxlbmd0aD4gbV9maWJlcnM7CisgICAgfTsK
KwogICAgIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKTsKIAogICAgIGlubGluZSBKU1N0cmlu
ZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKQEAgLTMxNiwxMSArMzQzLDI1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcy5p
bXBsKCkpOwogICAgIH0KIAorICAgIGlubGluZSBjb25zdCBVU3RyaW5nJiBKU1N0cmluZzo6dmFs
dWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzUm9wZSgpKQor
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+
cmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAg
IGlubGluZSBjb25zdCBVU3RyaW5nJiBKU1N0cmluZzo6dHJ5R2V0VmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoMCk7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOworICAgIH0KKwogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldElu
ZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChj
YW5HZXRJbmRleChpKSk7CiAgICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBnZXRJbmRleFNsb3dDYXNlKGV4ZWMsIGkpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SlNSb3BlU3RyaW5nKj4odGhpcyktPmdldEluZGV4U2xvd0Nhc2UoZXhlYywgaSk7
CiAgICAgICAgIEFTU0VSVChpIDwgbV92YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiBq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCBtX3ZhbHVlLCBpKTsKICAgICB9CkBAIC0z
OTIsOSArNDMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgcy5pbXBsKCkpOwogICAgIH0KIAotICAg
IGlubGluZSBKU1N0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKKyAgICBpbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVOdWxs
KCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlTnVsbCgq
Z2xvYmFsRGF0YSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0
YSgpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyKSA8IGxlbmd0aDEpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAgICAgIHJldHVybiBK
U1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAgIHJldHVybiBKU1Jv
cGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzMSwgczIpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcm
IHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBAIC02OSwxMyArNjks
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICgobGVuZ3RoMSArIGxlbmd0aDIgKyBs
ZW5ndGgzKSA8IGxlbmd0aDMpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwogCi0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwg
anNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MykpOwogICAg
IH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9w
ZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOwogCiAgICAgICAg
IHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7CiAKQEAgLTkzLDcgKzkzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgSlNTdHJpbmc6
OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNSb3BlU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJvcGVC
dWlsZGVyLmFwcGVuZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IDA7Cg==
</data>
<flag name="review"
          id="144610"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139228</attachid>
            <date>2012-04-27 10:53:09 -0700</date>
            <delta_ts>2012-04-27 11:08:53 -0700</delta_ts>
            <desc>Patch updated from review comments</desc>
            <filename>84907-4.patch</filename>
            <type>text/plain</type>
            <size>27094</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTA0LTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWY6IENoYW5nZWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlCisgICAg
ICAgICAgICAgICAgdG8gSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZQorICAgICAgICAqIHJ1bnRp
bWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ2xhc3NJbmZvKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKToK
KyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOCk6CisgICAg
ICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OmdldEluZGV4U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6aXNSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6Omlz
OEJpdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppc0pTUm9wZVN0cmluZ09iamVjdCk6Cisg
ICAgICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoUm9wZUJ1aWxkZXIpOgorICAgICAgICAo
SlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChK
U0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OnJlbGVhc2UpOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OkpTUm9wZVN0cmluZyk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZU51bGwpOgorICAgICAgICAo
SlNDOjpKU1JvcGVTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp2YWx1
ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0cnlHZXRWYWx1ZSk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nQnVpbGRlcik6Cisg
ICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJndW1lbnRzKToKKwogMjAxMi0wNC0yNSAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGEgdmVy
c2lvbiBvZiBTdHJpbmdJbXBsOjpmaW5kKCkgd2l0aG91dCBvZmZzZXQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lv
biAxMTUyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjk3
LDcgKzI5Nyw3IEBAIEVYUE9SVFMKICAgICA/cmVzZXREYXRlQ2FjaGVASlNHbG9iYWxEYXRhQEpT
Q0BAUUFFWFhaCiAgICAgP3Jlc2l6ZUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9y
ZXNpemVPdXRPZkxpbmVAQml0VmVjdG9yQFdURkBAQUFFWElAWgotICAgID9yZXNvbHZlUm9wZUBK
U1N0cmluZ0BKU0NAQEFCRVhQQVZFeGVjU3RhdGVAMkBAWgorICAgID9yZXNvbHZlUm9wZUBKU1Jv
cGVTdHJpbmdASlNDQEBBQkVYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/cmVzdG9yZUFsbEBQcm9m
aWxlQEpTQ0BAUUFFWFhaCiAgICAgP3JldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZUBJbnRlcnByZXRl
ckBKU0NAQFFCRT9BVkpTVmFsdWVAMkBQQVZFeGVjU3RhdGVAMkBQQVZKU0Z1bmN0aW9uQDJAQFoK
ICAgICA/cmV0cmlldmVMYXN0Q2FsbGVyQEludGVycHJldGVyQEpTQ0BAUUJFWFBBVkV4ZWNTdGF0
ZUAyQEFBSDFBQVZVU3RyaW5nQDJAQUFWSlNWYWx1ZUAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw3ICsxMzEsNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNs
YXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yLCBcCiAgICAgfSwgXAotICAgIHNpemVvZihDbGFzc05hbWUpLCBc
CiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIAogICAgIHN0cnVjdCBDbGFz
c0luZm8gewpAQCAtMTgwLDggKzE3OSw2IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsg
XAogCiAgICAgICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxlOwogCi0gICAgICAgIHNpemVfdCBj
ZWxsU2l6ZTsKLSAgICAgICAgCiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlTdG9y
YWdlVHlwZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAgICB7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCi0gICAgICAgIEFTU0VSVChzaXplb2YoVCkgPT0gVDo6c19pbmZvLmNl
bGxTaXplKTsKICAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CiAgICAgICAgIGhlYXAuZ2xvYmFsRGF0YSgpLT5zZXRJbml0aWFsaXppbmdP
YmplY3RDbGFzcygmVDo6c19pbmZvKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5
ICszNiw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdWJzdHJpbmdGcm9tUm9wZUMKIAogY29u
c3QgQ2xhc3NJbmZvIEpTU3RyaW5nOjpzX2luZm8gPSB7ICJzdHJpbmciLCAwLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTU3RyaW5nKSB9OwogCi12b2lkIEpTU3RyaW5nOjpSb3BlQnVpbGRl
cjo6ZXhwYW5kKCkKK3ZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhwYW5kKCkKIHsK
LSAgICBBU1NFUlQobV9pbmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgp
OworICAgIEFTU0VSVChtX2luZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVM
ZW5ndGgpOwogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IG1fanNTdHJpbmc7CiAgICAgbV9qc1N0
cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV9nbG9iYWxEYXRhKTsKICAgICBtX2luZGV4ID0gMDsK
QEAgLTU1LDEzICs1NSwyMSBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxs
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgdGhpc09iamVj
dC0+bV9maWJlcnNbaV07ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fZmliZXJzW2ldKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+aXNKU1JvcGVTdHJpbmdP
YmplY3QoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNSb3BlU3RyaW5nKj4odGhpc09iamVjdCkt
PnZpc2l0RmliZXJzKHZpc2l0b3IpOworfQorCit2b2lkIEpTUm9wZVN0cmluZzo6dmlzaXRGaWJl
cnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
X21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKQorICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbV9maWJlcnNbaV0pOwogfQogCi12b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9w
ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIEFTU0VSVChpc1JvcGUoKSk7CisgICAgQVNT
RVJUKGlzVW5yZXNvbHZlZFJvcGUoKSk7CisgICAgQVNTRVJUKGlzSlNSb3BlU3RyaW5nT2JqZWN0
KCkpOwogCiAgICAgaWYgKGlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7CkBAIC03
NCw3ICs4Miw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKICAg
ICAgICAgfQogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJv
cGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZmliZXJz
W2ldLT5pc1JvcGUoKSkKKyAgICAgICAgICAgIGlmIChtX2ZpYmVyc1tpXS0+aXNVbnJlc29sdmVk
Um9wZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlUm9wZVNsb3dDYXNlOChidWZm
ZXIpOwogICAgICAgICB9CiAKQEAgLTg3LDcgKzk1LDcgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2
ZVJvcGUoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIG1fbGVuZ3RoKSA9PSBwb3NpdGlvbik7
Ci0gICAgICAgIEFTU0VSVCghaXNSb3BlKCkpOworICAgICAgICBBU1NFUlQoIWlzVW5yZXNvbHZl
ZFJvcGUoKSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwMiw3ICsxMTAsNyBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tp
XTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZpYmVyc1tpXS0+aXNSb3BlKCkpCisgICAgICAgIGlm
IChtX2ZpYmVyc1tpXS0+aXNVbnJlc29sdmVkUm9wZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJl
c29sdmVSb3BlU2xvd0Nhc2UoYnVmZmVyKTsKICAgICB9CiAKQEAgLTExNSw3ICsxMjMsNyBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIG1fZmliZXJz
W2ldLmNsZWFyKCk7CiAgICAgfQogICAgIEFTU0VSVCgoYnVmZmVyICsgbV9sZW5ndGgpID09IHBv
c2l0aW9uKTsKLSAgICBBU1NFUlQoIWlzUm9wZSgpKTsKKyAgICBBU1NFUlQoIWlzVW5yZXNvbHZl
ZFJvcGUoKSk7CiB9CiAKIC8vIE92ZXJ2aWV3OiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBhIEpT
U3RyaW5nIGZyb20gaG9sZGluZyBhIHN0cmluZyBpbiByb3BlIGZvcm0KQEAgLTEyOCw3ICsxMzYs
NyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiAvLyBWZWN0b3Ig
YmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNhdGVuYXRpb24sIGJ1dCBieSB3b3JraW5nIGJhY2t3
YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmlsbCB0aGUgcXVldWUgd2l0aCB0aGUgbnVtYmVyIG9m
IHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxldmVsIGluIGEKIC8vIHJvcGUtb2Ytcm9wZXMuKSAg
ICAKLXZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKiBidWZmZXIpIGNv
bnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqIGJ1ZmZl
cikgY29uc3QKIHsKICAgICBMQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsgLy8g
V2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSByb3BlLgogICAgIFZlY3RvcjxK
U1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFB1dHRpbmcgc3RyaW5ncyBpbnRvIGEgVmVjdG9y
IGlzIG9ubHkgT0sgYmVjYXVzZSB0aGVyZSBhcmUgbm8gR0MgcG9pbnRzIGluIHRoaXMgbWV0aG9k
LgpAQCAtMTQzLDkgKzE1MSwxMCBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNl
OChMQ2hhCiAgICAgICAgIEpTU3RyaW5nKiBjdXJyZW50RmliZXIgPSB3b3JrUXVldWUubGFzdCgp
OwogICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCi0gICAgICAgIGlmIChjdXJyZW50
RmliZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNf
bWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV07ICsraSkK
LSAgICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlci0+bV9maWJlcnNb
aV0uZ2V0KCkpOworICAgICAgICBpZiAoY3VycmVudEZpYmVyLT5pc1VucmVzb2x2ZWRSb3BlKCkp
IHsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogY3VycmVudEZpYmVyQXNSb3BlID0gc3RhdGlj
X2Nhc3Q8SlNSb3BlU3RyaW5nKj4oY3VycmVudEZpYmVyKTsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVyQXNS
b3BlLT5tX2ZpYmVyc1tpXTsgKytpKQorICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQo
Y3VycmVudEZpYmVyQXNSb3BlLT5tX2ZpYmVyc1tpXS5nZXQoKSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogCkBAIC0xNTYsMTAgKzE2NSwxMCBAQCB2b2lkIEpTU3RyaW5nOjpy
ZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhCiAgICAgfQogCiAgICAgQVNTRVJUKGJ1ZmZlciA9PSBw
b3NpdGlvbik7Ci0gICAgQVNTRVJUKCFpc1JvcGUoKSk7CisgICAgQVNTRVJUKCFpc1VucmVzb2x2
ZWRSb3BlKCkpOwogfQogCi12b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFy
KiBidWZmZXIpIGNvbnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShV
Q2hhciogYnVmZmVyKSBjb25zdAogewogICAgIFVDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlciArIG1f
bGVuZ3RoOyAvLyBXZSB3aWxsIGJlIHdvcmtpbmcgYmFja3dhcmRzIG92ZXIgdGhlIHJvcGUuCiAg
ICAgVmVjdG9yPEpTU3RyaW5nKiwgMzI+IHdvcmtRdWV1ZTsgLy8gVGhlc2Ugc3RyaW5ncyBhcmUg
a2VwdCBhbGl2ZSBieSB0aGUgcGFyZW50IHJvcGUsIHNvIHVzaW5nIGEgVmVjdG9yIGlzIE9LLgpA
QCAtMTcxLDkgKzE4MCwxMCBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVD
aGFyCiAgICAgICAgIEpTU3RyaW5nKiBjdXJyZW50RmliZXIgPSB3b3JrUXVldWUubGFzdCgpOwog
ICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogCi0gICAgICAgIGlmIChjdXJyZW50Rmli
ZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4
SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV07ICsraSkKLSAg
ICAgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlci0+bV9maWJlcnNbaV0u
Z2V0KCkpOworICAgICAgICBpZiAoY3VycmVudEZpYmVyLT5pc1VucmVzb2x2ZWRSb3BlKCkpIHsK
KyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogY3VycmVudEZpYmVyQXNSb3BlID0gc3RhdGljX2Nh
c3Q8SlNSb3BlU3RyaW5nKj4oY3VycmVudEZpYmVyKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVyQXNSb3Bl
LT5tX2ZpYmVyc1tpXTsgKytpKQorICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQoY3Vy
cmVudEZpYmVyQXNSb3BlLT5tX2ZpYmVyc1tpXS5nZXQoKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCkBAIC0xODQsMjcgKzE5NCwyNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNv
bHZlUm9wZVNsb3dDYXNlKFVDaGFyCiAgICAgfQogCiAgICAgQVNTRVJUKGJ1ZmZlciA9PSBwb3Np
dGlvbik7Ci0gICAgQVNTRVJUKCFpc1JvcGUoKSk7CisgICAgQVNTRVJUKCFpc1VucmVzb2x2ZWRS
b3BlKCkpOwogfQogCi12b2lkIEpTU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0Cit2b2lkIEpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5n
dGggJiYgbV9maWJlcnNbaV07ICsraSkKICAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKLSAg
ICBBU1NFUlQoaXNSb3BlKCkpOworICAgIEFTU0VSVChpc1VucmVzb2x2ZWRSb3BlKCkpOwogICAg
IEFTU0VSVChtX3ZhbHVlID09IFVTdHJpbmcoKSk7CiAgICAgaWYgKGV4ZWMpCiAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIH0KIAotSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJ
bmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK0pTU3RyaW5nKiBKU1Jv
cGVTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQog
ewotICAgIEFTU0VSVChpc1JvcGUoKSk7CisgICAgQVNTRVJUKGlzVW5yZXNvbHZlZFJvcGUoKSk7
CiAgICAgcmVzb2x2ZVJvcGUoZXhlYyk7CiAgICAgLy8gUmV0dXJuIGEgc2FmZSBuby12YWx1ZSBy
ZXN1bHQsIHRoaXMgc2hvdWxkIG5ldmVyIGJlIHVzZWQsIHNpbmNlIHRoZSBleGNldGlvbiB3aWxs
IGJlIHRocm93bi4KICAgICBpZiAoZXhlYy0+ZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCAiIik7Ci0gICAgQVNTRVJUKCFpc1JvcGUoKSk7CisgICAgQVNTRVJUKCFp
c1VucmVzb2x2ZWRSb3BlKCkpOwogICAgIEFTU0VSVChpIDwgbV92YWx1ZS5sZW5ndGgoKSk7CiAg
ICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMsIG1fdmFsdWUsIGkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lv
biAxMTUyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEpTU3RyaW5nOworICAgIGNsYXNzIEpTUm9wZVN0cmluZzsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAKICAgICBKU1N0cmluZyoganNFbXB0eVN0cmluZyhKU0dsb2JhbERh
dGEqKTsKQEAgLTU4LDU1ICs1OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU1N0cmluZyog
anNPd25lZFN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJik7IAogICAgIEpTU3Ry
aW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgCiAKLSAgICBK
U1N0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIEpTUm9wZVN0cmlu
ZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOwogCiAgICAgY2xhc3MgSlNTdHJpbmcg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBTcGVjaWFsaXplZFRodW5rSklUOworICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3RyaW5n
OwogICAgICAgICBmcmllbmQgc3RydWN0IFRodW5rSGVscGVyczsKLSAgICAgICAgZnJpZW5kIEpT
U3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICAgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
Ci0gICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAg
ICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICAgICAgICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAgICAgLCBtX2pzU3RyaW5n
KGpzU3RyaW5nQnVpbGRlcigmZ2xvYmFsRGF0YSkpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4
KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYXBw
ZW5kKEpTU3RyaW5nKiBqc1N0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9pbmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAg
ICAgICAgICAgICAgIGV4cGFuZCgpOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fZmli
ZXJzW21faW5kZXgrK10uc2V0KG1fZ2xvYmFsRGF0YSwgbV9qc1N0cmluZywganNTdHJpbmcpOwot
ICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fbGVuZ3RoICs9IGpzU3RyaW5nLT5tX2xlbmd0
aDsKLSAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2lzOEJpdCA9IG1fanNTdHJpbmctPm1f
aXM4Qml0ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNTdHJpbmcqIHJlbGVhc2UoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpT
U3RyaW5nKiB0bXAgPSBtX2pzU3RyaW5nOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAw
OwotICAgICAgICAgICAgICAgIHJldHVybiB0bXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7Ci0KLSAgICAgICAg
ICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwotICAgICAgICAgICAgSlNTdHJpbmcqIG1f
anNTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgbV9pbmRleDsKLSAgICAgICAgfTsKLQogICAg
IHByaXZhdGU6CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERh
dGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQpAQCAtMTE5LDE5ICs4NSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9s
ZW5ndGggPSAwOwotICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgICAgICB9Ci0KICAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBsZW5ndGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwo
KSk7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAg
ICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVl
LmltcGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAgICBtX2lzSlNSb3BlU3RyaW5nT2JqZWN0ID0g
ZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCkBAIC0xNDAsMzUg
KzEwMCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAg
ICAgICBtX2lzOEJpdCA9IG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKTsKKyAgICAgICAgICAgIG1f
aXNKU1JvcGVTdHJpbmdPYmplY3QgPSBmYWxzZTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhp
cyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEs
IEpTU3RyaW5nKiBzMikKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMy
LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+
aXM4Qml0KCkpOwotICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHMxKTsKLSAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxl
bmd0aCgpICsgczMtPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJp
dCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKLSAgICAgICAgICAgIG1fZmli
ZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7Ci0gICAgICAgICAgICBtX2ZpYmVyc1sx
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwotICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBKU1N0
cmluZyogY3JlYXRlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAg
ICAgIG1faXM4Qml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXNKU1JvcGVTdHJpbmdPYmplY3Qg
PSBmYWxzZTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgIHB1YmxpYzoKICAgICAgICAgc3Rh
dGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICB7CkBAIC0xNzksMTggKzEyMyw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhLCBsZW5ndGgsIGNvc3QpOwogICAgICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBKU1N0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEpOwotICAgICAgICAgICAg
bmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOwotICAgICAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgSlNTdHJpbmcq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcq
IHMyLCBKU1N0cmluZyogczMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBuZXdT
dHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMiwgczMpOwotICAgICAgICAgICAgcmV0dXJuIG5l
d1N0cmluZzsKLSAgICAgICAgfQogICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090
aGVyT3duZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwpAQCAtMjAwLDE4
ICsxMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7
CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAg
ICAgICAgICByZXNvbHZlUm9wZShleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwot
ICAgICAgICB9Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJlc29s
dmVSb3BlKDApOwotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KKyAgICAg
ICAgY29uc3QgVVN0cmluZyYgdmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGNvbnN0
IFVTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgp
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKQEAgLTIyNiw3ICsxNDgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkp
IHsgcmV0dXJuIGkgPCBtX2xlbmd0aDsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQpOwotICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewpAQCAtMjQwLDM4ICsxNjEsMTQ0IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgYm9vbCBpc1Vu
cmVzb2x2ZWRSb3BlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5pc051bGwoKTsgfQorICAgICAg
ICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9CisgICAgICAgIGJvb2wg
aXNKU1JvcGVTdHJpbmdPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2lzSlNSb3BlU3RyaW5nT2Jq
ZWN0OyB9CisKKyAgICAgICAgLy8gQSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgZWl0aGVyIGJ5IGEg
VVN0cmluZyBvciBhIHJvcGUgb2YgZmliZXJzLgorICAgICAgICBib29sIG1faXM4Qml0IDogMTsK
KyAgICAgICAgYm9vbCBtX2lzSlNSb3BlU3RyaW5nT2JqZWN0IDogMTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9sZW5ndGg7CisgICAgICAgIG11dGFibGUgVVN0cmluZyBtX3ZhbHVlOworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAg
ICAgCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzb2x2ZVJvcGUoRXhlY1N0YXRl
KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZTgoTENoYXIqKSBjb25z
dDsKLSAgICAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFyKikgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgb3V0T2ZNZW1vcnkoRXhlY1N0YXRlKikgY29uc3Q7Ci0KICAgICAgICAgc3RhdGlj
IEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKik7CiAKICAgICAgICAg
Ly8gQWN0dWFsbHkgZ2V0UHJvcGVydHlTbG90LCBub3QgZ2V0T3duUHJvcGVydHlTbG90IChzZWUg
SlNDZWxsKS4KICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggPSAz
OwotCi0gICAgICAgIC8vIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIFVTdHJp
bmcgb3IgYSByb3BlIG9mIGZpYmVycy4KLSAgICAgICAgYm9vbCBtX2lzOEJpdCA6IDE7Ci0gICAg
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgICAgICBtdXRhYmxlIFVTdHJpbmcgbV92YWx1ZTsK
LSAgICAgICAgbXV0YWJsZSBGaXhlZEFycmF5PFdyaXRlQmFycmllcjxKU1N0cmluZz4sIHNfbWF4
SW50ZXJuYWxSb3BlTGVuZ3RoPiBtX2ZpYmVyczsKLQotICAgICAgICBib29sIGlzUm9wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KLSAgICAgICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQotICAgICAgICBVU3RyaW5nJiBzdHJpbmcoKSB7IEFT
U0VSVCghaXNSb3BlKCkpOyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBVU3RyaW5nJiBzdHJp
bmcoKSB7IEFTU0VSVCghaXNVbnJlc29sdmVkUm9wZSgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KIAog
ICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpT
U3RyaW5nKik7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIFJl
Z2lzdGVyKiwgdW5zaWduZWQgY291bnQpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmlu
Z0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUpOwogICAgICAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIH07CiAKKyAgICBjbGFzcyBKU1JvcGVT
dHJpbmcgOiBwdWJsaWMgSlNTdHJpbmcgeworICAgICAgICBmcmllbmQgY2xhc3MgSlNTdHJpbmc7
CisKKyAgICAgICAgZnJpZW5kIEpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFs
RGF0YSopOworCisgICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAg
ICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgICwgbV9qc1N0cmlu
Zyhqc1N0cmluZ0J1aWxkZXIoJmdsb2JhbERhdGEpKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgYXBwZW5k
KEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQorICAgICAg
ICAgICAgICAgICAgICBleHBhbmQoKTsKKyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2Zp
YmVyc1ttX2luZGV4KytdLnNldChtX2dsb2JhbERhdGEsIG1fanNTdHJpbmcsIGpzU3RyaW5nKTsK
KyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5n
dGg7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZy0+bV9pczhCaXQgPSBtX2pzU3RyaW5nLT5t
X2lzOEJpdCAmJiBqc1N0cmluZy0+bV9pczhCaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTUm9wZVN0cmluZyogcmVsZWFzZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSlNSb3BlU3RyaW5nKiB0bXAgPSBtX2pzU3RyaW5nOworICAgICAgICAgICAgICAgIG1fanNT
dHJpbmcgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVu
Z3RoOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAg
ICAgICAgICAgSlNSb3BlU3RyaW5nKiBtX2pzU3RyaW5nOworICAgICAgICAgICAgc2l6ZV90IG1f
aW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTUm9w
ZVN0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgICAgICA6IEpTU3RyaW5n
KGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgo
KTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkp
OworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IHRydWU7CisgICAgICAgICAg
ICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOworICAgICAgICAgICAgbV9m
aWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
U3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9s
ZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7CisgICAg
ICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+
aXM4Qml0KCkpOworICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IHRydWU7Cisg
ICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOworICAgICAg
ICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKKyAgICAgICAgICAg
IG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAg
ICAgeworICAgICAgICAgICAgSlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgICAgICAgICAgbV9pc0pTUm9wZVN0cmluZ09iamVjdCA9IHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBjcmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVh
cCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG5ld1N0cmluZy0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwor
ICAgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVT
dHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICAg
ICAgeworICAgICAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmlu
ZyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSwgczEsIHMyLCBzMyk7CisgICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCB2aXNpdEZpYmVycyhTbG90VmlzaXRvciYpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiwgUmVn
aXN0ZXIqLCB1bnNpZ25lZCk7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFy
Z3VtZW50cyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc29sdmVSb3BlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICB2b2lkIHJlc29s
dmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVT
bG93Q2FzZShVQ2hhciopIGNvbnN0OworICAgICAgICB2b2lkIG91dE9mTWVtb3J5KEV4ZWNTdGF0
ZSopIGNvbnN0OworICAgICAgICAKKyAgICAgICAgSlNTdHJpbmcqIGdldEluZGV4U2xvd0Nhc2Uo
RXhlY1N0YXRlKiwgdW5zaWduZWQpOworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X21heEludGVybmFsUm9wZUxlbmd0aCA9IDM7CisgICAgICAgIAorICAgICAgICBtdXRhYmxlIEZp
eGVkQXJyYXk8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPiwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGg+
IG1fZmliZXJzOworICAgIH07CisKICAgICBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSk7CiAK
ICAgICBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCkBAIC0zMTYsMTEg
KzM0MywyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGUoKmdsb2JhbERhdGEsIHMuaW1wbCgpKTsKICAgICB9CiAKKyAgICBpbmxpbmUgY29uc3QgVVN0
cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc1VucmVzb2x2ZWRSb3BlKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25z
dCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOworICAgIH0KKworICAgIGlubGluZSBjb25zdCBVU3RyaW5nJiBKU1N0cmluZzo6
dHJ5R2V0VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVW5yZXNvbHZlZFJvcGUo
KSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5y
ZXNvbHZlUm9wZSgwKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCiAgICAgaW5s
aW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgaWYg
KGlzUm9wZSgpKQotICAgICAgICAgICAgcmV0dXJuIGdldEluZGV4U2xvd0Nhc2UoZXhlYywgaSk7
CisgICAgICAgIGlmIChpc1VucmVzb2x2ZWRSb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNSb3BlU3RyaW5nKj4odGhpcyktPmdldEluZGV4U2xvd0Nhc2UoZXhlYywgaSk7
CiAgICAgICAgIEFTU0VSVChpIDwgbV92YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiBq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCBtX3ZhbHVlLCBpKTsKICAgICB9CkBAIC0z
OTIsOSArNDMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgcy5pbXBsKCkpOwogICAgIH0KIAotICAg
IGlubGluZSBKU1N0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKKyAgICBpbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVOdWxs
KCpnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlTnVsbCgq
Z2xvYmFsRGF0YSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0
YSgpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyKSA8IGxlbmd0aDEpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAgICAgIHJldHVybiBK
U1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAgIHJldHVybiBKU1Jv
cGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzMSwgczIpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcm
IHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBAIC02OSwxMyArNjks
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICgobGVuZ3RoMSArIGxlbmd0aDIgKyBs
ZW5ndGgzKSA8IGxlbmd0aDMpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwogCi0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwg
anNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MykpOwogICAg
IH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9w
ZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOwogCiAgICAgICAg
IHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7CiAKQEAgLTkzLDcgKzkzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgSlNTdHJpbmc6
OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNSb3BlU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJvcGVC
dWlsZGVyLmFwcGVuZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139233</attachid>
            <date>2012-04-27 11:08:53 -0700</date>
            <delta_ts>2012-04-27 15:45:54 -0700</delta_ts>
            <desc>Updated patch after talking to Geoff about isRope / isJSRopeObject()</desc>
            <filename>84907-5.patch</filename>
            <type>text/plain</type>
            <size>24161</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1NDUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA0LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbW9yeSB3YXN0ZWQgaW4gSlNTdHJpbmcgZm9yIG5vbi1yb3BlIHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0OTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgSlNTdHJpbmcg
aW50byB0d28gY2xhc3NlcywgSlNTdHJpbmcgYXMgYSBiYXNlIGNsYXNzIHRoYXQgZG9lcyBub3QK
KyAgICAgICAgaW5jbHVkZSB0aGUgZmliZXJzIG9mIGEgUm9wZSwgYW5kIGEgc3ViY2xhc3MgSlNS
b3BlU3RyaW5nIHRoYXQgaGFzIHRoZQorICAgICAgICByb3BlIGZ1bmN0aW9uYWxpdHkuICBCb3Ro
IGNsYXNzZXMgInNoYXJlIiB0aGUgc2FtZSBDbGFzc0luZm8uICBBZGRlZAorICAgICAgICBhIGJv
b2wgdG8gSlNTdHJpbmcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHdhcyBhbGxvY2F0ZWQg
YXMgYSBKU1JvcGVTdHJpbmcKKyAgICAgICAgdG8gcHJvcGVybHkgaGFuZGxlIHZpc2l0aW5nIHRo
ZSBmaWJlciBjaGlsZHJlbiB3aGVuIHRoZSByb3BlIGlzIHJlc29sdmVkIGFuZAorICAgICAgICB0
aGUgSlNSb3BlU3RyaW5nIGFwcGVhcnMgYXMgYSBKU1N0cmluZy4gIERpZG4ndCBjaGFuZ2UgdGhl
IGludGVyZmFjZSBvZiBKU1N0cmluZworICAgICAgICB0byByZXF1aXJlIGFueSBKSVQgY2hhbmdl
cy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCByZW1vdmVkICJjZWxsU2l6ZSIg
ZnJvbSBDbGFzc0luZm8gc2luY2UgYm90aCBjbGFzc2VzCisgICAgICAgIHNoYXJlIHRoZSBzYW1l
IENsYXNzSW5mbywgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLiAgVGhlIG9ubHkgdXNlIEkgY291
bGQgZmluZAorICAgICAgICBmb3IgY2VsbFNpemUgd2FzIGFuIEFTU0VSVCBpbiBhbGxvY2F0ZUNl
bGwoKS4KKworICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBwZXJmb3JtYW5j
ZSB0ZXN0cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWY6IENoYW5nZWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlCisgICAg
ICAgICAgICAgICAgdG8gSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZQorICAgICAgICAqIHJ1bnRp
bWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ2xhc3NJbmZvKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJp
bmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZp
c2l0RmliZXJzKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZSk6Cisg
ICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZTgpOgorICAgICAg
ICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpnZXRJbmRleFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmc6OmlzUm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppczhC
aXQpOgorICAgICAgICAoSlNSb3BlU3RyaW5nKToKKyAgICAgICAgKFJvcGVCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6Um9wZUJ1aWxkZXIpOgorICAg
ICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpyZWxlYXNlKToKKyAgICAgICAgKEpTQzo6
SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAg
ICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Zzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dHJ5R2V0VmFsdWUpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Z2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ0J1aWxk
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpqc1N0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50cyk6CisKIDIwMTItMDQt
MjcgIEdhdmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIG5l
dyBFTkFCTEVfTElOS19QUkVSRU5ERVIgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIFByZXJlbmRlcmlu
ZyBBUEkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTUyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIEVYUE9SVFMKICAgICA/cmVzZXREYXRl
Q2FjaGVASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3Jlc2l6ZUBTdHJpbmdCdWlsZGVy
QFdURkBAUUFFWElAWgogICAgID9yZXNpemVPdXRPZkxpbmVAQml0VmVjdG9yQFdURkBAQUFFWElA
WgotICAgID9yZXNvbHZlUm9wZUBKU1N0cmluZ0BKU0NAQEFCRVhQQVZFeGVjU3RhdGVAMkBAWgor
ICAgID9yZXNvbHZlUm9wZUBKU1JvcGVTdHJpbmdASlNDQEBBQkVYUEFWRXhlY1N0YXRlQDJAQFoK
ICAgICA/cmVzdG9yZUFsbEBQcm9maWxlQEpTQ0BAUUFFWFhaCiAgICAgP3JldHJpZXZlQ2FsbGVy
RnJvbVZNQ29kZUBJbnRlcnByZXRlckBKU0NAQFFCRT9BVkpTVmFsdWVAMkBQQVZFeGVjU3RhdGVA
MkBQQVZKU0Z1bmN0aW9uQDJAQFoKICAgICA/cmV0cmlldmVMYXN0Q2FsbGVyQEludGVycHJldGVy
QEpTQ0BAUUJFWFBBVkV4ZWNTdGF0ZUAyQEFBSDFBQVZVU3RyaW5nQDJAQUFWSlNWYWx1ZUAyQEBa
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNp
b24gMTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNiBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21l
bWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCiAgICAgfSwgXAotICAg
IHNpemVvZihDbGFzc05hbWUpLCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUKIAogICAgIHN0cnVjdCBDbGFzc0luZm8gewpAQCAtMTgwLDggKzE3OSw2IEBAIHN0cnVjdCBN
ZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogCiAgICAgICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxl
OwogCi0gICAgICAgIHNpemVfdCBjZWxsU2l6ZTsKLSAgICAgICAgCiAgICAgICAgIFR5cGVkQXJy
YXlUeXBlIHR5cGVkQXJyYXlTdG9yYWdlVHlwZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTE1MjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICsz
MjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVh
cCkKICAgICB7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIEFTU0VSVChzaXpl
b2YoVCkgPT0gVDo6c19pbmZvLmNlbGxTaXplKTsKICAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2Jh
bERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAgICAgIGhlYXAuZ2xvYmFsRGF0
YSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygmVDo6c19pbmZvKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24g
MTE1MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdWJz
dHJpbmdGcm9tUm9wZUMKIAogY29uc3QgQ2xhc3NJbmZvIEpTU3RyaW5nOjpzX2luZm8gPSB7ICJz
dHJpbmciLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3RyaW5nKSB9OwogCi12b2lk
IEpTU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhwYW5kKCkKK3ZvaWQgSlNSb3BlU3RyaW5nOjpSb3Bl
QnVpbGRlcjo6ZXhwYW5kKCkKIHsKLSAgICBBU1NFUlQobV9pbmRleCA9PSBKU1N0cmluZzo6c19t
YXhJbnRlcm5hbFJvcGVMZW5ndGgpOworICAgIEFTU0VSVChtX2luZGV4ID09IEpTUm9wZVN0cmlu
Zzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpOwogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IG1f
anNTdHJpbmc7CiAgICAgbV9qc1N0cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV9nbG9iYWxEYXRh
KTsKICAgICBtX2luZGV4ID0gMDsKQEAgLTU1LDExICs1NSwxOCBAQCB2b2lkIEpTU3RyaW5nOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiB7CiAgICAgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJv
cGVMZW5ndGggJiYgdGhpc09iamVjdC0+bV9maWJlcnNbaV07ICsraSkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZmliZXJzW2ldKTsKKyAgICAKKyAgICBpZiAodGhpc09i
amVjdC0+aXNSb3BlKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEpTUm9wZVN0cmluZyo+KHRoaXNP
YmplY3QpLT52aXNpdEZpYmVycyh2aXNpdG9yKTsKK30KKwordm9pZCBKU1JvcGVTdHJpbmc6OnZp
c2l0RmliZXJzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZmliZXJzW2ldKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6cmVz
b2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29s
dmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwog
CkBAIC0xMjgsNyArMTM1LDcgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRl
KiBleAogLy8gVmVjdG9yIGJlZm9yZSBwZXJmb3JtaW5nIGFueSBjb25jYXRlbmF0aW9uLCBidXQg
Ynkgd29ya2luZyBiYWNrd2FyZHMgd2UgbGlrZWx5CiAvLyBvbmx5IGZpbGwgdGhlIHF1ZXVlIHdp
dGggdGhlIG51bWJlciBvZiBzdWJzdHJpbmdzIGF0IGFueSBnaXZlbiBsZXZlbCBpbiBhCiAvLyBy
b3BlLW9mLXJvcGVzLikgICAgCi12b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlOChM
Q2hhciogYnVmZmVyKSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nh
c2U4KExDaGFyKiBidWZmZXIpIGNvbnN0CiB7CiAgICAgTENoYXIqIHBvc2l0aW9uID0gYnVmZmVy
ICsgbV9sZW5ndGg7IC8vIFdlIHdpbGwgYmUgd29ya2luZyBiYWNrd2FyZHMgb3ZlciB0aGUgcm9w
ZS4KICAgICBWZWN0b3I8SlNTdHJpbmcqLCAzMj4gd29ya1F1ZXVlOyAvLyBQdXR0aW5nIHN0cmlu
Z3MgaW50byBhIFZlY3RvciBpcyBvbmx5IE9LIGJlY2F1c2UgdGhlcmUgYXJlIG5vIEdDIHBvaW50
cyBpbiB0aGlzIG1ldGhvZC4KQEAgLTE0NCw4ICsxNTEsOSBAQCB2b2lkIEpTU3RyaW5nOjpyZXNv
bHZlUm9wZVNsb3dDYXNlOChMQ2hhCiAgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAK
ICAgICAgICAgaWYgKGN1cnJlbnRGaWJlci0+aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVy
LT5tX2ZpYmVyc1tpXTsgKytpKQotICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQoY3Vy
cmVudEZpYmVyLT5tX2ZpYmVyc1tpXS5nZXQoKSk7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcq
IGN1cnJlbnRGaWJlckFzUm9wZSA9IHN0YXRpY19jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRG
aWJlcik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoICYmIGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAg
ICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNb
aV0uZ2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTU5LDcg
KzE2Nyw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGEKICAgICBB
U1NFUlQoIWlzUm9wZSgpKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2Fz
ZShVQ2hhciogYnVmZmVyKSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xv
d0Nhc2UoVUNoYXIqIGJ1ZmZlcikgY29uc3QKIHsKICAgICBVQ2hhciogcG9zaXRpb24gPSBidWZm
ZXIgKyBtX2xlbmd0aDsgLy8gV2Ugd2lsbCBiZSB3b3JraW5nIGJhY2t3YXJkcyBvdmVyIHRoZSBy
b3BlLgogICAgIFZlY3RvcjxKU1N0cmluZyosIDMyPiB3b3JrUXVldWU7IC8vIFRoZXNlIHN0cmlu
Z3MgYXJlIGtlcHQgYWxpdmUgYnkgdGhlIHBhcmVudCByb3BlLCBzbyB1c2luZyBhIFZlY3RvciBp
cyBPSy4KQEAgLTE3Miw4ICsxODAsOSBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dD
YXNlKFVDaGFyCiAgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAKICAgICAgICAgaWYg
KGN1cnJlbnRGaWJlci0+aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVudEZpYmVyLT5tX2ZpYmVyc1tp
XTsgKytpKQotICAgICAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQoY3VycmVudEZpYmVyLT5t
X2ZpYmVyc1tpXS5nZXQoKSk7CisgICAgICAgICAgICBKU1JvcGVTdHJpbmcqIGN1cnJlbnRGaWJl
ckFzUm9wZSA9IHN0YXRpY19jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJlcik7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYm
IGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgICAgICAgICB3
b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+bV9maWJlcnNbaV0uZ2V0KCkpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTg3LDcgKzE5Niw3IEBAIHZv
aWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIKICAgICBBU1NFUlQoIWlzUm9w
ZSgpKTsKIH0KIAotdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAordm9pZCBKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3Ro
ICYmIG1fZmliZXJzW2ldOyArK2kpCiAgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7CkBAIC0x
OTcsNyArMjA2LDcgQEAgdm9pZCBKU1N0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleAog
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiB9CiAKLUpTU3RyaW5nKiBKU1N0
cmluZzo6Z2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCitKU1N0
cmluZyogSlNSb3BlU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSkKIHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIHJlc29sdmVSb3BlKGV4ZWMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lv
biAxMTUyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEpTU3RyaW5nOworICAgIGNsYXNzIEpTUm9wZVN0cmluZzsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAKICAgICBKU1N0cmluZyoganNFbXB0eVN0cmluZyhKU0dsb2JhbERh
dGEqKTsKQEAgLTU4LDU1ICs1OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU1N0cmluZyog
anNPd25lZFN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBVU3RyaW5nJik7IAogICAgIEpTU3Ry
aW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgCiAKLSAgICBK
U1N0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIEpTUm9wZVN0cmlu
ZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOwogCiAgICAgY2xhc3MgSlNTdHJpbmcg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBTcGVjaWFsaXplZFRodW5rSklUOworICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3RyaW5n
OwogICAgICAgICBmcmllbmQgc3RydWN0IFRodW5rSGVscGVyczsKLSAgICAgICAgZnJpZW5kIEpT
U3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CiAKICAgICAgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
Ci0gICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAg
ICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICAgICAgICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAgICAgLCBtX2pzU3RyaW5n
KGpzU3RyaW5nQnVpbGRlcigmZ2xvYmFsRGF0YSkpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4
KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYXBw
ZW5kKEpTU3RyaW5nKiBqc1N0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9pbmRleCA9PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAg
ICAgICAgICAgICAgIGV4cGFuZCgpOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fZmli
ZXJzW21faW5kZXgrK10uc2V0KG1fZ2xvYmFsRGF0YSwgbV9qc1N0cmluZywganNTdHJpbmcpOwot
ICAgICAgICAgICAgICAgIG1fanNTdHJpbmctPm1fbGVuZ3RoICs9IGpzU3RyaW5nLT5tX2xlbmd0
aDsKLSAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2lzOEJpdCA9IG1fanNTdHJpbmctPm1f
aXM4Qml0ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNTdHJpbmcqIHJlbGVhc2UoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpT
U3RyaW5nKiB0bXAgPSBtX2pzU3RyaW5nOwotICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAw
OwotICAgICAgICAgICAgICAgIHJldHVybiB0bXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7Ci0KLSAgICAgICAg
ICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwotICAgICAgICAgICAgSlNTdHJpbmcqIG1f
anNTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgbV9pbmRleDsKLSAgICAgICAgfTsKLQogICAg
IHByaXZhdGU6CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERh
dGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQpAQCAtMTE5LDEzICs4NSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBtX2xl
bmd0aCA9IDA7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IHRydWU7Ci0gICAgICAgIH0KLQogICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IGxlbmd0aCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgp
KTsKQEAgLTE0MywzMiArMTAyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwogICAgICAgICB9CiAK
LSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
U3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxl
bmd0aCgpICsgczItPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJp
dCgpICYmIHMyLT5pczhCaXQoKSk7Ci0gICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgczEpOwotICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHMyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJp
bmcqIHMzKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3Ro
KCkgKyBzMi0+bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9
IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOwotICAgICAg
ICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAgICAgICAg
IG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAgICAgICAgICBtX2Zp
YmVyc1syXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3RhdGljIEpTU3RyaW5nKiBjcmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAg
ICAgICAgewotICAgICAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxE
YXRhKTsKLSAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICAgICAgbV9sZW5ndGggPSAw
OworICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAg
ICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgICAgIHsKQEAg
LTE3OSwxOCArMTIwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBuZXdTdHJpbmct
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0aCwgY29zdCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbmV3U3RyaW5nOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xv
YmFsRGF0YSk7Ci0gICAgICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIHMxLCBzMik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwotICAgICAgICB9Ci0g
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKLSAgICAgICAgewotICAg
ICAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAg
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwotICAgICAgICB9CiAgICAgICAgIHN0YXRp
YyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7CkBAIC0yMDAsMTggKzEyOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IFVTdHJp
bmcmIHZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYg
dHJ5R2V0VmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNSb3BlKCkp
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZVJvcGUoMCk7Ci0gICAgICAgICAgICByZXR1cm4gbV92
YWx1ZTsKLSAgICAgICAgfQorICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUq
KSBjb25zdDsKKyAgICAgICAgY29uc3QgVVN0cmluZyYgdHJ5R2V0VmFsdWUoKSBjb25zdDsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBK
U1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNv
bnN0OwpAQCAtMjI2LDcgKzE0NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wg
Y2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fbGVuZ3RoOyB9CiAgICAgICAg
IEpTU3RyaW5nKiBnZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCk7Ci0gICAgICAgIEpTU3Ry
aW5nKiBnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7
CkBAIC0yNDAsMzggKzE1OCwxMzkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxs
KCk7IH0KKyAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQor
CisgICAgICAgIC8vIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIFVTdHJpbmcg
b3IgYSByb3BlIG9mIGZpYmVycy4KKyAgICAgICAgYm9vbCBtX2lzOEJpdCA6IDE7CisgICAgICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOworICAgICAgICBtdXRhYmxlIFVTdHJpbmcgbV92YWx1ZTsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmVSb3BlKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFy
KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0
OwotICAgICAgICB2b2lkIG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNvbnN0OwotCiAgICAgICAg
IHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCiAg
ICAgICAgIC8vIEFjdHVhbGx5IGdldFByb3BlcnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5U2xv
dCAoc2VlIEpTQ2VsbCkuCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoID0gMzsKLQotICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkg
YSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBmaWJlcnMuCi0gICAgICAgIGJvb2wgbV9pczhCaXQgOiAx
OwotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1f
dmFsdWU7Ci0gICAgICAgIG11dGFibGUgRml4ZWRBcnJheTxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+
LCBzX21heEludGVybmFsUm9wZUxlbmd0aD4gbV9maWJlcnM7Ci0KLSAgICAgICAgYm9vbCBpc1Jv
cGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4
Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KICAgICAgICAgVVN0cmluZyYgc3RyaW5n
KCkgeyBBU1NFUlQoIWlzUm9wZSgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgICAgICBmcmll
bmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci0g
ICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdW5z
aWduZWQgY291bnQpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVu
dHMoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUpOwogICAgICAgICBmcmllbmQgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgIH07CiAKKyAgICBjbGFzcyBKU1JvcGVTdHJpbmcgOiBwdWJs
aWMgSlNTdHJpbmcgeworICAgICAgICBmcmllbmQgY2xhc3MgSlNTdHJpbmc7CisKKyAgICAgICAg
ZnJpZW5kIEpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworCisg
ICAgICAgIGNsYXNzIFJvcGVCdWlsZGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
Um9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgICwgbV9qc1N0cmluZyhqc1N0cmluZ0J1
aWxkZXIoJmdsb2JhbERhdGEpKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgYXBwZW5kKEpTU3RyaW5nKiBq
c1N0cmluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbmRleCA9PSBK
U1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQorICAgICAgICAgICAgICAgICAg
ICBleHBhbmQoKTsKKyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nLT5tX2ZpYmVyc1ttX2luZGV4
KytdLnNldChtX2dsb2JhbERhdGEsIG1fanNTdHJpbmcsIGpzU3RyaW5nKTsKKyAgICAgICAgICAg
ICAgICBtX2pzU3RyaW5nLT5tX2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5ndGg7CisgICAgICAg
ICAgICAgICAgbV9qc1N0cmluZy0+bV9pczhCaXQgPSBtX2pzU3RyaW5nLT5tX2lzOEJpdCAmJiBq
c1N0cmluZy0+bV9pczhCaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTUm9wZVN0
cmluZyogcmVsZWFzZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSlNSb3BlU3Ry
aW5nKiB0bXAgPSBtX2pzU3RyaW5nOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSAwOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fanNTdHJpbmctPm1fbGVuZ3RoOyB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQgZXhwYW5kKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgICAgICAgICAgSlNS
b3BlU3RyaW5nKiBtX2pzU3RyaW5nOworICAgICAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAg
ICAgIH07CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTUm9wZVN0cmluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgICAgICA6IEpTU3RyaW5nKGdsb2JhbERhdGEp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAg
ICAgeworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKTsKKyAgICAgICAg
ICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOworICAgICAgICAg
ICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKKyAgICAgICAgICAgIG1f
ZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcqIHMzKQorICAgICAgICB7CisgICAg
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1f
bGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpICsgczMtPmxlbmd0aCgpOworICAg
ICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMt
PmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBzMSk7CisgICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIp
OworICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBKU1N0cmluZzo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBj
cmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAg
ICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsK
KyAgICAgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNT
dHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTUm9wZVN0
cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5n
PihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7CisgICAgICAgICAg
ICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAg
ICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmlu
ZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmlu
ZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICAgICAgeworICAgICAgICAgICAgSlNSb3BlU3RyaW5n
KiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG5l
d1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB2aXNpdEZp
YmVycyhTbG90VmlzaXRvciYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIEpTVmFs
dWUganNTdHJpbmcoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1bnNpZ25lZCk7CisgICAgICAgIGZy
aWVuZCBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
KworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmVSb3BlKEV4ZWNTdGF0ZSop
IGNvbnN0OworICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7
CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OworICAgICAg
ICB2b2lkIG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
SlNTdHJpbmcqIGdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQpOworCisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21heEludGVybmFsUm9wZUxlbmd0aCA9IDM7Cisg
ICAgICAgIAorICAgICAgICBtdXRhYmxlIEZpeGVkQXJyYXk8V3JpdGVCYXJyaWVyPEpTU3RyaW5n
Piwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGg+IG1fZmliZXJzOworICAgIH07CisKICAgICBKU1N0
cmluZyogYXNTdHJpbmcoSlNWYWx1ZSk7CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5n
KEpTVmFsdWUgdmFsdWUpCkBAIC0zMTYsMTEgKzMzNSwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMuaW1wbCgpKTsKICAg
ICB9CiAKKyAgICBpbmxpbmUgY29uc3QgVVN0cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1JvcGUoKSkKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZShleGVj
KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0IFVT
dHJpbmcmIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aXNSb3BlKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0
aGlzKS0+cmVzb2x2ZVJvcGUoMCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKwog
ICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7CiAgICAg
ICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRJbmRleFNsb3dDYXNlKGV4
ZWMsIGkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTUm9wZVN0cmluZyo+KHRo
aXMpLT5nZXRJbmRleFNsb3dDYXNlKGV4ZWMsIGkpOwogICAgICAgICBBU1NFUlQoaSA8IG1fdmFs
dWUubGVuZ3RoKCkpOwogICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmco
ZXhlYywgbV92YWx1ZSwgaSk7CiAgICAgfQpAQCAtMzkyLDkgKzQyNSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKmdsb2Jh
bERhdGEsIHMuaW1wbCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5n
QnVpbGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgaW5saW5lIEpTUm9wZVN0cmlu
ZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlTnVsbCgqZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
dHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZU51bGwoKmdsb2JhbERhdGEpOwogICAgIH0KIAogICAg
IGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJu
IGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDExNTIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKChsZW5ndGgxICsg
bGVuZ3RoMikgPCBsZW5ndGgxKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKIAotICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRh
LCBzMSwgczIpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgczEsIHMyKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIsIGNv
bnN0IFVTdHJpbmcmIHUzKQpAQCAtNjksMTMgKzY5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoMykgPCBsZW5ndGgzKQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgICAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERh
dGEsIHUxKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MykpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MSksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUyKSwg
anNTdHJpbmcoZ2xvYmFsRGF0YSwgdTMpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWdu
ZWQgY291bnQpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxk
ZXIoKmdsb2JhbERhdGEpOworICAgICAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVC
dWlsZGVyKCpnbG9iYWxEYXRhKTsKIAogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwog
CkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNW
YWx1ZSkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigq
Z2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxk
ZXIoKmdsb2JhbERhdGEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpKTsKIAogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwo=
</data>
<flag name="review"
          id="144812"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>