<?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>110193</bug_id>
          
          <creation_ts>2013-02-19 01:42:28 -0800</creation_ts>
          <short_desc>OpenCL implementation of FEMerge filter.</short_desc>
          <delta_ts>2013-02-21 02:44:51 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70099</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tamas Czene">tczene</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>836128</commentid>
    <comment_count>0</comment_count>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-19 01:42:28 -0800</bug_when>
    <thetext>This patch contains the OpenCL implementation of FEMerge filter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836129</commentid>
    <comment_count>1</comment_count>
      <attachid>189025</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-19 01:44:55 -0800</bug_when>
    <thetext>Created attachment 189025
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836169</commentid>
    <comment_count>2</comment_count>
      <attachid>189025</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2013-02-19 02:49:15 -0800</bug_when>
    <thetext>Comment on attachment 189025
proposed patch

Nice work, mostly style comments:

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

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:59
&gt; +        , m_copy(0)

m_mergeCopyOperation

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:99
&gt; +    inline void copy(OpenCLHandle, IntSize, OpenCLHandle, IntRect);

applyFEMergeCopy

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:42
&gt; +    float4 destinationPixel = sourcePixel + destinationPixel * (1 - sourcePixel.w);

What is the purpose of this line? Especially as this is a copy operation? The sourcePixel should be renamed to destinationPixel, and no need for any modifications.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:48
&gt; +    int2 coord = (int2) (get_global_id(0), get_global_id(1));

destinationCoord

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:57
&gt; +
&gt; +    destinationPixel = sourcePixelA + destinationPixel * (1 - sourcePixelA.w);
&gt; +
&gt; +    destinationPixel = sourcePixelB + destinationPixel * (1 - sourcePixelB.w);

We don&apos;t need that many empty lines here.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:59
&gt; +    write_imagef(previousDestination, coord, destinationPixel);

??? You write data to the previous destination? The destination should be the target of the operation, and previousDestination should be the source. __write_only image2d_t destination

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:138
&gt; +    OpenCLHandle previousDestination = context-&gt;createOpenCLImage(absolutePaintRect().size());
&gt; +    context-&gt;fill(previousDestination, absolutePaintRect().size(), Color(0.0f, 0.0f, 0.0f, 0.0f));

OpenCLHandle previousDestination = destination;
destination = context-&gt;createOpenCLImage(absolutePaintRect().size());

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:153
&gt; +        context-&gt;applyFEMerge(destination, previousDestination, absolutePaintRect().size(), sourceA, relativeSourceRectA, sourceB, relativeSourceRectB);

This does not match to __kernel void merge. The applyFEMerge should have to same order of arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836318</commentid>
    <comment_count>3</comment_count>
      <attachid>189075</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-19 06:27:04 -0800</bug_when>
    <thetext>Created attachment 189075
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837240</commentid>
    <comment_count>4</comment_count>
      <attachid>189262</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-20 00:34:06 -0800</bug_when>
    <thetext>Created attachment 189262
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837266</commentid>
    <comment_count>5</comment_count>
      <attachid>189262</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2013-02-20 01:46:27 -0800</bug_when>
    <thetext>Comment on attachment 189262
proposed patch

Few more comments:

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

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:39
&gt; +__kernel void copy(__write_only image2d_t destination, __read_only image2d_t source, int x, int y, int width, int height)

width, height is unused argument.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:77
&gt; +inline void FilterContextOpenCL::applyFEMergeCopy(OpenCLHandle destination, IntSize destinationSize, OpenCLHandle source, IntRect relativeSourceRect)

Use references such as IntSize&amp;

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:85
&gt; +    kernel.addArgument(relativeSourceRect.width());
&gt; +    kernel.addArgument(relativeSourceRect.height());

Ditto.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:124
&gt; +        IntRect relativeSourceRect(in-&gt;absolutePaintRect());

use IntPoint when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837421</commentid>
    <comment_count>6</comment_count>
      <attachid>189307</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-20 06:34:35 -0800</bug_when>
    <thetext>Created attachment 189307
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837429</commentid>
    <comment_count>7</comment_count>
      <attachid>189307</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2013-02-20 06:48:30 -0800</bug_when>
    <thetext>Comment on attachment 189307
proposed patch

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

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:39
&gt; +const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
&gt; +__kernel void copy(__write_only image2d_t destination, __read_only image2d_t source, int x, int y)

Newline after the sampler.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:77
&gt; +inline void FilterContextOpenCL::applyFEMergeCopy(OpenCLHandle destination, IntSize destinationSize, OpenCLHandle source, IntPoint &amp;relativeSourcePoint)

The &amp; sign should be pert of the type:
IntPoint&amp; relativeSourcePoint
IntSize&amp; destinationSize

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEMerge.cpp:87
&gt; +inline void FilterContextOpenCL::applyFEMerge(OpenCLHandle destination, OpenCLHandle previousDestination, OpenCLHandle sourceA, OpenCLHandle sourceB, IntSize destinationSize, IntPoint &amp;relativeSourcePointA, IntPoint &amp;relativeSourcePointB)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838195</commentid>
    <comment_count>8</comment_count>
      <attachid>189468</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2013-02-21 00:49:28 -0800</bug_when>
    <thetext>Created attachment 189468
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838252</commentid>
    <comment_count>9</comment_count>
      <attachid>189468</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2013-02-21 02:34:05 -0800</bug_when>
    <thetext>Comment on attachment 189468
proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838260</commentid>
    <comment_count>10</comment_count>
      <attachid>189468</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 02:44:47 -0800</bug_when>
    <thetext>Comment on attachment 189468
proposed patch

Clearing flags on attachment: 189468

Committed r143578: &lt;http://trac.webkit.org/changeset/143578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838261</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 02:44:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189025</attachid>
            <date>2013-02-19 01:44:55 -0800</date>
            <delta_ts>2013-02-19 06:27:04 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11564</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDRiZTkwLi45YzdhNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMDItMTkgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRkVNZXJnZSBmaWx0ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxOTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIG9kZCBu
