<?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>96935</bug_id>
          
          <creation_ts>2012-09-17 11:24:12 -0700</creation_ts>
          <short_desc>Add Latin-1 Line Break Iterator to TextBreakIteratorICU.cpp</short_desc>
          <delta_ts>2022-02-27 23:34:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>eric</cc>
    
    <cc>jshin</cc>
    
    <cc>mitz</cc>
    
    <cc>ned</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>722096</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-17 11:24:12 -0700</bug_when>
    <thetext>Currently there is a 16 bit line break iterator provided by the function acquireLineBreakIterator() provided in TextBreakIteratorICU.cpp.  To support 8-bit rendering, a 8 bit line break iterator should be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722129</commentid>
    <comment_count>1</comment_count>
      <attachid>164430</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-17 11:54:11 -0700</bug_when>
    <thetext>Created attachment 164430
Draft patch without build changes for non-Mac platforms

Will post an updated patch with changes to other platform that use TextBreakIteratorICU.cpp.

The change is neutral in performance on the Layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722161</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 12:25:05 -0700</bug_when>
    <thetext>I assume by LayoutTests you mean PLT? or PerformanceTests?

Do we have a complex-text line-breaking perf test?  PerformanceTests/Layout/line-breaking.html only does the ascii case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722162</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 12:25:51 -0700</bug_when>
    <thetext>We probably should add a complex line-breaking microbenchmark to PerformanceTests.  I&apos;m sure there is a lot there we could work through yet. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722165</commentid>
    <comment_count>4</comment_count>
      <attachid>164430</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-17 12:29:51 -0700</bug_when>
    <thetext>Comment on attachment 164430
Draft patch without build changes for non-Mac platforms

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

&gt; Source/WebCore/platform/text/TextBreakIterator.h:62
&gt; +        : m_string(String())
&gt; +        , m_locale(AtomicString())

You can remove those.

&gt; Source/WebCore/rendering/break_lines.cpp:151
&gt; +template&lt;typename CharacterType, bool treatNoBreakSpaceAsBreak&gt;
&gt; +static inline int nextBreakablePosition(LazyLineBreakIterator&amp; lazyBreakIterator, const CharacterType* str, unsigned length, int pos)

Chances are we should fully specialize that function instead.

I can do that after your patch if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722185</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-17 12:45:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I assume by LayoutTests you mean PLT? or PerformanceTests?
&gt; 
&gt; Do we have a complex-text line-breaking perf test?  PerformanceTests/Layout/line-breaking.html only does the ascii case.

I mean PerformanceTests/Layout.  I don&apos;t know if we have a complex text test for layout.

This patch doesn&apos;t enable using the 8 bit code path as Text nodes and thus RenderText objects are 16 bit until we enable the 8 bit path in the HTML parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722187</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-17 12:49:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 164430 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164430&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/text/TextBreakIterator.h:62
&gt; &gt; +        : m_string(String())
&gt; &gt; +        , m_locale(AtomicString())
&gt; 
&gt; You can remove those.

Done.
 
&gt; &gt; Source/WebCore/rendering/break_lines.cpp:151
&gt; &gt; +template&lt;typename CharacterType, bool treatNoBreakSpaceAsBreak&gt;
&gt; &gt; +static inline int nextBreakablePosition(LazyLineBreakIterator&amp; lazyBreakIterator, const CharacterType* str, unsigned length, int pos)
&gt; 
&gt; Chances are we should fully specialize that function instead.
&gt; 
&gt; I can do that after your patch if you want.

Please elaborate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722215</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 13:14:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; &gt; I assume by LayoutTests you mean PLT? or PerformanceTests?
&gt; &gt; 
&gt; &gt; Do we have a complex-text line-breaking perf test?  PerformanceTests/Layout/line-breaking.html only does the ascii case.
&gt; 
&gt; I mean PerformanceTests/Layout.  I don&apos;t know if we have a complex text test for layout.
&gt; 
&gt; This patch doesn&apos;t enable using the 8 bit code path as Text nodes and thus RenderText objects are 16 bit until we enable the 8 bit path in the HTML parser.

I see.  So this path is as of yet unused.  Thanks.

We should probably catch mitz or jungshik&apos;s ear about adding some complex-text Layout PerformanceTests as thats an area we could micro-benchmark more and probably eek more performance out of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722241</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-17 13:53:12 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/rendering/break_lines.cpp:151
&gt; &gt; &gt; +template&lt;typename CharacterType, bool treatNoBreakSpaceAsBreak&gt;
&gt; &gt; &gt; +static inline int nextBreakablePosition(LazyLineBreakIterator&amp; lazyBreakIterator, const CharacterType* str, unsigned length, int pos)
&gt; &gt; 
&gt; &gt; Chances are we should fully specialize that function instead.
&gt; &gt; 
&gt; &gt; I can do that after your patch if you want.
&gt; 
&gt; Please elaborate.

If you look at nextBreakablePosition(), there is fast path (first if()), and a slower patch for non-ASCII characters (second if()).

Chances are we could generalize the fast path and get rid of the second if() for Latin1.

What takes time in that particular loop is the number of branches needed for each character. If we could get rid of the second if(), it would likely be a big win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722294</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-17 14:55:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; &gt; Source/WebCore/rendering/break_lines.cpp:151
&gt; &gt; &gt; &gt; +template&lt;typename CharacterType, bool treatNoBreakSpaceAsBreak&gt;
&gt; &gt; &gt; &gt; +static inline int nextBreakablePosition(LazyLineBreakIterator&amp; lazyBreakIterator, const CharacterType* str, unsigned length, int pos)
&gt; &gt; &gt; 
&gt; &gt; &gt; Chances are we should fully specialize that function instead.
&gt; &gt; &gt; 
&gt; &gt; &gt; I can do that after your patch if you want.
&gt; &gt; 
&gt; &gt; Please elaborate.
&gt; 
&gt; If you look at nextBreakablePosition(), there is fast path (first if()), and a slower patch for non-ASCII characters (second if()).
&gt; 
&gt; Chances are we could generalize the fast path and get rid of the second if() for Latin1.
&gt; 
&gt; What takes time in that particular loop is the number of branches needed for each character. If we could get rid of the second if(), it would likely be a big win.

We could do that in this patch or as a follow on.  We would have to generate the new entries for the line break table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725918</commentid>
    <comment_count>10</comment_count>
      <attachid>165218</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-21 16:01:27 -0700</bug_when>
    <thetext>Created attachment 165218
Updated Patch

Removed the unneeded explicit initializations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725924</commentid>
    <comment_count>11</comment_count>
      <attachid>165218</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-21 16:06:46 -0700</bug_when>
    <thetext>Comment on attachment 165218
Updated Patch

Attachment 165218 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13957821</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725925</commentid>
    <comment_count>12</comment_count>
      <attachid>165218</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-21 16:07:10 -0700</bug_when>
    <thetext>Comment on attachment 165218
Updated Patch

Attachment 165218 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13954780</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725928</commentid>
    <comment_count>13</comment_count>
      <attachid>165218</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-21 16:08:51 -0700</bug_when>
    <thetext>Comment on attachment 165218
Updated Patch

Attachment 165218 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13949796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725937</commentid>
    <comment_count>14</comment_count>
      <attachid>165221</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-21 16:15:11 -0700</bug_when>
    <thetext>Created attachment 165221
Patch again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728237</commentid>
    <comment_count>15</comment_count>
      <attachid>165221</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-25 23:35:38 -0700</bug_when>
    <thetext>Comment on attachment 165221
Patch again

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728684</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-26 09:54:17 -0700</bug_when>
    <thetext>Committed r129662: &lt;http://trac.webkit.org/changeset/129662&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164430</attachid>
            <date>2012-09-17 11:54:11 -0700</date>
            <delta_ts>2012-09-21 16:01:27 -0700</delta_ts>
            <desc>Draft patch without build changes for non-Mac platforms</desc>
            <filename>96935-draft.patch</filename>
            <type>text/plain</type>
            <size>16945</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODc4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA5LTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBMYXRpbi0xIExpbmUg
