<?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>47996</bug_id>
          
          <creation_ts>2010-10-20 11:50:52 -0700</creation_ts>
          <short_desc>Video -&gt; Canvas doesn&apos;t work on Windows</short_desc>
          <delta_ts>2010-10-21 11:19:42 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.html5rocks.com/tutorials/video/basics/#toc-fun-canvas</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>eric.carlson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>296889</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-20 11:50:52 -0700</bug_when>
    <thetext>* STEPS TO REPRODUCE
1. go to http://www.html5rocks.com/tutorials/video/basics/
2. scroll down to section 5.4, second example
3. Start playing video in first frame

* RESULTS
Its supposed to draw in second and third frame, but it does not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296890</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-20 11:51:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/7884690&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296923</commentid>
    <comment_count>2</comment_count>
      <attachid>71318</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-20 12:18:25 -0700</bug_when>
    <thetext>Created attachment 71318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296984</commentid>
    <comment_count>3</comment_count>
      <attachid>71331</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-20 13:38:46 -0700</bug_when>
    <thetext>Created attachment 71331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297284</commentid>
    <comment_count>4</comment_count>
      <attachid>71404</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-21 01:30:57 -0700</bug_when>
    <thetext>Created attachment 71404
Patch

Fixed a couple of leaks: one pixelBufferAttributes dictionary and one ImageDescriptionHandle.  Updated the part of the QTDecompressionSession which creates the ImageDescription.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297455</commentid>
    <comment_count>5</comment_count>
      <attachid>71404</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-10-21 09:13:02 -0700</bug_when>
    <thetext>Comment on attachment 71404
Patch

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

r=me, but consider keeping the decompression session around for more than one frame.

&gt; WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:743
&gt; +            // We are probably being asked to render the video into a canvas, but 
&gt; +            // there&apos;s a good chance the QTPixelBuffer is not ARGB and thus can&apos;t be
&gt; +            // drawn using CG.  If so, fire up an ICMDecompressionSession and convert 
&gt; +            // the current frame into something which can be rendered by CG.
&gt; +            if (!buffer.pixelFormatIs32ARGB() &amp;&amp; !buffer.pixelFormatIs32BGRA()) {
&gt; +                QTDecompressionSession session;
&gt; +                buffer = session.decompress(buffer);
&gt; +            }

If we are being asked to render a frame to a canvas, we will almost certainly be asked to render more. Please consider keeping the decompression session around instead of creating it every time.

&gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:43
&gt; +    static void trackingCallback(void *decompressionTrackingRefCon, 
&gt; +        OSStatus, // result 
&gt; +        ICMDecompressionTrackingFlags decompressionTrackingFlags, 
&gt; +        CVPixelBufferRef pixelBuffer, 
&gt; +        TimeValue64, // displayTime 
&gt; +        TimeValue64, // displayDuration 
&gt; +        ICMValidTimeFlags, // validTimeFlags 
&gt; +        void *, // reserved 
&gt; +        void *) // sourceFrameRefCon 
&gt; +    {

The style of this declaration is odd for WebKit, do you need to have each param on a different line?

&gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:55
&gt; +QTDecompressionSession::QTDecompressionSession()
&gt; +    : m_client(new QTDecompressionSessionClient())

The client class is small and you always want one, why allocate it on the heap?

&gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:125
&gt; +        ImageDescriptionHandle description = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription));
&gt; +        (**description).idSize = sizeof(ImageDescription);
&gt; +        (**description).cType = cType;
&gt; +        (**description).version = 2;
&gt; +        (**description).spatialQuality = codecLosslessQuality;
&gt; +        (**description).width = inBuffer.width();
&gt; +        (**description).height = inBuffer.height();
&gt; +        (**description).hRes = 72 &lt;&lt; 16; // 72 DPI as a fixed-point number
&gt; +        (**description).vRes = 72 &lt;&lt; 16; // 72 DPI as a fixed-point number
&gt; +        (**description).frameCount = 1;
&gt; +        (**description).depth =  depth;
&gt; +        (**description).clutID = -1;
&gt; +
&gt; +        // Create the mandatory ICMDecompressionSessionOptions, but leave
&gt; +        // all the default values.
&gt; +        ICMDecompressionSessionOptionsRef options = 0;
&gt; +        ICMDecompressionSessionOptionsCreate(kCFAllocatorDefault, &amp;options);
&gt; +
&gt; +        CFDictionaryRef pixelBufferAttributes = QTPixelBuffer::createPixelBufferAttributesDictionary(QTPixelBuffer::ConfigureForCGImage);

You always need all of these and the values and/or sizes are always the same, so you might want to make them member variables (especially if you keep the decompression session around for more than one frame).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297473</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-21 09:44:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 71404 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71404&amp;action=review
&gt; 
&gt; r=me, but consider keeping the decompression session around for more than one frame.
&gt; 
&gt; &gt; WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:743
&gt; &gt; +            // We are probably being asked to render the video into a canvas, but 
&gt; &gt; +            // there&apos;s a good chance the QTPixelBuffer is not ARGB and thus can&apos;t be
&gt; &gt; +            // drawn using CG.  If so, fire up an ICMDecompressionSession and convert 
&gt; &gt; +            // the current frame into something which can be rendered by CG.
&gt; &gt; +            if (!buffer.pixelFormatIs32ARGB() &amp;&amp; !buffer.pixelFormatIs32BGRA()) {
&gt; &gt; +                QTDecompressionSession session;
&gt; &gt; +                buffer = session.decompress(buffer);
&gt; &gt; +            }
&gt; 
&gt; If we are being asked to render a frame to a canvas, we will almost certainly be asked to render more. Please consider keeping the decompression session around instead of creating it every time.

I&apos;ll see what I can do.  The issue with keeping it around is, once it&apos;s created, it&apos;s dedicated to decompressing only one pixel format; if the media changes and begins outputting a different type of pixel format, the QTDecompressionSession will need to be recreated.

&gt; &gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:43
&gt; &gt; +    static void trackingCallback(void *decompressionTrackingRefCon, 
&gt; &gt; +        OSStatus, // result 
&gt; &gt; +        ICMDecompressionTrackingFlags decompressionTrackingFlags, 
&gt; &gt; +        CVPixelBufferRef pixelBuffer, 
&gt; &gt; +        TimeValue64, // displayTime 
&gt; &gt; +        TimeValue64, // displayDuration 
&gt; &gt; +        ICMValidTimeFlags, // validTimeFlags 
&gt; &gt; +        void *, // reserved 
&gt; &gt; +        void *) // sourceFrameRefCon 
&gt; &gt; +    {
&gt; 
&gt; The style of this declaration is odd for WebKit, do you need to have each param on a different line?

It&apos;s horribly, horribly long.  We don&apos;t have to put each param on a different line, but it&apos;s much more readable that way.  I could get rid of the comments describing what the (unused) parameters are, and shorted it to about 3 lines.

&gt; &gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:55
&gt; &gt; +QTDecompressionSession::QTDecompressionSession()
&gt; &gt; +    : m_client(new QTDecompressionSessionClient())
&gt; 
&gt; The client class is small and you always want one, why allocate it on the heap?

I think I can do this with only static methods by moving the m_latestFrame member into QTDecompressionSession and making the client class a friend.

&gt; &gt; WebCore/platform/graphics/win/QTDecompressionSession.cpp:125
&gt; &gt; +        ImageDescriptionHandle description = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription));
&gt; &gt; +        (**description).idSize = sizeof(ImageDescription);
&gt; &gt; +        (**description).cType = cType;
&gt; &gt; +        (**description).version = 2;
&gt; &gt; +        (**description).spatialQuality = codecLosslessQuality;
&gt; &gt; +        (**description).width = inBuffer.width();
&gt; &gt; +        (**description).height = inBuffer.height();
&gt; &gt; +        (**description).hRes = 72 &lt;&lt; 16; // 72 DPI as a fixed-point number
&gt; &gt; +        (**description).vRes = 72 &lt;&lt; 16; // 72 DPI as a fixed-point number
&gt; &gt; +        (**description).frameCount = 1;
&gt; &gt; +        (**description).depth =  depth;
&gt; &gt; +        (**description).clutID = -1;
&gt; &gt; +
&gt; &gt; +        // Create the mandatory ICMDecompressionSessionOptions, but leave
&gt; &gt; +        // all the default values.
&gt; &gt; +        ICMDecompressionSessionOptionsRef options = 0;
&gt; &gt; +        ICMDecompressionSessionOptionsCreate(kCFAllocatorDefault, &amp;options);
&gt; &gt; +
&gt; &gt; +        CFDictionaryRef pixelBufferAttributes = QTPixelBuffer::createPixelBufferAttributesDictionary(QTPixelBuffer::ConfigureForCGImage);
&gt; 
&gt; You always need all of these and the values and/or sizes are always the same, so you might want to make them member variables (especially if you keep the decompression session around for more than one frame).