dW1iZXIgb2YgcGFyYW1ldGVycyB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGNvcGllZCB0byB0aGUg
ZGVzdGluYXRpb24gaW1hZ2UgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBtZXJn
ZWQgaW4gcGFpcnMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoRkVNZXJnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpGaWx0ZXJDb250ZXh0T3BlbkNM
KToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb3B5KTogVGhp
cyBpcyBhIHNpbXBsZSBjb3B5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRl
eHRPcGVuQ0w6OmFwcGx5RkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0
Zm9ybUFwcGx5T3BlbkNMKToKKwogMjAxMy0wMi0xOCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlYmFzZWxpbmUgZmFpbHVyZSBtZWRp
YSB0ZXN0cyBhZnRlciByMTQyOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxLi42ZTQyMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTQyMzYsNiArNDIzNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9PUEVOQ0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5j
bC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRl
eCAzMDIzMzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuaAppbmRleCA5YTcxYTU1Li5mYzRjNTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0Zp
bHRlckNvbnRleHRPcGVuQ0wuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogICAgICAgICAs
IG1fZmlsbFdhc0NvbXBpbGVkKGZhbHNlKQogICAgICAgICAsIG1fZmlsbFByb2dyYW0oMCkKICAg
ICAgICAgLCBtX2ZpbGwoMCkKKyAgICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQoZmFsc2UpCisg
ICAgICAgICwgbV9tZXJnZVByb2dyYW0oMCkKKyAgICAgICAgLCBtX2NvcHkoMCkKKyAgICAgICAg
LCBtX21lcmdlT3BlcmF0aW9uKDApCiAgICAgICAgICwgbV9jb2xvck1hdHJpeFdhc0NvbXBpbGVk
KGZhbHNlKQogICAgICAgICAsIG1fY29sb3JNYXRyaXhQcm9ncmFtKDApCiAgICAgICAgICwgbV9t
YXRyaXhPcGVyYXRpb24oMCkKQEAgLTkwLDcgKzk0LDEwIEBAIHB1YmxpYzoKIAogICAgIGlubGlu
ZSBib29sIGNvbXBpbGVGRUNvbG9yTWF0cml4KCk7CiAgICAgaW5saW5lIGJvb2wgY29tcGlsZUZF
VHVyYnVsZW5jZSgpOworICAgIGlubGluZSBib29sIGNvbXBpbGVGRU1lcmdlKCk7CiAKKyAgICBp
bmxpbmUgdm9pZCBjb3B5KE9wZW5DTEhhbmRsZSwgSW50U2l6ZSwgT3BlbkNMSGFuZGxlLCBJbnRS
ZWN0KTsKKyAgICBpbmxpbmUgdm9pZCBhcHBseUZFTWVyZ2UoT3BlbkNMSGFuZGxlLCBPcGVuQ0xI
YW5kbGUsIEludFNpemUsIE9wZW5DTEhhbmRsZSwgSW50UmVjdCwgT3BlbkNMSGFuZGxlLCBJbnRS
ZWN0KTsKICAgICBpbmxpbmUgdm9pZCBhcHBseUZFQ29sb3JNYXRyaXgoT3BlbkNMSGFuZGxlLCBJ
bnRTaXplLCBPcGVuQ0xIYW5kbGUsIEludFBvaW50LCBmbG9hdCosIGludCk7CiAgICAgaW5saW5l
IHZvaWQgYXBwbHlGRVR1cmJ1bGVuY2UoT3BlbkNMSGFuZGxlLCBJbnRTaXplLCBpbnQsIHZvaWQq
LCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwKICAgICAgICAgaW50KiwgaW50LCBpbnQsIGlu
dCwgaW50LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGludCwgaW50KTsKQEAgLTE4NywxMCArMTk0LDE1
IEBAIHByaXZhdGU6CiAgICAgY2xfcHJvZ3JhbSBtX2ZpbGxQcm9ncmFtOwogICAgIGNsX2tlcm5l
bCBtX2ZpbGw7CiAKKyAgICBib29sIG1fbWVyZ2VXYXNDb21waWxlZDsKKyAgICBjbF9wcm9ncmFt
IG1fbWVyZ2VQcm9ncmFtOworICAgIGNsX2tlcm5lbCBtX2NvcHk7CisgICAgY2xfa2VybmVsIG1f
bWVyZ2VPcGVyYXRpb247CisKICAgICBib29sIG1fY29sb3JNYXRyaXhXYXNDb21waWxlZDsKICAg
ICBjbF9wcm9ncmFtIG1fY29sb3JNYXRyaXhQcm9ncmFtOwogICAgIGNsX2tlcm5lbCBtX21hdHJp
eE9wZXJhdGlvbjsKLSAgICBjbF9rZXJuZWwgbV9zYXR1cmF0ZUFuZEh1ZVJvdGF0ZU9wZXJhdGlv
bjsgCisgICAgY2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247CiAgICAg
Y2xfa2VybmVsIG1fbHVtaW5hbmNlT3BlcmF0aW9uOwogCiAgICAgYm9vbCBtX3R1cmJ1bGVuY2VX
YXNDb21waWxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3OGIwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwCkBAIC0wLDAg
KzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQu
aHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRU1lcmdl
LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIG1lcmdlS2VybmVsUHJvZ3JhbSA9CitQUk9HUkFN
KAorY29uc3Qgc2FtcGxlcl90IHNhbXBsZXIgPSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0Ug
fCBDTEtfQUREUkVTU19DTEFNUCB8IENMS19GSUxURVJfTkVBUkVTVDsKK19fa2VybmVsIHZvaWQg
Y29weShfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFn
ZTJkX3Qgc291cmNlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAg
ICBmbG9hdDQgc291cmNlUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIChpbnQy
KSAoZ2V0X2dsb2JhbF9pZCgwKSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KSk7CisgICAgZmxv
YXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSBzb3VyY2VQaXhlbCArIGRlc3RpbmF0aW9uUGl4ZWwgKiAo
MSAtIHNvdXJjZVBpeGVsLncpOworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIp
IChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRpb25QaXhlbCk7
Cit9CisKK19fa2VybmVsIHZvaWQgbWVyZ2UoX19yZWFkX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0
aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlQSwgX19yZWFkX29ubHkgaW1hZ2UyZF90
IHNvdXJjZUIsIF9fd3JpdGVfb25seSBpbWFnZTJkX3QgcHJldmlvdXNEZXN0aW5hdGlvbiwgaW50
IHhBLCBpbnQgeUEsIGludCB4QiwgaW50IHlCKQoreworICAgIGludDIgY29vcmQgPSAoaW50Mikg
KGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOworICAgIGludDIgc291cmNlQ29v
cmRBID0gKGludDIpIChjb29yZC54ICsgeEEsIGNvb3JkLnkgKyB5QSk7CisgICAgaW50MiBzb3Vy
Y2VDb29yZEIgPSAoaW50MikgKGNvb3JkLnggKyB4QiwgY29vcmQueSArIHlCKTsKKyAgICBmbG9h
dDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29v
cmRBKTsKKyAgICBmbG9hdDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2Ft
cGxlciwgc291cmNlQ29vcmRCKTsKKyAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IHJlYWRf
aW1hZ2VmKGRlc3RpbmF0aW9uLCBzYW1wbGVyLCBjb29yZCk7CisKKyAgICBkZXN0aW5hdGlvblBp
eGVsID0gc291cmNlUGl4ZWxBICsgZGVzdGluYXRpb25QaXhlbCAqICgxIC0gc291cmNlUGl4ZWxB
LncpOworCisgICAgZGVzdGluYXRpb25QaXhlbCA9IHNvdXJjZVBpeGVsQiArIGRlc3RpbmF0aW9u
UGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQi53KTsKKworICAgIHdyaXRlX2ltYWdlZihwcmV2aW91
c0Rlc3RpbmF0aW9uLCBjb29yZCwgZGVzdGluYXRpb25QaXhlbCk7Cit9CispOyAvLyBFbmQgb2Yg
T3BlbkNMIGtlcm5lbHMKKworaW5saW5lIGJvb2wgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGls
ZUZFTWVyZ2UoKQoreworICAgIGlmIChtX21lcmdlV2FzQ29tcGlsZWQgfHwgaW5FcnJvcigpKQor
ICAgICAgICByZXR1cm4gIWluRXJyb3IoKTsKKworICAgIG1fbWVyZ2VXYXNDb21waWxlZCA9IHRy
dWU7CisKKyAgICBpZiAoaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VQcm9ncmFt
ID0gY29tcGlsZVByb2dyYW0obWVyZ2VLZXJuZWxQcm9ncmFtKSkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX2NvcHkgPSBrZXJu
ZWxCeU5hbWUobV9tZXJnZVByb2dyYW0sICJjb3B5IikpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9tZXJnZU9wZXJhdGlvbiA9
IGtlcm5lbEJ5TmFtZShtX21lcmdlUHJvZ3JhbSwgIm1lcmdlIikpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb3B5KE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlv
blNpemUsIE9wZW5DTEhhbmRsZSBzb3VyY2UsIEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0KQor
eworICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV9jb3B5LCBkZXN0aW5hdGlvblNpemUud2lk
dGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQo
ZGVzdGluYXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAgIGtlcm5l
bC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVJlY3QueCgpKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0LnkoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJl
bGF0aXZlU291cmNlUmVjdC53aWR0aCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRp
dmVTb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICBrZXJuZWwucnVuKCk7Cit9CisKK2lubGluZSB2
b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVNZXJnZShPcGVuQ0xIYW5kbGUgZGVzdGlu
YXRpb24sIE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0
aW9uU2l6ZSwgT3BlbkNMSGFuZGxlIHNvdXJjZUEsIEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0
QSwgT3BlbkNMSGFuZGxlIHNvdXJjZUIsIEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0QikKK3sK
KyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VPcGVyYXRpb24sIGRlc3RpbmF0aW9u
U2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUEpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2VCKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQo
cHJldmlvdXNEZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291
cmNlUmVjdEEueCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0
QS55KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVJlY3RCLngoKSk7
CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUmVjdEIueSgpKTsKKyAgICBr
ZXJuZWwucnVuKCk7Cit9CisKK2Jvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7
CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6
OmNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29udGV4dC0+Y29tcGlsZUZFTWVyZ2UoKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBu
dW1iZXJPZkVmZmVjdElucHV0cygpOworICAgIEFTU0VSVChzaXplID4gMCk7CisKKyAgICBPcGVu
Q0xIYW5kbGUgZGVzdGluYXRpb24gPSBjb250ZXh0LT5jcmVhdGVPcGVuQ0xJbWFnZShhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgT3BlbkNMSGFuZGxlIHNvdXJjZUEgPSAwOworICAg
IE9wZW5DTEhhbmRsZSBzb3VyY2VCID0gMDsKKyAgICBGaWx0ZXJFZmZlY3QqIGluOworCisgICAg
aW50IGkgPSAwOworCisgICAgaWYgKHNpemUgJiAxKSB7CisgICAgICAgIGluID0gaW5wdXRFZmZl
Y3QoaSsrKTsKKyAgICAgICAgc291cmNlQSA9IGluLT5vcGVuQ0xJbWFnZSgpOworICAgICAgICBJ
bnRSZWN0IHJlbGF0aXZlU291cmNlUmVjdChpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIHJlbGF0aXZlU291cmNlUmVjdC5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVs
YXRpdmVTb3VyY2VSZWN0LngoKSk7CisgICAgICAgIHJlbGF0aXZlU291cmNlUmVjdC5zZXRZKGFi
c29sdXRlUGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VSZWN0LnkoKSk7CisKKyAgICAg
ICAgY29udGV4dC0+Y29weShkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCks
IHNvdXJjZUEsIHJlbGF0aXZlU291cmNlUmVjdCk7CisgICAgICAgIGlmIChzaXplID09IDEpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29udGV4dC0+Zmls
bChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIENvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIDAuMGYpKTsKKworICAgIE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3RpbmF0aW9u
ID0gY29udGV4dC0+Y3JlYXRlT3BlbkNMSW1hZ2UoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkp
OworICAgIGNvbnRleHQtPmZpbGwocHJldmlvdXNEZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCksIENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpKTsKKworICAgIHdoaWxl
IChpIDwgc2l6ZSkgeworICAgICAgICBpbiA9IGlucHV0RWZmZWN0KGkrKyk7CisgICAgICAgIHNv
dXJjZUEgPSBpbi0+b3BlbkNMSW1hZ2UoKTsKKyAgICAgICAgSW50UmVjdCByZWxhdGl2ZVNvdXJj
ZVJlY3RBKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VS
ZWN0QS5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VSZWN0QS54
KCkpOworICAgICAgICByZWxhdGl2ZVNvdXJjZVJlY3RBLnNldFkoYWJzb2x1dGVQYWludFJlY3Qo
KS55KCkgLSByZWxhdGl2ZVNvdXJjZVJlY3RBLnkoKSk7CisKKyAgICAgICAgaW4gPSBpbnB1dEVm
ZmVjdChpKyspOworICAgICAgICBzb3VyY2VCID0gaW4tPm9wZW5DTEltYWdlKCk7CisgICAgICAg
IEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0Qihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Cisg
ICAgICAgIHJlbGF0aXZlU291cmNlUmVjdEIuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAt
IHJlbGF0aXZlU291cmNlUmVjdEIueCgpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0Qi5z
ZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VSZWN0Qi55KCkpOwor
CisgICAgICAgIGNvbnRleHQtPmFwcGx5RkVNZXJnZShkZXN0aW5hdGlvbiwgcHJldmlvdXNEZXN0
aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZUEsIHJlbGF0aXZlU291
cmNlUmVjdEEsIHNvdXJjZUIsIHJlbGF0aXZlU291cmNlUmVjdEIpOworCisgICAgICAgIE9wZW5D
TEhhbmRsZSB0ZW1wID0gZGVzdGluYXRpb247CisgICAgICAgIGRlc3RpbmF0aW9uID0gcHJldmlv
dXNEZXN0aW5hdGlvbjsKKyAgICAgICAgcHJldmlvdXNEZXN0aW5hdGlvbiA9IHRlbXA7CisgICAg
fQorICAgIHNldE9wZW5DTEltYWdlKGRlc3RpbmF0aW9uKTsKKyAgICBwcmV2aW91c0Rlc3RpbmF0
aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQo=
</data>
<flag name="review"
          id="209304"
          type_id="1"
          status="-"
          setter="zherczeg"
    />
    <flag name="commit-queue"
          id="209305"
          type_id="3"
          status="-"
          setter="zherczeg"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189075</attachid>
            <date>2013-02-19 06:27:04 -0800</date>
            <delta_ts>2013-02-20 00:34:06 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11620</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDRiZTkwLi45YzdhNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMDItMTkgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRkVNZXJnZSBmaWx0ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxOTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIG9kZCBu