QnJlYWsgSXRlcmF0b3IgdG8gVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkzNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgTGF0aW4tMSBVVGV4dCBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlIElDVSBsaWJyYXJ5IHRvIHVzZS4gIEFkZGVkIGEgbmV3IGFj
cXVpcmVMaW5lQnJlYWtJdGVyYXRvcigpIGZvcgorICAgICAgICA4IGJpdCBzdHJpbmdzIHRoYXQg
dXNlcyB0aGUgTGF0aW4tMSBVVGV4dCBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgY29kZSBwYXRoIGlz
IG5vdCBiZWluZyBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCAKKyAgICAgICAgVG9UIGNvZGUuICBT
dWJzZXF1ZW50IGNoYW5nZXMgd2lsbCBlbmFibGUgY2FsbGluZyB0aGUgbmV3IGNvZGUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXp5TGluZUJyZWFrSXRlcmF0b3I6OkxhenlMaW5lQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChMYXp5TGluZUJyZWFrSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVC
cmVha0l0ZXJhdG9yOjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0ZXJhdG9yOjpy
ZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp1VGV4dExhdGluMUNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4x
QWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4xRXh0cmFjdCk6CisgICAgICAg
IChXZWJDb3JlOjp1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OnVUZXh0TGF0aW4xTWFwTmF0aXZlSW5kZXhUb1VURjE2KToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6VVRleHRPcGVuTGF0aW4xKToK
KyAgICAgICAgKFdlYkNvcmU6OmFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUCk6CisKIDIwMTIt
MDktMTcgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gQWRkIGdwdV90ZXN0IHRyYWNlIGV2ZW50cyB0cmFja2luZyB0aGUgY3Jl
YXRpb24gb2YgYSBEcmF3aW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7
CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0
ZXJhdG9yKGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGUpOwogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSk7CiAgICAg
dm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBU
ZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CkBAIC01Niw5ICs1NywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExhenlMaW5lQnJlYWtJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcgPSAwLCBpbnQgbGVuZ3RoID0gMCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGUgPSBBdG9taWNTdHJpbmcoKSkKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0
b3IoKQorICAgICAgICA6IG1fc3RyaW5nKFN0cmluZygpKQorICAgICAgICAsIG1fbG9jYWxlKEF0
b21pY1N0cmluZygpKQorICAgICAgICAsIG1faXRlcmF0b3IoMCkKKyAgICB7CisgICAgfQorCisg
ICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yKFN0cmluZyBzdHJpbmcsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlID0gQXRvbWljU3RyaW5nKCkpCiAgICAgICAgIDogbV9zdHJpbmcoc3RyaW5nKQot
ICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2xvY2FsZShsb2NhbGUpCiAg
ICAgICAgICwgbV9pdGVyYXRvcigwKQogICAgIHsKQEAgLTcwLDMwICs3NywzMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IobV9pdGVyYXRvcik7CiAgICAg
fQogCi0gICAgY29uc3QgVUNoYXIqIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9
Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU3RyaW5n
IHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKICAgICBUZXh0QnJlYWtJdGVy
YXRvciogZ2V0KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvcikKLSAgICAgICAgICAg
IG1faXRlcmF0b3IgPSBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IobV9zdHJpbmcsIG1fbGVuZ3Ro
LCBtX2xvY2FsZSk7CisgICAgICAgIGlmICghbV9pdGVyYXRvcikgeworICAgICAgICAgICAgaWYg
KG1fc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIG1faXRlcmF0b3IgPSBhY3F1aXJl
TGluZUJyZWFrSXRlcmF0b3IobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3Ro
KCksIG1fbG9jYWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2l0ZXJh
dG9yID0gYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBt
X3N0cmluZy5sZW5ndGgoKSwgbV9sb2NhbGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBt
X2l0ZXJhdG9yOwogICAgIH0KIAotICAgIHZvaWQgcmVzZXQoY29uc3QgVUNoYXIqIHN0cmluZywg
aW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCisgICAgdm9pZCByZXNldChT
dHJpbmcgc3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKICAgICB7CiAgICAgICAg
IGlmIChtX2l0ZXJhdG9yKQogICAgICAgICAgICAgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKG1f
aXRlcmF0b3IpOwogCiAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAgICAgICBtX2xlbmd0
aCA9IGxlbmd0aDsKICAgICAgICAgbV9sb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIG1faXRlcmF0
b3IgPSAwOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBVQ2hhciogbV9zdHJpbmc7Ci0g
ICAgaW50IG1fbGVuZ3RoOworICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBBdG9taWNTdHJpbmcg
bV9sb2NhbGU7CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIG1faXRlcmF0b3I7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHAJKHJldmlzaW9uIDEyODcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwy
MDQgQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKAogICAgIHJldHVy
biBpdGVyYXRvcjsKIH0KIAorc3RhdGljIGNvbnN0IGludCBzX1VUZXh0Q2hhcmFjdGVyQnVmZmVy
U2l6ZSA9IDE2OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVVRleHQgdVRleHRTdHJ1Y3Q7Cisg
ICAgVUNoYXIgdUNoYXJCdWZmZXJbc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemUgKyAxXTsKK30g
VVRleHRXaXRoQnVmZmVyOworCitzdGF0aWMgVVRleHQgZW1wdHlVVGV4dCA9IFVURVhUX0lOSVRJ
QUxJWkVSOworCitzdGF0aWMgVVRleHQqIHVUZXh0TGF0aW4xQ2xvbmUoVVRleHQqLCBjb25zdCBV
VGV4dCosIFVCb29sLCBVRXJyb3JDb2RlKik7CitzdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5h
dGl2ZUxlbmd0aChVVGV4dCopOworc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0
KiwgaW50NjRfdCwgVUJvb2wpOworc3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVU
ZXh0KiwgaW50NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlKik7Citz
dGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKGNvbnN0IFVUZXh0Kik7
CitzdGF0aWMgaW50MzJfdCB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNihjb25zdCBV
VGV4dCosIGludDY0X3QpOworc3RhdGljIHZvaWQgdVRleHRMYXRpbjFDbG9zZShVVGV4dCopOwor
CitzdGF0aWMgc3RydWN0IFVUZXh0RnVuY3MgdVRleHRMYXRpbjFGdW5jcyA9IHsKKyAgICBzaXpl
b2YoVVRleHRGdW5jcyksCisgICAgMCwgMCwgMCwKKyAgICB1VGV4dExhdGluMUNsb25lLAorICAg
IHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoLAorICAgIHVUZXh0TGF0aW4xQWNjZXNzLAorICAgIHVU
ZXh0TGF0aW4xRXh0cmFjdCwKKyAgICAwLAorICAgIDAsCisgICAgdVRleHRMYXRpbjFNYXBPZmZz
ZXRUb05hdGl2ZSwKKyAgICB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNiwKKyAgICB1
VGV4dExhdGluMUNsb3NlLAorICAgIDAsIDAsIDAKK307CisKK3N0YXRpYyBVVGV4dCogdVRleHRM
YXRpbjFDbG9uZShVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0IFVUZXh0KiBzb3VyY2UsIFVCb29s
IGRlZXAsIFVFcnJvckNvZGUqIHN0YXR1cykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGRlZXAsICFk
ZWVwKTsKKworICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgVVRleHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKGRlc3RpbmF0aW9uLCBzaXplb2YoVUNo
YXIpICogKHNfVVRleHRDaGFyYWN0ZXJCdWZmZXJTaXplICsgMSksIHN0YXR1cyk7CisgICAgaWYg
KFVfRkFJTFVSRSgqc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOworICAgIAor
ICAgIHJlc3VsdC0+cHJvdmlkZXJQcm9wZXJ0aWVzID0gc291cmNlLT5wcm92aWRlclByb3BlcnRp
ZXM7CisgICAgCisgICAgLyogUG9pbnQgYXQgdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB3aXRoIGFu
IGVtcHR5IGJ1ZmZlciAqLworICAgIHJlc3VsdC0+Y2h1bmtOYXRpdmVTdGFydCA9IHNvdXJjZS0+
Y2h1bmtOYXRpdmVTdGFydDsKKyAgICByZXN1bHQtPmNodW5rTmF0aXZlTGltaXQgPSBzb3VyY2Ut
PmNodW5rTmF0aXZlU3RhcnQ7CisgICAgcmVzdWx0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0gc291
cmNlLT5jaHVua05hdGl2ZVN0YXJ0OworICAgIHJlc3VsdC0+Y2h1bmtPZmZzZXQgPSAwOworICAg
IHJlc3VsdC0+Y29udGV4dCA9IHNvdXJjZS0+Y29udGV4dDsKKyAgICByZXN1bHQtPmEgPSBzb3Vy
Y2UtPmE7CisgICAgcmVzdWx0LT5wRnVuY3MgPSAmdVRleHRMYXRpbjFGdW5jczsKKyAgICByZXN1
bHQtPmNodW5rQ29udGVudHMgPSAoVUNoYXIqKXJlc3VsdC0+cEV4dHJhOworICAgIG1lbXNldChj
b25zdF9jYXN0PFVDaGFyKj4ocmVzdWx0LT5jaHVua0NvbnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFy
KSAqIChzX1VUZXh0Q2hhcmFjdGVyQnVmZmVyU2l6ZSArIDEpKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKFVUZXh0KiB1
VGV4dCkKK3sKKyAgICByZXR1cm4gdVRleHQtPmE7Cit9CisKK3N0YXRpYyBVQm9vbCB1VGV4dExh
dGluMUFjY2VzcyhVVGV4dCogdVRleHQsIGludDY0X3QgaW5kZXgsIFVCb29sIGZvcndhcmQpCit7
CisgICAgaW50NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKworICAgIGlmIChmb3J3YXJkKSB7Cisg
ICAgICAgIGlmIChpbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ICYmIGluZGV4ID49IHVU
ZXh0LT5jaHVua05hdGl2ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0
aGUgYnVmZmVyLiBTZXQgdGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1
bmtPZmZzZXQgPSAoaW50MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7Cisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPj0g
bGVuZ3RoICYmIHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID09IGxlbmd0aCkgeworICAgICAgICAg
ICAgLyogT2ZmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYnV0IHdlIGNhbid0IGdldCBpdC4gKi8K
KyAgICAgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IHVUZXh0LT5jaHVua0xlbmd0aDsKKyAg
ICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChpbmRleCA8PSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAmJiBpbmRleCA+IHVUZXh0LT5j
aHVua05hdGl2ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0aGUgYnVm
ZmVyLiBTZXQgdGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZz
ZXQgPSAoaW50MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7CisgICAgICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWluZGV4ICYmICF1VGV4
dC0+Y2h1bmtOYXRpdmVTdGFydCkgeworICAgICAgICAgICAgLyogQWxyZWFkeSBhdCB0aGUgYmVn
aW5uaW5nOyBjYW4ndCBnbyBhbnkgZmFydGhlciAqLworICAgICAgICAgICAgdVRleHQtPmNodW5r
T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFy
dCA9IGluZGV4OworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IHVUZXh0LT5jaHVu
a05hdGl2ZVN0YXJ0ICsgc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemU7CisgICAgICAgIGlmICh1
VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA+IGxlbmd0aCkKKyAgICAgICAgICAgIHVUZXh0LT5jaHVu
a05hdGl2ZUxpbWl0ID0gbGVuZ3RoOworCisgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZlTGltaXQgPSBpbmRleDsK
KyAgICAgICAgaWYgKHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID4gbGVuZ3RoKQorICAgICAgICAg
ICAgdVRleHQtPmNodW5rTmF0aXZlTGltaXQgPSBsZW5ndGg7CisKKyAgICAgICAgdVRleHQtPmNo
dW5rTmF0aXZlU3RhcnQgPSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAtICBzX1VUZXh0Q2hhcmFj
dGVyQnVmZmVyU2l6ZTsKKyAgICAgICAgaWYgKHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0IDwgMCkK
KyAgICAgICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0gMDsKKworICAgICAgICB1VGV4
dC0+Y2h1bmtPZmZzZXQgPSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisgICAgfQorICAgIHVUZXh0LT5j
aHVua0xlbmd0aCA9IChpbnQzMl90KSAodVRleHQtPmNodW5rTmF0aXZlTGltaXQgLSB1VGV4dC0+
Y2h1bmtOYXRpdmVTdGFydCk7CisKKyAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoY29uc3RfY2Fz
dDxVQ2hhcio+KHVUZXh0LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIq
Pih1VGV4dC0+Y29udGV4dCkgKyB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHVUZXh0LT5jaHVua0xlbmd0aCkpOworCisgICAgdVRleHQtPm5hdGl2ZUluZGV4
aW5nTGltaXQgPSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiB1VGV4dCwgaW50NjRfdCBz
dGFydCwgaW50NjRfdCBsaW1pdCwgVUNoYXIqIGRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LCBV
RXJyb3JDb2RlKiBzdGF0dXMpCit7CisgICAgaW50NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKyAg
ICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChk
ZXN0Q2FwYWNpdHkgPCAwIHx8ICghZGVzdCAmJiBkZXN0Q2FwYWNpdHkgPiAwKSkgeworICAgICAg
ICAqc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gbGltaXQgfHwgKGxpbWl0IC0g
c3RhcnQpID4gSU5UMzJfTUFYKSB7CisgICAgICAgICpzdGF0dXMgPSBVX0lOREVYX09VVE9GQk9V
TkRTX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPiBs
ZW5ndGgpCisgICAgICAgIHN0YXJ0ID0gbGVuZ3RoOworICAgIGlmIChsaW1pdCA+IGxlbmd0aCkK
KyAgICAgICAgbGltaXQgPSBsZW5ndGg7CisKKyAgICBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0Owor
ICAgIAorICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXN0
Q2FwYWNpdHkgPiAwICYmICFkZXN0KSB7CisgICAgICAgIGludDMyX3QgdHJpbW1lZExlbmd0aCA9
IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyaW1tZWRMZW5ndGggPiBkZXN0Q2FwYWNpdHkpCisgICAg
ICAgICAgICB0cmltbWVkTGVuZ3RoID0gZGVzdENhcGFjaXR5OworCisgICAgICAgIFN0cmluZ0lt
cGw6OmNvcHlDaGFycyhkZXN0LCBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KHVUZXh0LT5jb250
ZXh0KSArIHN0YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpbW1lZExlbmd0aCkpOworICAg
IH0KKworICAgIGlmIChsZW5ndGggPCBkZXN0Q2FwYWNpdHkpIHsKKyAgICAgICAgZGVzdFtsZW5n
dGhdID0gMDsKKyAgICAgICAgaWYgKCpzdGF0dXMgPT0gVV9TVFJJTkdfTk9UX1RFUk1JTkFURURf
V0FSTklORykKKyAgICAgICAgICAgICpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgfSBlbHNl
IGlmIChsZW5ndGggPT0gZGVzdENhcGFjaXR5KQorICAgICAgICAqc3RhdHVzID0gVV9TVFJJTkdf
Tk9UX1RFUk1JTkFURURfV0FSTklORzsKKyAgICBlbHNlCisgICAgICAgICpzdGF0dXMgPSBVX0JV
RkZFUl9PVkVSRkxPV19FUlJPUjsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBp
bnQ2NF90IHVUZXh0TGF0aW4xTWFwT2Zmc2V0VG9OYXRpdmUoY29uc3QgVVRleHQqIHVUZXh0KQor
eworICAgIHJldHVybiB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCArIHVUZXh0LT5jaHVua09mZnNl
dDsKK30KKworc3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYo
Y29uc3QgVVRleHQqIHVUZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4KQoreworICAgIEFTU0VSVF9V
TlVTRUQodVRleHQsIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID49IG5hdGl2ZUluZGV4KTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHVUZXh0LCBuYXRpdmVJbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxp
bWl0KTsKKyAgICByZXR1cm4gbmF0aXZlSW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIHVUZXh0TGF0
aW4xQ2xvc2UoVVRleHQqIHVUZXh0KQoreworICAgIHVUZXh0LT5jb250ZXh0ID0gMDsKK30KKwor
c3RhdGljIFVUZXh0KiBVVGV4dE9wZW5MYXRpbjEoVVRleHRXaXRoQnVmZmVyKiB1VGV4dExhdGlu
MSwgY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVRXJyb3JDb2RlKiBlcnJv
ckNvZGUpCit7CisgICAgVVRleHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKHJlaW50ZXJwcmV0X2Nh
c3Q8VVRleHQqPih1VGV4dExhdGluMSksIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3Rl
ckJ1ZmZlclNpemUgKyAxKSwgZXJyb3JDb2RlKTsKKyAgICAKKyAgICBpZiAoIVVfU1VDQ0VTUygq
ZXJyb3JDb2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXN1bHQtPmNvbnRleHQgPSBz
dHJpbmc7CisgICAgcmVzdWx0LT5hID0gKGludDY0X3QpbGVuZ3RoOworICAgIHJlc3VsdC0+cEZ1
bmNzID0gJnVUZXh0TGF0aW4xRnVuY3M7CisgICAgcmVzdWx0LT5jaHVua0NvbnRlbnRzID0gKFVD
aGFyKilyZXN1bHQtPnBFeHRyYTsKKyAgICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+KHJlc3Vs
dC0+Y2h1bmtDb250ZW50cyksIDAsIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3RlckJ1
ZmZlclNpemUgKyAxKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogVGV4dEJyZWFr
SXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgpCiB7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7
CkBAIC02Miw2ICsyNjAsMzYgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9y
KGNvbgogICAgICAgICBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcs
IGxlbmd0aCk7CiB9CiAKK1RleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0
b3IoY29uc3QgTENoYXIqIHN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbGUpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gTGluZUJyZWFrSXRlcmF0
b3JQb29sOjpzaGFyZWRQb29sKCkudGFrZShsb2NhbGUpOworICAgIGlmICghaXRlcmF0b3IpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgVVRleHRXaXRoQnVmZmVyIHVUZXh0TGF0aW4xTG9jYWw7
CisgICAgdVRleHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdCA9IGVtcHR5VVRleHQ7CisgICAgdVRl
eHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdC5leHRyYVNpemUgPSBzaXplb2YodVRleHRMYXRpbjFM
b2NhbC51Q2hhckJ1ZmZlcik7CisgICAgdVRleHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdC5wRXh0
cmEgPSB1VGV4dExhdGluMUxvY2FsLnVDaGFyQnVmZmVyOworCisgICAgVUVycm9yQ29kZSB1VGV4
dE9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVVRleHQqIHVUZXh0TGF0aW4xID0gVVRl
eHRPcGVuTGF0aW4xKCZ1VGV4dExhdGluMUxvY2FsLCBzdHJpbmcsIGxlbmd0aCwgJnVUZXh0T3Bl
blN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRSh1VGV4dE9wZW5TdGF0dXMpKSB7CisgICAgICAg
IExPR19FUlJPUigiVVRleHRPcGVuTGF0aW4xIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHVUZXh0
T3BlblN0YXR1cyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFVFcnJvckNvZGUg
c2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1YnJrX3NldFVUZXh0KGl0ZXJhdG9y
LCB1VGV4dExhdGluMSwgJnNldFRleHRTdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4
dFN0YXR1cykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRo
IHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICB1dGV4dF9jbG9zZSh1VGV4dExhdGluMSk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKTsKK30KKwogVGV4dEJyZWFrSXRlcmF0
b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVu
Z3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBVQnJlYWtJdGVyYXRvciog
aXRlcmF0b3IgPSBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2Fs
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTI4NzE0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzksNyAr
MjQzOSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoKICAgICAg
ICAgICAgICAgICByZW5kZXJUZXh0SW5mby5tX3RleHQgPSB0OwogICAgICAgICAgICAgICAgIHJl
bmRlclRleHRJbmZvLm1fZm9udCA9ICZmOwogICAgICAgICAgICAgICAgIHJlbmRlclRleHRJbmZv
Lm1fbGF5b3V0ID0gZi5jcmVhdGVMYXlvdXQodCwgd2lkdGguY3VycmVudFdpZHRoKCksIGNvbGxh
cHNlV2hpdGVTcGFjZSk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9saW5lQnJl
YWtJdGVyYXRvci5yZXNldCh0LT5jaGFyYWN0ZXJzKCksIHQtPnRleHRMZW5ndGgoKSwgc3R5bGUt
PmxvY2FsZSgpKTsKKyAgICAgICAgICAgICAgICByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0
ZXJhdG9yLnJlc2V0KHQtPnRleHQoKSwgc3R5bGUtPmxvY2FsZSgpKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAocmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgJiYgcmVuZGVyVGV4dEluZm8ubV9mb250
ICE9ICZmKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9mb250ID0gJmY7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgPSBmLmNyZWF0ZUxheW91dCh0
LCB3aWR0aC5jdXJyZW50V2lkdGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEyODcxNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTU1LDcgKzk1NSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwK
ICAgICBmbG9hdCB3b3JkU3BhY2luZyA9IHN0eWxlVG9Vc2UtPndvcmRTcGFjaW5nKCk7CiAgICAg
aW50IGxlbiA9IHRleHRMZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogdHh0ID0gY2hhcmFjdGVy
cygpOwotICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKHR4dCwgbGVuLCBz
dHlsZVRvVXNlLT5sb2NhbGUoKSk7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRl
cmF0b3IobV90ZXh0LCBzdHlsZVRvVXNlLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRT
cGFjaW5nID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJv
b2wgaXNTcGFjZSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2JyZWFr
X2xpbmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtf
bGluZXMuY3BwCShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
YnJlYWtfbGluZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTcgKzE0NywxNiBAQCBpbmxp
bmUgYm9vbCBuZWVkc0xpbmVCcmVha0l0ZXJhdG9yKFVDaGFyCiAgICAgcmV0dXJuIGNoID4gYXNj
aWlMaW5lQnJlYWtUYWJsZUxhc3RDaGFyICYmIGNoICE9IG5vQnJlYWtTcGFjZTsKIH0KIAotdGVt
cGxhdGU8Ym9vbCB0cmVhdE5vQnJlYWtTcGFjZUFzQnJlYWs+Ci1zdGF0aWMgaW5saW5lIGludCBu
ZXh0QnJlYWthYmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsYXp5QnJlYWtJdGVy
YXRvciwgaW50IHBvcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgdHJl
YXROb0JyZWFrU3BhY2VBc0JyZWFrPgorc3RhdGljIGlubGluZSBpbnQgbmV4dEJyZWFrYWJsZVBv
c2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGNvbnN0IENo
YXJhY3RlclR5cGUqIHN0ciwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgcG9zKQogewotICAgIGNvbnN0
IFVDaGFyKiBzdHIgPSBsYXp5QnJlYWtJdGVyYXRvci5zdHJpbmcoKTsKLSAgICBpbnQgbGVuID0g
bGF6eUJyZWFrSXRlcmF0b3IubGVuZ3RoKCk7CisgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGlu
dD4obGVuZ3RoKTsKICAgICBpbnQgbmV4dEJyZWFrID0gLTE7CiAKLSAgICBVQ2hhciBsYXN0TGFz
dENoID0gcG9zID4gMSA/IHN0cltwb3MgLSAyXSA6IDA7Ci0gICAgVUNoYXIgbGFzdENoID0gcG9z
ID4gMCA/IHN0cltwb3MgLSAxXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0TGFzdENoID0g
cG9zID4gMSA/IHN0cltwb3MgLSAyXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0Q2ggPSBw
b3MgPiAwID8gc3RyW3BvcyAtIDFdIDogMDsKICAgICBmb3IgKGludCBpID0gcG9zOyBpIDwgbGVu
OyBpKyspIHsKLSAgICAgICAgVUNoYXIgY2ggPSBzdHJbaV07CisgICAgICAgIENoYXJhY3RlclR5
cGUgY2ggPSBzdHJbaV07CiAKICAgICAgICAgaWYgKGlzQnJlYWthYmxlU3BhY2U8dHJlYXROb0Jy
ZWFrU3BhY2VBc0JyZWFrPihjaCkgfHwgc2hvdWxkQnJlYWtBZnRlcihsYXN0TGFzdENoLCBsYXN0
Q2gsIGNoKSkKICAgICAgICAgICAgIHJldHVybiBpOwpAQCAtMTgxLDEyICsxODAsMTggQEAgc3Rh
dGljIGlubGluZSBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKAogCiBpbnQgbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uSWdub3JpbmdOQlNQKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRl
cmF0b3IsIGludCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjxmYWxz
ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHBvcyk7CisgICAgU3RyaW5nIHN0cmluZyA9IGxhenlCcmVh
a0l0ZXJhdG9yLnN0cmluZygpOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb248TENoYXIsIGZhbHNlPihsYXp5QnJlYWtJdGVyYXRv
ciwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgcG9zKTsKKyAgICByZXR1
cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyLCBmYWxzZT4obGF6eUJyZWFrSXRlcmF0b3Is
IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiBpbnQg
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRl
cmF0b3IsIGludCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjx0cnVl
PihsYXp5QnJlYWtJdGVyYXRvciwgcG9zKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gbGF6eUJyZWFr
SXRlcmF0b3Iuc3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0
dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjxMQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3Is
IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHBvcyk7CisgICAgcmV0dXJu
IG5leHRCcmVha2FibGVQb3NpdGlvbjxVQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165218</attachid>
            <date>2012-09-21 16:01:27 -0700</date>
            <delta_ts>2012-09-21 16:15:11 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>96935.patch</filename>
            <type>text/plain</type>
            <size>16879</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODc4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA5LTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBMYXRpbi0xIExpbmUg
