<?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>149814</bug_id>
          
          <creation_ts>2015-10-05 11:52:23 -0700</creation_ts>
          <short_desc>Compress snapshots on iOS</short_desc>
          <delta_ts>2015-10-05 14:04:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1130685</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-05 11:52:23 -0700</bug_when>
    <thetext>Compress snapshots on iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130686</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-10-05 11:53:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/22976230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130690</commentid>
    <comment_count>2</comment_count>
      <attachid>262453</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-05 12:02:22 -0700</bug_when>
    <thetext>Created attachment 262453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130692</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 12:04:29 -0700</bug_when>
    <thetext>Attachment 262453 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.mm:273:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.h:40:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.h:48:  The parameter name &quot;pixelFormat&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:108:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:109:  The parameter name &quot;accelerator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:114:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:115:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:116:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:119:  The parameter name &quot;accelerator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 9 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130695</commentid>
    <comment_count>4</comment_count>
      <attachid>262453</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-10-05 12:20:15 -0700</bug_when>
    <thetext>Comment on attachment 262453
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:39
&gt; +enum class PixelFormatForColor {

I don&apos;t think we need the &quot;ForColor&quot; here, and I think maybe this should be inside WebCore::IOSurface? Maybe WebCore::IOSurface::Format?

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:42
&gt; +    YUVCompressed

I don&apos;t think we need &quot;compressed&quot; here. I think this should be more specific, too: YUV422, or something like that.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:91
&gt; +    WEBCORE_EXPORT void convertToFormat(PixelFormatForColor, std::function&lt;void(std::unique_ptr&lt;WebCore::IOSurface&gt;)&gt;);

This should probably be a class method that takes a move-only WebCore::IOSurface, so that it&apos;s clear that it consumes the surface. Otherwise someone could accidentally keep using the now dead surface. Something like this:

WEBCORE_EXPORT static void convertToFormat(std::unique_ptr&lt;WebCore::IOSurface&gt;&amp;&amp; inSurface, PixelFormatForColor, std::function&lt;void(std::unique_ptr&lt;WebCore::IOSurface&gt;)&gt;);

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:264
&gt; +    static IOSurfaceAcceleratorRef accelerator;
&gt; +    if (!accelerator) {
&gt; +        IOSurfaceAcceleratorCreate(nullptr, nullptr, &amp;accelerator);
&gt; +
&gt; +        auto runLoopSource = IOSurfaceAcceleratorGetRunLoopSource(accelerator);
&gt; +        CFRunLoopAddSource(CFRunLoopGetMain(), runLoopSource, kCFRunLoopDefaultMode);
&gt; +    }

We should check with the appropriate folks that it&apos;s OK to keep one of these alive forever. I&apos;m not sure.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:266
&gt; +    auto destinationSurface = IOSurface::create(m_size, m_colorSpace, pixelFormat);

We should bail (call the callback synchronously with the current surface) if the pixel formats are the same.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:274
&gt; +

no newline here

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:282
&gt; +    IOSurfaceAcceleratorTransformSurface(accelerator, m_surface.get(), destinationIOSurfaceRef, nullptr, nullptr, &amp;completion, nullptr, nullptr);

Please retrieve the IOReturn from this and from IOSurfaceAcceleratorCreate and ASSERT_UNUSED(ret, ret == kIOReturnSuccess); like we do in other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130713</commentid>
    <comment_count>5</comment_count>
      <attachid>262458</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-05 12:59:51 -0700</bug_when>
    <thetext>Created attachment 262458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130716</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-05 13:01:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 262453 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262453&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:39
&gt; &gt; +enum class PixelFormatForColor {
&gt; 
&gt; I don&apos;t think we need the &quot;ForColor&quot; here, and I think maybe this should be
&gt; inside WebCore::IOSurface? Maybe WebCore::IOSurface::Format?
&gt; 

Fixed! I went with your suggestion.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:42
&gt; &gt; +    YUVCompressed
&gt; 
&gt; I don&apos;t think we need &quot;compressed&quot; here. I think this should be more
&gt; specific, too: YUV422, or something like that.
&gt; 

Fixed! I again went with your suggestion.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:91
&gt; &gt; +    WEBCORE_EXPORT void convertToFormat(PixelFormatForColor, std::function&lt;void(std::unique_ptr&lt;WebCore::IOSurface&gt;)&gt;);
&gt; 
&gt; This should probably be a class method that takes a move-only
&gt; WebCore::IOSurface, so that it&apos;s clear that it consumes the surface.
&gt; Otherwise someone could accidentally keep using the now dead surface.
&gt; Something like this:
&gt; 
&gt; WEBCORE_EXPORT static void
&gt; convertToFormat(std::unique_ptr&lt;WebCore::IOSurface&gt;&amp;&amp; inSurface,
&gt; PixelFormatForColor,
&gt; std::function&lt;void(std::unique_ptr&lt;WebCore::IOSurface&gt;)&gt;);
&gt; 

Fixed! Should I move it to the top of the file? It doesn&apos;t really matter, but I feel like that is where class methods go.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:264
&gt; &gt; +    static IOSurfaceAcceleratorRef accelerator;
&gt; &gt; +    if (!accelerator) {
&gt; &gt; +        IOSurfaceAcceleratorCreate(nullptr, nullptr, &amp;accelerator);
&gt; &gt; +
&gt; &gt; +        auto runLoopSource = IOSurfaceAcceleratorGetRunLoopSource(accelerator);
&gt; &gt; +        CFRunLoopAddSource(CFRunLoopGetMain(), runLoopSource, kCFRunLoopDefaultMode);
&gt; &gt; +    }
&gt; 
&gt; We should check with the appropriate folks that it&apos;s OK to keep one of these
&gt; alive forever. I&apos;m not sure.
&gt; 

Okay…Will follow up on this.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:266
&gt; &gt; +    auto destinationSurface = IOSurface::create(m_size, m_colorSpace, pixelFormat);
&gt; 
&gt; We should bail (call the callback synchronously with the current surface) if
&gt; the pixel formats are the same.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:274
&gt; &gt; +
&gt; 
&gt; no newline here
&gt; 

Fixed!

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:282
&gt; &gt; +    IOSurfaceAcceleratorTransformSurface(accelerator, m_surface.get(), destinationIOSurfaceRef, nullptr, nullptr, &amp;completion, nullptr, nullptr);
&gt; 
&gt; Please retrieve the IOReturn from this and from IOSurfaceAcceleratorCreate
&gt; and ASSERT_UNUSED(ret, ret == kIOReturnSuccess); like we do in other places.


Fixed!

Thanks Tim!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130720</commentid>
    <comment_count>7</comment_count>
      <attachid>262458</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-05 13:29:12 -0700</bug_when>
    <thetext>Comment on attachment 262458
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        Though the default is still RGBA, it is now possible to create and IOSurface 

&quot;and&quot;

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:259
&gt; +        auto runLoopSource = IOSurfaceAcceleratorGetRunLoopSource(accelerator);
&gt; +        CFRunLoopAddSource(CFRunLoopGetMain(), runLoopSource, kCFRunLoopDefaultMode);

Should we consider running this on another thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130723</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 13:35:03 -0700</bug_when>
    <thetext>Attachment 262458 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.mm:252:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.mm:273:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.h:42:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.h:44:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/ChangeLog:10:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:108:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:109:  The parameter name &quot;accelerator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/spi/cocoa/IOSurfaceSPI.h:119:  The parameter name &quot;accelerator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130726</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-05 13:45:44 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 262458 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262458&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        Though the default is still RGBA, it is now possible to create and IOSurface 
&gt; 
&gt; &quot;and&quot;
&gt; 

Fixed!

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:259
&gt; &gt; +        auto runLoopSource = IOSurfaceAcceleratorGetRunLoopSource(accelerator);
&gt; &gt; +        CFRunLoopAddSource(CFRunLoopGetMain(), runLoopSource, kCFRunLoopDefaultMode);
&gt; 
&gt; Should we consider running this on another thread?

I&apos;ll chat with Anders about this.

Thanks!

http://trac.webkit.org/changeset/190574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130728</commentid>
    <comment_count>10</comment_count>
      <attachid>262458</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-10-05 14:04:05 -0700</bug_when>
    <thetext>Comment on attachment 262458
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:259
&gt;&gt;&gt; +        CFRunLoopAddSource(CFRunLoopGetMain(), runLoopSource, kCFRunLoopDefaultMode);
&gt;&gt; 
&gt;&gt; Should we consider running this on another thread?
&gt; 
&gt; I&apos;ll chat with Anders about this.
&gt; 
&gt; Thanks!
&gt; 
&gt; http://trac.webkit.org/changeset/190574

I think the important thing here is to know whether it uses the run loop that we install its source on for anything *other* than calling the callback. If not, then there&apos;s no need to move it to another thread, but if it does other work on that runloop we might want to.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262453</attachid>
            <date>2015-10-05 12:02:22 -0700</date>
            <delta_ts>2015-10-05 12:59:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>11705</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE1LTEwLTA1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBDb21wcmVzcyBzbmFwc2hvdHMgb24g
aU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4
MTQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8y
Mjk3NjIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRob3VnaCB0aGUgZGVmYXVsdCBpcyBzdGlsbCBSR0JBLCBpdCBpcyBub3cgcG9zc2libGUgdG8g
Y3JlYXRlIGFuZCBJT1N1cmZhY2UgCisgICAgICAgIHRoYXQgdXNlcyB0aGUgWVVWQ29tcHJlc3Nl
ZCBwaXhlbCBmb3JtYXQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJm
YWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tOgor
ICAgICAgICAoSU9TdXJmYWNlOjpjcmVhdGUpOgorICAgICAgICAoSU9TdXJmYWNlOjpjcmVhdGVG
cm9tSW1hZ2UpOgorICAgICAgICAoSU9TdXJmYWNlOjpJT1N1cmZhY2UpOgorICAgICAgICAoSU9T
dXJmYWNlOjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKworICAgICAgICBJbiBvcmRlciB0byBo
YXZlIGEgWVVWIElPU3VyZmFjZSwgd2UgYWN0dWFsbHkgaGF2ZSB0byBjcmVhdGUgYW4gUkdCQSBz
dXJmYWNlIAorICAgICAgICBmaXJzdCBhbmQgdGhlbiBjb252ZXJ0IGl0IHRvIFlVVi4KKyAgICAg
ICAgKElPU3VyZmFjZTo6Y29udmVydFRvRm9ybWF0KToKKworICAgICAgICBOZWNlc3NhcnkgU1BJ
LgorICAgICAgICAqIHBsYXRmb3JtL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaDoKKwogMjAxNS0x
MC0wNSAgS2F0bHluIEdyYWZmICA8a2dyYWZmQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
c2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGZvciBhZGRpdGlvbmFsIHJldmlld3MuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
aAkocmV2aXNpb24gMTkwMzE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvSU9TdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDE2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWFjaFNlbmRSaWdodDsKIAorZW51bSBjbGFzcyBQaXhl
bEZvcm1hdEZvckNvbG9yIHsKKyAgICBSR0JBLAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBZVVZD
b21wcmVzc2VkCisjZW5kaWYKK307CisKIGNsYXNzIElPU3VyZmFjZSBmaW5hbCB7CiBwdWJsaWM6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNy
ZWF0ZShJbnRTaXplLCBDb2xvclNwYWNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlKEludFNpemUsIENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0Rm9yQ29sb3IgcGl4ZWxGb3JtYXQgPSBQaXhlbEZvcm1hdEZvckNvbG9yOjpSR0JBKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3Jl
YXRlKEludFNpemUsIEludFNpemUgY29udGV4dFNpemUsIENvbG9yU3BhY2UpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU2Vu
ZFJpZ2h0KGNvbnN0IE1hY2hTZW5kUmlnaHQmLCBDb2xvclNwYWNlKTsKICAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVmLCBD
b2xvclNwYWNlKTsKQEAgLTgwLDggKzg3LDEyIEBAIHB1YmxpYzoKICAgICAvLyBhbiBhY2N1cmF0
ZSByZXN1bHQgZnJvbSBpc0luVXNlKCksIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVsZWFzZUdyYXBoaWNzQ29udGV4dCgpOwogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvRm9ybWF0KFBpeGVsRm9y
bWF0Rm9yQ29sb3IsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SU9TdXJmYWNlPik+KTsKKyNlbmRpZgorCiBwcml2YXRlOgotICAgIElPU3VyZmFjZShJbnRTaXpl
LCBDb2xvclNwYWNlKTsKKyAgICBJT1N1cmZhY2UoSW50U2l6ZSwgQ29sb3JTcGFjZSwgUGl4ZWxG
b3JtYXRGb3JDb2xvcik7CiAgICAgSU9TdXJmYWNlKEludFNpemUsIEludFNpemUgY29udGV4dFNp
emUsIENvbG9yU3BhY2UpOwogICAgIElPU3VyZmFjZShJT1N1cmZhY2VSZWYsIENvbG9yU3BhY2Up
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCShyZXZpc2lvbiAxOTAzMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDEx
ICs1MSwxNSBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmCiAgICAg
cmV0dXJuIGNhY2hlZFN1cmZhY2U7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElP
U3VyZmFjZTo6Y3JlYXRlKEludFNpemUgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGUoSW50U2l6ZSBzaXplLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0Rm9yQ29sb3IgcGl4ZWxGb3JtYXQpCiB7
Ci0gICAgaWYgKGF1dG8gY2FjaGVkU3VyZmFjZSA9IHN1cmZhY2VGcm9tUG9vbChzaXplLCBzaXpl
LCBjb2xvclNwYWNlKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFN1cmZhY2U7Ci0gICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+KG5ldyBJT1N1cmZhY2Uoc2l6ZSwgY29sb3JTcGFj
ZSkpOworICAgIC8vIFlVVkNvbXByZXNzZWQgSU9TdXJmYWNlcyBkbyBub3QgZ28gaW4gdGhlIHBv
b2wuCisgICAgaWYgKHBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0Rm9yQ29sb3I6OlJHQkEpIHsK
KyAgICAgICAgaWYgKGF1dG8gY2FjaGVkU3VyZmFjZSA9IHN1cmZhY2VGcm9tUG9vbChzaXplLCBz
aXplLCBjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdXJmYWNlOworICAg
IH0KKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPihuZXcgSU9TdXJmYWNl
KHNpemUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlKEludFNpemUgc2l6ZSwgSW50U2l6ZSBjb250ZXh0
U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtOTIsMTcgKzk2LDM1IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3IKICAgICByZXR1cm4gc3VyZmFjZTsKIH0K
IAotSU9TdXJmYWNlOjpJT1N1cmZhY2UoSW50U2l6ZSBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCitJT1N1cmZhY2U6OklPU3VyZmFjZShJbnRTaXplIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXRGb3JDb2xvciBwaXhlbEZvcm1hdEZvckNvbG9yKQogICAgIDogbV9j
b2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fY29udGV4
dFNpemUoc2l6ZSkKIHsKLSAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKLSAgICB1
bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OworICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0Owor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50
OworCisgICAgdW5zaWduZWQgZWxlbWVudFdpZHRoID0gMTsKKworICAgIGlmIChwaXhlbEZvcm1h
dEZvckNvbG9yID09IFBpeGVsRm9ybWF0Rm9yQ29sb3I6OlJHQkEpIHsKKyAgICAgICAgcGl4ZWxG
b3JtYXQgPSAnQkdSQSc7CisgICAgICAgIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgICAgICBieXRl
c1BlckVsZW1lbnQgPSA0OworICAgIH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgZWxzZSB7Cisg
ICAgICAgIHBpeGVsRm9ybWF0ID0gJ3l1dmYnOworICAgICAgICBieXRlc1BlclBpeGVsID0gMjsK
KyAgICAgICAgZWxlbWVudFdpZHRoID0gMjsKKyAgICAgICAgYnl0ZXNQZXJFbGVtZW50ID0gNDsK
KyAgICB9CisjZW5kaWYKKwogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKIAotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IElPU3Vy
ZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUJ5dGVzUGVyUm93LCB3aWR0aCAqIGJ5dGVzUGVy
RWxlbWVudCk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0
eShrSU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJQaXhlbCk7CiAgICAgQVNT
RVJUKGJ5dGVzUGVyUm93KTsKIAogICAgIG1fdG90YWxCeXRlcyA9IElPU3VyZmFjZUFsaWduUHJv
cGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpOwpAQCAtMTE2
LDE1ICsxMzgsMTcgQEAgSU9TdXJmYWNlOjpJT1N1cmZhY2UoSW50U2l6ZSBzaXplLCBDb2xvcgog
ICAgICAgICAoaWQpa0lPU3VyZmFjZUJ5dGVzUGVyUm93OiBAKGJ5dGVzUGVyUm93KSwKICAgICAg
ICAgKGlkKWtJT1N1cmZhY2VBbGxvY1NpemU6IEAobV90b3RhbEJ5dGVzKSwKICNpZiBQTEFURk9S
TShJT1MpCi0gICAgICAgIChpZClrSU9TdXJmYWNlQ2FjaGVNb2RlOiBAKGtJT01hcFdyaXRlQ29t
YmluZUNhY2hlKQorICAgICAgICAoaWQpa0lPU3VyZmFjZUNhY2hlTW9kZTogQChrSU9NYXBXcml0
ZUNvbWJpbmVDYWNoZSksCiAjZW5kaWYKKyAgICAgICAgKGlkKWtJT1N1cmZhY2VFbGVtZW50V2lk
dGg6IEAoZWxlbWVudFdpZHRoKSwKKyAgICAgICAgKGlkKWtJT1N1cmZhY2VFbGVtZW50SGVpZ2h0
OiBAKDEpCiAgICAgfTsKIAogICAgIG1fc3VyZmFjZSA9IGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRl
KChDRkRpY3Rpb25hcnlSZWYpb3B0aW9ucykpOwogfQogCiBJT1N1cmZhY2U6OklPU3VyZmFjZShJ
bnRTaXplIHNpemUsIEludFNpemUgY29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
LSAgICA6IElPU3VyZmFjZShzaXplLCBjb2xvclNwYWNlKQorICAgIDogSU9TdXJmYWNlKHNpemUs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0Rm9yQ29sb3I6OlJHQkEpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHRTaXplLndpZHRoKCkgPD0gc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQoY29udGV4dFNp
emUuaGVpZ2h0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7CkBAIC0yMjgsNCArMjUyLDM1IEBAIHZvaWQg
SU9TdXJmYWNlOjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkKICAgICBtX2NnQ29udGV4dCA9IG51
bGxwdHI7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIElPU3VyZmFjZTo6Y29udmVydFRv
Rm9ybWF0KFBpeGVsRm9ybWF0Rm9yQ29sb3IgcGl4ZWxGb3JtYXQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPik+IGNhbGxiYWNrKQoreworICAgIHN0YXRpYyBJ
T1N1cmZhY2VBY2NlbGVyYXRvclJlZiBhY2NlbGVyYXRvcjsKKyAgICBpZiAoIWFjY2VsZXJhdG9y
KSB7CisgICAgICAgIElPU3VyZmFjZUFjY2VsZXJhdG9yQ3JlYXRlKG51bGxwdHIsIG51bGxwdHIs
ICZhY2NlbGVyYXRvcik7CisKKyAgICAgICAgYXV0byBydW5Mb29wU291cmNlID0gSU9TdXJmYWNl
QWNjZWxlcmF0b3JHZXRSdW5Mb29wU291cmNlKGFjY2VsZXJhdG9yKTsKKyAgICAgICAgQ0ZSdW5M
b29wQWRkU291cmNlKENGUnVuTG9vcEdldE1haW4oKSwgcnVuTG9vcFNvdXJjZSwga0NGUnVuTG9v
cERlZmF1bHRNb2RlKTsKKyAgICB9CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uU3VyZmFjZSA9IElP
U3VyZmFjZTo6Y3JlYXRlKG1fc2l6ZSwgbV9jb2xvclNwYWNlLCBwaXhlbEZvcm1hdCk7CisgICAg
CisgICAgSU9TdXJmYWNlUmVmIGRlc3RpbmF0aW9uSU9TdXJmYWNlUmVmID0gZGVzdGluYXRpb25T
dXJmYWNlLT5zdXJmYWNlKCk7CisKKyAgICBJT1N1cmZhY2VBY2NlbGVyYXRvckNvbXBsZXRpb24g
Y29tcGxldGlvbjsKKyAgICBjb21wbGV0aW9uLmNvbXBsZXRpb25SZWZDb24gPSBuZXcgc3RkOjpm
dW5jdGlvbjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+KT4gKFdURjo6bW92ZShjYWxs
YmFjaykpOworICAgIGNvbXBsZXRpb24uY29tcGxldGlvblJlZkNvbjIgPSBkZXN0aW5hdGlvblN1
cmZhY2UucmVsZWFzZSgpOworICAgIGNvbXBsZXRpb24uY29tcGxldGlvbkNhbGxiYWNrID0gW10o
dm9pZCAqY29tcGxldGlvblJlZkNvbiwgSU9SZXR1cm4sIHZvaWQgKiBjb21wbGV0aW9uUmVmQ29u
MikgeworCisgICAgICAgIGF1dG8qIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8c3RkOjpmdW5jdGlv
bjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+KT4qPihjb21wbGV0aW9u
UmVmQ29uKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblN1cmZhY2UgPSBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPihzdGF0aWNfY2FzdDxJT1N1cmZhY2UqPihjb21wbGV0aW9uUmVmQ29uMikp
OworICAgICAgICAKKyAgICAgICAgKCpjYWxsYmFjaykoV1RGOjptb3ZlKGRlc3RpbmF0aW9uU3Vy
ZmFjZSkpOworICAgICAgICBkZWxldGUgY2FsbGJhY2s7CisgICAgfTsKKworICAgIElPU3VyZmFj
ZUFjY2VsZXJhdG9yVHJhbnNmb3JtU3VyZmFjZShhY2NlbGVyYXRvciwgbV9zdXJmYWNlLmdldCgp
LCBkZXN0aW5hdGlvbklPU3VyZmFjZVJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgJmNvbXBsZXRpb24s
IG51bGxwdHIsIG51bGxwdHIpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2VuZGlm
IC8vIFVTRShJT1NVUkZBQ0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oCShyZXZpc2lvbiAxOTAzMTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDYgKzk0LDM1IEBAIElPUmV0dXJuIElPU3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2UK
IAogV1RGX0VYVEVSTl9DX0VORAogCi0jZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8SU9TdXJmYWNlQWNjZWxlcmF0b3IvSU9T
dXJmYWNlQWNjZWxlcmF0b3IuaD4KKworI2Vsc2UKKwordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZh
Y2VBY2NlbGVyYXRvciAqSU9TdXJmYWNlQWNjZWxlcmF0b3JSZWY7CisKK1dURl9FWFRFUk5fQ19C
RUdJTgorCitJT1JldHVybiBJT1N1cmZhY2VBY2NlbGVyYXRvckNyZWF0ZShDRkFsbG9jYXRvclJl
ZiBhbGxvY2F0b3IsIENGRGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzLCBJT1N1cmZhY2VBY2NlbGVy
YXRvclJlZiogYWNjZWxlcmF0b3JPdXQpOworQ0ZSdW5Mb29wU291cmNlUmVmIElPU3VyZmFjZUFj
Y2VsZXJhdG9yR2V0UnVuTG9vcFNvdXJjZShJT1N1cmZhY2VBY2NlbGVyYXRvclJlZiBhY2NlbGVy
YXRvcik7CisKK3R5cGVkZWYgdm9pZCAoKklPU3VyZmFjZUFjY2VsZXJhdG9yQ29tcGxldGlvbkNh
bGxiYWNrKSh2b2lkKiBjb21wbGV0aW9uUmVmQ29uLCBJT1JldHVybiBzdGF0dXMsIHZvaWQqIGNv
bXBsZXRpb25SZWZDb24yKTsKKwordHlwZWRlZiBzdHJ1Y3QgSU9TdXJmYWNlQWNjZWxlcmF0b3JD
b21wbGV0aW9uIHsKKwlJT1N1cmZhY2VBY2NlbGVyYXRvckNvbXBsZXRpb25DYWxsYmFjayBjb21w
bGV0aW9uQ2FsbGJhY2s7CisJdm9pZCogY29tcGxldGlvblJlZkNvbjsKKwl2b2lkKiBjb21wbGV0
aW9uUmVmQ29uMjsKK30gSU9TdXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uOworCitJT1JldHVy
biBJT1N1cmZhY2VBY2NlbGVyYXRvclRyYW5zZm9ybVN1cmZhY2UoSU9TdXJmYWNlQWNjZWxlcmF0
b3JSZWYgYWNjZWxlcmF0b3IsIElPU3VyZmFjZVJlZiBzb3VyY2VCdWZmZXIsIElPU3VyZmFjZVJl
ZiBkZXN0aW5hdGlvbkJ1ZmZlciwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMsIHZvaWQqIHBDcm9w
UmVjdGFuZ2xlcywgSU9TdXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uKiBwQ29tcGxldGlvbiwg
dm9pZCogcFN3YXAsIHVpbnQzMl90KiBwQ29tbWFuZElEKTsKKworV1RGX0VYVEVSTl9DX0VORAor
CisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKIAogI2VuZGlmIC8vIElP
U3VyZmFjZVNQSV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA1NjgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNS0x
MC0wNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29tcHJlc3Mg
c25hcHNob3RzIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ5ODE0CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMjI5NzYyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDb21wcmVzcyB0aGUgc25hcHNob3QuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfdGFrZVZpZXdT
bmFwc2hvdF0pOgorCisgICAgICAgIFNpbmNlIHRoZSBzbmFwc2hvdHMgYXJlIGNvbnZlcnRlZCB0
byBZVVYgYXN5bmNocm9ub3VzbHksIGl0IGlzIHBvc3NpYmxlIHRvIAorICAgICAgICBnZXQgaGVy
ZSBhbmQgaGF2ZSBhIHNuYXBzaG90IHRoYXQgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW1hZ2UsIHNv
IHdlIGhhdmUgdG8gCisgICAgICAgIHJlbGF4IHRoaXMgY29uc3RyYWludC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWV3
U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QpOgorCiAyMDE1LTEwLTA1ICBFbnJpY2EgQ2Fz
dWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2Fubm90IHNlbGVjdCBjZXJ0YWlu
IHRleHQgb24gV2lraXBlZGlhIGhvbWVwYWdlIGV2ZW4gd2hlbiB6b29tZWQgaW4uCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2
aXNpb24gMTkwMzE1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMjYsNyArMTEyNiwxMiBAQCAtIChQYXNzUmVm
UHRyPFdlYktpdDo6Vmlld1NuYXBzaG90PilfdGFrCiAgICAgYXV0byBzdXJmYWNlID0gV2ViQ29y
ZTo6SU9TdXJmYWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKHNuYXBzaG90U2l6
ZSksIFdlYkNvcmU6OkNvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIENBUmVuZGVyU2VydmVyUmVu
ZGVyTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hfUE9SVF9OVUxMLCBzZWxmLmxheWVyLmNvbnRleHQu
Y29udGV4dElkLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihzZWxmLmxheWVyKSwgc3VyZmFj
ZS0+c3VyZmFjZSgpLCAwLCAwLCAmdHJhbnNmb3JtKTsKIAotICAgIHJldHVybiBXZWJLaXQ6OlZp
ZXdTbmFwc2hvdDo6Y3JlYXRlKFdURjo6bW92ZShzdXJmYWNlKSk7CisgICAgUmVmUHRyPFdlYktp
dDo6Vmlld1NuYXBzaG90PiB2aWV3U25hcHNob3QgPSBXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Y3Jl
YXRlKG51bGxwdHIpOworICAgIHN1cmZhY2UtPmNvbnZlcnRUb0Zvcm1hdChXZWJDb3JlOjpQaXhl
bEZvcm1hdEZvckNvbG9yOjpZVVZDb21wcmVzc2VkLCBbdmlld1NuYXBzaG90XShzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBjb252ZXJ0ZWRTdXJmYWNlKSB7CisgICAgICAgIHZp
ZXdTbmFwc2hvdC0+c2V0U3VyZmFjZShXVEY6Om1vdmUoY29udmVydGVkU3VyZmFjZSkpOworICAg
IH0pOworCisgICAgcmV0dXJuIHZpZXdTbmFwc2hvdDsKICNlbHNlCiAgICAgdWludDMyX3Qgc2xv
dElEID0gW1dlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90dGluZ0NvbnRleHQoKSBj
cmVhdGVJbWFnZVNsb3Q6c25hcHNob3RTaXplIGhhc0FscGhhOllFU107CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQkocmV2
aXNpb24gMTkwMzE1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNo
b3RTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgVmlld1Nu
YXBzaG90U3RvcmU6OnJlY29yZFNuYXBzaG90KFcKICAgICB3ZWJQYWdlUHJveHkud2lsbFJlY29y
ZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKIAogICAgIFJlZlB0cjxWaWV3U25hcHNob3Q+IHNu
YXBzaG90ID0gd2ViUGFnZVByb3h5LnRha2VWaWV3U25hcHNob3QoKTsKLSAgICBpZiAoIXNuYXBz
aG90IHx8ICFzbmFwc2hvdC0+aGFzSW1hZ2UoKSkKKyAgICBpZiAoIXNuYXBzaG90KQogICAgICAg
ICByZXR1cm47CiAKICAgICBzbmFwc2hvdC0+c2V0UmVuZGVyVHJlZVNpemUod2ViUGFnZVByb3h5
LnJlbmRlclRyZWVTaXplKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262458</attachid>
            <date>2015-10-05 12:59:51 -0700</date>
            <delta_ts>2015-10-05 13:29:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>12573</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEwLTA1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBDb21wcmVzcyBzbmFwc2hvdHMgb24g
aU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4
MTQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8y
Mjk3NjIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgIFRob3VnaCB0aGUgZGVmYXVsdCBpcyBz
dGlsbCBSR0JBLCBpdCBpcyBub3cgcG9zc2libGUgdG8gY3JlYXRlIGFuZCBJT1N1cmZhY2UgCisg
ICAgICAgIHRoYXQgdXNlcyB0aGUgWVVWNDIyIHBpeGVsIGZvcm1hdC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChJT1N1cmZhY2U6OnN1cmZhY2VGcm9t
UG9vbCk6CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZSk6CisgICAgICAgIChJT1N1cmZhY2U6OklPU3VyZmFjZSk6CisgICAg
ICAgIChJT1N1cmZhY2U6OnJlbGVhc2VHcmFwaGljc0NvbnRleHQpOgorCisgICAgICAgIEluIG9y
ZGVyIHRvIGhhdmUgYSBZVVYgSU9TdXJmYWNlLCB3ZSBhY3R1YWxseSBoYXZlIHRvIGNyZWF0ZSBh
biBSR0JBIHN1cmZhY2UgCisgICAgICAgIGZpcnN0IGFuZCB0aGVuIGNvbnZlcnQgaXQgdG8gWVVW
LCBzbyB0aGlzIGNsYXNzIG1ldGhvZCB3aWxsIGhhbmRsZSB0aGF0LgorICAgICAgICAoSU9TdXJm
YWNlOjpjb252ZXJ0VG9Gb3JtYXQpOgorCisgICAgICAgIE5lY2Vzc2FyeSBTUEkuCisgICAgICAg
ICogcGxhdGZvcm0vc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oOgorCiAyMDE1LTEwLTAzICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgYW4gb2JqZWN0J3Mg
bWFya2luZyBzdGF0ZSB0byB0cmFjayBUaGUgVGhyZWUgQ29sb3JzCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAkocmV2aXNp
b24gMTkwNTY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDE0IEBAIGNsYXNzIE1hY2hTZW5k
UmlnaHQ7CiAKIGNsYXNzIElPU3VyZmFjZSBmaW5hbCB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZShJbnRTaXplLCBD
b2xvclNwYWNlKTsKKyAgICBlbnVtIGNsYXNzIEZvcm1hdCB7CisgICAgICAgIFJHQkEsCisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICBZVVY0MjIKKyNlbmRpZgorICAgIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlKEludFNp
emUsIENvbG9yU3BhY2UsIEZvcm1hdCA9IEZvcm1hdDo6UkdCQSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZShJbnRTaXplLCBJbnRT
aXplIGNvbnRleHRTaXplLCBDb2xvclNwYWNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVNlbmRSaWdodChjb25zdCBNYWNo
U2VuZFJpZ2h0JiwgQ29sb3JTcGFjZSk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ29sb3JTcGFjZSk7CkBAIC03
Myw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KICAgICBzaXplX3QgdG90YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxC
eXRlczsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3JTcGFjZTsgfQorICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsg
fQogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0luVXNlKCkgY29uc3Q7CiAKQEAgLTgwLDgg
Kzg4LDEyIEBAIHB1YmxpYzoKICAgICAvLyBhbiBhY2N1cmF0ZSByZXN1bHQgZnJvbSBpc0luVXNl
KCksIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVs
ZWFzZUdyYXBoaWNzQ29udGV4dCgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIGNvbnZlcnRUb0Zvcm1hdChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6SU9TdXJmYWNlPiYmIGluU3VyZmFjZSwgRm9ybWF0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4pPik7CisjZW5kaWYKKwogcHJpdmF0ZToK
LSAgICBJT1N1cmZhY2UoSW50U2l6ZSwgQ29sb3JTcGFjZSk7CisgICAgSU9TdXJmYWNlKEludFNp
emUsIENvbG9yU3BhY2UsIEZvcm1hdCk7CiAgICAgSU9TdXJmYWNlKEludFNpemUsIEludFNpemUg
Y29udGV4dFNpemUsIENvbG9yU3BhY2UpOwogICAgIElPU3VyZmFjZShJT1N1cmZhY2VSZWYsIENv
bG9yU3BhY2UpOwogCkBAIC05MCw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29u
dGV4dFNpemUoSW50U2l6ZSk7CiAKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKyAgICBG
b3JtYXQgbV9mb3JtYXQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgSW50U2l6ZSBtX2NvbnRl
eHRTaXplOwogICAgIHNpemVfdCBtX3RvdGFsQnl0ZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCShyZXZpc2lvbiAx
OTA1NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxNSBAQCBpbmxpbmUgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmCiAgICAgcmV0dXJuIGNhY2hlZFN1cmZhY2U7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlKEludFNpemUgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9T
dXJmYWNlOjpjcmVhdGUoSW50U2l6ZSBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEZvcm1h
dCBwaXhlbEZvcm1hdCkKIHsKLSAgICBpZiAoYXV0byBjYWNoZWRTdXJmYWNlID0gc3VyZmFjZUZy
b21Qb29sKHNpemUsIHNpemUsIGNvbG9yU3BhY2UpKQotICAgICAgICByZXR1cm4gY2FjaGVkU3Vy
ZmFjZTsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4obmV3IElPU3VyZmFj
ZShzaXplLCBjb2xvclNwYWNlKSk7CisgICAgLy8gWVVWNDIyIElPU3VyZmFjZXMgZG8gbm90IGdv
IGluIHRoZSBwb29sLgorICAgIGlmIChwaXhlbEZvcm1hdCA9PSBGb3JtYXQ6OlJHQkEpIHsKKyAg
ICAgICAgaWYgKGF1dG8gY2FjaGVkU3VyZmFjZSA9IHN1cmZhY2VGcm9tUG9vbChzaXplLCBzaXpl
LCBjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdXJmYWNlOworICAgIH0K
KworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPihuZXcgSU9TdXJmYWNlKHNp
emUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlKEludFNpemUgc2l6ZSwgSW50U2l6ZSBjb250ZXh0U2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtOTIsMTcgKzk2LDMwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3IKICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAot
SU9TdXJmYWNlOjpJT1N1cmZhY2UoSW50U2l6ZSBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CitJT1N1cmZhY2U6OklPU3VyZmFjZShJbnRTaXplIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgRm9ybWF0IGZvcm1hdCkKICAgICA6IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgICwg
bV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX2NvbnRleHRTaXpl
KHNpemUpCiB7CiAgICAgdW5zaWduZWQgcGl4ZWxGb3JtYXQgPSAnQkdSQSc7CisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsK
KyAgICB1bnNpZ25lZCBlbGVtZW50V2lkdGggPSAxOworCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGlmIChmb3JtYXQgPT0gRm9ybWF0OjpZVVY0MjIpIHsKKyAgICAgICAgcGl4ZWxGb3JtYXQgPSAn
eXV2Zic7CisgICAgICAgIGJ5dGVzUGVyUGl4ZWwgPSAyOworICAgICAgICBlbGVtZW50V2lkdGgg
PSAyOworICAgICAgICBieXRlc1BlckVsZW1lbnQgPSA0OworICAgIH0KKyNlbmRpZgorCiAgICAg
aW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgp
OwogCi0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9T
dXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50KTsKKyAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJv
dywgd2lkdGggKiBieXRlc1BlclBpeGVsKTsKICAgICBBU1NFUlQoYnl0ZXNQZXJSb3cpOwogCiAg
ICAgbV90b3RhbEJ5dGVzID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NT
aXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CkBAIC0xMTYsMTUgKzEzMywxNyBAQCBJT1N1cmZh
Y2U6OklPU3VyZmFjZShJbnRTaXplIHNpemUsIENvbG9yCiAgICAgICAgIChpZClrSU9TdXJmYWNl
Qnl0ZXNQZXJSb3c6IEAoYnl0ZXNQZXJSb3cpLAogICAgICAgICAoaWQpa0lPU3VyZmFjZUFsbG9j
U2l6ZTogQChtX3RvdGFsQnl0ZXMpLAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgKGlkKWtJ
T1N1cmZhY2VDYWNoZU1vZGU6IEAoa0lPTWFwV3JpdGVDb21iaW5lQ2FjaGUpCisgICAgICAgIChp
ZClrSU9TdXJmYWNlQ2FjaGVNb2RlOiBAKGtJT01hcFdyaXRlQ29tYmluZUNhY2hlKSwKICNlbmRp
ZgorICAgICAgICAoaWQpa0lPU3VyZmFjZUVsZW1lbnRXaWR0aDogQChlbGVtZW50V2lkdGgpLAor
ICAgICAgICAoaWQpa0lPU3VyZmFjZUVsZW1lbnRIZWlnaHQ6IEAoMSkKICAgICB9OwogCiAgICAg
bV9zdXJmYWNlID0gYWRvcHRDRihJT1N1cmZhY2VDcmVhdGUoKENGRGljdGlvbmFyeVJlZilvcHRp
b25zKSk7CiB9CiAKIElPU3VyZmFjZTo6SU9TdXJmYWNlKEludFNpemUgc2l6ZSwgSW50U2l6ZSBj
b250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogSU9TdXJmYWNlKHNpemUs
IGNvbG9yU3BhY2UpCisgICAgOiBJT1N1cmZhY2Uoc2l6ZSwgY29sb3JTcGFjZSwgRm9ybWF0OjpS
R0JBKQogewogICAgIEFTU0VSVChjb250ZXh0U2l6ZS53aWR0aCgpIDw9IHNpemUud2lkdGgoKSk7
CiAgICAgQVNTRVJUKGNvbnRleHRTaXplLmhlaWdodCgpIDw9IHNpemUuaGVpZ2h0KCkpOwpAQCAt
MTMzLDYgKzE1Miw3IEBAIElPU3VyZmFjZTo6SU9TdXJmYWNlKEludFNpemUgc2l6ZSwgSW50U2kK
IAogSU9TdXJmYWNlOjpJT1N1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKICAgICA6IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgICwgbV9mb3Jt
YXQoRm9ybWF0OjpSR0JBKQogICAgICwgbV9zdXJmYWNlKHN1cmZhY2UpCiB7CiAgICAgbV9zaXpl
ID0gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKSwgSU9TdXJmYWNlR2V0SGVpZ2h0
KHN1cmZhY2UpKTsKQEAgLTIyOCw0ICsyNDgsMzkgQEAgdm9pZCBJT1N1cmZhY2U6OnJlbGVhc2VH
cmFwaGljc0NvbnRleHQoKQogICAgIG1fY2dDb250ZXh0ID0gbnVsbHB0cjsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKKyB2b2lkIElPU3VyZmFjZTo6Y29udmVydFRvRm9ybWF0KHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+JiYgaW5TdXJmYWNlLCBGb3JtYXQgZm9ybWF0LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4pPiBjYWxs
YmFjaykKK3sKKyAgICBzdGF0aWMgSU9TdXJmYWNlQWNjZWxlcmF0b3JSZWYgYWNjZWxlcmF0b3I7
CisgICAgaWYgKCFhY2NlbGVyYXRvcikgeworICAgICAgICBJT1N1cmZhY2VBY2NlbGVyYXRvckNy
ZWF0ZShudWxscHRyLCBudWxscHRyLCAmYWNjZWxlcmF0b3IpOworCisgICAgICAgIGF1dG8gcnVu
TG9vcFNvdXJjZSA9IElPU3VyZmFjZUFjY2VsZXJhdG9yR2V0UnVuTG9vcFNvdXJjZShhY2NlbGVy
YXRvcik7CisgICAgICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRNYWluKCksIHJ1
bkxvb3BTb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgfQorCisgICAgaWYgKGlu
U3VyZmFjZS0+Zm9ybWF0KCkgPT0gZm9ybWF0KSB7CisgICAgICAgIGNhbGxiYWNrKFdURjo6bW92
ZShpblN1cmZhY2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZGVzdGlu
YXRpb25TdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW5TdXJmYWNlLT5zaXplKCksIGluU3Vy
ZmFjZS0+Y29sb3JTcGFjZSgpLCBmb3JtYXQpOworICAgIElPU3VyZmFjZVJlZiBkZXN0aW5hdGlv
bklPU3VyZmFjZVJlZiA9IGRlc3RpbmF0aW9uU3VyZmFjZS0+c3VyZmFjZSgpOworCisgICAgSU9T
dXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uIGNvbXBsZXRpb247CisgICAgY29tcGxldGlvbi5j
b21wbGV0aW9uUmVmQ29uID0gbmV3IHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPik+IChXVEY6Om1vdmUoY2FsbGJhY2spKTsKKyAgICBjb21wbGV0aW9uLmNvbXBs
ZXRpb25SZWZDb24yID0gZGVzdGluYXRpb25TdXJmYWNlLnJlbGVhc2UoKTsKKyAgICBjb21wbGV0
aW9uLmNvbXBsZXRpb25DYWxsYmFjayA9IFtdKHZvaWQgKmNvbXBsZXRpb25SZWZDb24sIElPUmV0
dXJuLCB2b2lkICogY29tcGxldGlvblJlZkNvbjIpIHsKKyAgICAgICAgYXV0byogY2FsbGJhY2sg
PSBzdGF0aWNfY2FzdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OklPU3VyZmFjZT4pPio+KGNvbXBsZXRpb25SZWZDb24pOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uU3VyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+KHN0YXRpY19jYXN0PElPU3Vy
ZmFjZSo+KGNvbXBsZXRpb25SZWZDb24yKSk7CisgICAgICAgIAorICAgICAgICAoKmNhbGxiYWNr
KShXVEY6Om1vdmUoZGVzdGluYXRpb25TdXJmYWNlKSk7CisgICAgICAgIGRlbGV0ZSBjYWxsYmFj
azsKKyAgICB9OworCisgICAgSU9SZXR1cm4gcmV0ID0gSU9TdXJmYWNlQWNjZWxlcmF0b3JUcmFu
c2Zvcm1TdXJmYWNlKGFjY2VsZXJhdG9yLCBpblN1cmZhY2UtPnN1cmZhY2UoKSwgZGVzdGluYXRp
b25JT1N1cmZhY2VSZWYsIG51bGxwdHIsIG51bGxwdHIsICZjb21wbGV0aW9uLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IGtJT1JldHVyblN1Y2Nlc3Mp
OworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0lPU3VyZmFj
ZVNQSS5oCShyZXZpc2lvbiAxOTA1NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
Y29jb2EvSU9TdXJmYWNlU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDM1IEBAIElP
UmV0dXJuIElPU3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2UKIAogV1RGX0VYVEVSTl9DX0VO
RAogCi0jZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKKworI2ltcG9ydCA8SU9TdXJmYWNlQWNjZWxlcmF0b3IvSU9TdXJmYWNlQWNjZWxlcmF0b3Iu
aD4KKworI2Vsc2UKKwordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2VBY2NlbGVyYXRvciAqSU9T
dXJmYWNlQWNjZWxlcmF0b3JSZWY7CisKK1dURl9FWFRFUk5fQ19CRUdJTgorCitJT1JldHVybiBJ
T1N1cmZhY2VBY2NlbGVyYXRvckNyZWF0ZShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGlj
dGlvbmFyeVJlZiBwcm9wZXJ0aWVzLCBJT1N1cmZhY2VBY2NlbGVyYXRvclJlZiogYWNjZWxlcmF0
b3JPdXQpOworQ0ZSdW5Mb29wU291cmNlUmVmIElPU3VyZmFjZUFjY2VsZXJhdG9yR2V0UnVuTG9v
cFNvdXJjZShJT1N1cmZhY2VBY2NlbGVyYXRvclJlZiBhY2NlbGVyYXRvcik7CisKK3R5cGVkZWYg
dm9pZCAoKklPU3VyZmFjZUFjY2VsZXJhdG9yQ29tcGxldGlvbkNhbGxiYWNrKSh2b2lkKiBjb21w
bGV0aW9uUmVmQ29uLCBJT1JldHVybiBzdGF0dXMsIHZvaWQqIGNvbXBsZXRpb25SZWZDb24yKTsK
KwordHlwZWRlZiBzdHJ1Y3QgSU9TdXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uIHsKKyAgICBJ
T1N1cmZhY2VBY2NlbGVyYXRvckNvbXBsZXRpb25DYWxsYmFjayBjb21wbGV0aW9uQ2FsbGJhY2s7
CisgICAgdm9pZCogY29tcGxldGlvblJlZkNvbjsKKyAgICB2b2lkKiBjb21wbGV0aW9uUmVmQ29u
MjsKK30gSU9TdXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uOworCitJT1JldHVybiBJT1N1cmZh
Y2VBY2NlbGVyYXRvclRyYW5zZm9ybVN1cmZhY2UoSU9TdXJmYWNlQWNjZWxlcmF0b3JSZWYgYWNj
ZWxlcmF0b3IsIElPU3VyZmFjZVJlZiBzb3VyY2VCdWZmZXIsIElPU3VyZmFjZVJlZiBkZXN0aW5h
dGlvbkJ1ZmZlciwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMsIHZvaWQqIHBDcm9wUmVjdGFuZ2xl
cywgSU9TdXJmYWNlQWNjZWxlcmF0b3JDb21wbGV0aW9uKiBwQ29tcGxldGlvbiwgdm9pZCogcFN3
YXAsIHVpbnQzMl90KiBwQ29tbWFuZElEKTsKKworV1RGX0VYVEVSTl9DX0VORAorCisjZW5kaWYg
Ly8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKIAogI2VuZGlmIC8vIElPU3VyZmFjZVNQ
SV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA1NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNS0xMC0wNSAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29tcHJlc3Mgc25hcHNob3Rz
IG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ5ODE0CisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2Js
ZW0vMjI5NzYyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb21wcmVzcyB0aGUgc25hcHNob3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfdGFrZVZpZXdTbmFwc2hvdF0p
OgorCisgICAgICAgIFNpbmNlIHRoZSBzbmFwc2hvdHMgYXJlIGNvbnZlcnRlZCB0byBZVVYgYXN5
bmNocm9ub3VzbHksIGl0IGlzIHBvc3NpYmxlIHRvIAorICAgICAgICBnZXQgaGVyZSBhbmQgaGF2
ZSBhIHNuYXBzaG90IHRoYXQgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gCisgICAgICAgIHJlbGF4IHRoaXMgY29uc3RyYWludC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RT
dG9yZTo6cmVjb3JkU25hcHNob3QpOgorCiAyMDE1LTEwLTA1ICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2Fubm90IHNlbGVjdCBjZXJ0YWluIHRleHQgb24g
V2lraXBlZGlhIGhvbWVwYWdlIGV2ZW4gd2hlbiB6b29tZWQgaW4uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMTkw
NTY4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExMjYsNyArMTEyNiwxMiBAQCAtIChQYXNzUmVmUHRyPFdlYktp
dDo6Vmlld1NuYXBzaG90PilfdGFrCiAgICAgYXV0byBzdXJmYWNlID0gV2ViQ29yZTo6SU9TdXJm
YWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKHNuYXBzaG90U2l6ZSksIFdlYkNv
cmU6OkNvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIENBUmVuZGVyU2VydmVyUmVuZGVyTGF5ZXJX
aXRoVHJhbnNmb3JtKE1BQ0hfUE9SVF9OVUxMLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElk
LCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihzZWxmLmxheWVyKSwgc3VyZmFjZS0+c3VyZmFj
ZSgpLCAwLCAwLCAmdHJhbnNmb3JtKTsKIAotICAgIHJldHVybiBXZWJLaXQ6OlZpZXdTbmFwc2hv
dDo6Y3JlYXRlKFdURjo6bW92ZShzdXJmYWNlKSk7CisgICAgUmVmUHRyPFdlYktpdDo6Vmlld1Nu
YXBzaG90PiB2aWV3U25hcHNob3QgPSBXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Y3JlYXRlKG51bGxw
dHIpOworICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6Y29udmVydFRvRm9ybWF0KFdURjo6bW92ZShz
dXJmYWNlKSwgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OllVVjQyMiwgW3ZpZXdTbmFwc2hv
dF0oc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gY29udmVydGVkU3VyZmFjZSkg
eworICAgICAgICB2aWV3U25hcHNob3QtPnNldFN1cmZhY2UoV1RGOjptb3ZlKGNvbnZlcnRlZFN1
cmZhY2UpKTsKKyAgICB9KTsKKworICAgIHJldHVybiB2aWV3U25hcHNob3Q7CiAjZWxzZQogICAg
IHVpbnQzMl90IHNsb3RJRCA9IFtXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRp
bmdDb250ZXh0KCkgY3JlYXRlSW1hZ2VTbG90OnNuYXBzaG90U2l6ZSBoYXNBbHBoYTpZRVNdOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90
U3RvcmUubW0JKHJldmlzaW9uIDE5MDU2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld1NuYXBzaG90U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBA
QCB2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXCiAgICAgd2ViUGFnZVBy
b3h5LndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CiAKICAgICBSZWZQdHI8Vmll
d1NuYXBzaG90PiBzbmFwc2hvdCA9IHdlYlBhZ2VQcm94eS50YWtlVmlld1NuYXBzaG90KCk7Ci0g
ICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNob3QtPmhhc0ltYWdlKCkpCisgICAgaWYgKCFzbmFw
c2hvdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc25hcHNob3QtPnNldFJlbmRlclRyZWVTaXpl
KHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpKTsK
</data>
<flag name="review"
          id="287649"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>