dW1iZXIgb2YgcGFyYW1ldGVycyB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGNvcGllZCB0byB0aGUg
ZGVzdGluYXRpb24gaW1hZ2UgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBtZXJn
ZWQgaW4gcGFpcnMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoRkVNZXJnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpGaWx0ZXJDb250ZXh0T3BlbkNM
KToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb3B5KTogVGhp
cyBpcyBhIHNpbXBsZSBjb3B5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRl
eHRPcGVuQ0w6OmFwcGx5RkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0
Zm9ybUFwcGx5T3BlbkNMKToKKwogMjAxMy0wMi0xOCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlYmFzZWxpbmUgZmFpbHVyZSBtZWRp
YSB0ZXN0cyBhZnRlciByMTQyOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxLi42ZTQyMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTQyMzYsNiArNDIzNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9PUEVOQ0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5j
bC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRl
eCAzMDIzMzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuaAppbmRleCA5YTcxYTU1Li5kNWIzOWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0Zp
bHRlckNvbnRleHRPcGVuQ0wuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogICAgICAgICAs
IG1fZmlsbFdhc0NvbXBpbGVkKGZhbHNlKQogICAgICAgICAsIG1fZmlsbFByb2dyYW0oMCkKICAg
ICAgICAgLCBtX2ZpbGwoMCkKKyAgICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQoZmFsc2UpCisg
ICAgICAgICwgbV9tZXJnZVByb2dyYW0oMCkKKyAgICAgICAgLCBtX21lcmdlQ29weU9wZXJhdGlv
bigwKQorICAgICAgICAsIG1fbWVyZ2VPcGVyYXRpb24oMCkKICAgICAgICAgLCBtX2NvbG9yTWF0
cml4V2FzQ29tcGlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb2xvck1hdHJpeFByb2dyYW0oMCkK
ICAgICAgICAgLCBtX21hdHJpeE9wZXJhdGlvbigwKQpAQCAtOTAsNyArOTQsMTAgQEAgcHVibGlj
OgogCiAgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFQ29sb3JNYXRyaXgoKTsKICAgICBpbmxpbmUg
Ym9vbCBjb21waWxlRkVUdXJidWxlbmNlKCk7CisgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFTWVy
Z2UoKTsKIAorICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZUNvcHkoT3BlbkNMSGFuZGxlLCBJ
bnRTaXplLCBPcGVuQ0xIYW5kbGUsIEludFJlY3QpOworICAgIGlubGluZSB2b2lkIGFwcGx5RkVN
ZXJnZShPcGVuQ0xIYW5kbGUsIE9wZW5DTEhhbmRsZSwgT3BlbkNMSGFuZGxlLCBPcGVuQ0xIYW5k
bGUsIEludFNpemUsIEludFJlY3QsIEludFJlY3QpOwogICAgIGlubGluZSB2b2lkIGFwcGx5RkVD
b2xvck1hdHJpeChPcGVuQ0xIYW5kbGUsIEludFNpemUsIE9wZW5DTEhhbmRsZSwgSW50UG9pbnQs
IGZsb2F0KiwgaW50KTsKICAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xI
YW5kbGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAog
ICAgICAgICBpbnQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgaW50
LCBpbnQpOwpAQCAtMTg3LDEwICsxOTQsMTUgQEAgcHJpdmF0ZToKICAgICBjbF9wcm9ncmFtIG1f
ZmlsbFByb2dyYW07CiAgICAgY2xfa2VybmVsIG1fZmlsbDsKIAorICAgIGJvb2wgbV9tZXJnZVdh
c0NvbXBpbGVkOworICAgIGNsX3Byb2dyYW0gbV9tZXJnZVByb2dyYW07CisgICAgY2xfa2VybmVs
IG1fbWVyZ2VDb3B5T3BlcmF0aW9uOworICAgIGNsX2tlcm5lbCBtX21lcmdlT3BlcmF0aW9uOwor
CiAgICAgYm9vbCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQ7CiAgICAgY2xfcHJvZ3JhbSBtX2Nv
bG9yTWF0cml4UHJvZ3JhbTsKICAgICBjbF9rZXJuZWwgbV9tYXRyaXhPcGVyYXRpb247Ci0gICAg
Y2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247IAorICAgIGNsX2tlcm5l
bCBtX3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwogICAgIGNsX2tlcm5lbCBtX2x1bWlu
YW5jZU9wZXJhdGlvbjsKIAogICAgIGJvb2wgbV90dXJidWxlbmNlV2FzQ29tcGlsZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5j
bC9PcGVuQ0xGRU1lcmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
ZDRjMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEzIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKEZJTFRF
UlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVkZSAi
RmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBtZXJnZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTSgKK2NvbnN0IHNhbXBsZXJf
dCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xB
TVAgfCBDTEtfRklMVEVSX05FQVJFU1Q7CitfX2tlcm5lbCB2b2lkIGNvcHkoX193cml0ZV9vbmx5
IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwgaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgZmxvYXQ0IGRlc3RpbmF0
aW9uUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIChpbnQyKSAoZ2V0X2dsb2Jh
bF9pZCgwKSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KSk7CisgICAgd3JpdGVfaW1hZ2VmKGRl
c3RpbmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBk
ZXN0aW5hdGlvblBpeGVsKTsKK30KKworX19rZXJuZWwgdm9pZCBtZXJnZShfX3JlYWRfb25seSBp
bWFnZTJkX3QgcHJldmlvdXNEZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJj
ZUEsIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VCLCBfX3dyaXRlX29ubHkgaW1hZ2UyZF90
IGRlc3RpbmF0aW9uLCBpbnQgeEEsIGludCB5QSwgaW50IHhCLCBpbnQgeUIpCit7CisgICAgaW50
MiBkZXN0aW5hdGlvbkNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFs
X2lkKDEpKTsKKyAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZGVzdGluYXRpb25Db29y
ZC54ICsgeEEsIGRlc3RpbmF0aW9uQ29vcmQueSArIHlBKTsKKyAgICBpbnQyIHNvdXJjZUNvb3Jk
QiA9IChpbnQyKSAoZGVzdGluYXRpb25Db29yZC54ICsgeEIsIGRlc3RpbmF0aW9uQ29vcmQueSAr
IHlCKTsKKyAgICBmbG9hdDQgc291cmNlUGl4ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2Ft
cGxlciwgc291cmNlQ29vcmRBKTsKKyAgICBmbG9hdDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFn
ZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29vcmRCKTsKKyAgICBmbG9hdDQgZGVzdGluYXRp
b25QaXhlbCA9IHJlYWRfaW1hZ2VmKHByZXZpb3VzRGVzdGluYXRpb24sIHNhbXBsZXIsIGRlc3Rp
bmF0aW9uQ29vcmQpOworCisgICAgZGVzdGluYXRpb25QaXhlbCA9IHNvdXJjZVBpeGVsQSArIGRl
c3RpbmF0aW9uUGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQS53KTsKKyAgICBkZXN0aW5hdGlvblBp
eGVsID0gc291cmNlUGl4ZWxCICsgZGVzdGluYXRpb25QaXhlbCAqICgxIC0gc291cmNlUGl4ZWxC
LncpOworCisgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvb3JkLCBk
ZXN0aW5hdGlvblBpeGVsKTsKK30KKyk7IC8vIEVuZCBvZiBPcGVuQ0wga2VybmVscworCitpbmxp
bmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVNZXJnZSgpCit7CisgICAgaWYg
KG1fbWVyZ2VXYXNDb21waWxlZCB8fCBpbkVycm9yKCkpCisgICAgICAgIHJldHVybiAhaW5FcnJv
cigpOworCisgICAgbV9tZXJnZVdhc0NvbXBpbGVkID0gdHJ1ZTsKKworICAgIGlmIChpc1Jlc291
cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9tZXJnZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShtZXJn
ZUtlcm5lbFByb2dyYW0pKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNSZXNv
dXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VDb3B5T3BlcmF0aW9uID0ga2VybmVsQnlOYW1l
KG1fbWVyZ2VQcm9ncmFtLCAiY29weSIpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VPcGVyYXRpb24gPSBrZXJuZWxC
eU5hbWUobV9tZXJnZVByb2dyYW0sICJtZXJnZSIpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6
YXBwbHlGRU1lcmdlQ29weShPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIEludFNpemUgZGVzdGlu
YXRpb25TaXplLCBPcGVuQ0xIYW5kbGUgc291cmNlLCBJbnRSZWN0IHJlbGF0aXZlU291cmNlUmVj
dCkKK3sKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uLCBk
ZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKyAgICBr
ZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChz
b3VyY2UpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVJlY3QueCgpKTsK
KyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0LnkoKSk7CisgICAga2Vy
bmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUmVjdC53aWR0aCgpKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICBrZXJuZWwucnVu
KCk7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVNZXJnZShP
cGVuQ0xIYW5kbGUgcHJldmlvdXNEZXN0aW5hdGlvbiwgT3BlbkNMSGFuZGxlIHNvdXJjZUEsIE9w
ZW5DTEhhbmRsZSBzb3VyY2VCLCBPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIEludFNpemUgZGVz
dGluYXRpb25TaXplLCBJbnRSZWN0IHJlbGF0aXZlU291cmNlUmVjdEEsIEludFJlY3QgcmVsYXRp
dmVTb3VyY2VSZWN0QikKK3sKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VPcGVy
YXRpb24sIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkp
OworICAgIGtlcm5lbC5hZGRBcmd1bWVudChwcmV2aW91c0Rlc3RpbmF0aW9uKTsKKyAgICBrZXJu
ZWwuYWRkQXJndW1lbnQoc291cmNlQSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUIp
OworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KHJlbGF0aXZlU291cmNlUmVjdEEueCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQo
cmVsYXRpdmVTb3VyY2VSZWN0QS55KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2
ZVNvdXJjZVJlY3RCLngoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNl
UmVjdEIueSgpKTsKKyAgICBrZXJuZWwucnVuKCk7Cit9CisKK2Jvb2wgRkVNZXJnZTo6cGxhdGZv
cm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZp
bHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKK3ByaW50ZigiMlxuIik7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb250ZXh0LT5jb21waWxlRkVN
ZXJnZSgpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Cisg
ICAgQVNTRVJUKHNpemUgPiAwKTsKKworICAgIE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiA9IGNv
bnRleHQtPmNyZWF0ZU9wZW5DTEltYWdlKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAg
ICBPcGVuQ0xIYW5kbGUgc291cmNlQSA9IDA7CisgICAgT3BlbkNMSGFuZGxlIHNvdXJjZUIgPSAw
OworICAgIEZpbHRlckVmZmVjdCogaW47CisKKyAgICBpbnQgaSA9IDA7CisKKyAgICBpZiAoc2l6
ZSAmIDEpIHsKKyAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOworICAgICAgICBzb3VyY2VB
ID0gaW4tPm9wZW5DTEltYWdlKCk7CisgICAgICAgIEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0LnNl
dFgoYWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZVJlY3QueCgpKTsKKyAg
ICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0LnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSBy
ZWxhdGl2ZVNvdXJjZVJlY3QueSgpKTsKKworICAgICAgICBjb250ZXh0LT5hcHBseUZFTWVyZ2VD
b3B5KGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlQSwgcmVs
YXRpdmVTb3VyY2VSZWN0KTsKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgeworICAgICAgICAgICAg
c2V0T3BlbkNMSW1hZ2UoZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY29udGV4dC0+ZmlsbChkZXN0aW5hdGlvbiwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYp
KTsKKworICAgIE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3RpbmF0aW9uID0gY29udGV4dC0+Y3Jl
YXRlT3BlbkNMSW1hZ2UoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworCisgICAgd2hpbGUg
KGkgPCBzaXplKSB7CisgICAgICAgIE9wZW5DTEhhbmRsZSB0ZW1wID0gcHJldmlvdXNEZXN0aW5h
dGlvbjsKKyAgICAgICAgcHJldmlvdXNEZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOworICAgICAg
ICBkZXN0aW5hdGlvbiA9IHRlbXA7CisKKyAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOwor
ICAgICAgICBzb3VyY2VBID0gaW4tPm9wZW5DTEltYWdlKCk7CisgICAgICAgIEludFJlY3QgcmVs
YXRpdmVTb3VyY2VSZWN0QShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIHJlbGF0
aXZlU291cmNlUmVjdEEuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291
cmNlUmVjdEEueCgpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0QS5zZXRZKGFic29sdXRl
UGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VSZWN0QS55KCkpOworCisgICAgICAgIGlu
ID0gaW5wdXRFZmZlY3QoaSsrKTsKKyAgICAgICAgc291cmNlQiA9IGluLT5vcGVuQ0xJbWFnZSgp
OworICAgICAgICBJbnRSZWN0IHJlbGF0aXZlU291cmNlUmVjdEIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgICAgICByZWxhdGl2ZVNvdXJjZVJlY3RCLnNldFgoYWJzb2x1dGVQYWludFJl
Y3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZVJlY3RCLngoKSk7CisgICAgICAgIHJlbGF0aXZlU291
cmNlUmVjdEIuc2V0WShhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNlUmVj
dEIueSgpKTsKKworICAgICAgICBjb250ZXh0LT5hcHBseUZFTWVyZ2UocHJldmlvdXNEZXN0aW5h
dGlvbiwgc291cmNlQSwgc291cmNlQiwgZGVzdGluYXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpLCByZWxhdGl2ZVNvdXJjZVJlY3RBLCByZWxhdGl2ZVNvdXJjZVJlY3RCKTsKKyAgICB9
CisgICAgc2V0T3BlbkNMSW1hZ2UoZGVzdGluYXRpb24pOworICAgIHByZXZpb3VzRGVzdGluYXRp
b24uY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189262</attachid>
            <date>2013-02-20 00:34:06 -0800</date>
            <delta_ts>2013-02-20 06:34:35 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11520</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDRiZTkwLi45YzdhNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMDItMTkgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRkVNZXJnZSBmaWx0ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxOTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIG9kZCBu