QnJlYWsgSXRlcmF0b3IgdG8gVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkzNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgTGF0aW4tMSBVVGV4dCBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlIElDVSBsaWJyYXJ5IHRvIHVzZS4gIEFkZGVkIGEgbmV3IGFj
cXVpcmVMaW5lQnJlYWtJdGVyYXRvcigpIGZvcgorICAgICAgICA4IGJpdCBzdHJpbmdzIHRoYXQg
dXNlcyB0aGUgTGF0aW4tMSBVVGV4dCBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgY29kZSBwYXRoIGlz
IG5vdCBiZWluZyBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCAKKyAgICAgICAgVG9UIGNvZGUuICBT
dWJzZXF1ZW50IGNoYW5nZXMgd2lsbCBlbmFibGUgY2FsbGluZyB0aGUgbmV3IGNvZGUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXp5TGluZUJyZWFrSXRlcmF0b3I6OkxhenlMaW5lQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChMYXp5TGluZUJyZWFrSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVC
cmVha0l0ZXJhdG9yOjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0ZXJhdG9yOjpy
ZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp1VGV4dExhdGluMUNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4x
QWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4xRXh0cmFjdCk6CisgICAgICAg
IChXZWJDb3JlOjp1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OnVUZXh0TGF0aW4xTWFwTmF0aXZlSW5kZXhUb1VURjE2KToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6VVRleHRPcGVuTGF0aW4xKToK
KyAgICAgICAgKFdlYkNvcmU6OmFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUCk6CisKIDIwMTIt
MDktMTcgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gQWRkIGdwdV90ZXN0IHRyYWNlIGV2ZW50cyB0cmFja2luZyB0aGUgY3Jl
YXRpb24gb2YgYSBEcmF3aW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7
CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0
ZXJhdG9yKGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGUpOwogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSk7CiAgICAg
dm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBU
ZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CkBAIC01Niw5ICs1NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExhenlMaW5lQnJlYWtJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcgPSAwLCBpbnQgbGVuZ3RoID0gMCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGUgPSBBdG9taWNTdHJpbmcoKSkKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0
b3IoKQorICAgICAgICAsIG1faXRlcmF0b3IoMCkKKyAgICB7CisgICAgfQorCisgICAgTGF6eUxp
bmVCcmVha0l0ZXJhdG9yKFN0cmluZyBzdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
ID0gQXRvbWljU3RyaW5nKCkpCiAgICAgICAgIDogbV9zdHJpbmcoc3RyaW5nKQotICAgICAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2xvY2FsZShsb2NhbGUpCiAgICAgICAgICwg
bV9pdGVyYXRvcigwKQogICAgIHsKQEAgLTcwLDMwICs3NSwzMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IobV9pdGVyYXRvcik7CiAgICAgfQogCi0gICAg
Y29uc3QgVUNoYXIqIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Ci0gICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU3RyaW5nIHN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogZ2V0
KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvcikKLSAgICAgICAgICAgIG1faXRlcmF0
b3IgPSBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IobV9zdHJpbmcsIG1fbGVuZ3RoLCBtX2xvY2Fs
ZSk7CisgICAgICAgIGlmICghbV9pdGVyYXRvcikgeworICAgICAgICAgICAgaWYgKG1fc3RyaW5n
LmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIG1faXRlcmF0b3IgPSBhY3F1aXJlTGluZUJyZWFr
SXRlcmF0b3IobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCksIG1fbG9j
YWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yID0gYWNx
dWlyZUxpbmVCcmVha0l0ZXJhdG9yKG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmluZy5s
ZW5ndGgoKSwgbV9sb2NhbGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2l0ZXJhdG9y
OwogICAgIH0KIAotICAgIHZvaWQgcmVzZXQoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0
aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCisgICAgdm9pZCByZXNldChTdHJpbmcgc3Ry
aW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKICAgICB7CiAgICAgICAgIGlmIChtX2l0
ZXJhdG9yKQogICAgICAgICAgICAgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKG1faXRlcmF0b3Ip
OwogCiAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAgICAgICBtX2xlbmd0aCA9IGxlbmd0
aDsKICAgICAgICAgbV9sb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIG1faXRlcmF0b3IgPSAwOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBVQ2hhciogbV9zdHJpbmc7Ci0gICAgaW50IG1f
bGVuZ3RoOworICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7
CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIG1faXRlcmF0b3I7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJ
KHJldmlzaW9uIDEyODcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwyMDQgQEAgc3Rh
dGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKAogICAgIHJldHVybiBpdGVyYXRv
cjsKIH0KIAorc3RhdGljIGNvbnN0IGludCBzX1VUZXh0Q2hhcmFjdGVyQnVmZmVyU2l6ZSA9IDE2
OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVVRleHQgdVRleHRTdHJ1Y3Q7CisgICAgVUNoYXIg
dUNoYXJCdWZmZXJbc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemUgKyAxXTsKK30gVVRleHRXaXRo
QnVmZmVyOworCitzdGF0aWMgVVRleHQgZW1wdHlVVGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOwor
CitzdGF0aWMgVVRleHQqIHVUZXh0TGF0aW4xQ2xvbmUoVVRleHQqLCBjb25zdCBVVGV4dCosIFVC
b29sLCBVRXJyb3JDb2RlKik7CitzdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxlbmd0
aChVVGV4dCopOworc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0KiwgaW50NjRf
dCwgVUJvb2wpOworc3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiwgaW50
NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlKik7CitzdGF0aWMgaW50
NjRfdCB1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKGNvbnN0IFVUZXh0Kik7CitzdGF0aWMg
aW50MzJfdCB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNihjb25zdCBVVGV4dCosIGlu
dDY0X3QpOworc3RhdGljIHZvaWQgdVRleHRMYXRpbjFDbG9zZShVVGV4dCopOworCitzdGF0aWMg
c3RydWN0IFVUZXh0RnVuY3MgdVRleHRMYXRpbjFGdW5jcyA9IHsKKyAgICBzaXplb2YoVVRleHRG
dW5jcyksCisgICAgMCwgMCwgMCwKKyAgICB1VGV4dExhdGluMUNsb25lLAorICAgIHVUZXh0TGF0
aW4xTmF0aXZlTGVuZ3RoLAorICAgIHVUZXh0TGF0aW4xQWNjZXNzLAorICAgIHVUZXh0TGF0aW4x
RXh0cmFjdCwKKyAgICAwLAorICAgIDAsCisgICAgdVRleHRMYXRpbjFNYXBPZmZzZXRUb05hdGl2
ZSwKKyAgICB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNiwKKyAgICB1VGV4dExhdGlu
MUNsb3NlLAorICAgIDAsIDAsIDAKK307CisKK3N0YXRpYyBVVGV4dCogdVRleHRMYXRpbjFDbG9u
ZShVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0IFVUZXh0KiBzb3VyY2UsIFVCb29sIGRlZXAsIFVF
cnJvckNvZGUqIHN0YXR1cykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGRlZXAsICFkZWVwKTsKKwor
ICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykpCisgICAgICAgIHJldHVybiAwOworCisgICAgVVRl
eHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKGRlc3RpbmF0aW9uLCBzaXplb2YoVUNoYXIpICogKHNf
VVRleHRDaGFyYWN0ZXJCdWZmZXJTaXplICsgMSksIHN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVS
RSgqc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOworICAgIAorICAgIHJlc3Vs
dC0+cHJvdmlkZXJQcm9wZXJ0aWVzID0gc291cmNlLT5wcm92aWRlclByb3BlcnRpZXM7CisgICAg
CisgICAgLyogUG9pbnQgYXQgdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB3aXRoIGFuIGVtcHR5IGJ1
ZmZlciAqLworICAgIHJlc3VsdC0+Y2h1bmtOYXRpdmVTdGFydCA9IHNvdXJjZS0+Y2h1bmtOYXRp
dmVTdGFydDsKKyAgICByZXN1bHQtPmNodW5rTmF0aXZlTGltaXQgPSBzb3VyY2UtPmNodW5rTmF0
aXZlU3RhcnQ7CisgICAgcmVzdWx0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0gc291cmNlLT5jaHVu
a05hdGl2ZVN0YXJ0OworICAgIHJlc3VsdC0+Y2h1bmtPZmZzZXQgPSAwOworICAgIHJlc3VsdC0+
Y29udGV4dCA9IHNvdXJjZS0+Y29udGV4dDsKKyAgICByZXN1bHQtPmEgPSBzb3VyY2UtPmE7Cisg
ICAgcmVzdWx0LT5wRnVuY3MgPSAmdVRleHRMYXRpbjFGdW5jczsKKyAgICByZXN1bHQtPmNodW5r
Q29udGVudHMgPSAoVUNoYXIqKXJlc3VsdC0+cEV4dHJhOworICAgIG1lbXNldChjb25zdF9jYXN0
PFVDaGFyKj4ocmVzdWx0LT5jaHVua0NvbnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFyKSAqIChzX1VU
ZXh0Q2hhcmFjdGVyQnVmZmVyU2l6ZSArIDEpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKFVUZXh0KiB1VGV4dCkKK3sK
KyAgICByZXR1cm4gdVRleHQtPmE7Cit9CisKK3N0YXRpYyBVQm9vbCB1VGV4dExhdGluMUFjY2Vz
cyhVVGV4dCogdVRleHQsIGludDY0X3QgaW5kZXgsIFVCb29sIGZvcndhcmQpCit7CisgICAgaW50
NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIGlm
IChpbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ICYmIGluZGV4ID49IHVUZXh0LT5jaHVu
a05hdGl2ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0aGUgYnVmZmVy
LiBTZXQgdGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQg
PSAoaW50MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7CisgICAgICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoICYm
IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID09IGxlbmd0aCkgeworICAgICAgICAgICAgLyogT2Zm
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYnV0IHdlIGNhbid0IGdldCBpdC4gKi8KKyAgICAgICAg
ICAgIHVUZXh0LT5jaHVua09mZnNldCA9IHVUZXh0LT5jaHVua0xlbmd0aDsKKyAgICAgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpbmRl
eCA8PSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAmJiBpbmRleCA+IHVUZXh0LT5jaHVua05hdGl2
ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0aGUgYnVmZmVyLiBTZXQg
dGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQgPSAoaW50
MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7CisgICAgICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWluZGV4ICYmICF1VGV4dC0+Y2h1bmtO
YXRpdmVTdGFydCkgeworICAgICAgICAgICAgLyogQWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nOyBj
YW4ndCBnbyBhbnkgZmFydGhlciAqLworICAgICAgICAgICAgdVRleHQtPmNodW5rT2Zmc2V0ID0g
MDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoZm9yd2FyZCkgeworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA9IGluZGV4
OworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IHVUZXh0LT5jaHVua05hdGl2ZVN0
YXJ0ICsgc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemU7CisgICAgICAgIGlmICh1VGV4dC0+Y2h1
bmtOYXRpdmVMaW1pdCA+IGxlbmd0aCkKKyAgICAgICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZUxp
bWl0ID0gbGVuZ3RoOworCisgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IDA7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZlTGltaXQgPSBpbmRleDsKKyAgICAgICAg
aWYgKHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID4gbGVuZ3RoKQorICAgICAgICAgICAgdVRleHQt
PmNodW5rTmF0aXZlTGltaXQgPSBsZW5ndGg7CisKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZl
U3RhcnQgPSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAtICBzX1VUZXh0Q2hhcmFjdGVyQnVmZmVy
U2l6ZTsKKyAgICAgICAgaWYgKHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0IDwgMCkKKyAgICAgICAg
ICAgIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0gMDsKKworICAgICAgICB1VGV4dC0+Y2h1bmtP
ZmZzZXQgPSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisgICAgfQorICAgIHVUZXh0LT5jaHVua0xlbmd0
aCA9IChpbnQzMl90KSAodVRleHQtPmNodW5rTmF0aXZlTGltaXQgLSB1VGV4dC0+Y2h1bmtOYXRp
dmVTdGFydCk7CisKKyAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoY29uc3RfY2FzdDxVQ2hhcio+
KHVUZXh0LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPih1VGV4dC0+
Y29udGV4dCkgKyB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHVUZXh0LT5jaHVua0xlbmd0aCkpOworCisgICAgdVRleHQtPm5hdGl2ZUluZGV4aW5nTGltaXQg
PSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGlu
dDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiB1VGV4dCwgaW50NjRfdCBzdGFydCwgaW50
NjRfdCBsaW1pdCwgVUNoYXIqIGRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LCBVRXJyb3JDb2Rl
KiBzdGF0dXMpCit7CisgICAgaW50NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKyAgICBpZiAoVV9G
QUlMVVJFKCpzdGF0dXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXN0Q2FwYWNp
dHkgPCAwIHx8ICghZGVzdCAmJiBkZXN0Q2FwYWNpdHkgPiAwKSkgeworICAgICAgICAqc3RhdHVz
ID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gbGltaXQgfHwgKGxpbWl0IC0gc3RhcnQpID4g
SU5UMzJfTUFYKSB7CisgICAgICAgICpzdGF0dXMgPSBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9S
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPiBsZW5ndGgpCisg
ICAgICAgIHN0YXJ0ID0gbGVuZ3RoOworICAgIGlmIChsaW1pdCA+IGxlbmd0aCkKKyAgICAgICAg
bGltaXQgPSBsZW5ndGg7CisKKyAgICBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0OworICAgIAorICAg
IGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXN0Q2FwYWNpdHkg
PiAwICYmICFkZXN0KSB7CisgICAgICAgIGludDMyX3QgdHJpbW1lZExlbmd0aCA9IGxlbmd0aDsK
KyAgICAgICAgaWYgKHRyaW1tZWRMZW5ndGggPiBkZXN0Q2FwYWNpdHkpCisgICAgICAgICAgICB0
cmltbWVkTGVuZ3RoID0gZGVzdENhcGFjaXR5OworCisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFycyhkZXN0LCBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KHVUZXh0LT5jb250ZXh0KSArIHN0
YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpbW1lZExlbmd0aCkpOworICAgIH0KKworICAg
IGlmIChsZW5ndGggPCBkZXN0Q2FwYWNpdHkpIHsKKyAgICAgICAgZGVzdFtsZW5ndGhdID0gMDsK
KyAgICAgICAgaWYgKCpzdGF0dXMgPT0gVV9TVFJJTkdfTk9UX1RFUk1JTkFURURfV0FSTklORykK
KyAgICAgICAgICAgICpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgfSBlbHNlIGlmIChsZW5n
dGggPT0gZGVzdENhcGFjaXR5KQorICAgICAgICAqc3RhdHVzID0gVV9TVFJJTkdfTk9UX1RFUk1J
TkFURURfV0FSTklORzsKKyAgICBlbHNlCisgICAgICAgICpzdGF0dXMgPSBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUjsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQ2NF90IHVU
ZXh0TGF0aW4xTWFwT2Zmc2V0VG9OYXRpdmUoY29uc3QgVVRleHQqIHVUZXh0KQoreworICAgIHJl
dHVybiB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCArIHVUZXh0LT5jaHVua09mZnNldDsKK30KKwor
c3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYoY29uc3QgVVRl
eHQqIHVUZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4KQoreworICAgIEFTU0VSVF9VTlVTRUQodVRl
eHQsIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID49IG5hdGl2ZUluZGV4KTsKKyAgICBBU1NFUlRf
VU5VU0VEKHVUZXh0LCBuYXRpdmVJbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0KTsKKyAg
ICByZXR1cm4gbmF0aXZlSW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ2xvc2Uo
VVRleHQqIHVUZXh0KQoreworICAgIHVUZXh0LT5jb250ZXh0ID0gMDsKK30KKworc3RhdGljIFVU
ZXh0KiBVVGV4dE9wZW5MYXRpbjEoVVRleHRXaXRoQnVmZmVyKiB1VGV4dExhdGluMSwgY29uc3Qg
TENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVRXJyb3JDb2RlKiBlcnJvckNvZGUpCit7
CisgICAgVVRleHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKHJlaW50ZXJwcmV0X2Nhc3Q8VVRleHQq
Pih1VGV4dExhdGluMSksIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3RlckJ1ZmZlclNp
emUgKyAxKSwgZXJyb3JDb2RlKTsKKyAgICAKKyAgICBpZiAoIVVfU1VDQ0VTUygqZXJyb3JDb2Rl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXN1bHQtPmNvbnRleHQgPSBzdHJpbmc7Cisg
ICAgcmVzdWx0LT5hID0gKGludDY0X3QpbGVuZ3RoOworICAgIHJlc3VsdC0+cEZ1bmNzID0gJnVU
ZXh0TGF0aW4xRnVuY3M7CisgICAgcmVzdWx0LT5jaHVua0NvbnRlbnRzID0gKFVDaGFyKilyZXN1
bHQtPnBFeHRyYTsKKyAgICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+KHJlc3VsdC0+Y2h1bmtD
b250ZW50cyksIDAsIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemUg
KyAxKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogVGV4dEJyZWFrSXRlcmF0b3Iq
IHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7CiAg
ICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7CkBAIC02Miw2
ICsyNjAsMzYgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbgogICAg
ICAgICBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcsIGxlbmd0aCk7
CiB9CiAKK1RleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3Qg
TENoYXIqIHN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCit7
CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gTGluZUJyZWFrSXRlcmF0b3JQb29sOjpz
aGFyZWRQb29sKCkudGFrZShsb2NhbGUpOworICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgVVRleHRXaXRoQnVmZmVyIHVUZXh0TGF0aW4xTG9jYWw7CisgICAgdVRl
eHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdCA9IGVtcHR5VVRleHQ7CisgICAgdVRleHRMYXRpbjFM
b2NhbC51VGV4dFN0cnVjdC5leHRyYVNpemUgPSBzaXplb2YodVRleHRMYXRpbjFMb2NhbC51Q2hh
ckJ1ZmZlcik7CisgICAgdVRleHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdC5wRXh0cmEgPSB1VGV4
dExhdGluMUxvY2FsLnVDaGFyQnVmZmVyOworCisgICAgVUVycm9yQ29kZSB1VGV4dE9wZW5TdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVVRleHQqIHVUZXh0TGF0aW4xID0gVVRleHRPcGVuTGF0
aW4xKCZ1VGV4dExhdGluMUxvY2FsLCBzdHJpbmcsIGxlbmd0aCwgJnVUZXh0T3BlblN0YXR1cyk7
CisgICAgaWYgKFVfRkFJTFVSRSh1VGV4dE9wZW5TdGF0dXMpKSB7CisgICAgICAgIExPR19FUlJP
UigiVVRleHRPcGVuTGF0aW4xIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHVUZXh0T3BlblN0YXR1
cyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0
YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1YnJrX3NldFVUZXh0KGl0ZXJhdG9yLCB1VGV4dExh
dGluMSwgJnNldFRleHRTdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAl
ZCIsIHNldFRleHRTdGF0dXMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1dGV4
dF9jbG9zZSh1VGV4dExhdGluMSk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXh0
QnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKTsKK30KKwogVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVp
cmVMaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3Ig
PSBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2FsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkocmV2aXNpb24gMTI4NzE0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzksNyArMjQzOSw3IEBA
IElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoKICAgICAgICAgICAgICAg
ICByZW5kZXJUZXh0SW5mby5tX3RleHQgPSB0OwogICAgICAgICAgICAgICAgIHJlbmRlclRleHRJ
bmZvLm1fZm9udCA9ICZmOwogICAgICAgICAgICAgICAgIHJlbmRlclRleHRJbmZvLm1fbGF5b3V0
ID0gZi5jcmVhdGVMYXlvdXQodCwgd2lkdGguY3VycmVudFdpZHRoKCksIGNvbGxhcHNlV2hpdGVT
cGFjZSk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRv
ci5yZXNldCh0LT5jaGFyYWN0ZXJzKCksIHQtPnRleHRMZW5ndGgoKSwgc3R5bGUtPmxvY2FsZSgp
KTsKKyAgICAgICAgICAgICAgICByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLnJl
c2V0KHQtPnRleHQoKSwgc3R5bGUtPmxvY2FsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgJiYgcmVuZGVyVGV4dEluZm8ubV9mb250ICE9ICZmKSB7
CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9mb250ID0gJmY7CiAgICAgICAgICAg
ICAgICAgcmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgPSBmLmNyZWF0ZUxheW91dCh0LCB3aWR0aC5j
dXJyZW50V2lkdGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEyODcxNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDcgKzk1
NSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICBmbG9h
dCB3b3JkU3BhY2luZyA9IHN0eWxlVG9Vc2UtPndvcmRTcGFjaW5nKCk7CiAgICAgaW50IGxlbiA9
IHRleHRMZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogdHh0ID0gY2hhcmFjdGVycygpOwotICAg
IExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKHR4dCwgbGVuLCBzdHlsZVRvVXNl
LT5sb2NhbGUoKSk7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRlcmF0b3IobV90
ZXh0LCBzdHlsZVRvVXNlLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0g
ZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNTcGFj
ZSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3Bw
CShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTcgKzE0NywxNiBAQCBpbmxpbmUgYm9vbCBu
ZWVkc0xpbmVCcmVha0l0ZXJhdG9yKFVDaGFyCiAgICAgcmV0dXJuIGNoID4gYXNjaWlMaW5lQnJl
YWtUYWJsZUxhc3RDaGFyICYmIGNoICE9IG5vQnJlYWtTcGFjZTsKIH0KIAotdGVtcGxhdGU8Ym9v
bCB0cmVhdE5vQnJlYWtTcGFjZUFzQnJlYWs+Ci1zdGF0aWMgaW5saW5lIGludCBuZXh0QnJlYWth
YmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsYXp5QnJlYWtJdGVyYXRvciwgaW50
IHBvcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgdHJlYXROb0JyZWFr
U3BhY2VBc0JyZWFrPgorc3RhdGljIGlubGluZSBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKExh
enlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGNvbnN0IENoYXJhY3RlclR5
cGUqIHN0ciwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgcG9zKQogewotICAgIGNvbnN0IFVDaGFyKiBz
dHIgPSBsYXp5QnJlYWtJdGVyYXRvci5zdHJpbmcoKTsKLSAgICBpbnQgbGVuID0gbGF6eUJyZWFr
SXRlcmF0b3IubGVuZ3RoKCk7CisgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4obGVuZ3Ro
KTsKICAgICBpbnQgbmV4dEJyZWFrID0gLTE7CiAKLSAgICBVQ2hhciBsYXN0TGFzdENoID0gcG9z
ID4gMSA/IHN0cltwb3MgLSAyXSA6IDA7Ci0gICAgVUNoYXIgbGFzdENoID0gcG9zID4gMCA/IHN0
cltwb3MgLSAxXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0TGFzdENoID0gcG9zID4gMSA/
IHN0cltwb3MgLSAyXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0Q2ggPSBwb3MgPiAwID8g
c3RyW3BvcyAtIDFdIDogMDsKICAgICBmb3IgKGludCBpID0gcG9zOyBpIDwgbGVuOyBpKyspIHsK
LSAgICAgICAgVUNoYXIgY2ggPSBzdHJbaV07CisgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBz
dHJbaV07CiAKICAgICAgICAgaWYgKGlzQnJlYWthYmxlU3BhY2U8dHJlYXROb0JyZWFrU3BhY2VB
c0JyZWFrPihjaCkgfHwgc2hvdWxkQnJlYWtBZnRlcihsYXN0TGFzdENoLCBsYXN0Q2gsIGNoKSkK
ICAgICAgICAgICAgIHJldHVybiBpOwpAQCAtMTgxLDEyICsxODAsMTggQEAgc3RhdGljIGlubGlu
ZSBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKAogCiBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9u
SWdub3JpbmdOQlNQKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGlu
dCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjxmYWxzZT4obGF6eUJy
ZWFrSXRlcmF0b3IsIHBvcyk7CisgICAgU3RyaW5nIHN0cmluZyA9IGxhenlCcmVha0l0ZXJhdG9y
LnN0cmluZygpOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb248TENoYXIsIGZhbHNlPihsYXp5QnJlYWtJdGVyYXRvciwgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgcG9zKTsKKyAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uPFVDaGFyLCBmYWxzZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiBpbnQgbmV4dEJyZWFr
YWJsZVBvc2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGlu
dCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjx0cnVlPihsYXp5QnJl
YWtJdGVyYXRvciwgcG9zKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gbGF6eUJyZWFrSXRlcmF0b3Iu
c3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIG5leHRC
cmVha2FibGVQb3NpdGlvbjxMQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHBvcyk7CisgICAgcmV0dXJuIG5leHRCcmVh
a2FibGVQb3NpdGlvbjxVQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="177201"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165221</attachid>
            <date>2012-09-21 16:15:11 -0700</date>
            <delta_ts>2022-02-27 23:34:50 -0800</delta_ts>
            <desc>Patch again</desc>
            <filename>96935-2.patch</filename>
            <type>text/plain</type>
            <size>16879</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODc4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA5LTIxICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBMYXRpbi0xIExpbmUg