Even if I do keep the session around for more than one frame, this part of the code should still only ever be called once (when setting up the ICMDecompressionSession.  So I&apos;m not sure it would make sense to make them member variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297480</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-10-21 10:04:41 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; If we are being asked to render a frame to a canvas, we will almost certainly be asked to render more. Please consider keeping the decompression session around instead of creating it every time.
&gt; 
&gt; I&apos;ll see what I can do.  The issue with keeping it around is, once it&apos;s created, it&apos;s dedicated to decompressing only one pixel format; if the media changes and begins outputting a different type of pixel format, the QTDecompressionSession will need to be recreated.
&gt; 
True, but the QTMovie will be destroyed if the movie is changed and I don&apos;t think a single visual context will vend more than one pixel format.


&gt; &gt; You always need all of these and the values and/or sizes are always the same, so you might want to make them member variables (especially if you keep the decompression session around for more than one frame).
&gt; 
&gt; Even if I do keep the session around for more than one frame, this part of the code should still only ever be called once (when setting up the ICMDecompressionSession.  So I&apos;m not sure it would make sense to make them member variables.

Well, if you do keep the decompression session around the canvas size could change so the image description would have to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297491</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-21 10:15:55 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; If we are being asked to render a frame to a canvas, we will almost certainly be asked to render more. Please consider keeping the decompression session around instead of creating it every time.
&gt; &gt; 
&gt; &gt; I&apos;ll see what I can do.  The issue with keeping it around is, once it&apos;s created, it&apos;s dedicated to decompressing only one pixel format; if the media changes and begins outputting a different type of pixel format, the QTDecompressionSession will need to be recreated.
&gt; &gt; 
&gt; True, but the QTMovie will be destroyed if the movie is changed and I don&apos;t think a single visual context will vend more than one pixel format.
&gt; 
&gt; 
&gt; &gt; &gt; You always need all of these and the values and/or sizes are always the same, so you might want to make them member variables (especially if you keep the decompression session around for more than one frame).
&gt; &gt; 
&gt; &gt; Even if I do keep the session around for more than one frame, this part of the code should still only ever be called once (when setting up the ICMDecompressionSession.  So I&apos;m not sure it would make sense to make them member variables.
&gt; 
&gt; Well, if you do keep the decompression session around the canvas size could change so the image description would have to be updated.

Okay, even though you r+&apos;d the last patch, I&apos;ll update a new one with the changes you proposed above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297502</commentid>
    <comment_count>9</comment_count>
      <attachid>71458</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-21 10:44:10 -0700</bug_when>
    <thetext>Created attachment 71458
Patch

Made the QTDecompressionSession persistent within the MediaPlayer. It&apos;s also now RefPtr compatible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297508</commentid>
    <comment_count>10</comment_count>
      <attachid>71458</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-10-21 10:55:49 -0700</bug_when>
    <thetext>Comment on attachment 71458
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297519</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-10-21 11:19:42 -0700</bug_when>
    <thetext>Committed r70252: &lt;http://trac.webkit.org/changeset/70252&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71318</attachid>
            <date>2010-10-20 12:18:25 -0700</date>
            <delta_ts>2010-10-20 13:38:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47996-20101020121827.patch</filename>
            <type>text/plain</type>
            <size>29712</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMjAgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmlk
ZW8gLT4gQ2FudmFzIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk5NgorICAgICAgICByZGFyOi8vcHJvYmxl
bS83ODg0NjkwCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvajog
QWRkZWQgUVREZWNvbXByZXNzaW9uU2Vzc2lvbi57Y3BwLGh9CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6cGFpbnQpOiBDcmVhdGUgYSAKKyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Np
b24gaWYgbmVjZXNzYXJ5IGFuZCBjb252ZXJ0IHRoZSBRVFBpeGVsQnVmZmVyCisgICAgICAgICAg
ICBpbnRvIGEgQ0ctY29tcGF0aWJsZSBvbmUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHA6CisgICAgICAgIChTZXRO
dW1iZXJWYWx1ZSk6IE1vdmVkIGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuCisgICAgICAgIChR
VFBpeGVsQnVmZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogTW92
ZWQgZnJvbSBpbnNpZGUKKyAgICAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGVQ
aXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogTW92ZWQgdGhlIFR5cGUgZW51bSAKKyAgICAgICAgICAg
IGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuaC4KKwogMjAxMC0xMC0yMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lvbiA3
MDA4MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0i
VkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxRVE1vdmllV2luLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRN
b3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KKwkJCQlDb21tYW5kTGluZT0ibWtk
aXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZx
dW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cUVRDRkRpY3Rpb25hcnkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVERlY29tcHJlc3Npb25T
ZXNzaW9uLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdp
biZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0
Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVHV29ybGQuaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNz
XHdpblxRVE1vdmllVGFzay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1YWxDb250ZXh0LmgmcXVvdDsg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3
aW5cUVRNb3ZpZVdpblRpbWVyLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1
ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRQaXhlbEJ1ZmZlci5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFU
VHJhY2suaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2lu
JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVp
bGRmYWlsZWQmcXVvdDsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJCTxDb25maWd1
cmF0aW9uDQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9
IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3
aW5cUVRNb3ZpZVdpbi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFU
TW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCisJCQkJQ29tbWFuZExpbmU9Im1r
ZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4m
cXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXFFUQ0ZEaWN0aW9uYXJ5LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVREZWNvbXByZXNzaW9u
U2Vzc2lvbi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVX
aW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllR1dvcmxkLmgmcXVv
dDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW5cUVRNb3ZpZVRhc2suaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVk
ZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVmlzdWFsQ29udGV4dC5oJnF1b3Q7
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXFFUTW92aWVXaW5UaW1lci5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIuaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7
eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxR
VFRyYWNrLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdp
biZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1
aWxkZmFpbGVkJnF1b3Q7Ig0KIAkJCS8+DQogCQk8L0NvbmZpZ3VyYXRpb24+DQogCQk8Q29uZmln
dXJhdGlvbg0KQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1l
PSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVM
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXFFUTW92aWVXaW4uaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxR
VE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1
dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQorCQkJCUNvbW1hbmRMaW5lPSJt
a2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2lu
JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXGdyYXBoaWNzXHdpblxRVENGRGljdGlvbmFyeS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFURGVjb21wcmVzc2lv
blNlc3Npb24uaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmll
V2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
YXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZUdXb3JsZC5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gw
RDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luXFFUTW92aWVUYXNrLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1
ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVZpc3VhbENvbnRleHQuaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNz
XHdpblxRVE1vdmllV2luVGltZXIuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVFBpeGVsQnVmZmVyLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBB
O3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5c
UVRUcmFjay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVX
aW4mcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxi
dWlsZGZhaWxlZCZxdW90OyINCiAJCQkvPg0KIAkJPC9Db25maWd1cmF0aW9uPg0KIAkJPENvbmZp
Z3VyYXRpb24NCkBAIC0zMDEsNyArMzAxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFt
ZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05V
TCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNz
XHdpblxRVE1vdmllQ0ZEaWN0aW9uYXJ5LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQo
UHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFU
TW92aWVHV29ybGQuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1v
dmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFzay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1
YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3Zp
ZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpblRpbWVyLmgmcXVvdDsgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95
IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVBp
eGVsQnVmZmVyLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3Zp
ZVdpbiZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KKwkJCQlDb21tYW5kTGluZT0ibWtkaXIg
MiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90
OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxn
cmFwaGljc1x3aW5cUVRDRkRpY3Rpb25hcnkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVERlY29tcHJlc3Npb25TZXNz
aW9uLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZx
dW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVHV29ybGQuaCZxdW90OyAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxRVE1vdmllVGFzay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFU
TW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1YWxDb250ZXh0LmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBB
O3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5c
UVRNb3ZpZVdpblRpbWVyLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
UVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRQaXhlbEJ1ZmZlci5oJnF1b3Q7ICZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUVHJh
Y2suaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1
b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRm
YWlsZWQmcXVvdDsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJPC9Db25maWd1cmF0
aW9ucz4NCkBAIC0zMTgsNiArMzE4LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVERlY29tcHJl
c3Npb25TZXNzaW9uLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkBAIC0zNTYsNiArMzYwLDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxR
VERlY29tcHJlc3Npb25TZXNzaW9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiA3MDA4NCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oIgogI2luY2x1ZGUgIlFUQ0ZE
aWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oIgogI2luY2x1
ZGUgIlFUTW92aWUuaCIKICNpbmNsdWRlICJRVE1vdmllVGFzay5oIgogI2luY2x1ZGUgIlFUTW92
aWVWaXN1YWxDb250ZXh0LmgiCkBAIC03MjgsMTIgKzcyOSwyMCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvCiAgICAgaWYgKGN1cnJlbnRNb2RlID09IE1lZGlhUmVu
ZGVyaW5nU29mdHdhcmVSZW5kZXJlciAmJiAhbV92aXN1YWxDb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fcXRWaWRl
b0xheWVyKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKICAgICBRVFBpeGVsQnVmZmVyIGJ1ZmZl
ciA9IG1fdmlzdWFsQ29udGV4dC0+aW1hZ2VGb3JUaW1lKDApOwogICAgIGlmIChidWZmZXIucGl4
ZWxCdWZmZXJSZWYoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAg
ICAgaWYgKG1fcXRWaWRlb0xheWVyKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgcHJvYmFibHkg
YmVpbmcgYXNrZWQgdG8gcmVuZGVyIHRoZSB2aWRlbyBpbnRvIGEgY2FudmFzLCBidXQgCisgICAg
ICAgICAgICAvLyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhlIFFUUGl4ZWxCdWZmZXIgaXMgbm90
IEFSR0IgYW5kIHRodXMgY2FuJ3QgYmUKKyAgICAgICAgICAgIC8vIGRyYXduIHVzaW5nIENHLiAg
SWYgc28sIGZpcmUgdXAgYW4gSUNNRGVjb21wcmVzc2lvblNlc3Npb24gYW5kIGNvbnZlcnQgCisg
ICAgICAgICAgICAvLyB0aGUgY3VycmVudCBmcmFtZSBpbnRvIHNvbWV0aGluZyB3aGljaCBjYW4g
YmUgcmVuZGVyZWQgYnkgQ0cuCisgICAgICAgICAgICBpZiAoIWJ1ZmZlci5waXhlbEZvcm1hdElz
MzJBUkdCKCkgJiYgIWJ1ZmZlci5waXhlbEZvcm1hdElzMzJCR1JBKCkpIHsKKyAgICAgICAgICAg
ICAgICBRVERlY29tcHJlc3Npb25TZXNzaW9uIHNlc3Npb247CisgICAgICAgICAgICAgICAgYnVm
ZmVyID0gc2Vzc2lvbi5kZWNvbXByZXNzKGJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgogICAgICAgICBDR0ltYWdlUmVmIGltYWdlID0gQ3JlYXRlQ0dJbWFnZUZyb21Q
aXhlbEJ1ZmZlcihidWZmZXIpOwogICAgICAgICAKICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwLT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTEwODksNyArMTA5OCw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KICAgICAgICAgbV9wbGF5ZXItPm1lZGlh
UGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIp
OwogI2VuZGlmCiAKLSAgICBRVE1vdmllVmlzdWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSA9
IHJlcXVpcmVkRGxsc0F2YWlsYWJsZSgpICYmIHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJp
bmdNb3ZpZUxheWVyID8gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OkNvbmZpZ3VyZUZvckNBSW1hZ2VR
dWV1ZSA6IFFUTW92aWVWaXN1YWxDb250ZXh0OjpDb25maWd1cmVGb3JDR0ltYWdlOworICAgIFFU
UGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUgPSByZXF1aXJlZERsbHNBdmFpbGFibGUoKSAm
JiBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciA/IFFUUGl4ZWxCdWZm
ZXI6OkNvbmZpZ3VyZUZvckNBSW1hZ2VRdWV1ZSA6IFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZv
ckNHSW1hZ2U7CiAgICAgbV92aXN1YWxDb250ZXh0ID0gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmNy
ZWF0ZShtX3Zpc3VhbENvbnRleHRDbGllbnQuZ2V0KCksIGNvbnRleHRUeXBlKTsKICAgICBtX3Zp
c3VhbENvbnRleHQtPnNldE1vdmllKG1fbW92aWUuZ2V0KCkpOwogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lv
bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERl
Y29tcHJlc3Npb25TZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJRVERlY29tcHJlc3Npb25TZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxJbWFnZUNvbXByZXNzaW9u
Lmg+CisKK2NsYXNzIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQgeworcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIHRyYWNraW5nQ2FsbGJhY2sodm9pZCAqZGVjb21wcmVzc2lvblRyYWNraW5n
UmVmQ29uLCAKKyAgICAgICAgT1NTdGF0dXMsIC8vIHJlc3VsdCAKKyAgICAgICAgSUNNRGVjb21w
cmVzc2lvblRyYWNraW5nRmxhZ3MgZGVjb21wcmVzc2lvblRyYWNraW5nRmxhZ3MsIAorICAgICAg
ICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyLCAKKyAgICAgICAgVGltZVZhbHVlNjQsIC8v
IGRpc3BsYXlUaW1lIAorICAgICAgICBUaW1lVmFsdWU2NCwgLy8gZGlzcGxheUR1cmF0aW9uIAor
ICAgICAgICBJQ01WYWxpZFRpbWVGbGFncywgLy8gdmFsaWRUaW1lRmxhZ3MgCisgICAgICAgIHZv
aWQgKiwgLy8gcmVzZXJ2ZWQgCisgICAgICAgIHZvaWQgKikgLy8gc291cmNlRnJhbWVSZWZDb24g
CisgICAgeworICAgICAgICBRVERlY29tcHJlc3Npb25TZXNzaW9uQ2xpZW50KiBjbGllbnQgPSBz
dGF0aWNfY2FzdDxRVERlY29tcHJlc3Npb25TZXNzaW9uQ2xpZW50Kj4oZGVjb21wcmVzc2lvblRy
YWNraW5nUmVmQ29uKTsKKyAgICAgICAgQVNTRVJUKGNsaWVudCk7CisKKyAgICAgICAgaWYgKGRl
Y29tcHJlc3Npb25UcmFja2luZ0ZsYWdzICYga0lDTURlY29tcHJlc3Npb25UcmFja2luZ19GcmFt
ZURlY29kZWQpCisgICAgICAgICAgICBjbGllbnQtPm1fbGF0ZXN0RnJhbWUgPSBRVFBpeGVsQnVm
ZmVyKHBpeGVsQnVmZmVyKTsKKyAgICB9CisKKyAgICBRVFBpeGVsQnVmZmVyIG1fbGF0ZXN0RnJh
bWU7Cit9OworCitRVERlY29tcHJlc3Npb25TZXNzaW9uOjpRVERlY29tcHJlc3Npb25TZXNzaW9u
KCkKKyAgICA6IG1fY2xpZW50KG5ldyBRVERlY29tcHJlc3Npb25TZXNzaW9uQ2xpZW50KCkpCisg
ICAgLCBtX3Nlc3Npb24oMCkKK3sKK30KKworUVREZWNvbXByZXNzaW9uU2Vzc2lvbjo6flFURGVj
b21wcmVzc2lvblNlc3Npb24oKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgZGVsZXRl
IG1fY2xpZW50OworICAgIGlmIChtX3Nlc3Npb24pCisgICAgICAgIElDTURlY29tcHJlc3Npb25T
ZXNzaW9uUmVsZWFzZShtX3Nlc3Npb24pOworfQorCitRVFBpeGVsQnVmZmVyIFFURGVjb21wcmVz
c2lvblNlc3Npb246OmRlY29tcHJlc3MoUVRQaXhlbEJ1ZmZlciBpbkJ1ZmZlcikKK3sKKyAgICBp
ZiAoIW1fc2Vzc2lvbikgeworICAgICAgICBJQ01EZWNvbXByZXNzaW9uVHJhY2tpbmdDYWxsYmFj
a1JlY29yZCBjYWxsYmFjayA9IHsKKyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb25D
bGllbnQ6OnRyYWNraW5nQ2FsbGJhY2ssCisgICAgICAgICAgICBtX2NsaWVudCwKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIG1hbmRpdG9yeSBJQ01EZWNvbXByZXNzaW9uU2Vz
c2lvbk9wdGlvbnMsIGJ1dCBsZWF2ZQorICAgICAgICAvLyBhbGwgdGhlIGRlZmF1bHQgdmFsdWVz
LnMKKyAgICAgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25PcHRpb25zUmVmIG9wdGlvbnMgPSAw
OworICAgICAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbk9wdGlvbnNDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgJm9wdGlvbnMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW50IHBp
eGVsRm9ybWF0ID0gaW5CdWZmZXIucGl4ZWxGb3JtYXRUeXBlKCk7CisgICAgICAgIHVuc2lnbmVk
IGludCBkZXB0aCA9IDggKiBpbkJ1ZmZlci5ieXRlc1BlclJvdygpIC8gaW5CdWZmZXIud2lkdGgo
KTsKKyAgICAgICAgSW1hZ2VEZXNjcmlwdGlvbkhhbmRsZSBkZXNjcmlwdGlvbiA9IChJbWFnZURl
c2NyaXB0aW9uSGFuZGxlKU5ld0hhbmRsZUNsZWFyKHNpemVvZihJbWFnZURlc2NyaXB0aW9uKSk7
CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5pZFNpemUgPSBzaXplb2YoSW1hZ2VEZXNjcmlwdGlv
bik7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5jVHlwZSA9IHBpeGVsRm9ybWF0OworICAgICAg
ICAoKipkZXNjcmlwdGlvbikudmVyc2lvbiA9IDI7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5z
cGF0aWFsUXVhbGl0eSA9IGNvZGVjTG9zc2xlc3NRdWFsaXR5OworICAgICAgICAoKipkZXNjcmlw
dGlvbikud2lkdGggPSBpbkJ1ZmZlci53aWR0aCgpOworICAgICAgICAoKipkZXNjcmlwdGlvbiku
aGVpZ2h0ID0gaW5CdWZmZXIuaGVpZ2h0KCk7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5oUmVz
ID0gNzIgPDwgMTY7IC8vIG1hZ2ljIG51bWJlcgorICAgICAgICAoKipkZXNjcmlwdGlvbikudlJl
cyA9IDcyIDw8IDE2OyAvLyBtYWdpYyBudW1iZXIKKyAgICAgICAgKCoqZGVzY3JpcHRpb24pLmZy
YW1lQ291bnQgPSAxOworICAgICAgICAoKipkZXNjcmlwdGlvbikuZGVwdGggPSAgZGVwdGg7Cisg
ICAgICAgICgqKmRlc2NyaXB0aW9uKS5jbHV0SUQgPSAtMTsKKworICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzID0gUVRQaXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFyeShRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDR0lt
YWdlKTsKKworICAgICAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbkNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LAorICAgICAgICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgICAgICBvcHRpb25z
LAorICAgICAgICAgICAgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLAorICAgICAgICAgICAgJmNhbGxi
YWNrLAorICAgICAgICAgICAgJm1fc2Vzc2lvbik7CisKKyAgICAgICAgSUNNRGVjb21wcmVzc2lv
blNlc3Npb25PcHRpb25zUmVsZWFzZShvcHRpb25zKTsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Vz
c2lvbikKKyAgICAgICAgcmV0dXJuIFFUUGl4ZWxCdWZmZXIoKTsKKyAgICAKKyAgICBpbkJ1ZmZl
ci5sb2NrQmFzZUFkZHJlc3MoKTsKKyAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbkRlY29kZUZy
YW1lKG1fc2Vzc2lvbiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8VUludDgqPihpbkJ1ZmZlci5iYXNl
QWRkcmVzcygpKSwKKyAgICAgICAgaW5CdWZmZXIuZGF0YVNpemUoKSwKKyAgICAgICAgMCwgLy8g
ZnJhbWVPcHRpb25zCisgICAgICAgIDAsIC8vIGZyYW1lVGltZQorICAgICAgICAwKTsgLy8gc291
cmNlRnJhbWVSZWZDb24KKworICAgIC8vIEJlY2F1c2Ugd2UgcGFzc2VkIGluIDAgZm9yIGZyYW1l
VGltZSwgdGhlIGFib3ZlIGZ1bmN0aW9uCisgICAgLy8gaXMgc3luY2hyb25vdXMsIGFuZCB0aGUg
bV9jbGllbnQgY2FsbGJhY2sgd2lsbCBoYXZlIGJlZW4KKyAgICAvLyBjYWxsZWQgYmVmb3JlIHRo
ZSBmdW5jdGlvbiByZXR1cm5zLCBhbmQgbV9jbGllbnQtPm1fbGF0ZXN0RnJhbWUKKyAgICAvLyB3
aWxsIGNvbnRhaW4gdGhlIG5ld2x5IGRlY29tcHJlc3NlZCBmcmFtZS4KKyAgICByZXR1cm4gbV9j
bGllbnQtPm1fbGF0ZXN0RnJhbWU7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFFURGVjb21wcmVzc2lvblNlc3Npb25faAorI2RlZmluZSBRVERlY29tcHJl
c3Npb25TZXNzaW9uX2gKKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1P
VklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVX
SU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlICJRVFBpeGVs
QnVmZmVyLmgiCisKK2NsYXNzIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ7Cit0eXBlZGVm
IHN0cnVjdCBPcGFxdWVJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbiogIElDTURlY29tcHJlc3Npb25T
ZXNzaW9uUmVmOworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVERlY29tcHJlc3Npb25TZXNzaW9u
IHsKK3B1YmxpYzoKKyAgICBRVERlY29tcHJlc3Npb25TZXNzaW9uKCk7CisgICAgflFURGVjb21w
cmVzc2lvblNlc3Npb24oKTsKKworICAgIC8vIFRoZSByZXN1bHRpbmcgUVRQaXhlbEJ1ZmZlciB3
aWxsIGJlIGEgQ0cgY29tcGF0YWJsZSBBUkdCIHBpeGVsIGJ1ZmZlcjoKKyAgICBRVFBpeGVsQnVm
ZmVyIGRlY29tcHJlc3MoUVRQaXhlbEJ1ZmZlcik7CisKK3ByaXZhdGU6CisgICAgUVREZWNvbXBy
ZXNzaW9uU2Vzc2lvbkNsaWVudCogbV9jbGllbnQ7CisgICAgSUNNRGVjb21wcmVzc2lvblNlc3Np
b25SZWYgbV9zZXNzaW9uOworfTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lv
biA3MDA4MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgUVRDVlRp
bWVTdGFtcCB7CiAKIGNsYXNzIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdiB7CiBwdWJsaWM6Ci0g
ICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQs
IFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0
OjpUeXBlIGNvbnRleHRUeXBlKTsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3Zp
ZVZpc3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVu
dCwgUVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSk7CiAgICAgflFUTW92aWVWaXN1YWxD
b250ZXh0UHJpdigpOwogCiAgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBR
VENWVGltZVN0YW1wKikgY29uc3Q7CkBAIC02MSw2MSArNjEsMjggQEAgcHJpdmF0ZToKIAogfTsK
IAotc3RhdGljIE9TU3RhdHVzIFNldE51bWJlclZhbHVlKENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
aW5EaWN0LCBDRlN0cmluZ1JlZiBpbktleSwgU0ludDMyIGluVmFsdWUpCitzdGF0aWMgQ0ZEaWN0
aW9uYXJ5UmVmIGNyZWF0ZVBpeGVsQnVmZmVyT3B0aW9uc0RpY3Rpb25hcnkoUVRQaXhlbEJ1ZmZl
cjo6VHlwZSBjb250ZXh0VHlwZSkKIHsKLSAgICBDRk51bWJlclJlZiBudW1iZXI7Ci0gCi0gICAg
bnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0lu
dDMyVHlwZSwgJmluVmFsdWUpOwotICAgIGlmICghbnVtYmVyKSAKLSAgICAgICAgcmV0dXJuIGNv
cmVGb3VuZGF0aW9uVW5rbm93bkVycjsKLSAKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRp
Y3QsIGluS2V5LCBudW1iZXIpOwotICAgIENGUmVsZWFzZShudW1iZXIpOwotCi0gICAgcmV0dXJu
IG5vRXJyOwotfQotCi1zdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZVBpeGVsQnVmZmVyT3B0
aW9uc0RpY3Rpb25hcnkoUVRNb3ZpZVZpc3VhbENvbnRleHQ6OlR5cGUgY29udGV4dFR5cGUpCi17
Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtEaXJlY3QzRENvbXBhdGliaWxpdHlLZXkg
PSBDRlNUUigiRGlyZWN0M0RDb21wYXRpYmlsaXR5Iik7Ci0KLSAgICBDRk11dGFibGVEaWN0aW9u
YXJ5UmVmIHBpeGVsQnVmZmVyT3B0aW9ucyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0KLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5
UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgaWYgKGNvbnRleHRUeXBlID09IFFU
TW92aWVWaXN1YWxDb250ZXh0OjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKLSAgICAgICAg
Ly8gQXNrIGZvciBEM0QgY29tcGF0aWJsZSBwaXhlbCBidWZmZXJzIHNvIG5vIGZ1cnRoZXIgd29y
ayBpcyBuZWVkZWQuCi0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHBpeGVsQnVmZmVyQXR0
cmlidXRlcywga0RpcmVjdDNEQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgazMyQkdSQVBpeGVsRm9ybWF0LCBhcyBRdWFy
dHpDb3JlIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhlIHBpeGVscyBkaXJlY3RseSwKLSAgICAgICAg
Ly8gd2l0aG91dCBuZWVkaW5nIGFuIGFkZGl0aW9uYWwgY29weSBvciByZW5kZXJpbmcgcGFzcy4K
LSAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1
ZmZlclBpeGVsRm9ybWF0VHlwZUtleSwgazMyQkdSQVBpeGVsRm9ybWF0KTsKLSAgICAgICAgICAg
IAotICAgICAgICAvLyBTZXQga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSB0
byAxNiB0byBlbnN1cmUgdGhhdCBlYWNoIHJvdyBvZiBwaXhlbHMgCi0gICAgICAgIC8vIHN0YXJ0
cyBhdCBhIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzIGZvciBtb3N0IGVmZmljaWVudCBkYXRhIHJl
YWRpbmcuCi0gICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NW
UGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSwgMTYpOwotICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVmZmVyQ0dJbWFn
ZUNvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0gCi0gICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUocGl4ZWxCdWZmZXJPcHRpb25zLCBrUVRWaXN1YWxDb250ZXh0UGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzS2V5LCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMpOwotCi0gICAgQ0ZSZWxl
YXNlKHBpeGVsQnVmZmVyQXR0cmlidXRlcyk7Ci0KKyAgICBjb25zdCB2b2lkKiBrZXkgPSBrUVRW
aXN1YWxDb250ZXh0UGl4ZWxCdWZmZXJBdHRyaWJ1dGVzS2V5OworICAgIGNvbnN0IHZvaWQqIHZh
bHVlID0gUVRQaXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFy
eShjb250ZXh0VHlwZSk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyT3B0aW9ucyA9
IENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAma2V5LCAmdmFsdWUsIDEs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpOworICAgIENGUmVsZWFzZSh2YWx1ZSk7CiAgICAgcmV0dXJuIHBpeGVsQnVmZmVy
T3B0aW9uczsKIH0KIAotc3RhdGljIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckNyZWF0aW9u
T3B0aW9ucyhRVE1vdmllVmlzdWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSkKK3N0YXRpYyBD
RkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoUVRQaXhlbEJ1ZmZlcjo6
VHlwZSBjb250ZXh0VHlwZSkKIHsKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUVRNb3ZpZVZpc3Vh
bENvbnRleHQ6OkNvbmZpZ3VyZUZvckNBSW1hZ2VRdWV1ZSkgeworICAgIGlmIChjb250ZXh0VHlw
ZSA9PSBRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKICAgICAgICAg
c3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVF1ZXVlT3B0aW9ucyA9IGNyZWF0ZVBpeGVsQnVm
ZmVyT3B0aW9uc0RpY3Rpb25hcnkoY29udGV4dFR5cGUpOwogICAgICAgICByZXR1cm4gaW1hZ2VR
dWV1ZU9wdGlvbnM7CiAgICAgfSAKIAotICAgIEFTU0VSVChjb250ZXh0VHlwZSA9PSBRVE1vdmll
VmlzdWFsQ29udGV4dDo6Q29uZmlndXJlRm9yQ0dJbWFnZSk7CisgICAgQVNTRVJUKGNvbnRleHRU
eXBlID09IFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZvckNHSW1hZ2UpOwogICAgIHN0YXRpYyBD
RkRpY3Rpb25hcnlSZWYgY2dJbWFnZU9wdGlvbnMgPSBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNE
aWN0aW9uYXJ5KGNvbnRleHRUeXBlKTsKICAgICByZXR1cm4gY2dJbWFnZU9wdGlvbnM7CiB9CiAK
LVFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92
aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGll
bnQsIFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBlKSAKK1FUTW92aWVWaXN1
YWxDb250ZXh0UHJpdjo6UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250
ZXh0KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxC
dWZmZXI6OlR5cGUgY29udGV4dFR5cGUpIAogICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKICAg
ICAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCkBA
IC0yMDYsMTIgKzE3MywxMiBAQCB2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aW1hZ2VB
dmFpCiAgICAgdmMtPm1fY2xpZW50LT5pbWFnZUF2YWlsYWJsZUZvclRpbWUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBRVENWVGltZVN0YW1wKj4odGltZVN0YW1wKSk7CiB9CiAKLVBhc3NSZWZQdHI8
UVRNb3ZpZVZpc3VhbENvbnRleHQ+IFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGUoUVRNb3Zp
ZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgVHlwZSBjb250ZXh0VHlwZSkKK1Bhc3NSZWZQ
dHI8UVRNb3ZpZVZpc3VhbENvbnRleHQ+IFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGUoUVRN
b3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgUVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250
ZXh0VHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFFUTW92aWVWaXN1YWxDb250ZXh0
KGNsaWVudCwgY29udGV4dFR5cGUpKTsKIH0KIAotUVRNb3ZpZVZpc3VhbENvbnRleHQ6OlFUTW92
aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFR5cGUg
Y29udGV4dFR5cGUpIAorUVRNb3ZpZVZpc3VhbENvbnRleHQ6OlFUTW92aWVWaXN1YWxDb250ZXh0
KFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUg
Y29udGV4dFR5cGUpIAogICAgIDogbV9wcml2YXRlKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dFBy
aXYodGhpcywgY2xpZW50LCBjb250ZXh0VHlwZSkpCiB7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlz
aW9uIDcwMDgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3Vh
bENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsNyBAQCBwdWJsaWM6CiAKIGNs
YXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVWaXN1YWxDb250ZXh0IDogcHVibGljIFJlZkNvdW50
ZWQ8UVRNb3ZpZVZpc3VhbENvbnRleHQ+IHsKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgeyBDb25m
aWd1cmVGb3JDR0ltYWdlLCBDb25maWd1cmVGb3JDQUltYWdlUXVldWUgfTsKLQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFFUTW92aWVWaXN1YWxDb250ZXh0PiBjcmVhdGUoUVRNb3ZpZVZpc3VhbENv
bnRleHRDbGllbnQqLCBUeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxRVE1vdmllVmlzdWFs
Q29udGV4dD4gY3JlYXRlKFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgUVRQaXhlbEJ1ZmZl
cjo6VHlwZSk7CiAgICAgflFUTW92aWVWaXN1YWxDb250ZXh0KCk7CiAKICAgICBib29sIGlzSW1h
Z2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSBjb25zdDsKQEAgLTcxLDcg
KzY5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBkb3VibGUgY3VycmVudEhvc3RUaW1lKCk7CiAK
IHByb3RlY3RlZDoKLSAgICBRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4
dENsaWVudCosIFR5cGUpOworICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxD
b250ZXh0Q2xpZW50KiwgUVRQaXhlbEJ1ZmZlcjo6VHlwZSk7CiAgICAgdm9pZCBzZXR1cFZpc3Vh
bENvbnRleHQoKTsKIAogICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVy
LmNwcAkocmV2aXNpb24gNzAwODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VFBpeGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5j
bHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgogCisjaW5jbHVkZSA8Q0ZOdW1iZXIuaD4KICNpbmNsdWRl
IDxDRlN0cmluZy5oPgogI2luY2x1ZGUgPENHQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPENHSW1h
Z2UuaD4KQEAgLTMzLDYgKzM0LDQxIEBACiAjaW5jbHVkZSA8UXVpY2tEcmF3Lmg+CiAjaW5jbHVk
ZSA8bWVtb3J5Lmg+CiAKK3N0YXRpYyBPU1N0YXR1cyBTZXROdW1iZXJWYWx1ZShDRk11dGFibGVE
aWN0aW9uYXJ5UmVmIGluRGljdCwgQ0ZTdHJpbmdSZWYgaW5LZXksIFNJbnQzMiBpblZhbHVlKQor
eworICAgIENGTnVtYmVyUmVmIG51bWJlcjsKKyAKKyAgICBudW1iZXIgPSBDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmaW5WYWx1ZSk7Cisg
ICAgaWYgKCFudW1iZXIpIAorICAgICAgICByZXR1cm4gY29yZUZvdW5kYXRpb25Vbmtub3duRXJy
OworIAorICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGluRGljdCwgaW5LZXksIG51bWJlcik7Cisg
ICAgQ0ZSZWxlYXNlKG51bWJlcik7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK0NGRGljdGlv
bmFyeVJlZiBRVFBpeGVsQnVmZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9u
YXJ5KFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIGtEaXJlY3QzRENvbXBhdGliaWxpdHlLZXkgPSBDRlNUUigiRGlyZWN0M0RD
b21wYXRpYmlsaXR5Iik7CisKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVy
QXR0cmlidXRlcyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlW
YWx1ZUNhbGxCYWNrcyk7CisgICAgaWYgKGNvbnRleHRUeXBlID09IFFUUGl4ZWxCdWZmZXI6OkNv
bmZpZ3VyZUZvckNBSW1hZ2VRdWV1ZSkgeworICAgICAgICAvLyBBc2sgZm9yIEQzRCBjb21wYXRp
YmxlIHBpeGVsIGJ1ZmZlcnMgc28gbm8gZnVydGhlciB3b3JrIGlzIG5lZWRlZC4KKyAgICAgICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrRGlyZWN0M0RDb21w
YXRpYmlsaXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
VXNlIHRoZSBrMzJCR1JBUGl4ZWxGb3JtYXQsIGFzIFF1YXJ0ekNvcmUgd2lsbCBiZSBhYmxlIHRv
IHVzZSB0aGUgcGl4ZWxzIGRpcmVjdGx5LAorICAgICAgICAvLyB3aXRob3V0IG5lZWRpbmcgYW4g
YWRkaXRpb25hbCBjb3B5IG9yIHJlbmRlcmluZyBwYXNzLgorICAgICAgICBTZXROdW1iZXJWYWx1
ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
LCBrMzJCR1JBUGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgCisgICAgICAgIC8vIFNldCBrQ1ZQ
aXhlbEJ1ZmZlckJ5dGVzUGVyUm93QWxpZ25tZW50S2V5IHRvIDE2IHRvIGVuc3VyZSB0aGF0IGVh
Y2ggcm93IG9mIHBpeGVscyAKKyAgICAgICAgLy8gc3RhcnRzIGF0IGEgMTYgYnl0ZSBhbGlnbmVk
IGFkZHJlc3MgZm9yIG1vc3QgZWZmaWNpZW50IGRhdGEgcmVhZGluZy4KKyAgICAgICAgU2V0TnVt
YmVyVmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlckJ5dGVzUGVyUm93
QWxpZ25tZW50S2V5LCAxNik7CisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHBpeGVsQnVm
ZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSwga0NG
Qm9vbGVhblRydWUpOworICAgIH0KKyAgICByZXR1cm4gcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOwor
fQorCiBRVFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKCkgCiAgICAgOiBtX3BpeGVsQnVmZmVy
KDApIAogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxC
dWZmZXIuaAkocmV2aXNpb24gNzAwODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9RVFBpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRgogLy8gc2FmZSB0byBjYWxsIHdpdGhp
biBXZWJLaXQuCiBjbGFzcyBRVE1PVklFV0lOX0FQSSBRVFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoK
KyAgICBlbnVtIFR5cGUgeyBDb25maWd1cmVGb3JDR0ltYWdlLCBDb25maWd1cmVGb3JDQUltYWdl
UXVldWUgfTsKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZVBpeGVsQnVmZmVyQXR0
cmlidXRlc0RpY3Rpb25hcnkoVHlwZSk7CisKICAgICBRVFBpeGVsQnVmZmVyKCk7CiAgICAgUVRQ
aXhlbEJ1ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJik7CiAgICAgUVRQaXhlbEJ1ZmZlcihDVlBp
eGVsQnVmZmVyUmVmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71331</attachid>
            <date>2010-10-20 13:38:46 -0700</date>
            <delta_ts>2010-10-21 01:30:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47996-20101020133848.patch</filename>
            <type>text/plain</type>
            <size>21714</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMjAgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmlk
ZW8gLT4gQ2FudmFzIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk5NgorICAgICAgICByZGFyOi8vcHJvYmxl
bS83ODg0NjkwCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvajog
QWRkZWQgUVREZWNvbXByZXNzaW9uU2Vzc2lvbi57Y3BwLGh9CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6cGFpbnQpOiBDcmVhdGUgYSAKKyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Np
b24gaWYgbmVjZXNzYXJ5IGFuZCBjb252ZXJ0IHRoZSBRVFBpeGVsQnVmZmVyCisgICAgICAgICAg
ICBpbnRvIGEgQ0ctY29tcGF0aWJsZSBvbmUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHA6CisgICAgICAgIChTZXRO
dW1iZXJWYWx1ZSk6IE1vdmVkIGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuCisgICAgICAgIChR
VFBpeGVsQnVmZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogTW92
ZWQgZnJvbSBpbnNpZGUKKyAgICAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGVQ
aXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogTW92ZWQgdGhlIFR5cGUgZW51bSAKKyAgICAgICAgICAg
IGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuaC4KKwogMjAxMC0xMC0yMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lvbiA3
MDA4MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTMxOCw2ICszMTgsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFURGVjb21w
cmVzc2lvblNlc3Npb24uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTM1Niw2ICszNjAsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
XFFURGVjb21wcmVzc2lvblNlc3Npb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDcwMDg0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCiAjaW5jbHVkZSAiUVRD
RkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJRVERlY29tcHJlc3Npb25TZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUVRNb3ZpZS5oIgogI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCiAjaW5jbHVkZSAiUVRN
b3ZpZVZpc3VhbENvbnRleHQuaCIKQEAgLTcyOCwxMiArNzI5LDIwIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KICAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFS
ZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyICYmICFtX3Zpc3VhbENvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9xdFZp
ZGVvTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIFFUUGl4ZWxCdWZmZXIgYnVm
ZmVyID0gbV92aXN1YWxDb250ZXh0LT5pbWFnZUZvclRpbWUoMCk7CiAgICAgaWYgKGJ1ZmZlci5w
aXhlbEJ1ZmZlclJlZigpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBwcm9iYWJs
eSBiZWluZyBhc2tlZCB0byByZW5kZXIgdGhlIHZpZGVvIGludG8gYSBjYW52YXMsIGJ1dCAKKyAg
ICAgICAgICAgIC8vIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGUgUVRQaXhlbEJ1ZmZlciBpcyBu
b3QgQVJHQiBhbmQgdGh1cyBjYW4ndCBiZQorICAgICAgICAgICAgLy8gZHJhd24gdXNpbmcgQ0cu
ICBJZiBzbywgZmlyZSB1cCBhbiBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbiBhbmQgY29udmVydCAK
KyAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGZyYW1lIGludG8gc29tZXRoaW5nIHdoaWNoIGNh
biBiZSByZW5kZXJlZCBieSBDRy4KKyAgICAgICAgICAgIGlmICghYnVmZmVyLnBpeGVsRm9ybWF0
SXMzMkFSR0IoKSAmJiAhYnVmZmVyLnBpeGVsRm9ybWF0SXMzMkJHUkEoKSkgeworICAgICAgICAg
ICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb24gc2Vzc2lvbjsKKyAgICAgICAgICAgICAgICBi
dWZmZXIgPSBzZXNzaW9uLmRlY29tcHJlc3MoYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorI2VuZGlmCiAgICAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDcmVhdGVDR0ltYWdlRnJv
bVBpeGVsQnVmZmVyKGJ1ZmZlcik7CiAgICAgICAgIAogICAgICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHAtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMTA4OSw3ICsxMDk4LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogICAgICAgICBtX3BsYXllci0+bWVk
aWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7CiAjZW5kaWYKIAotICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBl
ID0gcmVxdWlyZWREbGxzQXZhaWxhYmxlKCkgJiYgcHJlZmVycmVkTW9kZSA9PSBNZWRpYVJlbmRl
cmluZ01vdmllTGF5ZXIgPyBRVE1vdmllVmlzdWFsQ29udGV4dDo6Q29uZmlndXJlRm9yQ0FJbWFn
ZVF1ZXVlIDogUVRNb3ZpZVZpc3VhbENvbnRleHQ6OkNvbmZpZ3VyZUZvckNHSW1hZ2U7CisgICAg
UVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSA9IHJlcXVpcmVkRGxsc0F2YWlsYWJsZSgp
ICYmIHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyID8gUVRQaXhlbEJ1
ZmZlcjo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIDogUVRQaXhlbEJ1ZmZlcjo6Q29uZmlndXJl
Rm9yQ0dJbWFnZTsKICAgICBtX3Zpc3VhbENvbnRleHQgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6
Y3JlYXRlKG1fdmlzdWFsQ29udGV4dENsaWVudC5nZXQoKSwgY29udGV4dFR5cGUpOwogICAgIG1f
dmlzdWFsQ29udGV4dC0+c2V0TW92aWUobV9tb3ZpZS5nZXQoKSk7CiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNz
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
RGVjb21wcmVzc2lvblNlc3Npb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlFURGVjb21wcmVzc2lvblNlc3Npb24uaCIKKworI2luY2x1ZGUgPEltYWdlQ29tcHJlc3Np
b24uaD4KKworY2xhc3MgUVREZWNvbXByZXNzaW9uU2Vzc2lvbkNsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgdHJhY2tpbmdDYWxsYmFjayh2b2lkICpkZWNvbXByZXNzaW9uVHJhY2tp
bmdSZWZDb24sIAorICAgICAgICBPU1N0YXR1cywgLy8gcmVzdWx0IAorICAgICAgICBJQ01EZWNv
bXByZXNzaW9uVHJhY2tpbmdGbGFncyBkZWNvbXByZXNzaW9uVHJhY2tpbmdGbGFncywgCisgICAg
ICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIsIAorICAgICAgICBUaW1lVmFsdWU2NCwg
Ly8gZGlzcGxheVRpbWUgCisgICAgICAgIFRpbWVWYWx1ZTY0LCAvLyBkaXNwbGF5RHVyYXRpb24g
CisgICAgICAgIElDTVZhbGlkVGltZUZsYWdzLCAvLyB2YWxpZFRpbWVGbGFncyAKKyAgICAgICAg
dm9pZCAqLCAvLyByZXNlcnZlZCAKKyAgICAgICAgdm9pZCAqKSAvLyBzb3VyY2VGcmFtZVJlZkNv
biAKKyAgICB7CisgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQqIGNsaWVudCA9
IHN0YXRpY19jYXN0PFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQqPihkZWNvbXByZXNzaW9u
VHJhY2tpbmdSZWZDb24pOworICAgICAgICBBU1NFUlQoY2xpZW50KTsKKworICAgICAgICBpZiAo
ZGVjb21wcmVzc2lvblRyYWNraW5nRmxhZ3MgJiBrSUNNRGVjb21wcmVzc2lvblRyYWNraW5nX0Zy
YW1lRGVjb2RlZCkKKyAgICAgICAgICAgIGNsaWVudC0+bV9sYXRlc3RGcmFtZSA9IFFUUGl4ZWxC
dWZmZXIocGl4ZWxCdWZmZXIpOworICAgIH0KKworICAgIFFUUGl4ZWxCdWZmZXIgbV9sYXRlc3RG
cmFtZTsKK307CisKK1FURGVjb21wcmVzc2lvblNlc3Npb246OlFURGVjb21wcmVzc2lvblNlc3Np
b24oKQorICAgIDogbV9jbGllbnQobmV3IFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQoKSkK
KyAgICAsIG1fc2Vzc2lvbigwKQoreworfQorCitRVERlY29tcHJlc3Npb25TZXNzaW9uOjp+UVRE
ZWNvbXByZXNzaW9uU2Vzc2lvbigpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBkZWxl
dGUgbV9jbGllbnQ7CisgICAgaWYgKG1fc2Vzc2lvbikKKyAgICAgICAgSUNNRGVjb21wcmVzc2lv
blNlc3Npb25SZWxlYXNlKG1fc2Vzc2lvbik7Cit9CisKK3N0YXRpYyBPU1R5cGUgY29kZWNUeXBl
Rm9yUGl4ZWxGb3JtYXQoT1NUeXBlIHBpeGVsRm9ybWF0KQoreworICAgIHN3aXRjaCAocGl4ZWxG
b3JtYXQpIHsKKyAgICBjYXNlIGszMkFSR0JQaXhlbEZvcm1hdDoKKyAgICBjYXNlIGszMkJHUkFQ
aXhlbEZvcm1hdDoKKyAgICBjYXNlIGszMkFCR1JQaXhlbEZvcm1hdDoKKyAgICBjYXNlIGszMlJH
QkFQaXhlbEZvcm1hdDoKKyAgICBjYXNlIGsyNFJHQlBpeGVsRm9ybWF0OgorICAgICAgICByZXR1
cm4gJ1JHQkEnOworICAgIGNhc2Uga1lVVlNQaXhlbEZvcm1hdDoKKyAgICAgICAgcmV0dXJuICd5
dXZzJzsKKyAgICBjYXNlIGtZVVZVUGl4ZWxGb3JtYXQ6CisgICAgICAgIHJldHVybiAneXV2dSc7
CisgICAgY2FzZSBrWVZVOVBpeGVsRm9ybWF0OgorICAgICAgICByZXR1cm4gJ3N5djknOworICAg
IGNhc2Uga1VZVlk0MjJQaXhlbEZvcm1hdDoKKyAgICBjYXNlIGsydnV5UGl4ZWxGb3JtYXQ6Cisg
ICAgICAgIHJldHVybiAnMnZ1eSc7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitRVFBpeGVsQnVmZmVyIFFURGVjb21wcmVzc2lvblNlc3Npb246OmRlY29tcHJl
c3MoUVRQaXhlbEJ1ZmZlciBpbkJ1ZmZlcikKK3sKKyAgICBpZiAoIW1fc2Vzc2lvbikgeworICAg
ICAgICBJQ01EZWNvbXByZXNzaW9uVHJhY2tpbmdDYWxsYmFja1JlY29yZCBjYWxsYmFjayA9IHsK
KyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ6OnRyYWNraW5nQ2FsbGJh
Y2ssCisgICAgICAgICAgICBtX2NsaWVudCwKKyAgICAgICAgfTsKKworICAgICAgICAvLyBDcmVh
dGUgdGhlIG1hbmRhdG9yeSBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbk9wdGlvbnMsIGJ1dCBsZWF2
ZQorICAgICAgICAvLyBhbGwgdGhlIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICBJQ01EZWNvbXBy
ZXNzaW9uU2Vzc2lvbk9wdGlvbnNSZWYgb3B0aW9ucyA9IDA7CisgICAgICAgIElDTURlY29tcHJl
c3Npb25TZXNzaW9uT3B0aW9uc0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmb3B0aW9ucyk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbnQgcGl4ZWxGb3JtYXQgPSBpbkJ1ZmZlci5w
aXhlbEZvcm1hdFR5cGUoKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoID0gOCAqIGluQnVm
ZmVyLmJ5dGVzUGVyUm93KCkgLyBpbkJ1ZmZlci53aWR0aCgpOworICAgICAgICBJbWFnZURlc2Ny
aXB0aW9uSGFuZGxlIGRlc2NyaXB0aW9uID0gKEltYWdlRGVzY3JpcHRpb25IYW5kbGUpTmV3SGFu
ZGxlQ2xlYXIoc2l6ZW9mKEltYWdlRGVzY3JpcHRpb24pKTsKKyAgICAgICAgKCoqZGVzY3JpcHRp
b24pLmlkU2l6ZSA9IHNpemVvZihJbWFnZURlc2NyaXB0aW9uKTsKKyAgICAgICAgKCoqZGVzY3Jp
cHRpb24pLmNUeXBlID0gY29kZWNUeXBlRm9yUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOworICAg
ICAgICAoKipkZXNjcmlwdGlvbikudmVyc2lvbiA9IDI7CisgICAgICAgICgqKmRlc2NyaXB0aW9u
KS5zcGF0aWFsUXVhbGl0eSA9IGNvZGVjTG9zc2xlc3NRdWFsaXR5OworICAgICAgICAoKipkZXNj
cmlwdGlvbikud2lkdGggPSBpbkJ1ZmZlci53aWR0aCgpOworICAgICAgICAoKipkZXNjcmlwdGlv
bikuaGVpZ2h0ID0gaW5CdWZmZXIuaGVpZ2h0KCk7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5o
UmVzID0gNzIgPDwgMTY7IC8vIDcyIERQSSBhcyBhIGZpeGVkLXBvaW50IG51bWJlcgorICAgICAg
ICAoKipkZXNjcmlwdGlvbikudlJlcyA9IDcyIDw8IDE2OyAvLyA3MiBEUEkgYXMgYSBmaXhlZC1w
b2ludCBudW1iZXIKKyAgICAgICAgKCoqZGVzY3JpcHRpb24pLmZyYW1lQ291bnQgPSAxOworICAg
ICAgICAoKipkZXNjcmlwdGlvbikuZGVwdGggPSAgZGVwdGg7CisgICAgICAgICgqKmRlc2NyaXB0
aW9uKS5jbHV0SUQgPSAtMTsKKworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzID0gUVRQaXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGlj
dGlvbmFyeShRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDR0ltYWdlKTsKKworICAgICAgICBJ
Q01EZWNvbXByZXNzaW9uU2Vzc2lvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAg
ICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgcGl4
ZWxCdWZmZXJBdHRyaWJ1dGVzLAorICAgICAgICAgICAgJmNhbGxiYWNrLAorICAgICAgICAgICAg
Jm1fc2Vzc2lvbik7CisKKyAgICAgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25PcHRpb25zUmVs
ZWFzZShvcHRpb25zKTsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Vzc2lvbikKKyAgICAgICAgcmV0
dXJuIFFUUGl4ZWxCdWZmZXIoKTsKKyAgICAKKyAgICBpbkJ1ZmZlci5sb2NrQmFzZUFkZHJlc3Mo
KTsKKyAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbkRlY29kZUZyYW1lKG1fc2Vzc2lvbiwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8VUludDgqPihpbkJ1ZmZlci5iYXNlQWRkcmVzcygpKSwKKyAgICAg
ICAgaW5CdWZmZXIuZGF0YVNpemUoKSwKKyAgICAgICAgMCwgLy8gZnJhbWVPcHRpb25zCisgICAg
ICAgIDAsIC8vIGZyYW1lVGltZQorICAgICAgICAwKTsgLy8gc291cmNlRnJhbWVSZWZDb24KKwor
ICAgIC8vIEJlY2F1c2Ugd2UgcGFzc2VkIGluIDAgZm9yIGZyYW1lVGltZSwgdGhlIGFib3ZlIGZ1
bmN0aW9uCisgICAgLy8gaXMgc3luY2hyb25vdXMsIGFuZCB0aGUgbV9jbGllbnQgY2FsbGJhY2sg
d2lsbCBoYXZlIGJlZW4KKyAgICAvLyBjYWxsZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5z
LCBhbmQgbV9jbGllbnQtPm1fbGF0ZXN0RnJhbWUKKyAgICAvLyB3aWxsIGNvbnRhaW4gdGhlIG5l
d2x5IGRlY29tcHJlc3NlZCBmcmFtZS4KKyAgICByZXR1cm4gbV9jbGllbnQtPm1fbGF0ZXN0RnJh
bWU7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Np
b25TZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFURGVj
b21wcmVzc2lvblNlc3Npb25faAorI2RlZmluZSBRVERlY29tcHJlc3Npb25TZXNzaW9uX2gKKwor
I2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xz
cGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlICJRVFBpeGVsQnVmZmVyLmgiCisKK2NsYXNz
IFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVJQ01E
ZWNvbXByZXNzaW9uU2Vzc2lvbiogIElDTURlY29tcHJlc3Npb25TZXNzaW9uUmVmOworCitjbGFz
cyBRVE1PVklFV0lOX0FQSSBRVERlY29tcHJlc3Npb25TZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBR
VERlY29tcHJlc3Npb25TZXNzaW9uKCk7CisgICAgflFURGVjb21wcmVzc2lvblNlc3Npb24oKTsK
KworICAgIC8vIFRoZSByZXN1bHRpbmcgUVRQaXhlbEJ1ZmZlciB3aWxsIGJlIGEgQ0cgY29tcGF0
YWJsZSBBUkdCIHBpeGVsIGJ1ZmZlcjoKKyAgICBRVFBpeGVsQnVmZmVyIGRlY29tcHJlc3MoUVRQ
aXhlbEJ1ZmZlcik7CisKK3ByaXZhdGU6CisgICAgUVREZWNvbXByZXNzaW9uU2Vzc2lvbkNsaWVu
dCogbV9jbGllbnQ7CisgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25SZWYgbV9zZXNzaW9uOwor
fTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
VmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiA3MDA4MykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgUVRDVlRpbWVTdGFtcCB7CiAKIGNsYXNz
IFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdiB7CiBwdWJsaWM6Ci0gICAgUVRNb3ZpZVZpc3VhbENv
bnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250
ZXh0Q2xpZW50KiBjbGllbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBl
KTsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZpc3VhbENvbnRleHQqIHBh
cmVudCwgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgUVRQaXhlbEJ1ZmZlcjo6
VHlwZSBjb250ZXh0VHlwZSk7CiAgICAgflFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigpOwogCiAg
ICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29u
c3Q7CkBAIC02MSw2MSArNjEsMjggQEAgcHJpdmF0ZToKIAogfTsKIAotc3RhdGljIE9TU3RhdHVz
IFNldE51bWJlclZhbHVlKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgaW5EaWN0LCBDRlN0cmluZ1Jl
ZiBpbktleSwgU0ludDMyIGluVmFsdWUpCitzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZVBp
eGVsQnVmZmVyT3B0aW9uc0RpY3Rpb25hcnkoUVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlw
ZSkKIHsKLSAgICBDRk51bWJlclJlZiBudW1iZXI7Ci0gCi0gICAgbnVtYmVyID0gQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUp
OwotICAgIGlmICghbnVtYmVyKSAKLSAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93
bkVycjsKLSAKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIp
OwotICAgIENGUmVsZWFzZShudW1iZXIpOwotCi0gICAgcmV0dXJuIG5vRXJyOwotfQotCi1zdGF0
aWMgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZVBpeGVsQnVmZmVyT3B0aW9uc0RpY3Rpb25hcnkoUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OlR5cGUgY29udGV4dFR5cGUpCi17Ci0gICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIGtEaXJlY3QzRENvbXBhdGliaWxpdHlLZXkgPSBDRlNUUigiRGlyZWN0M0RD
b21wYXRpYmlsaXR5Iik7Ci0KLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVy
T3B0aW9ucyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcyk7Ci0KLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0
cmlidXRlcyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcyk7Ci0gICAgaWYgKGNvbnRleHRUeXBlID09IFFUTW92aWVWaXN1YWxDb250ZXh0
OjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKLSAgICAgICAgLy8gQXNrIGZvciBEM0QgY29t
cGF0aWJsZSBwaXhlbCBidWZmZXJzIHNvIG5vIGZ1cnRoZXIgd29yayBpcyBuZWVkZWQuCi0gICAg
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0RpcmVjdDNE
Q29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIFVzZSB0aGUgazMyQkdSQVBpeGVsRm9ybWF0LCBhcyBRdWFydHpDb3JlIHdpbGwgYmUgYWJs
ZSB0byB1c2UgdGhlIHBpeGVscyBkaXJlY3RseSwKLSAgICAgICAgLy8gd2l0aG91dCBuZWVkaW5n
IGFuIGFkZGl0aW9uYWwgY29weSBvciByZW5kZXJpbmcgcGFzcy4KLSAgICAgICAgU2V0TnVtYmVy
VmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlw
ZUtleSwgazMyQkdSQVBpeGVsRm9ybWF0KTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBTZXQg
a0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSB0byAxNiB0byBlbnN1cmUgdGhh
dCBlYWNoIHJvdyBvZiBwaXhlbHMgCi0gICAgICAgIC8vIHN0YXJ0cyBhdCBhIDE2IGJ5dGUgYWxp
Z25lZCBhZGRyZXNzIGZvciBtb3N0IGVmZmljaWVudCBkYXRhIHJlYWRpbmcuCi0gICAgICAgIFNl
dE51bWJlclZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJCeXRlc1Bl
clJvd0FsaWdubWVudEtleSwgMTYpOwotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXks
IGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0gCi0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUocGl4
ZWxCdWZmZXJPcHRpb25zLCBrUVRWaXN1YWxDb250ZXh0UGl4ZWxCdWZmZXJBdHRyaWJ1dGVzS2V5
LCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMpOwotCi0gICAgQ0ZSZWxlYXNlKHBpeGVsQnVmZmVyQXR0
cmlidXRlcyk7Ci0KKyAgICBjb25zdCB2b2lkKiBrZXkgPSBrUVRWaXN1YWxDb250ZXh0UGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzS2V5OworICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gUVRQaXhlbEJ1ZmZl
cjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFyeShjb250ZXh0VHlwZSk7Cisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyT3B0aW9ucyA9IENGRGljdGlvbmFyeUNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIENG
UmVsZWFzZSh2YWx1ZSk7CiAgICAgcmV0dXJuIHBpeGVsQnVmZmVyT3B0aW9uczsKIH0KIAotc3Rh
dGljIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyhRVE1vdmllVmlz
dWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSkKK3N0YXRpYyBDRkRpY3Rpb25hcnlSZWYgcGl4
ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoUVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSkK
IHsKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OkNvbmZpZ3Vy
ZUZvckNBSW1hZ2VRdWV1ZSkgeworICAgIGlmIChjb250ZXh0VHlwZSA9PSBRVFBpeGVsQnVmZmVy
OjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKICAgICAgICAgc3RhdGljIENGRGljdGlvbmFy
eVJlZiBpbWFnZVF1ZXVlT3B0aW9ucyA9IGNyZWF0ZVBpeGVsQnVmZmVyT3B0aW9uc0RpY3Rpb25h
cnkoY29udGV4dFR5cGUpOwogICAgICAgICByZXR1cm4gaW1hZ2VRdWV1ZU9wdGlvbnM7CiAgICAg
fSAKIAotICAgIEFTU0VSVChjb250ZXh0VHlwZSA9PSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Q29u
ZmlndXJlRm9yQ0dJbWFnZSk7CisgICAgQVNTRVJUKGNvbnRleHRUeXBlID09IFFUUGl4ZWxCdWZm
ZXI6OkNvbmZpZ3VyZUZvckNHSW1hZ2UpOwogICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgY2dJ
bWFnZU9wdGlvbnMgPSBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KGNvbnRleHRU
eXBlKTsKICAgICByZXR1cm4gY2dJbWFnZU9wdGlvbnM7CiB9CiAKLVFUTW92aWVWaXN1YWxDb250
ZXh0UHJpdjo6UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBw
YXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUTW92aWVWaXN1YWxD
b250ZXh0OjpUeXBlIGNvbnRleHRUeXBlKSAKK1FUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6UVRN
b3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQsIFFUTW92
aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4
dFR5cGUpIAogICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKICAgICAgICAgLCBtX2NsaWVudChj
bGllbnQpCiAgICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCkBAIC0yMDYsMTIgKzE3MywxMiBA
QCB2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aW1hZ2VBdmFpCiAgICAgdmMtPm1fY2xp
ZW50LT5pbWFnZUF2YWlsYWJsZUZvclRpbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRVENWVGlt
ZVN0YW1wKj4odGltZVN0YW1wKSk7CiB9CiAKLVBhc3NSZWZQdHI8UVRNb3ZpZVZpc3VhbENvbnRl
eHQ+IFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGUoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGll
bnQqIGNsaWVudCwgVHlwZSBjb250ZXh0VHlwZSkKK1Bhc3NSZWZQdHI8UVRNb3ZpZVZpc3VhbENv
bnRleHQ+IFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGUoUVRNb3ZpZVZpc3VhbENvbnRleHRD
bGllbnQqIGNsaWVudCwgUVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFFUTW92aWVWaXN1YWxDb250ZXh0KGNsaWVudCwgY29udGV4dFR5
cGUpKTsKIH0KIAotUVRNb3ZpZVZpc3VhbENvbnRleHQ6OlFUTW92aWVWaXN1YWxDb250ZXh0KFFU
TW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFR5cGUgY29udGV4dFR5cGUpIAorUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OlFUTW92aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxDb250
ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUpIAogICAg
IDogbV9wcml2YXRlKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYodGhpcywgY2xpZW50LCBj
b250ZXh0VHlwZSkpCiB7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VE1vdmllVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDcwMDgzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsOSArNTQsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFFUTU9WSUVXSU5fQVBJ
IFFUTW92aWVWaXN1YWxDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8UVRNb3ZpZVZpc3VhbENv
bnRleHQ+IHsKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgeyBDb25maWd1cmVGb3JDR0ltYWdlLCBD
b25maWd1cmVGb3JDQUltYWdlUXVldWUgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFFUTW92
aWVWaXN1YWxDb250ZXh0PiBjcmVhdGUoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqLCBUeXBl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxRVE1vdmllVmlzdWFsQ29udGV4dD4gY3JlYXRlKFFU
TW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgUVRQaXhlbEJ1ZmZlcjo6VHlwZSk7CiAgICAgflFU
TW92aWVWaXN1YWxDb250ZXh0KCk7CiAKICAgICBib29sIGlzSW1hZ2VBdmFpbGFibGVGb3JUaW1l
KGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSBjb25zdDsKQEAgLTcxLDcgKzY5LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBkb3VibGUgY3VycmVudEhvc3RUaW1lKCk7CiAKIHByb3RlY3RlZDoKLSAgICBR
VE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCosIFR5cGUpOwor
ICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgUVRQ
aXhlbEJ1ZmZlcjo6VHlwZSk7CiAgICAgdm9pZCBzZXR1cFZpc3VhbENvbnRleHQoKTsKIAogICAg
IGZyaWVuZCBjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gNzAw
ODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiUVRQaXhlbEJ1ZmZl
ci5oIgogCisjaW5jbHVkZSA8Q0ZOdW1iZXIuaD4KICNpbmNsdWRlIDxDRlN0cmluZy5oPgogI2lu
Y2x1ZGUgPENHQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPENHSW1hZ2UuaD4KQEAgLTMzLDYgKzM0
LDQxIEBACiAjaW5jbHVkZSA8UXVpY2tEcmF3Lmg+CiAjaW5jbHVkZSA8bWVtb3J5Lmg+CiAKK3N0
YXRpYyBPU1N0YXR1cyBTZXROdW1iZXJWYWx1ZShDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGluRGlj
dCwgQ0ZTdHJpbmdSZWYgaW5LZXksIFNJbnQzMiBpblZhbHVlKQoreworICAgIENGTnVtYmVyUmVm
IG51bWJlcjsKKyAKKyAgICBudW1iZXIgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmaW5WYWx1ZSk7CisgICAgaWYgKCFudW1iZXIpIAor
ICAgICAgICByZXR1cm4gY29yZUZvdW5kYXRpb25Vbmtub3duRXJyOworIAorICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKGluRGljdCwgaW5LZXksIG51bWJlcik7CisgICAgQ0ZSZWxlYXNlKG51bWJl
cik7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK0NGRGljdGlvbmFyeVJlZiBRVFBpeGVsQnVm
ZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KFFUUGl4ZWxCdWZmZXI6
OlR5cGUgY29udGV4dFR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtEaXJl
Y3QzRENvbXBhdGliaWxpdHlLZXkgPSBDRlNUUigiRGlyZWN0M0RDb21wYXRpYmlsaXR5Iik7CisK
KyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcyA9IENGRGlj
dGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Cisg
ICAgaWYgKGNvbnRleHRUeXBlID09IFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZvckNBSW1hZ2VR
dWV1ZSkgeworICAgICAgICAvLyBBc2sgZm9yIEQzRCBjb21wYXRpYmxlIHBpeGVsIGJ1ZmZlcnMg
c28gbm8gZnVydGhlciB3b3JrIGlzIG5lZWRlZC4KKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrRGlyZWN0M0RDb21wYXRpYmlsaXR5S2V5LCBrQ0ZC
b29sZWFuVHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVXNlIHRoZSBrMzJCR1JBUGl4
ZWxGb3JtYXQsIGFzIFF1YXJ0ekNvcmUgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgcGl4ZWxzIGRp
cmVjdGx5LAorICAgICAgICAvLyB3aXRob3V0IG5lZWRpbmcgYW4gYWRkaXRpb25hbCBjb3B5IG9y
IHJlbmRlcmluZyBwYXNzLgorICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LCBrMzJCR1JBUGl4ZWxGb3Jt
YXQpOworICAgICAgICAgICAgCisgICAgICAgIC8vIFNldCBrQ1ZQaXhlbEJ1ZmZlckJ5dGVzUGVy
Um93QWxpZ25tZW50S2V5IHRvIDE2IHRvIGVuc3VyZSB0aGF0IGVhY2ggcm93IG9mIHBpeGVscyAK
KyAgICAgICAgLy8gc3RhcnRzIGF0IGEgMTYgYnl0ZSBhbGlnbmVkIGFkZHJlc3MgZm9yIG1vc3Qg
ZWZmaWNpZW50IGRhdGEgcmVhZGluZy4KKyAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlckJ5dGVzUGVyUm93QWxpZ25tZW50S2V5LCAxNik7
CisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NW
UGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOworICAg
IH0KKyAgICByZXR1cm4gcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOworfQorCiBRVFBpeGVsQnVmZmVy
OjpRVFBpeGVsQnVmZmVyKCkgCiAgICAgOiBtX3BpeGVsQnVmZmVyKDApIAogewpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24g
NzAwODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19D
RkRpY3Rpb25hcnkgKiBDRgogLy8gc2FmZSB0byBjYWxsIHdpdGhpbiBXZWJLaXQuCiBjbGFzcyBR
VE1PVklFV0lOX0FQSSBRVFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKKyAgICBlbnVtIFR5cGUgeyBD
b25maWd1cmVGb3JDR0ltYWdlLCBDb25maWd1cmVGb3JDQUltYWdlUXVldWUgfTsKKyAgICBzdGF0
aWMgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZVBpeGVsQnVmZmVyQXR0cmlidXRlc0RpY3Rpb25hcnko
VHlwZSk7CisKICAgICBRVFBpeGVsQnVmZmVyKCk7CiAgICAgUVRQaXhlbEJ1ZmZlcihjb25zdCBR
VFBpeGVsQnVmZmVyJik7CiAgICAgUVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71404</attachid>
            <date>2010-10-21 01:30:57 -0700</date>
            <delta_ts>2010-10-21 10:44:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47996-20101021013100.patch</filename>
            <type>text/plain</type>
            <size>23146</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMjAgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmlk
ZW8gLT4gQ2FudmFzIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk5NgorICAgICAgICByZGFyOi8vcHJvYmxl
bS83ODg0NjkwCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvajog
QWRkZWQgUVREZWNvbXByZXNzaW9uU2Vzc2lvbi57Y3BwLGh9CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6cGFpbnQpOiBDcmVhdGUgYSAKKyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Np
b24gaWYgbmVjZXNzYXJ5IGFuZCBjb252ZXJ0IHRoZSBRVFBpeGVsQnVmZmVyCisgICAgICAgICAg
ICBpbnRvIGEgQ0ctY29tcGF0aWJsZSBvbmUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHA6CisgICAgICAgIChTZXRO
dW1iZXJWYWx1ZSk6IE1vdmVkIGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuCisgICAgICAgIChR
VFBpeGVsQnVmZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogTW92
ZWQgZnJvbSBpbnNpZGUKKyAgICAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGVQ
aXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogTW92ZWQgdGhlIFR5cGUgZW51bSAKKyAgICAgICAgICAg
IGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuaC4KKwogMjAxMC0xMC0yMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lvbiA3
MDA4MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTMxOCw2ICszMTgsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFURGVjb21w
cmVzc2lvblNlc3Npb24uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTM1Niw2ICszNjAsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
XFFURGVjb21wcmVzc2lvblNlc3Npb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDcwMDg0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCiAjaW5jbHVkZSAiUVRD
RkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJRVERlY29tcHJlc3Npb25TZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUVRNb3ZpZS5oIgogI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCiAjaW5jbHVkZSAiUVRN
b3ZpZVZpc3VhbENvbnRleHQuaCIKQEAgLTcyOCwxMiArNzI5LDIwIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KICAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFS
ZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyICYmICFtX3Zpc3VhbENvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9xdFZp
ZGVvTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIFFUUGl4ZWxCdWZmZXIgYnVm
ZmVyID0gbV92aXN1YWxDb250ZXh0LT5pbWFnZUZvclRpbWUoMCk7CiAgICAgaWYgKGJ1ZmZlci5w
aXhlbEJ1ZmZlclJlZigpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBwcm9iYWJs
eSBiZWluZyBhc2tlZCB0byByZW5kZXIgdGhlIHZpZGVvIGludG8gYSBjYW52YXMsIGJ1dCAKKyAg
ICAgICAgICAgIC8vIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGUgUVRQaXhlbEJ1ZmZlciBpcyBu
b3QgQVJHQiBhbmQgdGh1cyBjYW4ndCBiZQorICAgICAgICAgICAgLy8gZHJhd24gdXNpbmcgQ0cu
ICBJZiBzbywgZmlyZSB1cCBhbiBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbiBhbmQgY29udmVydCAK
KyAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGZyYW1lIGludG8gc29tZXRoaW5nIHdoaWNoIGNh
biBiZSByZW5kZXJlZCBieSBDRy4KKyAgICAgICAgICAgIGlmICghYnVmZmVyLnBpeGVsRm9ybWF0
SXMzMkFSR0IoKSAmJiAhYnVmZmVyLnBpeGVsRm9ybWF0SXMzMkJHUkEoKSkgeworICAgICAgICAg
ICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb24gc2Vzc2lvbjsKKyAgICAgICAgICAgICAgICBi
dWZmZXIgPSBzZXNzaW9uLmRlY29tcHJlc3MoYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorI2VuZGlmCiAgICAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDcmVhdGVDR0ltYWdlRnJv
bVBpeGVsQnVmZmVyKGJ1ZmZlcik7CiAgICAgICAgIAogICAgICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHAtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMTA4OSw3ICsxMDk4LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogICAgICAgICBtX3BsYXllci0+bWVk
aWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7CiAjZW5kaWYKIAotICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBl
ID0gcmVxdWlyZWREbGxzQXZhaWxhYmxlKCkgJiYgcHJlZmVycmVkTW9kZSA9PSBNZWRpYVJlbmRl
cmluZ01vdmllTGF5ZXIgPyBRVE1vdmllVmlzdWFsQ29udGV4dDo6Q29uZmlndXJlRm9yQ0FJbWFn
ZVF1ZXVlIDogUVRNb3ZpZVZpc3VhbENvbnRleHQ6OkNvbmZpZ3VyZUZvckNHSW1hZ2U7CisgICAg
UVRQaXhlbEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSA9IHJlcXVpcmVkRGxsc0F2YWlsYWJsZSgp
ICYmIHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyID8gUVRQaXhlbEJ1
ZmZlcjo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIDogUVRQaXhlbEJ1ZmZlcjo6Q29uZmlndXJl
Rm9yQ0dJbWFnZTsKICAgICBtX3Zpc3VhbENvbnRleHQgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6
Y3JlYXRlKG1fdmlzdWFsQ29udGV4dENsaWVudC5nZXQoKSwgY29udGV4dFR5cGUpOwogICAgIG1f
dmlzdWFsQ29udGV4dC0+c2V0TW92aWUobV9tb3ZpZS5nZXQoKSk7CiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNz
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
RGVjb21wcmVzc2lvblNlc3Npb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlFURGVjb21wcmVzc2lvblNlc3Npb24uaCIKKworI2luY2x1ZGUgPEltYWdlQ29tcHJlc3Np
b24uaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK2NsYXNzIFFURGVjb21wcmVzc2lvblNlc3Np
b25DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHRyYWNraW5nQ2FsbGJhY2sodm9p
ZCAqZGVjb21wcmVzc2lvblRyYWNraW5nUmVmQ29uLCAKKyAgICAgICAgT1NTdGF0dXMsIC8vIHJl
c3VsdCAKKyAgICAgICAgSUNNRGVjb21wcmVzc2lvblRyYWNraW5nRmxhZ3MgZGVjb21wcmVzc2lv
blRyYWNraW5nRmxhZ3MsIAorICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyLCAK
KyAgICAgICAgVGltZVZhbHVlNjQsIC8vIGRpc3BsYXlUaW1lIAorICAgICAgICBUaW1lVmFsdWU2
NCwgLy8gZGlzcGxheUR1cmF0aW9uIAorICAgICAgICBJQ01WYWxpZFRpbWVGbGFncywgLy8gdmFs
aWRUaW1lRmxhZ3MgCisgICAgICAgIHZvaWQgKiwgLy8gcmVzZXJ2ZWQgCisgICAgICAgIHZvaWQg
KikgLy8gc291cmNlRnJhbWVSZWZDb24gCisgICAgeworICAgICAgICBRVERlY29tcHJlc3Npb25T
ZXNzaW9uQ2xpZW50KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxRVERlY29tcHJlc3Npb25TZXNzaW9u
Q2xpZW50Kj4oZGVjb21wcmVzc2lvblRyYWNraW5nUmVmQ29uKTsKKyAgICAgICAgQVNTRVJUKGNs
aWVudCk7CisKKyAgICAgICAgaWYgKGRlY29tcHJlc3Npb25UcmFja2luZ0ZsYWdzICYga0lDTURl
Y29tcHJlc3Npb25UcmFja2luZ19GcmFtZURlY29kZWQpCisgICAgICAgICAgICBjbGllbnQtPm1f
bGF0ZXN0RnJhbWUgPSBRVFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyKTsKKyAgICB9CisKKyAgICBR
VFBpeGVsQnVmZmVyIG1fbGF0ZXN0RnJhbWU7Cit9OworCitRVERlY29tcHJlc3Npb25TZXNzaW9u
OjpRVERlY29tcHJlc3Npb25TZXNzaW9uKCkKKyAgICA6IG1fY2xpZW50KG5ldyBRVERlY29tcHJl
c3Npb25TZXNzaW9uQ2xpZW50KCkpCisgICAgLCBtX3Nlc3Npb24oMCkKK3sKK30KKworUVREZWNv
bXByZXNzaW9uU2Vzc2lvbjo6flFURGVjb21wcmVzc2lvblNlc3Npb24oKQoreworICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgZGVsZXRlIG1fY2xpZW50OworICAgIGlmIChtX3Nlc3Npb24pCisg
ICAgICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uUmVsZWFzZShtX3Nlc3Npb24pOworfQorCitR
VFBpeGVsQnVmZmVyIFFURGVjb21wcmVzc2lvblNlc3Npb246OmRlY29tcHJlc3MoUVRQaXhlbEJ1
ZmZlciBpbkJ1ZmZlcikKK3sKKyAgICBpZiAoIW1fc2Vzc2lvbikgeworCisgICAgICAgIHVuc2ln
bmVkIGludCBwaXhlbEZvcm1hdCA9IGluQnVmZmVyLnBpeGVsRm9ybWF0VHlwZSgpOworICAgICAg
ICBJQ01QaXhlbEZvcm1hdEluZm8gcGl4ZWxGb3JtYXRJbmZvID0ge3NpemVvZihJQ01QaXhlbEZv
cm1hdEluZm8pLCAwfTsKKyAgICAgICAgaWYgKElDTUdldFBpeGVsRm9ybWF0SW5mbyhwaXhlbEZv
cm1hdCwgJnBpeGVsRm9ybWF0SW5mbykgIT0gbm9FcnIpIHsKKyAgICAgICAgICAgIC8vIFRoZSBJ
Q00gZG9lcyBub3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgcGl4ZWxGb3JtYXQgY29udGFpbmVk
IGluCisgICAgICAgICAgICAvLyB0aGUgcGl4ZWwgYnVmZmVyLCBzbyBpdCB3b24ndCBiZSBhYmxl
IHRvIGNvbnZlcnQgaXQgdG8gUkdCQS4gIAorICAgICAgICAgICAgcmV0dXJuIFFUUGl4ZWxCdWZm
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBkZXB0aCBhbmQgY1R5cGUgZmllbGRz
IG9mIHRoZSBJbWFnZURlc2NyaXB0aW9uSGFuZGxlIGFyZSBmaWxsZWQgCisgICAgICAgIC8vIG91
dCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBpbiBUZWNobmljYWwgUSZBIFFBMTE4Mzog
CisgICAgICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjLyNxYS9x
YTIwMDEvcWExMTgzLmh0bWwKKyAgICAgICAgYm9vbCBpc0luZGV4ZWQgPSBwaXhlbEZvcm1hdElu
Zm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRJc0luZGV4ZWQ7CisgICAgICAgIGJvb2wg
aXNRRCA9IHBpeGVsRm9ybWF0SW5mby5mb3JtYXRGbGFncyAmIGtJQ01QaXhlbEZvcm1hdElzU3Vw
cG9ydGVkQnlRRDsKKyAgICAgICAgYm9vbCBpc01vbm9jaHJvbWUgPSBwaXhlbEZvcm1hdEluZm8u
Zm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRJc01vbm9jaHJvbWU7CisgICAgICAgIGJvb2wg
aGFzQWxwaGEgPSBwaXhlbEZvcm1hdEluZm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRI
YXNBbHBoYUNoYW5uZWw7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoID0gMjQ7IC8vIFRo
ZSBkZWZhdWx0IGRlcHRoIGlzIDI0LgorICAgICAgICBpZiAoaGFzQWxwaGEpCisgICAgICAgICAg
ICBkZXB0aCA9IDMyOyAvLyBBbnkgcGl4ZWwgZm9ybWF0IHdpdGggYWxwaGEgZ2V0cyBhIGRlcHRo
IG9mIDMyLgorICAgICAgICBlbHNlIGlmIChpc01vbm9jaHJvbWUpIHsKKyAgICAgICAgICAgIC8v
IEdyYXlzY2FsZSBwaXhlbCBmb3JtYXRzIGdldCBkZXB0aHMgMzMgdGhyb3VnaCA0MCwgZGVwZW5k
aW5nCisgICAgICAgICAgICAvLyBvbiB0aGVpciBiaXRzIHBlciBwaXhlbC4gWWVzLCB0aGlzIG1l
YW5zIHRoYXQgMTYtYml0IGdyYXlzY2FsZQorICAgICAgICAgICAgLy8gYW5kIDgtYml0IGdyYXlz
Y2FsZSBoYXZlIHRoZSBzYW1lIHBpeGVsIGRlcHRoLgorICAgICAgICAgICAgZGVwdGggPSAzMiAr
IHN0ZDo6bWluPHVuc2lnbmVkIGludD4oOCwgcGl4ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbFsw
XSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleGVkKSB7CisgICAgICAgICAgICAvLyBJbmRl
eGVkIHBpeGVsIGZvcm1hdHMgZ2V0IGEgZGVwdGggb2YgMSB0aHJvdWdoIDgsIGRlcGVuZGluZyBv
bgorICAgICAgICAgICAgLy8gdGhlIHRoZWlyIGJpdHMgcGVyIHBpeGVsLgorICAgICAgICAgICAg
ZGVwdGggPSBwaXhlbEZvcm1hdEluZm8uYml0c1BlclBpeGVsWzBdOyAKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIElmIFF1aWNrRHJhdyBzdXBwb3J0cyB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCB0
aGUgY1R5cGUgc2hvdWxkIGJlIGtSYXdDb2RlY1R5cGUuCisgICAgICAgIC8vIE90aGVyd2lzZSwg
dXNlIHRoZSBwaXhlbCBmb3JtYXQgY29kZSBmb3IgdGhlIGNUeXBlLiAgV2UgYXJlIGFzc3VtaW5n
IHRoZSBwaXhlbCAKKyAgICAgICAgLy8gYnVmZmVyIGlzIHVuY29tcHJlc3NlZC4KKyAgICAgICAg
T1NUeXBlIGNUeXBlID0gaXNRRCA/IGtSYXdDb2RlY1R5cGUgOiBwaXhlbEZvcm1hdDsKKworICAg
ICAgICBJbWFnZURlc2NyaXB0aW9uSGFuZGxlIGRlc2NyaXB0aW9uID0gKEltYWdlRGVzY3JpcHRp
b25IYW5kbGUpTmV3SGFuZGxlQ2xlYXIoc2l6ZW9mKEltYWdlRGVzY3JpcHRpb24pKTsKKyAgICAg
ICAgKCoqZGVzY3JpcHRpb24pLmlkU2l6ZSA9IHNpemVvZihJbWFnZURlc2NyaXB0aW9uKTsKKyAg
ICAgICAgKCoqZGVzY3JpcHRpb24pLmNUeXBlID0gY1R5cGU7CisgICAgICAgICgqKmRlc2NyaXB0
aW9uKS52ZXJzaW9uID0gMjsKKyAgICAgICAgKCoqZGVzY3JpcHRpb24pLnNwYXRpYWxRdWFsaXR5
ID0gY29kZWNMb3NzbGVzc1F1YWxpdHk7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS53aWR0aCA9
IGluQnVmZmVyLndpZHRoKCk7CisgICAgICAgICgqKmRlc2NyaXB0aW9uKS5oZWlnaHQgPSBpbkJ1
ZmZlci5oZWlnaHQoKTsKKyAgICAgICAgKCoqZGVzY3JpcHRpb24pLmhSZXMgPSA3MiA8PCAxNjsg
Ly8gNzIgRFBJIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyCisgICAgICAgICgqKmRlc2NyaXB0aW9u
KS52UmVzID0gNzIgPDwgMTY7IC8vIDcyIERQSSBhcyBhIGZpeGVkLXBvaW50IG51bWJlcgorICAg
ICAgICAoKipkZXNjcmlwdGlvbikuZnJhbWVDb3VudCA9IDE7CisgICAgICAgICgqKmRlc2NyaXB0
aW9uKS5kZXB0aCA9ICBkZXB0aDsKKyAgICAgICAgKCoqZGVzY3JpcHRpb24pLmNsdXRJRCA9IC0x
OworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgbWFuZGF0b3J5IElDTURlY29tcHJlc3Npb25TZXNz
aW9uT3B0aW9ucywgYnV0IGxlYXZlCisgICAgICAgIC8vIGFsbCB0aGUgZGVmYXVsdCB2YWx1ZXMu
CisgICAgICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uT3B0aW9uc1JlZiBvcHRpb25zID0gMDsK
KyAgICAgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25PcHRpb25zQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsICZvcHRpb25zKTsKKworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzID0gUVRQaXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVz
RGljdGlvbmFyeShRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDR0ltYWdlKTsKKworICAgICAg
ICBJQ01EZWNvbXByZXNzaW9uVHJhY2tpbmdDYWxsYmFja1JlY29yZCBjYWxsYmFjayA9IHsKKyAg
ICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ6OnRyYWNraW5nQ2FsbGJhY2ss
CisgICAgICAgICAgICBtX2NsaWVudCwKKyAgICAgICAgfTsKKworICAgICAgICBJQ01EZWNvbXBy
ZXNzaW9uU2Vzc2lvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICAgICAgZGVz
Y3JpcHRpb24sCisgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzLAorICAgICAgICAgICAgJmNhbGxiYWNrLAorICAgICAgICAgICAgJm1fc2Vzc2lv
bik7CisKKyAgICAgICAgaWYgKHBpeGVsQnVmZmVyQXR0cmlidXRlcykKKyAgICAgICAgICAgIENG
UmVsZWFzZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMpOworCisgICAgICAgIElDTURlY29tcHJlc3Np
b25TZXNzaW9uT3B0aW9uc1JlbGVhc2Uob3B0aW9ucyk7CisgICAgICAgIERpc3Bvc2VIYW5kbGUo
KEhhbmRsZSlkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgaWYgKCFtX3Nlc3Npb24pCisgICAg
ICAgIHJldHVybiBRVFBpeGVsQnVmZmVyKCk7CisgICAgCisgICAgaW5CdWZmZXIubG9ja0Jhc2VB
ZGRyZXNzKCk7CisgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25EZWNvZGVGcmFtZShtX3Nlc3Np
b24sCisgICAgICAgIHN0YXRpY19jYXN0PFVJbnQ4Kj4oaW5CdWZmZXIuYmFzZUFkZHJlc3MoKSks
CisgICAgICAgIGluQnVmZmVyLmRhdGFTaXplKCksCisgICAgICAgIDAsIC8vIGZyYW1lT3B0aW9u
cworICAgICAgICAwLCAvLyBmcmFtZVRpbWUKKyAgICAgICAgMCk7IC8vIHNvdXJjZUZyYW1lUmVm
Q29uCisKKyAgICAvLyBCZWNhdXNlIHdlIHBhc3NlZCBpbiAwIGZvciBmcmFtZVRpbWUsIHRoZSBh
Ym92ZSBmdW5jdGlvbgorICAgIC8vIGlzIHN5bmNocm9ub3VzLCBhbmQgdGhlIG1fY2xpZW50IGNh
bGxiYWNrIHdpbGwgaGF2ZSBiZWVuCisgICAgLy8gY2FsbGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24g
cmV0dXJucywgYW5kIG1fY2xpZW50LT5tX2xhdGVzdEZyYW1lCisgICAgLy8gd2lsbCBjb250YWlu
IHRoZSBuZXdseSBkZWNvbXByZXNzZWQgZnJhbWUuCisgICAgcmV0dXJuIG1fY2xpZW50LT5tX2xh
dGVzdEZyYW1lOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNv
bXByZXNzaW9uU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBRVERlY29tcHJlc3Npb25TZXNzaW9uX2gKKyNkZWZpbmUgUVREZWNvbXByZXNzaW9uU2Vzc2lv
bl9oCisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkg
X19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2Rl
Y2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisjaW5jbHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgor
CitjbGFzcyBRVERlY29tcHJlc3Npb25TZXNzaW9uQ2xpZW50OwordHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlSUNNRGVjb21wcmVzc2lvblNlc3Npb24qICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvblJlZjsK
KworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVREZWNvbXByZXNzaW9uU2Vzc2lvbiB7CitwdWJsaWM6
CisgICAgUVREZWNvbXByZXNzaW9uU2Vzc2lvbigpOworICAgIH5RVERlY29tcHJlc3Npb25TZXNz
aW9uKCk7CisKKyAgICAvLyBUaGUgcmVzdWx0aW5nIFFUUGl4ZWxCdWZmZXIgd2lsbCBiZSBhIENH
IGNvbXBhdGFibGUgQVJHQiBwaXhlbCBidWZmZXI6CisgICAgUVRQaXhlbEJ1ZmZlciBkZWNvbXBy
ZXNzKFFUUGl4ZWxCdWZmZXIpOworCitwcml2YXRlOgorICAgIFFURGVjb21wcmVzc2lvblNlc3Np
b25DbGllbnQqIG1fY2xpZW50OworICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uUmVmIG1fc2Vz
c2lvbjsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gNzAwODMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IFFUQ1ZUaW1lU3RhbXAgewog
CiBjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYgewogcHVibGljOgotICAgIFFUTW92aWVW
aXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFyZW50LCBRVE1vdmllVmlz
dWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dDo6VHlwZSBjb250
ZXh0VHlwZSk7CisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250
ZXh0KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxC
dWZmZXI6OlR5cGUgY29udGV4dFR5cGUpOwogICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dFByaXYo
KTsKIAogICAgIGJvb2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFt
cCopIGNvbnN0OwpAQCAtNjEsNjEgKzYxLDI4IEBAIHByaXZhdGU6CiAKIH07CiAKLXN0YXRpYyBP
U1N0YXR1cyBTZXROdW1iZXJWYWx1ZShDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGluRGljdCwgQ0ZT
dHJpbmdSZWYgaW5LZXksIFNJbnQzMiBpblZhbHVlKQorc3RhdGljIENGRGljdGlvbmFyeVJlZiBj
cmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29u
dGV4dFR5cGUpCiB7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtYmVyOwotIAotICAgIG51bWJlciA9IENG
TnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQzMlR5cGUsICZp
blZhbHVlKTsKLSAgICBpZiAoIW51bWJlcikgCi0gICAgICAgIHJldHVybiBjb3JlRm91bmRhdGlv
blVua25vd25FcnI7Ci0gCi0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoaW5EaWN0LCBpbktleSwg
bnVtYmVyKTsKLSAgICBDRlJlbGVhc2UobnVtYmVyKTsKLQotICAgIHJldHVybiBub0VycjsKLX0K
LQotc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9u
YXJ5KFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBlKQotewotICAgIHN0YXRp
YyBjb25zdCBDRlN0cmluZ1JlZiBrRGlyZWN0M0RDb21wYXRpYmlsaXR5S2V5ID0gQ0ZTVFIoIkRp
cmVjdDNEQ29tcGF0aWJpbGl0eSIpOwotCi0gICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBwaXhl
bEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpOwotCi0gICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBwaXhlbEJ1
ZmZlckF0dHJpYnV0ZXMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGlmIChjb250ZXh0VHlwZSA9PSBRVE1vdmllVmlzdWFs
Q29udGV4dDo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlKSB7Ci0gICAgICAgIC8vIEFzayBmb3Ig
RDNEIGNvbXBhdGlibGUgcGl4ZWwgYnVmZmVycyBzbyBubyBmdXJ0aGVyIHdvcmsgaXMgbmVlZGVk
LgotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtE
aXJlY3QzRENvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBVc2UgdGhlIGszMkJHUkFQaXhlbEZvcm1hdCwgYXMgUXVhcnR6Q29yZSB3aWxs
IGJlIGFibGUgdG8gdXNlIHRoZSBwaXhlbHMgZGlyZWN0bHksCi0gICAgICAgIC8vIHdpdGhvdXQg
bmVlZGluZyBhbiBhZGRpdGlvbmFsIGNvcHkgb3IgcmVuZGVyaW5nIHBhc3MuCi0gICAgICAgIFNl
dE51bWJlclZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJQaXhlbEZv
cm1hdFR5cGVLZXksIGszMkJHUkFQaXhlbEZvcm1hdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Ly8gU2V0IGtDVlBpeGVsQnVmZmVyQnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXkgdG8gMTYgdG8gZW5z
dXJlIHRoYXQgZWFjaCByb3cgb2YgcGl4ZWxzIAotICAgICAgICAvLyBzdGFydHMgYXQgYSAxNiBi
eXRlIGFsaWduZWQgYWRkcmVzcyBmb3IgbW9zdCBlZmZpY2llbnQgZGF0YSByZWFkaW5nLgotICAg
ICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVmZmVy
Qnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXksIDE2KTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmls
aXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotIAotICAgIENGRGljdGlvbmFyeVNldFZh
bHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga1FUVmlzdWFsQ29udGV4dFBpeGVsQnVmZmVyQXR0cmli
dXRlc0tleSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzKTsKLQotICAgIENGUmVsZWFzZShwaXhlbEJ1
ZmZlckF0dHJpYnV0ZXMpOwotCisgICAgY29uc3Qgdm9pZCoga2V5ID0ga1FUVmlzdWFsQ29udGV4
dFBpeGVsQnVmZmVyQXR0cmlidXRlc0tleTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IFFUUGl4
ZWxCdWZmZXI6OmNyZWF0ZVBpeGVsQnVmZmVyQXR0cmlidXRlc0RpY3Rpb25hcnkoY29udGV4dFR5
cGUpOworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsK
KyAgICBDRlJlbGVhc2UodmFsdWUpOwogICAgIHJldHVybiBwaXhlbEJ1ZmZlck9wdGlvbnM7CiB9
CiAKLXN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OlR5cGUgY29udGV4dFR5cGUpCitzdGF0aWMgQ0ZEaWN0aW9uYXJ5
UmVmIHBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4
dFR5cGUpCiB7Ci0gICAgaWYgKGNvbnRleHRUeXBlID09IFFUTW92aWVWaXN1YWxDb250ZXh0OjpD
b25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKKyAgICBpZiAoY29udGV4dFR5cGUgPT0gUVRQaXhl
bEJ1ZmZlcjo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlKSB7CiAgICAgICAgIHN0YXRpYyBDRkRp
Y3Rpb25hcnlSZWYgaW1hZ2VRdWV1ZU9wdGlvbnMgPSBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNE
aWN0aW9uYXJ5KGNvbnRleHRUeXBlKTsKICAgICAgICAgcmV0dXJuIGltYWdlUXVldWVPcHRpb25z
OwogICAgIH0gCiAKLSAgICBBU1NFUlQoY29udGV4dFR5cGUgPT0gUVRNb3ZpZVZpc3VhbENvbnRl
eHQ6OkNvbmZpZ3VyZUZvckNHSW1hZ2UpOworICAgIEFTU0VSVChjb250ZXh0VHlwZSA9PSBRVFBp
eGVsQnVmZmVyOjpDb25maWd1cmVGb3JDR0ltYWdlKTsKICAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5
UmVmIGNnSW1hZ2VPcHRpb25zID0gY3JlYXRlUGl4ZWxCdWZmZXJPcHRpb25zRGljdGlvbmFyeShj
b250ZXh0VHlwZSk7CiAgICAgcmV0dXJuIGNnSW1hZ2VPcHRpb25zOwogfQogCi1RVE1vdmllVmlz
dWFsQ29udGV4dFByaXY6OlFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29u
dGV4dCogcGFyZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVE1vdmll
VmlzdWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSkgCitRVE1vdmllVmlzdWFsQ29udGV4dFBy
aXY6OlFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFyZW50
LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVFBpeGVsQnVmZmVyOjpUeXBl
IGNvbnRleHRUeXBlKSAKICAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICAgICAsIG1fdmlzdWFsQ29udGV4dCgwKQpAQCAtMjA2LDEyICsx
NzMsMTIgQEAgdm9pZCBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlQXZhaQogICAgIHZj
LT5tX2NsaWVudC0+aW1hZ2VBdmFpbGFibGVGb3JUaW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
UVRDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOwogfQogCi1QYXNzUmVmUHRyPFFUTW92aWVWaXN1
YWxDb250ZXh0PiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRlKFFUTW92aWVWaXN1YWxDb250
ZXh0Q2xpZW50KiBjbGllbnQsIFR5cGUgY29udGV4dFR5cGUpCitQYXNzUmVmUHRyPFFUTW92aWVW
aXN1YWxDb250ZXh0PiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRlKFFUTW92aWVWaXN1YWxD
b250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dChjbGllbnQsIGNv
bnRleHRUeXBlKSk7CiB9CiAKLVFUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29u
dGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBUeXBlIGNvbnRleHRUeXBl
KSAKK1FUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlz
dWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVFBpeGVsQnVmZmVyOjpUeXBlIGNvbnRleHRUeXBl
KSAKICAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KHRoaXMsIGNs
aWVudCwgY29udGV4dFR5cGUpKQogewogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCShyZXZpc2lvbiA3MDA4MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDcgQEAgcHVibGljOgogCiBjbGFzcyBRVE1PVklF
V0lOX0FQSSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92aWVW
aXN1YWxDb250ZXh0PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsgQ29uZmlndXJlRm9yQ0dJ
bWFnZSwgQ29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxRVE1vdmllVmlzdWFsQ29udGV4dD4gY3JlYXRlKFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50
KiwgVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UVRNb3ZpZVZpc3VhbENvbnRleHQ+IGNy
ZWF0ZShRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCosIFFUUGl4ZWxCdWZmZXI6OlR5cGUpOwog
ICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dCgpOwogCiAgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxl
Rm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29uc3Q7CkBAIC03MSw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRIb3N0VGltZSgpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgUVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqLCBU
eXBlKTsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVu
dCosIFFUUGl4ZWxCdWZmZXI6OlR5cGUpOwogICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0KCk7
CiAKICAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJldmlz
aW9uIDcwMDgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIlFUUGl4
ZWxCdWZmZXIuaCIKIAorI2luY2x1ZGUgPENGTnVtYmVyLmg+CiAjaW5jbHVkZSA8Q0ZTdHJpbmcu
aD4KICNpbmNsdWRlIDxDR0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxDR0ltYWdlLmg+CkBAIC0z
Myw2ICszNCw0MSBAQAogI2luY2x1ZGUgPFF1aWNrRHJhdy5oPgogI2luY2x1ZGUgPG1lbW9yeS5o
PgogCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKK3sKKyAgICBDRk51
bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOworICAgIGlmICghbnVt
YmVyKSAKKyAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKKyAKKyAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOworICAgIENGUmVsZWFz
ZShudW1iZXIpOworCisgICAgcmV0dXJuIG5vRXJyOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRQ
aXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFyeShRVFBpeGVs
QnVmZmVyOjpUeXBlIGNvbnRleHRUeXBlKQoreworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1Jl
ZiBrRGlyZWN0M0RDb21wYXRpYmlsaXR5S2V5ID0gQ0ZTVFIoIkRpcmVjdDNEQ29tcGF0aWJpbGl0
eSIpOworCisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMg
PSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpOworICAgIGlmIChjb250ZXh0VHlwZSA9PSBRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JD
QUltYWdlUXVldWUpIHsKKyAgICAgICAgLy8gQXNrIGZvciBEM0QgY29tcGF0aWJsZSBwaXhlbCBi
dWZmZXJzIHNvIG5vIGZ1cnRoZXIgd29yayBpcyBuZWVkZWQuCisgICAgICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0RpcmVjdDNEQ29tcGF0aWJpbGl0eUtl
eSwga0NGQm9vbGVhblRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzZSB0aGUgazMy
QkdSQVBpeGVsRm9ybWF0LCBhcyBRdWFydHpDb3JlIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhlIHBp
eGVscyBkaXJlY3RseSwKKyAgICAgICAgLy8gd2l0aG91dCBuZWVkaW5nIGFuIGFkZGl0aW9uYWwg
Y29weSBvciByZW5kZXJpbmcgcGFzcy4KKyAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSwgazMyQkdSQVBp
eGVsRm9ybWF0KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBTZXQga0NWUGl4ZWxCdWZmZXJC
eXRlc1BlclJvd0FsaWdubWVudEtleSB0byAxNiB0byBlbnN1cmUgdGhhdCBlYWNoIHJvdyBvZiBw
aXhlbHMgCisgICAgICAgIC8vIHN0YXJ0cyBhdCBhIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzIGZv
ciBtb3N0IGVmZmljaWVudCBkYXRhIHJlYWRpbmcuCisgICAgICAgIFNldE51bWJlclZhbHVlKHBp
eGVsQnVmZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtl
eSwgMTYpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0
ZXMsIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVl
KTsKKyAgICB9CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyQXR0cmlidXRlczsKK30KKwogUVRQaXhl
bEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcigpIAogICAgIDogbV9waXhlbEJ1ZmZlcigwKSAKIHsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJKHJl
dmlzaW9uIDcwMDgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IF9fQ0ZEaWN0aW9uYXJ5ICogQ0YKIC8vIHNhZmUgdG8gY2FsbCB3aXRoaW4gV2ViS2l0Lgog
Y2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRQaXhlbEJ1ZmZlciB7CiBwdWJsaWM6CisgICAgZW51bSBU
eXBlIHsgQ29uZmlndXJlRm9yQ0dJbWFnZSwgQ29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIH07Cisg
ICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0
aW9uYXJ5KFR5cGUpOworCiAgICAgUVRQaXhlbEJ1ZmZlcigpOwogICAgIFFUUGl4ZWxCdWZmZXIo
Y29uc3QgUVRQaXhlbEJ1ZmZlciYpOwogICAgIFFUUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJl
Zik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71458</attachid>
            <date>2010-10-21 10:44:10 -0700</date>
            <delta_ts>2010-10-21 10:55:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47996-20101021104414.patch</filename>
            <type>text/plain</type>
            <size>24802</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMjAgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmlk
ZW8gLT4gQ2FudmFzIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk5NgorICAgICAgICByZGFyOi8vcHJvYmxl
bS83ODg0NjkwCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvajog
QWRkZWQgUVREZWNvbXByZXNzaW9uU2Vzc2lvbi57Y3BwLGh9CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6cGFpbnQpOiBDcmVhdGUgYSAKKyAgICAgICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Np
b24gaWYgbmVjZXNzYXJ5IGFuZCBjb252ZXJ0IHRoZSBRVFBpeGVsQnVmZmVyCisgICAgICAgICAg
ICBpbnRvIGEgQ0ctY29tcGF0aWJsZSBvbmUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHA6CisgICAgICAgIChTZXRO
dW1iZXJWYWx1ZSk6IE1vdmVkIGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuCisgICAgICAgIChR
VFBpeGVsQnVmZmVyOjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogTW92
ZWQgZnJvbSBpbnNpZGUKKyAgICAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0OjpjcmVhdGVQ
aXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogTW92ZWQgdGhlIFR5cGUgZW51bSAKKyAgICAgICAgICAg
IGZyb20gUVRNb3ZpZVZpc3VhbENvbnRleHQuaC4KKwogMjAxMC0xMC0yMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lvbiA3
MDA4MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTMxOCw2ICszMTgsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFURGVjb21w
cmVzc2lvblNlc3Npb24uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTM1Niw2ICszNjAsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
XFFURGVjb21wcmVzc2lvblNlc3Npb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDcwMDg0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCiAjaW5jbHVkZSAiUVRD
RkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJRVERlY29tcHJlc3Npb25TZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUVRNb3ZpZS5oIgogI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCiAjaW5jbHVkZSAiUVRN
b3ZpZVZpc3VhbENvbnRleHQuaCIKQEAgLTcyOCwxMiArNzI5LDI1IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KICAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFS
ZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyICYmICFtX3Zpc3VhbENvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9xdFZp
ZGVvTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIFFUUGl4ZWxCdWZmZXIgYnVm
ZmVyID0gbV92aXN1YWxDb250ZXh0LT5pbWFnZUZvclRpbWUoMCk7CiAgICAgaWYgKGJ1ZmZlci5w
aXhlbEJ1ZmZlclJlZigpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBwcm9iYWJs
eSBiZWluZyBhc2tlZCB0byByZW5kZXIgdGhlIHZpZGVvIGludG8gYSBjYW52YXMsIGJ1dCAKKyAg
ICAgICAgICAgIC8vIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGUgUVRQaXhlbEJ1ZmZlciBpcyBu
b3QgQVJHQiBhbmQgdGh1cyBjYW4ndCBiZQorICAgICAgICAgICAgLy8gZHJhd24gdXNpbmcgQ0cu
ICBJZiBzbywgZmlyZSB1cCBhbiBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbiBhbmQgY29udmVydCAK
KyAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGZyYW1lIGludG8gc29tZXRoaW5nIHdoaWNoIGNh
biBiZSByZW5kZXJlZCBieSBDRy4KKyAgICAgICAgICAgIGlmICghYnVmZmVyLnBpeGVsRm9ybWF0
SXMzMkFSR0IoKSAmJiAhYnVmZmVyLnBpeGVsRm9ybWF0SXMzMkJHUkEoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFRoZSBkZWNvbXByZXNzaW9uIHNlc3Npb24gd2lsbCBvbmx5IGRlY29tcHJlc3Mg
YSBzcGVjaWZpYyBwaXhlbEZvcm1hdCAKKyAgICAgICAgICAgICAgICAvLyBhdCBhIHNwZWNpZmlj
IHdpZHRoIGFuZCBoZWlnaHQ7IGlmIHRoZXNlIGRpZmZlciwgdGhlIHNlc3Npb24gbXVzdCBiZQor
ICAgICAgICAgICAgICAgIC8vIHJlY3JlYXRlZCB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZGVjb21wcmVzc2lvblNlc3Npb24gfHwgIW1fZGVjb21wcmVz
c2lvblNlc3Npb24tPmNhbkRlY29tcHJlc3MoYnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9kZWNvbXByZXNzaW9uU2Vzc2lvbiA9IFFURGVjb21wcmVzc2lvblNlc3Npb246OmNyZWF0ZShi
dWZmZXIucGl4ZWxGb3JtYXRUeXBlKCksIGJ1ZmZlci53aWR0aCgpLCBidWZmZXIuaGVpZ2h0KCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXIgPSBtX2RlY29tcHJlc3Npb25T
ZXNzaW9uLT5kZWNvbXByZXNzKGJ1ZmZlcik7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBD
R0ltYWdlUmVmIGltYWdlID0gQ3JlYXRlQ0dJbWFnZUZyb21QaXhlbEJ1ZmZlcihidWZmZXIpOwog
ICAgICAgICAKICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwLT5wbGF0Zm9ybUNvbnRl
eHQoKTsKQEAgLTEwODksNyArMTEwMyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ28KICAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlh
UGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOwogI2VuZGlmCiAKLSAgICBRVE1v
dmllVmlzdWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSA9IHJlcXVpcmVkRGxsc0F2YWlsYWJs
ZSgpICYmIHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyID8gUVRNb3Zp
ZVZpc3VhbENvbnRleHQ6OkNvbmZpZ3VyZUZvckNBSW1hZ2VRdWV1ZSA6IFFUTW92aWVWaXN1YWxD
b250ZXh0OjpDb25maWd1cmVGb3JDR0ltYWdlOworICAgIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29u
dGV4dFR5cGUgPSByZXF1aXJlZERsbHNBdmFpbGFibGUoKSAmJiBwcmVmZXJyZWRNb2RlID09IE1l
ZGlhUmVuZGVyaW5nTW92aWVMYXllciA/IFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZvckNBSW1h
Z2VRdWV1ZSA6IFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZvckNHSW1hZ2U7CiAgICAgbV92aXN1
YWxDb250ZXh0ID0gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmNyZWF0ZShtX3Zpc3VhbENvbnRleHRD
bGllbnQuZ2V0KCksIGNvbnRleHRUeXBlKTsKICAgICBtX3Zpc3VhbENvbnRleHQtPnNldE1vdmll
KG1fbW92aWUuZ2V0KCkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQuaAkocmV2aXNpb24gNzAwODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNH
SW1hZ2VSZWY7CiBjbGFzcyBRVE1vdmllOwogY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHQ7Citj
bGFzcyBRVERlY29tcHJlc3Npb25TZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTE3OCw2ICsxNzksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXS0NBQ0ZMYXllcj4gbV9xdFZp
ZGVvTGF5ZXI7CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fdHJhbnNmb3JtTGF5ZXI7CiAg
ICAgT3duUHRyPFdLQ0FJbWFnZVF1ZXVlPiBtX2ltYWdlUXVldWU7CisgICAgT3duUHRyPFFURGVj
b21wcmVzc2lvblNlc3Npb24+IG1fZGVjb21wcmVzc2lvblNlc3Npb247CiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gbV9tb3ZpZVRyYW5zZm9ybTsgCiAjZW5kaWYKICAgICBSZWZQdHI8UVRNb3ZpZVZp
c3VhbENvbnRleHQ+IG1fdmlzdWFsQ29udGV4dDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FURGVjb21wcmVzc2lvblNlc3Npb24uY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9u
U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVREZWNvbXBy
ZXNzaW9uU2Vzc2lvbi5oIgorCisjaW5jbHVkZSA8SW1hZ2VDb21wcmVzc2lvbi5oPgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KKworY2xhc3MgUVREZWNvbXByZXNzaW9uU2Vzc2lvbkNsaWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgdHJhY2tpbmdDYWxsYmFjayh2b2lkICpkZWNvbXByZXNz
aW9uVHJhY2tpbmdSZWZDb24sIE9TU3RhdHVzLCAKKyAgICAgICAgSUNNRGVjb21wcmVzc2lvblRy
YWNraW5nRmxhZ3MgZGVjb21wcmVzc2lvblRyYWNraW5nRmxhZ3MsIENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXIsIAorICAgICAgICBUaW1lVmFsdWU2NCwgVGltZVZhbHVlNjQsIElDTVZhbGlk
VGltZUZsYWdzLCB2b2lkICosIHZvaWQgKikKKyAgICB7CisgICAgICAgIFFURGVjb21wcmVzc2lv
blNlc3Npb24qIHNlc3Npb24gPSBzdGF0aWNfY2FzdDxRVERlY29tcHJlc3Npb25TZXNzaW9uKj4o
ZGVjb21wcmVzc2lvblRyYWNraW5nUmVmQ29uKTsKKyAgICAgICAgQVNTRVJUKHNlc3Npb24pOwor
CisgICAgICAgIGlmIChkZWNvbXByZXNzaW9uVHJhY2tpbmdGbGFncyAmIGtJQ01EZWNvbXByZXNz
aW9uVHJhY2tpbmdfRnJhbWVEZWNvZGVkKQorICAgICAgICAgICAgc2Vzc2lvbi0+bV9sYXRlc3RG
cmFtZSA9IFFUUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIpOworICAgIH0KK307CisKK1Bhc3NPd25Q
dHI8UVREZWNvbXByZXNzaW9uU2Vzc2lvbj4gUVREZWNvbXByZXNzaW9uU2Vzc2lvbjo6Y3JlYXRl
KHVuc2lnbmVkIGxvbmcgcGl4ZWxGb3JtYXQsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFFURGVjb21wcmVzc2lvblNlc3Npb24ocGl4ZWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsKK30KKworUVREZWNvbXByZXNzaW9uU2Vzc2lvbjo6UVRE
ZWNvbXByZXNzaW9uU2Vzc2lvbih1bnNpZ25lZCBsb25nIHBpeGVsRm9ybWF0LCBzaXplX3Qgd2lk
dGgsIHNpemVfdCBoZWlnaHQpCisgICAgOiBtX3Nlc3Npb24oMCkKKyAgICAsIG1fcGl4ZWxGb3Jt
YXQocGl4ZWxGb3JtYXQpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwgbV9oZWlnaHQoaGVp
Z2h0KQoreworICAgIGluaXRpYWxpemVTZXNzaW9uKCk7Cit9CisKK1FURGVjb21wcmVzc2lvblNl
c3Npb246On5RVERlY29tcHJlc3Npb25TZXNzaW9uKCkKK3sKKyAgICBpZiAobV9zZXNzaW9uKQor
ICAgICAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvblJlbGVhc2UobV9zZXNzaW9uKTsKK30KKwor
dm9pZCBRVERlY29tcHJlc3Npb25TZXNzaW9uOjppbml0aWFsaXplU2Vzc2lvbigpCit7CisgICAg
aWYgKG1fc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgSUNNUGl4ZWxGb3JtYXRJbmZv
IHBpeGVsRm9ybWF0SW5mbyA9IHtzaXplb2YoSUNNUGl4ZWxGb3JtYXRJbmZvKSwgMH07CisgICAg
aWYgKElDTUdldFBpeGVsRm9ybWF0SW5mbyhtX3BpeGVsRm9ybWF0LCAmcGl4ZWxGb3JtYXRJbmZv
KSAhPSBub0VycikgeworICAgICAgICAvLyBUaGUgSUNNIGRvZXMgbm90IGtub3cgYW55dGhpbmcg
YWJvdXQgdGhlIHBpeGVsRm9ybWF0IGNvbnRhaW5lZCBpbgorICAgICAgICAvLyB0aGUgcGl4ZWwg
YnVmZmVyLCBzbyBpdCB3b24ndCBiZSBhYmxlIHRvIGNvbnZlcnQgaXQgdG8gUkdCQS4gIAorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGRlcHRoIGFuZCBjVHlwZSBmaWVsZHMg
b2YgdGhlIEltYWdlRGVzY3JpcHRpb25IYW5kbGUgYXJlIGZpbGxlZCAKKyAgICAvLyBvdXQgYWNj
b3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgaW4gVGVjaG5pY2FsIFEmQSBRQTExODM6IAorICAg
IC8vIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjLyNxYS9xYTIwMDEvcWEx
MTgzLmh0bWwKKyAgICBib29sIGlzSW5kZXhlZCA9IHBpeGVsRm9ybWF0SW5mby5mb3JtYXRGbGFn
cyAmIGtJQ01QaXhlbEZvcm1hdElzSW5kZXhlZDsKKyAgICBib29sIGlzUUQgPSBwaXhlbEZvcm1h
dEluZm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRJc1N1cHBvcnRlZEJ5UUQ7CisgICAg
Ym9vbCBpc01vbm9jaHJvbWUgPSBwaXhlbEZvcm1hdEluZm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4
ZWxGb3JtYXRJc01vbm9jaHJvbWU7CisgICAgYm9vbCBoYXNBbHBoYSA9IHBpeGVsRm9ybWF0SW5m
by5mb3JtYXRGbGFncyAmIGtJQ01QaXhlbEZvcm1hdEhhc0FscGhhQ2hhbm5lbDsKKworICAgIHVu
c2lnbmVkIGludCBkZXB0aCA9IDI0OyAvLyBUaGUgZGVmYXVsdCBkZXB0aCBpcyAyNC4KKyAgICBp
ZiAoaGFzQWxwaGEpCisgICAgICAgIGRlcHRoID0gMzI7IC8vIEFueSBwaXhlbCBmb3JtYXQgd2l0
aCBhbHBoYSBnZXRzIGEgZGVwdGggb2YgMzIuCisgICAgZWxzZSBpZiAoaXNNb25vY2hyb21lKSB7
CisgICAgICAgIC8vIEdyYXlzY2FsZSBwaXhlbCBmb3JtYXRzIGdldCBkZXB0aHMgMzMgdGhyb3Vn
aCA0MCwgZGVwZW5kaW5nCisgICAgICAgIC8vIG9uIHRoZWlyIGJpdHMgcGVyIHBpeGVsLiBZZXMs
IHRoaXMgbWVhbnMgdGhhdCAxNi1iaXQgZ3JheXNjYWxlCisgICAgICAgIC8vIGFuZCA4LWJpdCBn
cmF5c2NhbGUgaGF2ZSB0aGUgc2FtZSBwaXhlbCBkZXB0aC4KKyAgICAgICAgZGVwdGggPSAzMiAr
IHN0ZDo6bWluPHVuc2lnbmVkIGludD4oOCwgcGl4ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbFsw
XSk7CisgICAgfSBlbHNlIGlmIChpc0luZGV4ZWQpIHsKKyAgICAgICAgLy8gSW5kZXhlZCBwaXhl
bCBmb3JtYXRzIGdldCBhIGRlcHRoIG9mIDEgdGhyb3VnaCA4LCBkZXBlbmRpbmcgb24KKyAgICAg
ICAgLy8gdGhlIHRoZWlyIGJpdHMgcGVyIHBpeGVsLgorICAgICAgICBkZXB0aCA9IHBpeGVsRm9y
bWF0SW5mby5iaXRzUGVyUGl4ZWxbMF07IAorICAgIH0KKworICAgIC8vIElmIFF1aWNrRHJhdyBz
dXBwb3J0cyB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCB0aGUgY1R5cGUgc2hvdWxkIGJlIGtSYXdD
b2RlY1R5cGUuCisgICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIHBpeGVsIGZvcm1hdCBjb2RlIGZv
ciB0aGUgY1R5cGUuICBXZSBhcmUgYXNzdW1pbmcgdGhlIHBpeGVsIAorICAgIC8vIGJ1ZmZlciBp
cyB1bmNvbXByZXNzZWQuCisgICAgdW5zaWduZWQgbG9uZyBjVHlwZSA9IGlzUUQgPyBrUmF3Q29k
ZWNUeXBlIDogbV9waXhlbEZvcm1hdDsKKworICAgIEltYWdlRGVzY3JpcHRpb25IYW5kbGUgZGVz
Y3JpcHRpb24gPSAoSW1hZ2VEZXNjcmlwdGlvbkhhbmRsZSlOZXdIYW5kbGVDbGVhcihzaXplb2Yo
SW1hZ2VEZXNjcmlwdGlvbikpOworICAgICgqKmRlc2NyaXB0aW9uKS5pZFNpemUgPSBzaXplb2Yo
SW1hZ2VEZXNjcmlwdGlvbik7CisgICAgKCoqZGVzY3JpcHRpb24pLmNUeXBlID0gY1R5cGU7Cisg
ICAgKCoqZGVzY3JpcHRpb24pLnZlcnNpb24gPSAyOworICAgICgqKmRlc2NyaXB0aW9uKS5zcGF0
aWFsUXVhbGl0eSA9IGNvZGVjTG9zc2xlc3NRdWFsaXR5OworICAgICgqKmRlc2NyaXB0aW9uKS53
aWR0aCA9IG1fd2lkdGg7CisgICAgKCoqZGVzY3JpcHRpb24pLmhlaWdodCA9IG1faGVpZ2h0Owor
ICAgICgqKmRlc2NyaXB0aW9uKS5oUmVzID0gNzIgPDwgMTY7IC8vIDcyIERQSSBhcyBhIGZpeGVk
LXBvaW50IG51bWJlcgorICAgICgqKmRlc2NyaXB0aW9uKS52UmVzID0gNzIgPDwgMTY7IC8vIDcy
IERQSSBhcyBhIGZpeGVkLXBvaW50IG51bWJlcgorICAgICgqKmRlc2NyaXB0aW9uKS5mcmFtZUNv
dW50ID0gMTsKKyAgICAoKipkZXNjcmlwdGlvbikuZGVwdGggPSAgZGVwdGg7CisgICAgKCoqZGVz
Y3JpcHRpb24pLmNsdXRJRCA9IC0xOworCisgICAgLy8gQ3JlYXRlIHRoZSBtYW5kYXRvcnkgSUNN
RGVjb21wcmVzc2lvblNlc3Npb25PcHRpb25zLCBidXQgbGVhdmUKKyAgICAvLyBhbGwgdGhlIGRl
ZmF1bHQgdmFsdWVzLgorICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uT3B0aW9uc1JlZiBvcHRp
b25zID0gMDsKKyAgICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbk9wdGlvbnNDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgJm9wdGlvbnMpOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVm
ZmVyQXR0cmlidXRlcyA9IFFUUGl4ZWxCdWZmZXI6OmNyZWF0ZVBpeGVsQnVmZmVyQXR0cmlidXRl
c0RpY3Rpb25hcnkoUVRQaXhlbEJ1ZmZlcjo6Q29uZmlndXJlRm9yQ0dJbWFnZSk7CisKKyAgICBJ
Q01EZWNvbXByZXNzaW9uVHJhY2tpbmdDYWxsYmFja1JlY29yZCBjYWxsYmFjayA9IHsKKyAgICAg
ICAgUVREZWNvbXByZXNzaW9uU2Vzc2lvbkNsaWVudDo6dHJhY2tpbmdDYWxsYmFjaywKKyAgICAg
ICAgdGhpcywKKyAgICB9OworCisgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25DcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgIG9wdGlvbnMs
CisgICAgICAgIHBpeGVsQnVmZmVyQXR0cmlidXRlcywKKyAgICAgICAgJmNhbGxiYWNrLAorICAg
ICAgICAmbV9zZXNzaW9uKTsKKworICAgIGlmIChwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMpCisgICAg
ICAgIENGUmVsZWFzZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMpOworCisgICAgSUNNRGVjb21wcmVz
c2lvblNlc3Npb25PcHRpb25zUmVsZWFzZShvcHRpb25zKTsKKyAgICBEaXNwb3NlSGFuZGxlKChI
YW5kbGUpZGVzY3JpcHRpb24pOworfQorCitib29sIFFURGVjb21wcmVzc2lvblNlc3Npb246OmNh
bkRlY29tcHJlc3MoUVRQaXhlbEJ1ZmZlciBpbkJ1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9zZXNz
aW9uIAorICAgICAgICAmJiBpbkJ1ZmZlci5waXhlbEZvcm1hdFR5cGUoKSA9PSBtX3BpeGVsRm9y
bWF0IAorICAgICAgICAmJiBpbkJ1ZmZlci53aWR0aCgpID09IG1fd2lkdGgKKyAgICAgICAgJiYg
aW5CdWZmZXIuaGVpZ2h0KCkgPT0gbV9oZWlnaHQ7Cit9CisKK1FUUGl4ZWxCdWZmZXIgUVREZWNv
bXByZXNzaW9uU2Vzc2lvbjo6ZGVjb21wcmVzcyhRVFBpeGVsQnVmZmVyIGluQnVmZmVyKQorewor
ICAgIGlmICghY2FuRGVjb21wcmVzcyhpbkJ1ZmZlcikpCisgICAgICAgIHJldHVybiBRVFBpeGVs
QnVmZmVyKCk7CisgICAgCisgICAgaW5CdWZmZXIubG9ja0Jhc2VBZGRyZXNzKCk7CisgICAgSUNN
RGVjb21wcmVzc2lvblNlc3Npb25EZWNvZGVGcmFtZShtX3Nlc3Npb24sCisgICAgICAgIHN0YXRp
Y19jYXN0PFVJbnQ4Kj4oaW5CdWZmZXIuYmFzZUFkZHJlc3MoKSksCisgICAgICAgIGluQnVmZmVy
LmRhdGFTaXplKCksCisgICAgICAgIDAsIC8vIGZyYW1lT3B0aW9ucworICAgICAgICAwLCAvLyBm
cmFtZVRpbWUKKyAgICAgICAgMCk7IC8vIHNvdXJjZUZyYW1lUmVmQ29uCisKKyAgICAvLyBCZWNh
dXNlIHdlIHBhc3NlZCBpbiAwIGZvciBmcmFtZVRpbWUsIHRoZSBhYm92ZSBmdW5jdGlvbgorICAg
IC8vIGlzIHN5bmNocm9ub3VzLCBhbmQgdGhlIGNsaWVudCBjYWxsYmFjayB3aWxsIGhhdmUgYmVl
bgorICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGFuZCBtX2xhdGVz
dEZyYW1lCisgICAgLy8gd2lsbCBjb250YWluIHRoZSBuZXdseSBkZWNvbXByZXNzZWQgZnJhbWUu
CisgICAgcmV0dXJuIG1fbGF0ZXN0RnJhbWU7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vz
c2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFFURGVjb21wcmVzc2lvblNlc3Npb25faAorI2RlZmluZSBRVERl
Y29tcHJlc3Npb25TZXNzaW9uX2gKKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmlu
ZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFU
TU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlICJR
VFBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxXVEYvUGFzc093blB0ci5oPgorCitjbGFzcyBR
VERlY29tcHJlc3Npb25TZXNzaW9uQ2xpZW50OwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSUNNRGVj
b21wcmVzc2lvblNlc3Npb24qICBJQ01EZWNvbXByZXNzaW9uU2Vzc2lvblJlZjsKKworY2xhc3Mg
UVRNT1ZJRVdJTl9BUEkgUVREZWNvbXByZXNzaW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8UVREZWNvbXByZXNzaW9uU2Vzc2lvbj4gY3JlYXRlKHVuc2lnbmVkIGxv
bmcgcGl4ZWxGb3JtYXQsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7CisgICAgflFURGVj
b21wcmVzc2lvblNlc3Npb24oKTsKKworICAgIGJvb2wgY2FuRGVjb21wcmVzcyhRVFBpeGVsQnVm
ZmVyKTsKKworICAgIC8vIFRoZSByZXN1bHRpbmcgUVRQaXhlbEJ1ZmZlciB3aWxsIGJlIGEgQ0cg
Y29tcGF0YWJsZSBBUkdCIHBpeGVsIGJ1ZmZlcjoKKyAgICBRVFBpeGVsQnVmZmVyIGRlY29tcHJl
c3MoUVRQaXhlbEJ1ZmZlcik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFFURGVjb21w
cmVzc2lvblNlc3Npb25DbGllbnQ7CisgICAgUVREZWNvbXByZXNzaW9uU2Vzc2lvbih1bnNpZ25l
ZCBsb25nIHBpeGVsRm9ybWF0LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpOworICAgIHZv
aWQgaW5pdGlhbGl6ZVNlc3Npb24oKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbV9waXhlbEZvcm1h
dDsKKyAgICBzaXplX3QgbV93aWR0aDsKKyAgICBzaXplX3QgbV9oZWlnaHQ7CisgICAgUVRQaXhl
bEJ1ZmZlciBtX2xhdGVzdEZyYW1lOworICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uUmVmIG1f
c2Vzc2lvbjsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gNzAwODMp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IFFUQ1ZUaW1lU3RhbXAg
ewogCiBjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYgewogcHVibGljOgotICAgIFFUTW92
aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFyZW50LCBRVE1vdmll
VmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dDo6VHlwZSBj
b250ZXh0VHlwZSk7CisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxD
b250ZXh0KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4
ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUpOwogICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dFBy
aXYoKTsKIAogICAgIGJvb2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVT
dGFtcCopIGNvbnN0OwpAQCAtNjEsNjEgKzYxLDI4IEBAIHByaXZhdGU6CiAKIH07CiAKLXN0YXRp
YyBPU1N0YXR1cyBTZXROdW1iZXJWYWx1ZShDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGluRGljdCwg
Q0ZTdHJpbmdSZWYgaW5LZXksIFNJbnQzMiBpblZhbHVlKQorc3RhdGljIENGRGljdGlvbmFyeVJl
ZiBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KFFUUGl4ZWxCdWZmZXI6OlR5cGUg
Y29udGV4dFR5cGUpCiB7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtYmVyOwotIAotICAgIG51bWJlciA9
IENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQzMlR5cGUs
ICZpblZhbHVlKTsKLSAgICBpZiAoIW51bWJlcikgCi0gICAgICAgIHJldHVybiBjb3JlRm91bmRh
dGlvblVua25vd25FcnI7Ci0gCi0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoaW5EaWN0LCBpbktl
eSwgbnVtYmVyKTsKLSAgICBDRlJlbGVhc2UobnVtYmVyKTsKLQotICAgIHJldHVybiBub0VycjsK
LX0KLQotc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0
aW9uYXJ5KFFUTW92aWVWaXN1YWxDb250ZXh0OjpUeXBlIGNvbnRleHRUeXBlKQotewotICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrRGlyZWN0M0RDb21wYXRpYmlsaXR5S2V5ID0gQ0ZTVFIo
IkRpcmVjdDNEQ29tcGF0aWJpbGl0eSIpOwotCi0gICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBw
aXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotCi0gICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGlmIChjb250ZXh0VHlwZSA9PSBRVE1vdmllVmlz
dWFsQ29udGV4dDo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlKSB7Ci0gICAgICAgIC8vIEFzayBm
b3IgRDNEIGNvbXBhdGlibGUgcGl4ZWwgYnVmZmVycyBzbyBubyBmdXJ0aGVyIHdvcmsgaXMgbmVl
ZGVkLgotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMs
IGtEaXJlY3QzRENvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBVc2UgdGhlIGszMkJHUkFQaXhlbEZvcm1hdCwgYXMgUXVhcnR6Q29yZSB3
aWxsIGJlIGFibGUgdG8gdXNlIHRoZSBwaXhlbHMgZGlyZWN0bHksCi0gICAgICAgIC8vIHdpdGhv
dXQgbmVlZGluZyBhbiBhZGRpdGlvbmFsIGNvcHkgb3IgcmVuZGVyaW5nIHBhc3MuCi0gICAgICAg
IFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJQaXhl
bEZvcm1hdFR5cGVLZXksIGszMkJHUkFQaXhlbEZvcm1hdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgLy8gU2V0IGtDVlBpeGVsQnVmZmVyQnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXkgdG8gMTYgdG8g
ZW5zdXJlIHRoYXQgZWFjaCByb3cgb2YgcGl4ZWxzIAotICAgICAgICAvLyBzdGFydHMgYXQgYSAx
NiBieXRlIGFsaWduZWQgYWRkcmVzcyBmb3IgbW9zdCBlZmZpY2llbnQgZGF0YSByZWFkaW5nLgot
ICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVm
ZmVyQnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXksIDE2KTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRp
YmlsaXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotIAotICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga1FUVmlzdWFsQ29udGV4dFBpeGVsQnVmZmVyQXR0
cmlidXRlc0tleSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzKTsKLQotICAgIENGUmVsZWFzZShwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMpOwotCisgICAgY29uc3Qgdm9pZCoga2V5ID0ga1FUVmlzdWFsQ29u
dGV4dFBpeGVsQnVmZmVyQXR0cmlidXRlc0tleTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IFFU
UGl4ZWxCdWZmZXI6OmNyZWF0ZVBpeGVsQnVmZmVyQXR0cmlidXRlc0RpY3Rpb25hcnkoY29udGV4
dFR5cGUpOworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KTsKKyAgICBDRlJlbGVhc2UodmFsdWUpOwogICAgIHJldHVybiBwaXhlbEJ1ZmZlck9wdGlvbnM7
CiB9CiAKLXN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMo
UVRNb3ZpZVZpc3VhbENvbnRleHQ6OlR5cGUgY29udGV4dFR5cGUpCitzdGF0aWMgQ0ZEaWN0aW9u
YXJ5UmVmIHBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29u
dGV4dFR5cGUpCiB7Ci0gICAgaWYgKGNvbnRleHRUeXBlID09IFFUTW92aWVWaXN1YWxDb250ZXh0
OjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsKKyAgICBpZiAoY29udGV4dFR5cGUgPT0gUVRQ
aXhlbEJ1ZmZlcjo6Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlKSB7CiAgICAgICAgIHN0YXRpYyBD
RkRpY3Rpb25hcnlSZWYgaW1hZ2VRdWV1ZU9wdGlvbnMgPSBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlv
bnNEaWN0aW9uYXJ5KGNvbnRleHRUeXBlKTsKICAgICAgICAgcmV0dXJuIGltYWdlUXVldWVPcHRp
b25zOwogICAgIH0gCiAKLSAgICBBU1NFUlQoY29udGV4dFR5cGUgPT0gUVRNb3ZpZVZpc3VhbENv
bnRleHQ6OkNvbmZpZ3VyZUZvckNHSW1hZ2UpOworICAgIEFTU0VSVChjb250ZXh0VHlwZSA9PSBR
VFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDR0ltYWdlKTsKICAgICBzdGF0aWMgQ0ZEaWN0aW9u
YXJ5UmVmIGNnSW1hZ2VPcHRpb25zID0gY3JlYXRlUGl4ZWxCdWZmZXJPcHRpb25zRGljdGlvbmFy
eShjb250ZXh0VHlwZSk7CiAgICAgcmV0dXJuIGNnSW1hZ2VPcHRpb25zOwogfQogCi1RVE1vdmll
VmlzdWFsQ29udGV4dFByaXY6OlFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFs
Q29udGV4dCogcGFyZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVE1v
dmllVmlzdWFsQ29udGV4dDo6VHlwZSBjb250ZXh0VHlwZSkgCitRVE1vdmllVmlzdWFsQ29udGV4
dFByaXY6OlFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFy
ZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVFBpeGVsQnVmZmVyOjpU
eXBlIGNvbnRleHRUeXBlKSAKICAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgICwg
bV9jbGllbnQoY2xpZW50KQogICAgICAgICAsIG1fdmlzdWFsQ29udGV4dCgwKQpAQCAtMjA2LDEy
ICsxNzMsMTIgQEAgdm9pZCBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlQXZhaQogICAg
IHZjLT5tX2NsaWVudC0+aW1hZ2VBdmFpbGFibGVGb3JUaW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUVRDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOwogfQogCi1QYXNzUmVmUHRyPFFUTW92aWVW
aXN1YWxDb250ZXh0PiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRlKFFUTW92aWVWaXN1YWxD
b250ZXh0Q2xpZW50KiBjbGllbnQsIFR5cGUgY29udGV4dFR5cGUpCitQYXNzUmVmUHRyPFFUTW92
aWVWaXN1YWxDb250ZXh0PiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRlKFFUTW92aWVWaXN1
YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dChjbGllbnQs
IGNvbnRleHRUeXBlKSk7CiB9CiAKLVFUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFs
Q29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBUeXBlIGNvbnRleHRU
eXBlKSAKK1FUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmll
VmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVFBpeGVsQnVmZmVyOjpUeXBlIGNvbnRleHRU
eXBlKSAKICAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KHRoaXMs
IGNsaWVudCwgY29udGV4dFR5cGUpKQogewogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCShyZXZpc2lvbiA3MDA4
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDcgQEAgcHVibGljOgogCiBjbGFzcyBRVE1P
VklFV0lOX0FQSSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92
aWVWaXN1YWxDb250ZXh0PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsgQ29uZmlndXJlRm9y
Q0dJbWFnZSwgQ29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIH07Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxRVE1vdmllVmlzdWFsQ29udGV4dD4gY3JlYXRlKFFUTW92aWVWaXN1YWxDb250ZXh0Q2xp
ZW50KiwgVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UVRNb3ZpZVZpc3VhbENvbnRleHQ+
IGNyZWF0ZShRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCosIFFUUGl4ZWxCdWZmZXI6OlR5cGUp
OwogICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dCgpOwogCiAgICAgYm9vbCBpc0ltYWdlQXZhaWxh
YmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29uc3Q7CkBAIC03MSw3ICs2OSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRIb3N0VGltZSgpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgUVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQq
LCBUeXBlKTsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENs
aWVudCosIFFUUGl4ZWxCdWZmZXI6OlR5cGUpOwogICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0
KCk7CiAKICAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDcwMDgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIlFU
UGl4ZWxCdWZmZXIuaCIKIAorI2luY2x1ZGUgPENGTnVtYmVyLmg+CiAjaW5jbHVkZSA8Q0ZTdHJp
bmcuaD4KICNpbmNsdWRlIDxDR0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxDR0ltYWdlLmg+CkBA
IC0zMyw2ICszNCw0MSBAQAogI2luY2x1ZGUgPFF1aWNrRHJhdy5oPgogI2luY2x1ZGUgPG1lbW9y
eS5oPgogCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKK3sKKyAgICBD
Rk51bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOworICAgIGlmICgh
bnVtYmVyKSAKKyAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKKyAKKyAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOworICAgIENGUmVs
ZWFzZShudW1iZXIpOworCisgICAgcmV0dXJuIG5vRXJyOworfQorCitDRkRpY3Rpb25hcnlSZWYg
UVRQaXhlbEJ1ZmZlcjo6Y3JlYXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFyeShRVFBp
eGVsQnVmZmVyOjpUeXBlIGNvbnRleHRUeXBlKQoreworICAgIHN0YXRpYyBjb25zdCBDRlN0cmlu
Z1JlZiBrRGlyZWN0M0RDb21wYXRpYmlsaXR5S2V5ID0gQ0ZTVFIoIkRpcmVjdDNEQ29tcGF0aWJp
bGl0eSIpOworCisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0
ZXMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpOworICAgIGlmIChjb250ZXh0VHlwZSA9PSBRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVG
b3JDQUltYWdlUXVldWUpIHsKKyAgICAgICAgLy8gQXNrIGZvciBEM0QgY29tcGF0aWJsZSBwaXhl
bCBidWZmZXJzIHNvIG5vIGZ1cnRoZXIgd29yayBpcyBuZWVkZWQuCisgICAgICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0RpcmVjdDNEQ29tcGF0aWJpbGl0
eUtleSwga0NGQm9vbGVhblRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzZSB0aGUg
azMyQkdSQVBpeGVsRm9ybWF0LCBhcyBRdWFydHpDb3JlIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhl
IHBpeGVscyBkaXJlY3RseSwKKyAgICAgICAgLy8gd2l0aG91dCBuZWVkaW5nIGFuIGFkZGl0aW9u
YWwgY29weSBvciByZW5kZXJpbmcgcGFzcy4KKyAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzLCBrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSwgazMyQkdS
QVBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBTZXQga0NWUGl4ZWxCdWZm
ZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSB0byAxNiB0byBlbnN1cmUgdGhhdCBlYWNoIHJvdyBv
ZiBwaXhlbHMgCisgICAgICAgIC8vIHN0YXJ0cyBhdCBhIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNz
IGZvciBtb3N0IGVmZmljaWVudCBkYXRhIHJlYWRpbmcuCisgICAgICAgIFNldE51bWJlclZhbHVl
KHBpeGVsQnVmZmVyQXR0cmlidXRlcywga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVu
dEtleSwgMTYpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5U
cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyQXR0cmlidXRlczsKK30KKwogUVRQ
aXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcigpIAogICAgIDogbV9waXhlbEJ1ZmZlcigwKSAKIHsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJ
KHJldmlzaW9uIDcwMDgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhl
bEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHR5cGVkZWYgY29uc3Qg
c3RydWN0IF9fQ0ZEaWN0aW9uYXJ5ICogQ0YKIC8vIHNhZmUgdG8gY2FsbCB3aXRoaW4gV2ViS2l0
LgogY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRQaXhlbEJ1ZmZlciB7CiBwdWJsaWM6CisgICAgZW51
bSBUeXBlIHsgQ29uZmlndXJlRm9yQ0dJbWFnZSwgQ29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIH07
CisgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNE
aWN0aW9uYXJ5KFR5cGUpOworCiAgICAgUVRQaXhlbEJ1ZmZlcigpOwogICAgIFFUUGl4ZWxCdWZm
ZXIoY29uc3QgUVRQaXhlbEJ1ZmZlciYpOwogICAgIFFUUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZl
clJlZik7Cg==
</data>
<flag name="review"
          id="61503"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>