dW1iZXIgb2YgcGFyYW1ldGVycyB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGNvcGllZCB0byB0aGUg
ZGVzdGluYXRpb24gaW1hZ2UgYW5kIHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBtZXJn
ZWQgaW4gcGFpcnMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoRkVNZXJnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpGaWx0ZXJDb250ZXh0T3BlbkNM
KToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb3B5KTogVGhp
cyBpcyBhIHNpbXBsZSBjb3B5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRl
eHRPcGVuQ0w6OmFwcGx5RkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0
Zm9ybUFwcGx5T3BlbkNMKToKKwogMjAxMy0wMi0xOCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlYmFzZWxpbmUgZmFpbHVyZSBtZWRp
YSB0ZXN0cyBhZnRlciByMTQyOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxLi42ZTQyMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTQyMzYsNiArNDIzNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9PUEVOQ0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5j
bC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRl
eCAzMDIzMzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuaAppbmRleCA5YTcxYTU1Li5kNWIzOWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0Zp
bHRlckNvbnRleHRPcGVuQ0wuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogICAgICAgICAs
IG1fZmlsbFdhc0NvbXBpbGVkKGZhbHNlKQogICAgICAgICAsIG1fZmlsbFByb2dyYW0oMCkKICAg
ICAgICAgLCBtX2ZpbGwoMCkKKyAgICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQoZmFsc2UpCisg
ICAgICAgICwgbV9tZXJnZVByb2dyYW0oMCkKKyAgICAgICAgLCBtX21lcmdlQ29weU9wZXJhdGlv
bigwKQorICAgICAgICAsIG1fbWVyZ2VPcGVyYXRpb24oMCkKICAgICAgICAgLCBtX2NvbG9yTWF0
cml4V2FzQ29tcGlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb2xvck1hdHJpeFByb2dyYW0oMCkK
ICAgICAgICAgLCBtX21hdHJpeE9wZXJhdGlvbigwKQpAQCAtOTAsNyArOTQsMTAgQEAgcHVibGlj
OgogCiAgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFQ29sb3JNYXRyaXgoKTsKICAgICBpbmxpbmUg
Ym9vbCBjb21waWxlRkVUdXJidWxlbmNlKCk7CisgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFTWVy
Z2UoKTsKIAorICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZUNvcHkoT3BlbkNMSGFuZGxlLCBJ
bnRTaXplLCBPcGVuQ0xIYW5kbGUsIEludFJlY3QpOworICAgIGlubGluZSB2b2lkIGFwcGx5RkVN
ZXJnZShPcGVuQ0xIYW5kbGUsIE9wZW5DTEhhbmRsZSwgT3BlbkNMSGFuZGxlLCBPcGVuQ0xIYW5k
bGUsIEludFNpemUsIEludFJlY3QsIEludFJlY3QpOwogICAgIGlubGluZSB2b2lkIGFwcGx5RkVD
b2xvck1hdHJpeChPcGVuQ0xIYW5kbGUsIEludFNpemUsIE9wZW5DTEhhbmRsZSwgSW50UG9pbnQs
IGZsb2F0KiwgaW50KTsKICAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xI
YW5kbGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAog
ICAgICAgICBpbnQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgaW50
LCBpbnQpOwpAQCAtMTg3LDEwICsxOTQsMTUgQEAgcHJpdmF0ZToKICAgICBjbF9wcm9ncmFtIG1f
ZmlsbFByb2dyYW07CiAgICAgY2xfa2VybmVsIG1fZmlsbDsKIAorICAgIGJvb2wgbV9tZXJnZVdh
c0NvbXBpbGVkOworICAgIGNsX3Byb2dyYW0gbV9tZXJnZVByb2dyYW07CisgICAgY2xfa2VybmVs
IG1fbWVyZ2VDb3B5T3BlcmF0aW9uOworICAgIGNsX2tlcm5lbCBtX21lcmdlT3BlcmF0aW9uOwor
CiAgICAgYm9vbCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQ7CiAgICAgY2xfcHJvZ3JhbSBtX2Nv
bG9yTWF0cml4UHJvZ3JhbTsKICAgICBjbF9rZXJuZWwgbV9tYXRyaXhPcGVyYXRpb247Ci0gICAg
Y2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247IAorICAgIGNsX2tlcm5l
bCBtX3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwogICAgIGNsX2tlcm5lbCBtX2x1bWlu
YW5jZU9wZXJhdGlvbjsKIAogICAgIGJvb2wgbV90dXJidWxlbmNlV2FzQ29tcGlsZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5j
bC9PcGVuQ0xGRU1lcmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
ZTUyMjJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEzIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKEZJTFRF
UlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVkZSAi
RmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBtZXJnZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTSgKK2NvbnN0IHNhbXBsZXJf
dCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xB
TVAgfCBDTEtfRklMVEVSX05FQVJFU1Q7CitfX2tlcm5lbCB2b2lkIGNvcHkoX193cml0ZV9vbmx5
IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwgaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgZmxvYXQ0IGRlc3RpbmF0
aW9uUGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIChpbnQyKSAoZ2V0X2dsb2Jh
bF9pZCgwKSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KSk7CisgICAgd3JpdGVfaW1hZ2VmKGRl
c3RpbmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBk
ZXN0aW5hdGlvblBpeGVsKTsKK30KKworX19rZXJuZWwgdm9pZCBtZXJnZShfX3dyaXRlX29ubHkg
aW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3QgcHJldmlvdXNEZXN0
aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsIF9fcmVhZF9vbmx5IGltYWdl
MmRfdCBzb3VyY2VCLCBpbnQgeEEsIGludCB5QSwgaW50IHhCLCBpbnQgeUIpCit7CisgICAgaW50
MiBkZXN0aW5hdGlvbkNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFs
X2lkKDEpKTsKKyAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZGVzdGluYXRpb25Db29y
ZC54ICsgeEEsIGRlc3RpbmF0aW9uQ29vcmQueSArIHlBKTsKKyAgICBpbnQyIHNvdXJjZUNvb3Jk
QiA9IChpbnQyKSAoZGVzdGluYXRpb25Db29yZC54ICsgeEIsIGRlc3RpbmF0aW9uQ29vcmQueSAr
IHlCKTsKKyAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IHJlYWRfaW1hZ2VmKHByZXZpb3Vz
RGVzdGluYXRpb24sIHNhbXBsZXIsIGRlc3RpbmF0aW9uQ29vcmQpOworICAgIGZsb2F0NCBzb3Vy
Y2VQaXhlbEEgPSByZWFkX2ltYWdlZihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOwor
ICAgIGZsb2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBz
b3VyY2VDb29yZEIpOworCisgICAgZGVzdGluYXRpb25QaXhlbCA9IHNvdXJjZVBpeGVsQSArIGRl
c3RpbmF0aW9uUGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQS53KTsKKyAgICBkZXN0aW5hdGlvblBp
eGVsID0gc291cmNlUGl4ZWxCICsgZGVzdGluYXRpb25QaXhlbCAqICgxIC0gc291cmNlUGl4ZWxC
LncpOworCisgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvb3JkLCBk
ZXN0aW5hdGlvblBpeGVsKTsKK30KKyk7IC8vIEVuZCBvZiBPcGVuQ0wga2VybmVscworCitpbmxp
bmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVNZXJnZSgpCit7CisgICAgaWYg
KG1fbWVyZ2VXYXNDb21waWxlZCB8fCBpbkVycm9yKCkpCisgICAgICAgIHJldHVybiAhaW5FcnJv
cigpOworCisgICAgbV9tZXJnZVdhc0NvbXBpbGVkID0gdHJ1ZTsKKworICAgIGlmIChpc1Jlc291
cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9tZXJnZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShtZXJn
ZUtlcm5lbFByb2dyYW0pKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNSZXNv
dXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VDb3B5T3BlcmF0aW9uID0ga2VybmVsQnlOYW1l
KG1fbWVyZ2VQcm9ncmFtLCAiY29weSIpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VPcGVyYXRpb24gPSBrZXJuZWxC
eU5hbWUobV9tZXJnZVByb2dyYW0sICJtZXJnZSIpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6
YXBwbHlGRU1lcmdlQ29weShPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIEludFNpemUgZGVzdGlu
YXRpb25TaXplLCBPcGVuQ0xIYW5kbGUgc291cmNlLCBJbnRSZWN0IHJlbGF0aXZlU291cmNlUmVj
dCkKK3sKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uLCBk
ZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKyAgICBr
ZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChz
b3VyY2UpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVJlY3QueCgpKTsK
KyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0LnkoKSk7CisgICAga2Vy
bmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUmVjdC53aWR0aCgpKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICBrZXJuZWwucnVu
KCk7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVNZXJnZShP
cGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3RpbmF0aW9u
LCBPcGVuQ0xIYW5kbGUgc291cmNlQSwgT3BlbkNMSGFuZGxlIHNvdXJjZUIsIEludFNpemUgZGVz
dGluYXRpb25TaXplLCBJbnRSZWN0IHJlbGF0aXZlU291cmNlUmVjdEEsIEludFJlY3QgcmVsYXRp
dmVTb3VyY2VSZWN0QikKK3sKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VPcGVy
YXRpb24sIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkp
OworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KHByZXZpb3VzRGVzdGluYXRpb24pOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3Vy
Y2VBKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNlQik7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KHJlbGF0aXZlU291cmNlUmVjdEEueCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQo
cmVsYXRpdmVTb3VyY2VSZWN0QS55KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2
ZVNvdXJjZVJlY3RCLngoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNl
UmVjdEIueSgpKTsKKyAgICBrZXJuZWwucnVuKCk7Cit9CisKK2Jvb2wgRkVNZXJnZTo6cGxhdGZv
cm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZp
bHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmNvbXBpbGVGRU1lcmdlKCk7CisKKyAgICB1
bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBBU1NFUlQoc2l6ZSA+
IDApOworCisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VS
ZXN1bHQoKTsKKyAgICBPcGVuQ0xIYW5kbGUgc291cmNlQSA9IDA7CisgICAgT3BlbkNMSGFuZGxl
IHNvdXJjZUIgPSAwOworICAgIEZpbHRlckVmZmVjdCogaW47CisKKyAgICBpbnQgaSA9IDA7CisK
KyAgICBpZiAoc2l6ZSAmIDEpIHsKKyAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOworICAg
ICAgICBzb3VyY2VBID0gaW4tPm9wZW5DTEltYWdlKCk7CisgICAgICAgIEludFJlY3QgcmVsYXRp
dmVTb3VyY2VSZWN0KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgcmVsYXRpdmVT
b3VyY2VSZWN0LnNldFgoYWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZVJl
Y3QueCgpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0LnNldFkoYWJzb2x1dGVQYWludFJl
Y3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZVJlY3QueSgpKTsKKworICAgICAgICBjb250ZXh0LT5h
cHBseUZFTWVyZ2VDb3B5KGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwg
c291cmNlQSwgcmVsYXRpdmVTb3VyY2VSZWN0KTsKKyAgICAgICAgaWYgKHNpemUgPT0gMSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBjb250ZXh0LT5maWxs
KGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC4wZikpOworCisgICAgT3BlbkNMSGFuZGxlIHByZXZpb3VzRGVzdGluYXRpb24g
PSBjb250ZXh0LT5jcmVhdGVPcGVuQ0xJbWFnZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7
CisKKyAgICB3aGlsZSAoaSA8IHNpemUpIHsKKyAgICAgICAgT3BlbkNMSGFuZGxlIHRlbXAgPSBw
cmV2aW91c0Rlc3RpbmF0aW9uOworICAgICAgICBwcmV2aW91c0Rlc3RpbmF0aW9uID0gZGVzdGlu
YXRpb247CisgICAgICAgIGRlc3RpbmF0aW9uID0gdGVtcDsKKworICAgICAgICBpbiA9IGlucHV0
RWZmZWN0KGkrKyk7CisgICAgICAgIHNvdXJjZUEgPSBpbi0+b3BlbkNMSW1hZ2UoKTsKKyAgICAg
ICAgSW50UmVjdCByZWxhdGl2ZVNvdXJjZVJlY3RBKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
KyAgICAgICAgcmVsYXRpdmVTb3VyY2VSZWN0QS5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgp
IC0gcmVsYXRpdmVTb3VyY2VSZWN0QS54KCkpOworICAgICAgICByZWxhdGl2ZVNvdXJjZVJlY3RB
LnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZVJlY3RBLnkoKSk7
CisKKyAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOworICAgICAgICBzb3VyY2VCID0gaW4t
Pm9wZW5DTEltYWdlKCk7CisgICAgICAgIEludFJlY3QgcmVsYXRpdmVTb3VyY2VSZWN0Qihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIHJlbGF0aXZlU291cmNlUmVjdEIuc2V0WChh
YnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlUmVjdEIueCgpKTsKKyAgICAg
ICAgcmVsYXRpdmVTb3VyY2VSZWN0Qi5zZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0gcmVs
YXRpdmVTb3VyY2VSZWN0Qi55KCkpOworCisgICAgICAgIGNvbnRleHQtPmFwcGx5RkVNZXJnZShk
ZXN0aW5hdGlvbiwgcHJldmlvdXNEZXN0aW5hdGlvbiwgc291cmNlQSwgc291cmNlQiwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCksIHJlbGF0aXZlU291cmNlUmVjdEEsIHJlbGF0aXZlU291cmNl
UmVjdEIpOworICAgIH0KKyAgICBzZXRPcGVuQ0xJbWFnZShkZXN0aW5hdGlvbik7CisgICAgcHJl
dmlvdXNEZXN0aW5hdGlvbi5jbGVhcigpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9Q
RU5DTCkK
</data>
<flag name="review"
          id="209609"
          type_id="1"
          status="-"
          setter="zherczeg"
    />
    <flag name="commit-queue"
          id="209610"
          type_id="3"
          status="-"
          setter="zherczeg"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189307</attachid>
            <date>2013-02-20 06:34:35 -0800</date>
            <delta_ts>2013-02-21 00:49:28 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11474</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDRiZTkwLi4zYjkxOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTMtMDItMTkgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRkVNZXJnZSBmaWx0ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxOTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIG9kZCBu