QnJlYWsgSXRlcmF0b3IgdG8gVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjkzNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgTGF0aW4tMSBVVGV4dCBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlIElDVSBsaWJyYXJ5IHRvIHVzZS4gIEFkZGVkIGEgbmV3IGFj
cXVpcmVMaW5lQnJlYWtJdGVyYXRvcigpIGZvcgorICAgICAgICA4IGJpdCBzdHJpbmdzIHRoYXQg
dXNlcyB0aGUgTGF0aW4tMSBVVGV4dCBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgY29kZSBwYXRoIGlz
IG5vdCBiZWluZyBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCAKKyAgICAgICAgVG9UIGNvZGUuICBT
dWJzZXF1ZW50IGNoYW5nZXMgd2lsbCBlbmFibGUgY2FsbGluZyB0aGUgbmV3IGNvZGUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXp5TGluZUJyZWFrSXRlcmF0b3I6OkxhenlMaW5lQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChMYXp5TGluZUJyZWFrSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVC
cmVha0l0ZXJhdG9yOjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eUxpbmVCcmVha0l0ZXJhdG9yOjpy
ZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp1VGV4dExhdGluMUNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4x
QWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OnVUZXh0TGF0aW4xRXh0cmFjdCk6CisgICAgICAg
IChXZWJDb3JlOjp1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OnVUZXh0TGF0aW4xTWFwTmF0aXZlSW5kZXhUb1VURjE2KToKKyAgICAgICAgKFdlYkNvcmU6
OnVUZXh0TGF0aW4xQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6VVRleHRPcGVuTGF0aW4xKToK
KyAgICAgICAgKFdlYkNvcmU6OmFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUCk6CisKIDIwMTIt
MDktMTcgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gQWRkIGdwdV90ZXN0IHRyYWNlIGV2ZW50cyB0cmFja2luZyB0aGUgY3Jl
YXRpb24gb2YgYSBEcmF3aW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7
CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0
ZXJhdG9yKGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGUpOwogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSk7CiAgICAg
dm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBU
ZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CkBAIC01Niw5ICs1NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExhenlMaW5lQnJlYWtJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcgPSAwLCBpbnQgbGVuZ3RoID0gMCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGUgPSBBdG9taWNTdHJpbmcoKSkKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0
b3IoKQorICAgICAgICA6IG1faXRlcmF0b3IoMCkKKyAgICB7CisgICAgfQorCisgICAgTGF6eUxp
bmVCcmVha0l0ZXJhdG9yKFN0cmluZyBzdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
ID0gQXRvbWljU3RyaW5nKCkpCiAgICAgICAgIDogbV9zdHJpbmcoc3RyaW5nKQotICAgICAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2xvY2FsZShsb2NhbGUpCiAgICAgICAgICwg
bV9pdGVyYXRvcigwKQogICAgIHsKQEAgLTcwLDMwICs3NSwzMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IobV9pdGVyYXRvcik7CiAgICAgfQogCi0gICAg
Y29uc3QgVUNoYXIqIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Ci0gICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU3RyaW5nIHN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogZ2V0
KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvcikKLSAgICAgICAgICAgIG1faXRlcmF0
b3IgPSBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IobV9zdHJpbmcsIG1fbGVuZ3RoLCBtX2xvY2Fs
ZSk7CisgICAgICAgIGlmICghbV9pdGVyYXRvcikgeworICAgICAgICAgICAgaWYgKG1fc3RyaW5n
LmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIG1faXRlcmF0b3IgPSBhY3F1aXJlTGluZUJyZWFr
SXRlcmF0b3IobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCksIG1fbG9j
YWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yID0gYWNx
dWlyZUxpbmVCcmVha0l0ZXJhdG9yKG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmluZy5s
ZW5ndGgoKSwgbV9sb2NhbGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2l0ZXJhdG9y
OwogICAgIH0KIAotICAgIHZvaWQgcmVzZXQoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0
aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCisgICAgdm9pZCByZXNldChTdHJpbmcgc3Ry
aW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKICAgICB7CiAgICAgICAgIGlmIChtX2l0
ZXJhdG9yKQogICAgICAgICAgICAgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKG1faXRlcmF0b3Ip
OwogCiAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAgICAgICBtX2xlbmd0aCA9IGxlbmd0
aDsKICAgICAgICAgbV9sb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIG1faXRlcmF0b3IgPSAwOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBVQ2hhciogbV9zdHJpbmc7Ci0gICAgaW50IG1f
bGVuZ3RoOworICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7
CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIG1faXRlcmF0b3I7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJ
KHJldmlzaW9uIDEyODcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwyMDQgQEAgc3Rh
dGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKAogICAgIHJldHVybiBpdGVyYXRv
cjsKIH0KIAorc3RhdGljIGNvbnN0IGludCBzX1VUZXh0Q2hhcmFjdGVyQnVmZmVyU2l6ZSA9IDE2
OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVVRleHQgdVRleHRTdHJ1Y3Q7CisgICAgVUNoYXIg
dUNoYXJCdWZmZXJbc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemUgKyAxXTsKK30gVVRleHRXaXRo
QnVmZmVyOworCitzdGF0aWMgVVRleHQgZW1wdHlVVGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOwor
CitzdGF0aWMgVVRleHQqIHVUZXh0TGF0aW4xQ2xvbmUoVVRleHQqLCBjb25zdCBVVGV4dCosIFVC
b29sLCBVRXJyb3JDb2RlKik7CitzdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxlbmd0
aChVVGV4dCopOworc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0KiwgaW50NjRf
dCwgVUJvb2wpOworc3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiwgaW50
NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlKik7CitzdGF0aWMgaW50
NjRfdCB1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKGNvbnN0IFVUZXh0Kik7CitzdGF0aWMg
aW50MzJfdCB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNihjb25zdCBVVGV4dCosIGlu
dDY0X3QpOworc3RhdGljIHZvaWQgdVRleHRMYXRpbjFDbG9zZShVVGV4dCopOworCitzdGF0aWMg
c3RydWN0IFVUZXh0RnVuY3MgdVRleHRMYXRpbjFGdW5jcyA9IHsKKyAgICBzaXplb2YoVVRleHRG
dW5jcyksCisgICAgMCwgMCwgMCwKKyAgICB1VGV4dExhdGluMUNsb25lLAorICAgIHVUZXh0TGF0
aW4xTmF0aXZlTGVuZ3RoLAorICAgIHVUZXh0TGF0aW4xQWNjZXNzLAorICAgIHVUZXh0TGF0aW4x
RXh0cmFjdCwKKyAgICAwLAorICAgIDAsCisgICAgdVRleHRMYXRpbjFNYXBPZmZzZXRUb05hdGl2
ZSwKKyAgICB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNiwKKyAgICB1VGV4dExhdGlu
MUNsb3NlLAorICAgIDAsIDAsIDAKK307CisKK3N0YXRpYyBVVGV4dCogdVRleHRMYXRpbjFDbG9u
ZShVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0IFVUZXh0KiBzb3VyY2UsIFVCb29sIGRlZXAsIFVF
cnJvckNvZGUqIHN0YXR1cykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGRlZXAsICFkZWVwKTsKKwor
ICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykpCisgICAgICAgIHJldHVybiAwOworCisgICAgVVRl
eHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKGRlc3RpbmF0aW9uLCBzaXplb2YoVUNoYXIpICogKHNf
VVRleHRDaGFyYWN0ZXJCdWZmZXJTaXplICsgMSksIHN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVS
RSgqc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOworICAgIAorICAgIHJlc3Vs
dC0+cHJvdmlkZXJQcm9wZXJ0aWVzID0gc291cmNlLT5wcm92aWRlclByb3BlcnRpZXM7CisgICAg
CisgICAgLyogUG9pbnQgYXQgdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB3aXRoIGFuIGVtcHR5IGJ1
ZmZlciAqLworICAgIHJlc3VsdC0+Y2h1bmtOYXRpdmVTdGFydCA9IHNvdXJjZS0+Y2h1bmtOYXRp
dmVTdGFydDsKKyAgICByZXN1bHQtPmNodW5rTmF0aXZlTGltaXQgPSBzb3VyY2UtPmNodW5rTmF0
aXZlU3RhcnQ7CisgICAgcmVzdWx0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0gc291cmNlLT5jaHVu
a05hdGl2ZVN0YXJ0OworICAgIHJlc3VsdC0+Y2h1bmtPZmZzZXQgPSAwOworICAgIHJlc3VsdC0+
Y29udGV4dCA9IHNvdXJjZS0+Y29udGV4dDsKKyAgICByZXN1bHQtPmEgPSBzb3VyY2UtPmE7Cisg
ICAgcmVzdWx0LT5wRnVuY3MgPSAmdVRleHRMYXRpbjFGdW5jczsKKyAgICByZXN1bHQtPmNodW5r
Q29udGVudHMgPSAoVUNoYXIqKXJlc3VsdC0+cEV4dHJhOworICAgIG1lbXNldChjb25zdF9jYXN0
PFVDaGFyKj4ocmVzdWx0LT5jaHVua0NvbnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFyKSAqIChzX1VU
ZXh0Q2hhcmFjdGVyQnVmZmVyU2l6ZSArIDEpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKFVUZXh0KiB1VGV4dCkKK3sK
KyAgICByZXR1cm4gdVRleHQtPmE7Cit9CisKK3N0YXRpYyBVQm9vbCB1VGV4dExhdGluMUFjY2Vz
cyhVVGV4dCogdVRleHQsIGludDY0X3QgaW5kZXgsIFVCb29sIGZvcndhcmQpCit7CisgICAgaW50
NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIGlm
IChpbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ICYmIGluZGV4ID49IHVUZXh0LT5jaHVu
a05hdGl2ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0aGUgYnVmZmVy
LiBTZXQgdGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQg
PSAoaW50MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7CisgICAgICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoICYm
IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID09IGxlbmd0aCkgeworICAgICAgICAgICAgLyogT2Zm
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYnV0IHdlIGNhbid0IGdldCBpdC4gKi8KKyAgICAgICAg
ICAgIHVUZXh0LT5jaHVua09mZnNldCA9IHVUZXh0LT5jaHVua0xlbmd0aDsKKyAgICAgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpbmRl
eCA8PSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAmJiBpbmRleCA+IHVUZXh0LT5jaHVua05hdGl2
ZVN0YXJ0KSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IGluc2lkZSB0aGUgYnVmZmVyLiBTZXQg
dGhlIG5ldyBvZmZzZXQuICovCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQgPSAoaW50
MzJfdCkoaW5kZXggLSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCk7CisgICAgICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWluZGV4ICYmICF1VGV4dC0+Y2h1bmtO
YXRpdmVTdGFydCkgeworICAgICAgICAgICAgLyogQWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nOyBj
YW4ndCBnbyBhbnkgZmFydGhlciAqLworICAgICAgICAgICAgdVRleHQtPmNodW5rT2Zmc2V0ID0g
MDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoZm9yd2FyZCkgeworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA9IGluZGV4
OworICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IHVUZXh0LT5jaHVua05hdGl2ZVN0
YXJ0ICsgc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemU7CisgICAgICAgIGlmICh1VGV4dC0+Y2h1
bmtOYXRpdmVMaW1pdCA+IGxlbmd0aCkKKyAgICAgICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZUxp
bWl0ID0gbGVuZ3RoOworCisgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IDA7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZlTGltaXQgPSBpbmRleDsKKyAgICAgICAg
aWYgKHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID4gbGVuZ3RoKQorICAgICAgICAgICAgdVRleHQt
PmNodW5rTmF0aXZlTGltaXQgPSBsZW5ndGg7CisKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZl
U3RhcnQgPSB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAtICBzX1VUZXh0Q2hhcmFjdGVyQnVmZmVy
U2l6ZTsKKyAgICAgICAgaWYgKHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0IDwgMCkKKyAgICAgICAg
ICAgIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0gMDsKKworICAgICAgICB1VGV4dC0+Y2h1bmtP
ZmZzZXQgPSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisgICAgfQorICAgIHVUZXh0LT5jaHVua0xlbmd0
aCA9IChpbnQzMl90KSAodVRleHQtPmNodW5rTmF0aXZlTGltaXQgLSB1VGV4dC0+Y2h1bmtOYXRp
dmVTdGFydCk7CisKKyAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoY29uc3RfY2FzdDxVQ2hhcio+
KHVUZXh0LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPih1VGV4dC0+
Y29udGV4dCkgKyB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHVUZXh0LT5jaHVua0xlbmd0aCkpOworCisgICAgdVRleHQtPm5hdGl2ZUluZGV4aW5nTGltaXQg
PSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGlu
dDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiB1VGV4dCwgaW50NjRfdCBzdGFydCwgaW50
NjRfdCBsaW1pdCwgVUNoYXIqIGRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LCBVRXJyb3JDb2Rl
KiBzdGF0dXMpCit7CisgICAgaW50NjRfdCBsZW5ndGggPSB1VGV4dC0+YTsKKyAgICBpZiAoVV9G
QUlMVVJFKCpzdGF0dXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXN0Q2FwYWNp
dHkgPCAwIHx8ICghZGVzdCAmJiBkZXN0Q2FwYWNpdHkgPiAwKSkgeworICAgICAgICAqc3RhdHVz
ID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gbGltaXQgfHwgKGxpbWl0IC0gc3RhcnQpID4g
SU5UMzJfTUFYKSB7CisgICAgICAgICpzdGF0dXMgPSBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9S
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPiBsZW5ndGgpCisg
ICAgICAgIHN0YXJ0ID0gbGVuZ3RoOworICAgIGlmIChsaW1pdCA+IGxlbmd0aCkKKyAgICAgICAg
bGltaXQgPSBsZW5ndGg7CisKKyAgICBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0OworICAgIAorICAg
IGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXN0Q2FwYWNpdHkg
PiAwICYmICFkZXN0KSB7CisgICAgICAgIGludDMyX3QgdHJpbW1lZExlbmd0aCA9IGxlbmd0aDsK
KyAgICAgICAgaWYgKHRyaW1tZWRMZW5ndGggPiBkZXN0Q2FwYWNpdHkpCisgICAgICAgICAgICB0
cmltbWVkTGVuZ3RoID0gZGVzdENhcGFjaXR5OworCisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFycyhkZXN0LCBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KHVUZXh0LT5jb250ZXh0KSArIHN0
YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJpbW1lZExlbmd0aCkpOworICAgIH0KKworICAg
IGlmIChsZW5ndGggPCBkZXN0Q2FwYWNpdHkpIHsKKyAgICAgICAgZGVzdFtsZW5ndGhdID0gMDsK
KyAgICAgICAgaWYgKCpzdGF0dXMgPT0gVV9TVFJJTkdfTk9UX1RFUk1JTkFURURfV0FSTklORykK
KyAgICAgICAgICAgICpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgfSBlbHNlIGlmIChsZW5n
dGggPT0gZGVzdENhcGFjaXR5KQorICAgICAgICAqc3RhdHVzID0gVV9TVFJJTkdfTk9UX1RFUk1J
TkFURURfV0FSTklORzsKKyAgICBlbHNlCisgICAgICAgICpzdGF0dXMgPSBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUjsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQ2NF90IHVU
ZXh0TGF0aW4xTWFwT2Zmc2V0VG9OYXRpdmUoY29uc3QgVVRleHQqIHVUZXh0KQoreworICAgIHJl
dHVybiB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCArIHVUZXh0LT5jaHVua09mZnNldDsKK30KKwor
c3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYoY29uc3QgVVRl
eHQqIHVUZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4KQoreworICAgIEFTU0VSVF9VTlVTRUQodVRl
eHQsIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID49IG5hdGl2ZUluZGV4KTsKKyAgICBBU1NFUlRf
VU5VU0VEKHVUZXh0LCBuYXRpdmVJbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0KTsKKyAg
ICByZXR1cm4gbmF0aXZlSW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ2xvc2Uo
VVRleHQqIHVUZXh0KQoreworICAgIHVUZXh0LT5jb250ZXh0ID0gMDsKK30KKworc3RhdGljIFVU
ZXh0KiBVVGV4dE9wZW5MYXRpbjEoVVRleHRXaXRoQnVmZmVyKiB1VGV4dExhdGluMSwgY29uc3Qg
TENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVRXJyb3JDb2RlKiBlcnJvckNvZGUpCit7
CisgICAgVVRleHQqIHJlc3VsdCA9IHV0ZXh0X3NldHVwKHJlaW50ZXJwcmV0X2Nhc3Q8VVRleHQq
Pih1VGV4dExhdGluMSksIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3RlckJ1ZmZlclNp
emUgKyAxKSwgZXJyb3JDb2RlKTsKKyAgICAKKyAgICBpZiAoIVVfU1VDQ0VTUygqZXJyb3JDb2Rl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXN1bHQtPmNvbnRleHQgPSBzdHJpbmc7Cisg
ICAgcmVzdWx0LT5hID0gKGludDY0X3QpbGVuZ3RoOworICAgIHJlc3VsdC0+cEZ1bmNzID0gJnVU
ZXh0TGF0aW4xRnVuY3M7CisgICAgcmVzdWx0LT5jaHVua0NvbnRlbnRzID0gKFVDaGFyKilyZXN1
bHQtPnBFeHRyYTsKKyAgICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+KHJlc3VsdC0+Y2h1bmtD
b250ZW50cyksIDAsIHNpemVvZihVQ2hhcikgKiAoc19VVGV4dENoYXJhY3RlckJ1ZmZlclNpemUg
KyAxKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogVGV4dEJyZWFrSXRlcmF0b3Iq
IHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7CiAg
ICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7CkBAIC02Miw2
ICsyNjAsMzYgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbgogICAg
ICAgICBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcsIGxlbmd0aCk7
CiB9CiAKK1RleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3Qg
TENoYXIqIHN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCit7
CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gTGluZUJyZWFrSXRlcmF0b3JQb29sOjpz
aGFyZWRQb29sKCkudGFrZShsb2NhbGUpOworICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgVVRleHRXaXRoQnVmZmVyIHVUZXh0TGF0aW4xTG9jYWw7CisgICAgdVRl
eHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdCA9IGVtcHR5VVRleHQ7CisgICAgdVRleHRMYXRpbjFM
b2NhbC51VGV4dFN0cnVjdC5leHRyYVNpemUgPSBzaXplb2YodVRleHRMYXRpbjFMb2NhbC51Q2hh
ckJ1ZmZlcik7CisgICAgdVRleHRMYXRpbjFMb2NhbC51VGV4dFN0cnVjdC5wRXh0cmEgPSB1VGV4
dExhdGluMUxvY2FsLnVDaGFyQnVmZmVyOworCisgICAgVUVycm9yQ29kZSB1VGV4dE9wZW5TdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVVRleHQqIHVUZXh0TGF0aW4xID0gVVRleHRPcGVuTGF0
aW4xKCZ1VGV4dExhdGluMUxvY2FsLCBzdHJpbmcsIGxlbmd0aCwgJnVUZXh0T3BlblN0YXR1cyk7
CisgICAgaWYgKFVfRkFJTFVSRSh1VGV4dE9wZW5TdGF0dXMpKSB7CisgICAgICAgIExPR19FUlJP
UigiVVRleHRPcGVuTGF0aW4xIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHVUZXh0T3BlblN0YXR1
cyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0
YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1YnJrX3NldFVUZXh0KGl0ZXJhdG9yLCB1VGV4dExh
dGluMSwgJnNldFRleHRTdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAl
ZCIsIHNldFRleHRTdGF0dXMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1dGV4
dF9jbG9zZSh1VGV4dExhdGluMSk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXh0
QnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKTsKK30KKwogVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVp
cmVMaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3Ig
PSBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2FsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkocmV2aXNpb24gMTI4NzE0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzksNyArMjQzOSw3IEBA
IElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoKICAgICAgICAgICAgICAg
ICByZW5kZXJUZXh0SW5mby5tX3RleHQgPSB0OwogICAgICAgICAgICAgICAgIHJlbmRlclRleHRJ
bmZvLm1fZm9udCA9ICZmOwogICAgICAgICAgICAgICAgIHJlbmRlclRleHRJbmZvLm1fbGF5b3V0
ID0gZi5jcmVhdGVMYXlvdXQodCwgd2lkdGguY3VycmVudFdpZHRoKCksIGNvbGxhcHNlV2hpdGVT
cGFjZSk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRv
ci5yZXNldCh0LT5jaGFyYWN0ZXJzKCksIHQtPnRleHRMZW5ndGgoKSwgc3R5bGUtPmxvY2FsZSgp
KTsKKyAgICAgICAgICAgICAgICByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLnJl
c2V0KHQtPnRleHQoKSwgc3R5bGUtPmxvY2FsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgJiYgcmVuZGVyVGV4dEluZm8ubV9mb250ICE9ICZmKSB7
CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dEluZm8ubV9mb250ID0gJmY7CiAgICAgICAgICAg
ICAgICAgcmVuZGVyVGV4dEluZm8ubV9sYXlvdXQgPSBmLmNyZWF0ZUxheW91dCh0LCB3aWR0aC5j
dXJyZW50V2lkdGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEyODcxNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDcgKzk1
NSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICBmbG9h
dCB3b3JkU3BhY2luZyA9IHN0eWxlVG9Vc2UtPndvcmRTcGFjaW5nKCk7CiAgICAgaW50IGxlbiA9
IHRleHRMZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogdHh0ID0gY2hhcmFjdGVycygpOwotICAg
IExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKHR4dCwgbGVuLCBzdHlsZVRvVXNl
LT5sb2NhbGUoKSk7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRlcmF0b3IobV90
ZXh0LCBzdHlsZVRvVXNlLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0g
ZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNTcGFj
ZSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3Bw
CShyZXZpc2lvbiAxMjg3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTcgKzE0NywxNiBAQCBpbmxpbmUgYm9vbCBu
ZWVkc0xpbmVCcmVha0l0ZXJhdG9yKFVDaGFyCiAgICAgcmV0dXJuIGNoID4gYXNjaWlMaW5lQnJl
YWtUYWJsZUxhc3RDaGFyICYmIGNoICE9IG5vQnJlYWtTcGFjZTsKIH0KIAotdGVtcGxhdGU8Ym9v
bCB0cmVhdE5vQnJlYWtTcGFjZUFzQnJlYWs+Ci1zdGF0aWMgaW5saW5lIGludCBuZXh0QnJlYWth
YmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsYXp5QnJlYWtJdGVyYXRvciwgaW50
IHBvcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgdHJlYXROb0JyZWFr
U3BhY2VBc0JyZWFrPgorc3RhdGljIGlubGluZSBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKExh
enlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGNvbnN0IENoYXJhY3RlclR5
cGUqIHN0ciwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgcG9zKQogewotICAgIGNvbnN0IFVDaGFyKiBz
dHIgPSBsYXp5QnJlYWtJdGVyYXRvci5zdHJpbmcoKTsKLSAgICBpbnQgbGVuID0gbGF6eUJyZWFr
SXRlcmF0b3IubGVuZ3RoKCk7CisgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4obGVuZ3Ro
KTsKICAgICBpbnQgbmV4dEJyZWFrID0gLTE7CiAKLSAgICBVQ2hhciBsYXN0TGFzdENoID0gcG9z
ID4gMSA/IHN0cltwb3MgLSAyXSA6IDA7Ci0gICAgVUNoYXIgbGFzdENoID0gcG9zID4gMCA/IHN0
cltwb3MgLSAxXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0TGFzdENoID0gcG9zID4gMSA/
IHN0cltwb3MgLSAyXSA6IDA7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0Q2ggPSBwb3MgPiAwID8g
c3RyW3BvcyAtIDFdIDogMDsKICAgICBmb3IgKGludCBpID0gcG9zOyBpIDwgbGVuOyBpKyspIHsK
LSAgICAgICAgVUNoYXIgY2ggPSBzdHJbaV07CisgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBz
dHJbaV07CiAKICAgICAgICAgaWYgKGlzQnJlYWthYmxlU3BhY2U8dHJlYXROb0JyZWFrU3BhY2VB
c0JyZWFrPihjaCkgfHwgc2hvdWxkQnJlYWtBZnRlcihsYXN0TGFzdENoLCBsYXN0Q2gsIGNoKSkK
ICAgICAgICAgICAgIHJldHVybiBpOwpAQCAtMTgxLDEyICsxODAsMTggQEAgc3RhdGljIGlubGlu
ZSBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKAogCiBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9u
SWdub3JpbmdOQlNQKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGlu
dCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjxmYWxzZT4obGF6eUJy
ZWFrSXRlcmF0b3IsIHBvcyk7CisgICAgU3RyaW5nIHN0cmluZyA9IGxhenlCcmVha0l0ZXJhdG9y
LnN0cmluZygpOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb248TENoYXIsIGZhbHNlPihsYXp5QnJlYWtJdGVyYXRvciwgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgcG9zKTsKKyAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uPFVDaGFyLCBmYWxzZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiBpbnQgbmV4dEJyZWFr
YWJsZVBvc2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGF6eUJyZWFrSXRlcmF0b3IsIGlu
dCBwb3MpCiB7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbjx0cnVlPihsYXp5QnJl
YWtJdGVyYXRvciwgcG9zKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gbGF6eUJyZWFrSXRlcmF0b3Iu
c3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIG5leHRC
cmVha2FibGVQb3NpdGlvbjxMQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHBvcyk7CisgICAgcmV0dXJuIG5leHRCcmVh
a2FibGVQb3NpdGlvbjxVQ2hhciwgdHJ1ZT4obGF6eUJyZWFrSXRlcmF0b3IsIHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwb3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="177204"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>