dW1iZXIgb2YgcGFyYW1ldGVycyB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGNvcGllZCB0byB0aGUg
ZGVzdGluYXRpb24gaW1hZ2UgYW5kCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJz
IGFyZSBtZXJnZWQgaW4gcGFpcnMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoRkVNZXJnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpGaWx0ZXJDb250
ZXh0T3BlbkNMKToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b21waWxlRkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b3B5KTogVGhpcyBpcyBhIHNpbXBsZSBjb3B5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKToKKwogMjAxMy0wMi0xOCAgR3l1eW91bmcgS2ltICA8
Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlYmFzZWxpbmUgZmFp
bHVyZSBtZWRpYSB0ZXN0cyBhZnRlciByMTQyOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxLi42
ZTQyMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQyMzYsNiArNDIzNiw3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9PUEVOQ0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuaAppbmRleCAzMDIzMzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVO
Q0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJD
b250ZXh0T3BlbkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaAppbmRleCA5YTcxYTU1Li4zOGRlNzU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNv
bnRleHRPcGVuQ0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgog
ICAgICAgICAsIG1fZmlsbFdhc0NvbXBpbGVkKGZhbHNlKQogICAgICAgICAsIG1fZmlsbFByb2dy
YW0oMCkKICAgICAgICAgLCBtX2ZpbGwoMCkKKyAgICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQo
ZmFsc2UpCisgICAgICAgICwgbV9tZXJnZVByb2dyYW0oMCkKKyAgICAgICAgLCBtX21lcmdlQ29w
eU9wZXJhdGlvbigwKQorICAgICAgICAsIG1fbWVyZ2VPcGVyYXRpb24oMCkKICAgICAgICAgLCBt
X2NvbG9yTWF0cml4V2FzQ29tcGlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb2xvck1hdHJpeFBy
b2dyYW0oMCkKICAgICAgICAgLCBtX21hdHJpeE9wZXJhdGlvbigwKQpAQCAtOTAsNyArOTQsMTAg
QEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFQ29sb3JNYXRyaXgoKTsKICAg
ICBpbmxpbmUgYm9vbCBjb21waWxlRkVUdXJidWxlbmNlKCk7CisgICAgaW5saW5lIGJvb2wgY29t
cGlsZUZFTWVyZ2UoKTsKIAorICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZUNvcHkoT3BlbkNM
SGFuZGxlLCBJbnRTaXplLCBPcGVuQ0xIYW5kbGUsIEludFBvaW50Jik7CisgICAgaW5saW5lIHZv
aWQgYXBwbHlGRU1lcmdlKE9wZW5DTEhhbmRsZSwgT3BlbkNMSGFuZGxlLCBPcGVuQ0xIYW5kbGUs
IE9wZW5DTEhhbmRsZSwgSW50U2l6ZSwgSW50UG9pbnQmLCBJbnRQb2ludCYpOwogICAgIGlubGlu
ZSB2b2lkIGFwcGx5RkVDb2xvck1hdHJpeChPcGVuQ0xIYW5kbGUsIEludFNpemUsIE9wZW5DTEhh
bmRsZSwgSW50UG9pbnQsIGZsb2F0KiwgaW50KTsKICAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVy
YnVsZW5jZShPcGVuQ0xIYW5kbGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwg
dm9pZCosIHZvaWQqLAogICAgICAgICBpbnQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBm
bG9hdCwgYm9vbCwgaW50LCBpbnQpOwpAQCAtMTg3LDEwICsxOTQsMTUgQEAgcHJpdmF0ZToKICAg
ICBjbF9wcm9ncmFtIG1fZmlsbFByb2dyYW07CiAgICAgY2xfa2VybmVsIG1fZmlsbDsKIAorICAg
IGJvb2wgbV9tZXJnZVdhc0NvbXBpbGVkOworICAgIGNsX3Byb2dyYW0gbV9tZXJnZVByb2dyYW07
CisgICAgY2xfa2VybmVsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uOworICAgIGNsX2tlcm5lbCBtX21l
cmdlT3BlcmF0aW9uOworCiAgICAgYm9vbCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQ7CiAgICAg
Y2xfcHJvZ3JhbSBtX2NvbG9yTWF0cml4UHJvZ3JhbTsKICAgICBjbF9rZXJuZWwgbV9tYXRyaXhP
cGVyYXRpb247Ci0gICAgY2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247
IAorICAgIGNsX2tlcm5lbCBtX3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwogICAgIGNs
X2tlcm5lbCBtX2x1bWluYW5jZU9wZXJhdGlvbjsKIAogICAgIGJvb2wgbV90dXJidWxlbmNlV2Fz
Q29tcGlsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zMTRhNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcApAQCAtMCwwICsx
LDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1
PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRkVNZXJnZS5o
IgorCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBtZXJnZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTSgK
K2NvbnN0IHNhbXBsZXJfdCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIHwg
Q0xLX0FERFJFU1NfQ0xBTVAgfCBDTEtfRklMVEVSX05FQVJFU1Q7CitfX2tlcm5lbCB2b2lkIGNv
cHkoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2Uy
ZF90IHNvdXJjZSwgaW50IHgsIGludCB5KQoreworICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVs
ID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCkg
KyB4LCBnZXRfZ2xvYmFsX2lkKDEpICsgeSkpOworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlv
biwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGluYXRp
b25QaXhlbCk7Cit9CisKK19fa2VybmVsIHZvaWQgbWVyZ2UoX193cml0ZV9vbmx5IGltYWdlMmRf
dCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHByZXZpb3VzRGVzdGluYXRpb24s
IF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291
cmNlQiwgaW50IHhBLCBpbnQgeUEsIGludCB4QiwgaW50IHlCKQoreworICAgIGludDIgZGVzdGlu
YXRpb25Db29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSk7
CisgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGRlc3RpbmF0aW9uQ29vcmQueCArIHhB
LCBkZXN0aW5hdGlvbkNvb3JkLnkgKyB5QSk7CisgICAgaW50MiBzb3VyY2VDb29yZEIgPSAoaW50
MikgKGRlc3RpbmF0aW9uQ29vcmQueCArIHhCLCBkZXN0aW5hdGlvbkNvb3JkLnkgKyB5Qik7Cisg
ICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSByZWFkX2ltYWdlZihwcmV2aW91c0Rlc3RpbmF0
aW9uLCBzYW1wbGVyLCBkZXN0aW5hdGlvbkNvb3JkKTsKKyAgICBmbG9hdDQgc291cmNlUGl4ZWxB
ID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICBmbG9h
dDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNlQ29v
cmRCKTsKKworICAgIGRlc3RpbmF0aW9uUGl4ZWwgPSBzb3VyY2VQaXhlbEEgKyBkZXN0aW5hdGlv
blBpeGVsICogKDEgLSBzb3VyY2VQaXhlbEEudyk7CisgICAgZGVzdGluYXRpb25QaXhlbCA9IHNv
dXJjZVBpeGVsQiArIGRlc3RpbmF0aW9uUGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQi53KTsKKwor
ICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25Db29yZCwgZGVzdGluYXRp
b25QaXhlbCk7Cit9CispOyAvLyBFbmQgb2YgT3BlbkNMIGtlcm5lbHMKKworaW5saW5lIGJvb2wg
RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFTWVyZ2UoKQoreworICAgIGlmIChtX21lcmdl
V2FzQ29tcGlsZWQgfHwgaW5FcnJvcigpKQorICAgICAgICByZXR1cm4gIWluRXJyb3IoKTsKKwor
ICAgIG1fbWVyZ2VXYXNDb21waWxlZCA9IHRydWU7CisKKyAgICBpZiAoaXNSZXNvdXJjZUFsbG9j
YXRpb25GYWlsZWQoKG1fbWVyZ2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0obWVyZ2VLZXJuZWxQ
cm9ncmFtKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzUmVzb3VyY2VBbGxv
Y2F0aW9uRmFpbGVkKChtX21lcmdlQ29weU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX21lcmdl
UHJvZ3JhbSwgImNvcHkiKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzUmVz
b3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX21lcmdlT3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1f
bWVyZ2VQcm9ncmFtLCAibWVyZ2UiKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVN
ZXJnZUNvcHkoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9uU2l6
ZSwgT3BlbkNMSGFuZGxlIHNvdXJjZSwgSW50UG9pbnQgJnJlbGF0aXZlU291cmNlUG9pbnQpCit7
CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX21lcmdlQ29weU9wZXJhdGlvbiwgZGVzdGlu
YXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVs
LmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNl
KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VQb2ludC54KCkpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50LnkoKSk7CisgICAga2VybmVs
LnJ1bigpOworfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFTWVy
Z2UoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLCBPcGVuQ0xIYW5kbGUgcHJldmlvdXNEZXN0aW5h
dGlvbiwgT3BlbkNMSGFuZGxlIHNvdXJjZUEsIE9wZW5DTEhhbmRsZSBzb3VyY2VCLCBJbnRTaXpl
IGRlc3RpbmF0aW9uU2l6ZSwgSW50UG9pbnQgJnJlbGF0aXZlU291cmNlUG9pbnRBLCBJbnRQb2lu
dCAmcmVsYXRpdmVTb3VyY2VQb2ludEIpCit7CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBt
X21lcmdlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXpl
LmhlaWdodCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudChwcmV2aW91c0Rlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoc291cmNlQSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUIpOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50QS54KCkpOworICAgIGtlcm5lbC5h
ZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50QS55KCkpOworICAgIGtlcm5lbC5hZGRBcmd1
bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50Qi54KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChy
ZWxhdGl2ZVNvdXJjZVBvaW50Qi55KCkpOworICAgIGtlcm5lbC5ydW4oKTsKK30KKworYm9vbCBG
RU1lcmdlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNM
KiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29udGV4dC0+Y29tcGlsZUZFTWVy
Z2UoKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOworICAg
IEFTU0VSVChzaXplID4gMCk7CisKKyAgICBPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24gPSBjcmVh
dGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworICAgIE9wZW5DTEhhbmRsZSBzb3VyY2VBID0gMDsKKyAg
ICBPcGVuQ0xIYW5kbGUgc291cmNlQiA9IDA7CisgICAgRmlsdGVyRWZmZWN0KiBpbjsKKworICAg
IGludCBpID0gMDsKKworICAgIGlmIChzaXplICYgMSkgeworICAgICAgICBpbiA9IGlucHV0RWZm
ZWN0KGkrKyk7CisgICAgICAgIHNvdXJjZUEgPSBpbi0+b3BlbkNMSW1hZ2UoKTsKKyAgICAgICAg
SW50UG9pbnQgcmVsYXRpdmVTb3VyY2VQb2ludChpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludC5zZXRYKGFic29sdXRlUGFpbnRS
ZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VQb2ludC54KCkpOworICAgICAgICByZWxhdGl2ZVNv
dXJjZVBvaW50LnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZVBv
aW50LnkoKSk7CisKKyAgICAgICAgY29udGV4dC0+YXBwbHlGRU1lcmdlQ29weShkZXN0aW5hdGlv
biwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZUEsIHJlbGF0aXZlU291cmNlUG9p
bnQpOworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSBlbHNlCisgICAgICAgIGNvbnRleHQtPmZpbGwoZGVzdGluYXRpb24sIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKSk7CisKKyAgICBP
cGVuQ0xIYW5kbGUgcHJldmlvdXNEZXN0aW5hdGlvbiA9IGNvbnRleHQtPmNyZWF0ZU9wZW5DTElt
YWdlKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKworICAgIHdoaWxlIChpIDwgc2l6ZSkg
eworICAgICAgICBPcGVuQ0xIYW5kbGUgdGVtcCA9IHByZXZpb3VzRGVzdGluYXRpb247CisgICAg
ICAgIHByZXZpb3VzRGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKKyAgICAgICAgZGVzdGluYXRp
b24gPSB0ZW1wOworCisgICAgICAgIGluID0gaW5wdXRFZmZlY3QoaSsrKTsKKyAgICAgICAgc291
cmNlQSA9IGluLT5vcGVuQ0xJbWFnZSgpOworICAgICAgICBJbnRQb2ludCByZWxhdGl2ZVNvdXJj
ZVBvaW50QShpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgcmVs
YXRpdmVTb3VyY2VQb2ludEEuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZl
U291cmNlUG9pbnRBLngoKSk7CisgICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRBLnNldFkoYWJz
b2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50QS55KCkpOworCisgICAg
ICAgIGluID0gaW5wdXRFZmZlY3QoaSsrKTsKKyAgICAgICAgc291cmNlQiA9IGluLT5vcGVuQ0xJ
bWFnZSgpOworICAgICAgICBJbnRQb2ludCByZWxhdGl2ZVNvdXJjZVBvaW50Qihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludEIu
c2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlUG9pbnRCLngoKSk7
CisgICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRCLnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55
KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50Qi55KCkpOworCisgICAgICAgIGNvbnRleHQtPmFwcGx5
RkVNZXJnZShkZXN0aW5hdGlvbiwgcHJldmlvdXNEZXN0aW5hdGlvbiwgc291cmNlQSwgc291cmNl
QiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHJlbGF0aXZlU291cmNlUG9pbnRBLCByZWxh
dGl2ZVNvdXJjZVBvaW50Qik7CisgICAgfQorICAgIHNldE9wZW5DTEltYWdlKGRlc3RpbmF0aW9u
KTsKKyAgICBwcmV2aW91c0Rlc3RpbmF0aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAm
JiBFTkFCTEUoT1BFTkNMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189468</attachid>
            <date>2013-02-21 00:49:28 -0800</date>
            <delta_ts>2013-02-21 02:44:47 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11477</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2NDRiZTkwLi4zYjkxOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTMtMDItMTkgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRkVNZXJnZSBmaWx0ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxOTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIG9kZCBu
dW1iZXIgb2YgcGFyYW1ldGVycyB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGNvcGllZCB0byB0aGUg
ZGVzdGluYXRpb24gaW1hZ2UgYW5kCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJz
IGFyZSBtZXJnZWQgaW4gcGFpcnMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoRkVNZXJnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpGaWx0ZXJDb250
ZXh0T3BlbkNMKToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b21waWxlRkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b3B5KTogVGhpcyBpcyBhIHNpbXBsZSBjb3B5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVNZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKToKKwogMjAxMy0wMi0xOCAgR3l1eW91bmcgS2ltICA8
Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlYmFzZWxpbmUgZmFp
bHVyZSBtZWRpYSB0ZXN0cyBhZnRlciByMTQyOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxLi42
ZTQyMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQyMzYsNiArNDIzNiw3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9PUEVOQ0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuaAppbmRleCAzMDIzMzZiLi5mYjRmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVO
Q0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJD
b250ZXh0T3BlbkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaAppbmRleCA5YTcxYTU1Li4zOGRlNzU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNv
bnRleHRPcGVuQ0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgog
ICAgICAgICAsIG1fZmlsbFdhc0NvbXBpbGVkKGZhbHNlKQogICAgICAgICAsIG1fZmlsbFByb2dy
YW0oMCkKICAgICAgICAgLCBtX2ZpbGwoMCkKKyAgICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQo
ZmFsc2UpCisgICAgICAgICwgbV9tZXJnZVByb2dyYW0oMCkKKyAgICAgICAgLCBtX21lcmdlQ29w
eU9wZXJhdGlvbigwKQorICAgICAgICAsIG1fbWVyZ2VPcGVyYXRpb24oMCkKICAgICAgICAgLCBt
X2NvbG9yTWF0cml4V2FzQ29tcGlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb2xvck1hdHJpeFBy
b2dyYW0oMCkKICAgICAgICAgLCBtX21hdHJpeE9wZXJhdGlvbigwKQpAQCAtOTAsNyArOTQsMTAg
QEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgY29tcGlsZUZFQ29sb3JNYXRyaXgoKTsKICAg
ICBpbmxpbmUgYm9vbCBjb21waWxlRkVUdXJidWxlbmNlKCk7CisgICAgaW5saW5lIGJvb2wgY29t
cGlsZUZFTWVyZ2UoKTsKIAorICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZUNvcHkoT3BlbkNM
SGFuZGxlLCBJbnRTaXplLCBPcGVuQ0xIYW5kbGUsIEludFBvaW50Jik7CisgICAgaW5saW5lIHZv
aWQgYXBwbHlGRU1lcmdlKE9wZW5DTEhhbmRsZSwgT3BlbkNMSGFuZGxlLCBPcGVuQ0xIYW5kbGUs
IE9wZW5DTEhhbmRsZSwgSW50U2l6ZSwgSW50UG9pbnQmLCBJbnRQb2ludCYpOwogICAgIGlubGlu
ZSB2b2lkIGFwcGx5RkVDb2xvck1hdHJpeChPcGVuQ0xIYW5kbGUsIEludFNpemUsIE9wZW5DTEhh
bmRsZSwgSW50UG9pbnQsIGZsb2F0KiwgaW50KTsKICAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVy
YnVsZW5jZShPcGVuQ0xIYW5kbGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwg
dm9pZCosIHZvaWQqLAogICAgICAgICBpbnQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBm
bG9hdCwgYm9vbCwgaW50LCBpbnQpOwpAQCAtMTg3LDEwICsxOTQsMTUgQEAgcHJpdmF0ZToKICAg
ICBjbF9wcm9ncmFtIG1fZmlsbFByb2dyYW07CiAgICAgY2xfa2VybmVsIG1fZmlsbDsKIAorICAg
IGJvb2wgbV9tZXJnZVdhc0NvbXBpbGVkOworICAgIGNsX3Byb2dyYW0gbV9tZXJnZVByb2dyYW07
CisgICAgY2xfa2VybmVsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uOworICAgIGNsX2tlcm5lbCBtX21l
cmdlT3BlcmF0aW9uOworCiAgICAgYm9vbCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQ7CiAgICAg
Y2xfcHJvZ3JhbSBtX2NvbG9yTWF0cml4UHJvZ3JhbTsKICAgICBjbF9rZXJuZWwgbV9tYXRyaXhP
cGVyYXRpb247Ci0gICAgY2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247
IAorICAgIGNsX2tlcm5lbCBtX3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwogICAgIGNs
X2tlcm5lbCBtX2x1bWluYW5jZU9wZXJhdGlvbjsKIAogICAgIGJvb2wgbV90dXJidWxlbmNlV2Fz
Q29tcGlsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMmI4MGMyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHAKQEAgLTAsMCAr
MSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5o
dT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZFTWVyZ2Uu
aCIKKworI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogbWVyZ2VLZXJuZWxQcm9ncmFtID0KK1BST0dSQU0o
Citjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8
IENMS19BRERSRVNTX0NMQU1QIHwgQ0xLX0ZJTFRFUl9ORUFSRVNUOworCitfX2tlcm5lbCB2b2lk
IGNvcHkoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1h
Z2UyZF90IHNvdXJjZSwgaW50IHgsIGludCB5KQoreworICAgIGZsb2F0NCBkZXN0aW5hdGlvblBp
eGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCAoaW50MikgKGdldF9nbG9iYWxfaWQo
MCkgKyB4LCBnZXRfZ2xvYmFsX2lkKDEpICsgeSkpOworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5h
dGlvbiwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgZGVzdGlu
YXRpb25QaXhlbCk7Cit9CisKK19fa2VybmVsIHZvaWQgbWVyZ2UoX193cml0ZV9vbmx5IGltYWdl
MmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHByZXZpb3VzRGVzdGluYXRp
b24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2VBLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qg
c291cmNlQiwgaW50IHhBLCBpbnQgeUEsIGludCB4QiwgaW50IHlCKQoreworICAgIGludDIgZGVz
dGluYXRpb25Db29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgx
KSk7CisgICAgaW50MiBzb3VyY2VDb29yZEEgPSAoaW50MikgKGRlc3RpbmF0aW9uQ29vcmQueCAr
IHhBLCBkZXN0aW5hdGlvbkNvb3JkLnkgKyB5QSk7CisgICAgaW50MiBzb3VyY2VDb29yZEIgPSAo
aW50MikgKGRlc3RpbmF0aW9uQ29vcmQueCArIHhCLCBkZXN0aW5hdGlvbkNvb3JkLnkgKyB5Qik7
CisgICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4ZWwgPSByZWFkX2ltYWdlZihwcmV2aW91c0Rlc3Rp
bmF0aW9uLCBzYW1wbGVyLCBkZXN0aW5hdGlvbkNvb3JkKTsKKyAgICBmbG9hdDQgc291cmNlUGl4
ZWxBID0gcmVhZF9pbWFnZWYoc291cmNlQSwgc2FtcGxlciwgc291cmNlQ29vcmRBKTsKKyAgICBm
bG9hdDQgc291cmNlUGl4ZWxCID0gcmVhZF9pbWFnZWYoc291cmNlQiwgc2FtcGxlciwgc291cmNl
Q29vcmRCKTsKKworICAgIGRlc3RpbmF0aW9uUGl4ZWwgPSBzb3VyY2VQaXhlbEEgKyBkZXN0aW5h
dGlvblBpeGVsICogKDEgLSBzb3VyY2VQaXhlbEEudyk7CisgICAgZGVzdGluYXRpb25QaXhlbCA9
IHNvdXJjZVBpeGVsQiArIGRlc3RpbmF0aW9uUGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQi53KTsK
KworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25Db29yZCwgZGVzdGlu
YXRpb25QaXhlbCk7Cit9CispOyAvLyBFbmQgb2YgT3BlbkNMIGtlcm5lbHMKKworaW5saW5lIGJv
b2wgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFTWVyZ2UoKQoreworICAgIGlmIChtX21l
cmdlV2FzQ29tcGlsZWQgfHwgaW5FcnJvcigpKQorICAgICAgICByZXR1cm4gIWluRXJyb3IoKTsK
KworICAgIG1fbWVyZ2VXYXNDb21waWxlZCA9IHRydWU7CisKKyAgICBpZiAoaXNSZXNvdXJjZUFs
bG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0obWVyZ2VLZXJu
ZWxQcm9ncmFtKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzUmVzb3VyY2VB
bGxvY2F0aW9uRmFpbGVkKChtX21lcmdlQ29weU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX21l
cmdlUHJvZ3JhbSwgImNvcHkiKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlz
UmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX21lcmdlT3BlcmF0aW9uID0ga2VybmVsQnlOYW1l
KG1fbWVyZ2VQcm9ncmFtLCAibWVyZ2UiKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5
RkVNZXJnZUNvcHkoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9u
U2l6ZSwgT3BlbkNMSGFuZGxlIHNvdXJjZSwgSW50UG9pbnQmIHJlbGF0aXZlU291cmNlUG9pbnQp
Cit7CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX21lcmdlQ29weU9wZXJhdGlvbiwgZGVz
dGluYXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7CisgICAga2Vy
bmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291
cmNlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VQb2ludC54KCkpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50LnkoKSk7CisgICAga2Vy
bmVsLnJ1bigpOworfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZF
TWVyZ2UoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLCBPcGVuQ0xIYW5kbGUgcHJldmlvdXNEZXN0
aW5hdGlvbiwgT3BlbkNMSGFuZGxlIHNvdXJjZUEsIE9wZW5DTEhhbmRsZSBzb3VyY2VCLCBJbnRT
aXplIGRlc3RpbmF0aW9uU2l6ZSwgSW50UG9pbnQmIHJlbGF0aXZlU291cmNlUG9pbnRBLCBJbnRQ
b2ludCYgcmVsYXRpdmVTb3VyY2VQb2ludEIpCit7CisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlz
LCBtX21lcmdlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25T
aXplLmhlaWdodCgpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChwcmV2aW91c0Rlc3RpbmF0aW9uKTsKKyAgICBrZXJuZWwuYWRk
QXJndW1lbnQoc291cmNlQSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUIpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50QS54KCkpOworICAgIGtlcm5l
bC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50QS55KCkpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50Qi54KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVu
dChyZWxhdGl2ZVNvdXJjZVBvaW50Qi55KCkpOworICAgIGtlcm5lbC5ydW4oKTsKK30KKworYm9v
bCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3Bl
bkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29udGV4dC0+Y29tcGlsZUZF
TWVyZ2UoKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwor
ICAgIEFTU0VSVChzaXplID4gMCk7CisKKyAgICBPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24gPSBj
cmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworICAgIE9wZW5DTEhhbmRsZSBzb3VyY2VBID0gMDsK
KyAgICBPcGVuQ0xIYW5kbGUgc291cmNlQiA9IDA7CisgICAgRmlsdGVyRWZmZWN0KiBpbjsKKwor
ICAgIGludCBpID0gMDsKKworICAgIGlmIChzaXplICYgMSkgeworICAgICAgICBpbiA9IGlucHV0
RWZmZWN0KGkrKyk7CisgICAgICAgIHNvdXJjZUEgPSBpbi0+b3BlbkNMSW1hZ2UoKTsKKyAgICAg
ICAgSW50UG9pbnQgcmVsYXRpdmVTb3VyY2VQb2ludChpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5s
b2NhdGlvbigpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludC5zZXRYKGFic29sdXRlUGFp
bnRSZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VQb2ludC54KCkpOworICAgICAgICByZWxhdGl2
ZVNvdXJjZVBvaW50LnNldFkoYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJj
ZVBvaW50LnkoKSk7CisKKyAgICAgICAgY29udGV4dC0+YXBwbHlGRU1lcmdlQ29weShkZXN0aW5h
dGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZUEsIHJlbGF0aXZlU291cmNl
UG9pbnQpOworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSBlbHNlCisgICAgICAgIGNvbnRleHQtPmZpbGwoZGVzdGluYXRpb24sIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKSk7CisKKyAg
ICBPcGVuQ0xIYW5kbGUgcHJldmlvdXNEZXN0aW5hdGlvbiA9IGNvbnRleHQtPmNyZWF0ZU9wZW5D
TEltYWdlKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKworICAgIHdoaWxlIChpIDwgc2l6
ZSkgeworICAgICAgICBPcGVuQ0xIYW5kbGUgdGVtcCA9IHByZXZpb3VzRGVzdGluYXRpb247Cisg
ICAgICAgIHByZXZpb3VzRGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKKyAgICAgICAgZGVzdGlu
YXRpb24gPSB0ZW1wOworCisgICAgICAgIGluID0gaW5wdXRFZmZlY3QoaSsrKTsKKyAgICAgICAg
c291cmNlQSA9IGluLT5vcGVuQ0xJbWFnZSgpOworICAgICAgICBJbnRQb2ludCByZWxhdGl2ZVNv
dXJjZVBvaW50QShpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAg
cmVsYXRpdmVTb3VyY2VQb2ludEEuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0
aXZlU291cmNlUG9pbnRBLngoKSk7CisgICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRBLnNldFko
YWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50QS55KCkpOworCisg
ICAgICAgIGluID0gaW5wdXRFZmZlY3QoaSsrKTsKKyAgICAgICAgc291cmNlQiA9IGluLT5vcGVu
Q0xJbWFnZSgpOworICAgICAgICBJbnRQb2ludCByZWxhdGl2ZVNvdXJjZVBvaW50Qihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2lu
dEIuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291cmNlUG9pbnRCLngo
KSk7CisgICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRCLnNldFkoYWJzb2x1dGVQYWludFJlY3Qo
KS55KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50Qi55KCkpOworCisgICAgICAgIGNvbnRleHQtPmFw
cGx5RkVNZXJnZShkZXN0aW5hdGlvbiwgcHJldmlvdXNEZXN0aW5hdGlvbiwgc291cmNlQSwgc291
cmNlQiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHJlbGF0aXZlU291cmNlUG9pbnRBLCBy
ZWxhdGl2ZVNvdXJjZVBvaW50Qik7CisgICAgfQorICAgIHNldE9wZW5DTEltYWdlKGRlc3RpbmF0
aW9uKTsKKyAgICBwcmV2aW91c0Rlc3RpbmF0aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJT
KSAmJiBFTkFCTEUoT1BFTkNMKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>