<?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>201122</bug_id>
          
          <creation_ts>2019-08-24 18:29:35 -0700</creation_ts>
          <short_desc>[FTW] Go back to ID2D1Bitmap as our NativeImage type</short_desc>
          <delta_ts>2019-08-26 12:25: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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>pvollan</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1564848</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 18:29:35 -0700</bug_when>
    <thetext>I switched to IWICBitmap as the OS base type representing bitmap images in Bug 200093. However, this was an ill-advised approach, because it dramatically harmed performance due to the heavy use of software rendering.

I originally made this change because I thought this was the only way to get to the backing bits of the bitmaps, but it turns out that a more recent Direct2D data type (ID2D1Bitmap1) has the ability to map its memory to CPU-accessible memory, allowing software filter effects.

This patch switches back to the ID2D1Bitap data type, and hooks up the ID2D1Bitmap1 data type to access the underlying memory of the bitmaps when software filter effects are used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564849</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-24 18:31:19 -0700</bug_when>
    <thetext>What does [FTW] mean in the context of this bug? It&apos;s not a WebKit related acronym I am familiar with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564850</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 18:34:11 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #1)
&gt; What does [FTW] mean in the context of this bug? It&apos;s not a WebKit related
&gt; acronym I am familiar with.

FTW stands for &quot;For The Win(dows)&quot;, which is a join effort of Sony and Apple to create a single unified Windows port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564851</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 18:34:29 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #2)
&gt; (In reply to Sam Weinig from comment #1)
&gt; &gt; What does [FTW] mean in the context of this bug? It&apos;s not a WebKit related
&gt; &gt; acronym I am familiar with.
&gt; 
&gt; FTW stands for &quot;For The Win(dows)&quot;, which is a join effort of Sony and Apple
&gt; to create a single unified Windows port.

s/join/joint/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564856</commentid>
    <comment_count>4</comment_count>
      <attachid>377217</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 19:25:55 -0700</bug_when>
    <thetext>Created attachment 377217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564857</commentid>
    <comment_count>5</comment_count>
      <attachid>377218</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 19:30:26 -0700</bug_when>
    <thetext>Created attachment 377218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564861</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-24 21:00:30 -0700</bug_when>
    <thetext>To give a rough idea of performance, I ran MotionMark 1.1 on our three Windows variants and got the following results:

AppleWin                  4.35
WinCairo                  8.39
FTW                      28.71

I think this show poorly for FTW, since Focus and Suits are hitting software paths heavily. Fixing those two code paths should significantly improve things.

I have achieved scores of around 200 when bypassing the non-accelerated MotionMark tests, so I think we have significant room for improvement.

Still, even in its current form FTW is a huge improvement over existing options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564908</commentid>
    <comment_count>7</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-26 02:48:12 -0700</bug_when>
    <thetext>Here is the result on my PC.

WinCairo WK2 Direct2D: 163.03
WinCairo WK2 Cairo: 136.66

https://ibb.co/XZ7kSSS
https://ibb.co/vvthmkp

AMD Ryzen 7 1700 Eight-Core Processor
NVIDIA GeForce GTX 1050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564967</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 09:37:13 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #6)
&gt; To give a rough idea of performance, I ran MotionMark 1.1 on our three
&gt; Windows variants and got the following results:
&gt; 
&gt; AppleWin                  4.35
&gt; WinCairo                  8.39
&gt; FTW                      28.71
&gt; 

This was measured on an old Mac Pro, running a current Windows 10 Pro (1803, patch level 17134.885)

Intel Xeon CPU (E5645 @ 2.4 GHZ)
AMD Radeon HD 5700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564968</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 09:38:32 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #7)
&gt; Here is the result on my PC.
&gt; 
&gt; WinCairo WK2 Direct2D: 163.03
&gt; WinCairo WK2 Cairo: 136.66
&gt; 
&gt; https://ibb.co/XZ7kSSS
&gt; https://ibb.co/vvthmkp
&gt; 
&gt; AMD Ryzen 7 1700 Eight-Core Processor
&gt; NVIDIA GeForce GTX 1050

Thank you for running those metrics, Fujii. Clearly Direct2D is a larger improvement on older hardware. I think if we can tune the workflow better we will see further improvements. At least on my system I think I am starving the GPU pipeline from time to time, but I am not experienced enough in Windows tools to figure out what to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564989</commentid>
    <comment_count>10</comment_count>
      <attachid>377218</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-26 10:21:53 -0700</bug_when>
    <thetext>Comment on attachment 377218
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/BitmapTextureGL.cpp:166
&gt; +    ASSERT_NOT_IMPLEMENTED_YET();

This is a poorly named macro.

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:837
&gt; +    COMPtr&lt;ID2D1Bitmap&gt; tileImage = sourceImage;

What if we passed a ComPtr&amp;&amp; as a parameter instead of a raw pointer?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:49
&gt; +void swizzleAndPremultiply(const uint8_t* srcRows, unsigned rowCount, unsigned colCount, unsigned srcStride, unsigned destStride, uint8_t* destRows)

Is this a hot path?  It might benefit from some manual SIMD with intrinsics someday.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:140
&gt; +void inPlaceSwizzle(uint8_t* byteData, unsigned byteCount)

ditto

&gt; Source/WebCore/svg/graphics/SVGImage.cpp:257
&gt; +#ifndef _NDEBUG

#if !ASSERT_DISABLED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565017</commentid>
    <comment_count>11</comment_count>
      <attachid>377218</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 11:23:24 -0700</bug_when>
    <thetext>Comment on attachment 377218
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/BitmapTextureGL.cpp:166
&gt;&gt; +    ASSERT_NOT_IMPLEMENTED_YET();
&gt; 
&gt; This is a poorly named macro.

I should just use the &apos;notImplemented()&apos; function.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:837
&gt;&gt; +    COMPtr&lt;ID2D1Bitmap&gt; tileImage = sourceImage;
&gt; 
&gt; What if we passed a ComPtr&amp;&amp; as a parameter instead of a raw pointer?

Good idea! Done.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:49
&gt;&gt; +void swizzleAndPremultiply(const uint8_t* srcRows, unsigned rowCount, unsigned colCount, unsigned srcStride, unsigned destStride, uint8_t* destRows)
&gt; 
&gt; Is this a hot path?  It might benefit from some manual SIMD with intrinsics someday.

Probably -- there&apos;s a lot of tuning needed, but this would be a good place to make changes.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:140
&gt;&gt; +void inPlaceSwizzle(uint8_t* byteData, unsigned byteCount)
&gt; 
&gt; ditto

Ditto! :-)

&gt;&gt; Source/WebCore/svg/graphics/SVGImage.cpp:257
&gt;&gt; +#ifndef _NDEBUG
&gt; 
&gt; #if !ASSERT_DISABLED

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565018</commentid>
    <comment_count>12</comment_count>
      <attachid>377255</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 11:25:18 -0700</bug_when>
    <thetext>Created attachment 377255
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565035</commentid>
    <comment_count>13</comment_count>
      <attachid>377255</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 12:09:04 -0700</bug_when>
    <thetext>Comment on attachment 377255
Patch for landing

Clearing flags on attachment: 377255

Committed r249110: &lt;https://trac.webkit.org/changeset/249110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565036</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 12:09:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565037</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-26 12:10:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54716793&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565043</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-08-26 12:23:06 -0700</bug_when>
    <thetext>I am confused by this change. Does this 

So I was expecting to see r247841 is rolled out first. And then another patch is (In reply to WebKit Commit Bot from comment #13)
&gt; Comment on attachment 377255 [details]
&gt; Patch for landing
&gt; 
&gt; Clearing flags on attachment: 377255
&gt; 
&gt; Committed r249110: &lt;https://trac.webkit.org/changeset/249110&gt;

Does this change roll out r247841? Or does it roll some of it, keep the rest of it and even add new code?

If the answer is the later, I think this is confusing and will make thing harder to track. My understanding is when a revision causes a regression, the first we should is to roll out the whole change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565044</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 12:25:42 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #16)
&gt; Does this change roll out r247841? Or does it roll some of it, keep the rest
&gt; of it and even add new code?

r247841 could no longer be cleanly rolled out, because the code had been refactored.

This change keeps the refactored code (including Webkit2 support) but switches the base NativeImagePtr type from IWICBitmap back to ID2D1Bitmap.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377217</attachid>
            <date>2019-08-24 19:25:55 -0700</date>
            <delta_ts>2019-08-24 19:30:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201122-20190824192551.patch</filename>
            <type>text/plain</type>
            <size>67622</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxOS0wOC0yNCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbRlRXXSBHbyBiYWNrIHRv
IElEMkQxQml0bWFwIGFzIG91ciBOYXRpdmVJbWFnZSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDExMjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBCdWcgMjAwMDkzIEkgc3dpdGNoZWQgdGhl
IE9TIHR5cGUgb2YgTmF0aXZlSW1hZ2VQdHIgZnJvbSBJRDJEMUJpdG1hcCB0byBJV0lDQml0bWFw
LgorICAgICAgICBIb3dldmVyLCB0aGlzIHdhcyBhbiBpbGwtYWR2aXNlZCBhcHByb2FjaCwgYmVj
YXVzZSBpdCBkcmFtYXRpY2FsbHkgaGFybWVkIHBlcmZvcm1hbmNlIGR1ZQorICAgICAgICB0byB0
aGUgaGVhdnkgdXNlIG9mIHNvZnR3YXJlIHJlbmRlcmluZy4KKworICAgICAgICBJIG9yaWdpbmFs
bHkgbWFkZSB0aGlzIGNoYW5nZSBiZWNhdXNlIEkgdGhvdWdodCB0aGlzIHdhcyB0aGUgb25seSB3
YXkgdG8gZ2V0IHRvIHRoZSBiYWNraW5nCisgICAgICAgIGJpdHMgb2YgdGhlIGJpdG1hcHMsIGJ1
dCBpdCB0dXJucyBvdXQgdGhhdCBhIG1vcmUgcmVjZW50IERpcmVjdDJEIGRhdGEgdHlwZSAoSUQy
RDFCaXRtYXAxKQorICAgICAgICBoYXMgdGhlIGFiaWxpdHkgdG8gbWFwIGl0cyBtZW1vcnkgdG8g
Q1BVLWFjY2Vzc2libGUgbWVtb3J5LCBhbGxvd2luZyBzb2Z0d2FyZSBmaWx0ZXIgZWZmZWN0cy4K
KworICAgICAgICBUaGlzIHBhdGNoIHN3aXRjaGVzIGJhY2sgdG8gdGhlIElEMkQxQml0YXAgZGF0
YSB0eXBlLCBhbmQgaG9va3MgdXAgdGhlIElEMkQxQml0bWFwMSBkYXRhIHR5cGUKKyAgICAgICAg
dG8gYWNjZXNzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBvZiB0aGUgYml0bWFwcyB3aGVuIHNvZnR3
YXJlIGZpbHRlciBlZmZlY3RzIGFyZSB1c2VkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFn
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OndyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6d3JpdGVJbWFnZVRvRGlza0FzUE5HKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2
ZUltYWdlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisK
KzIwMTktMDgtMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1
ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZp
bGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3V2l0aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJE
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3Bl
cmF0aW9ucy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlRGlyZWN0MkRJbWFn
ZVN1cmZhY2VXaXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlV2lj
Qml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpwaXhlbEZvcm1hdEZvclNvZnR3
YXJlTWFuaXB1bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpwaXhlbEZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpcmVjdDJEOjpjcmVhdGVCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6
OnJlbmRlclRhcmdldFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNy
ZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0
MkQ6OmNyZWF0ZUdESVJlbmRlclRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6
Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpj
cmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0
MkQ6OndyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6d3JpdGVJbWFnZVRvRGlza0FzUE5HKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dp
enpsZUFuZFByZW11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjppblBsYWNlU3dpenpsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXJEaXJlY3QyRDo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpuYXRpdmVJbWFnZUhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdOYXRpdmVJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4gY29uc3Qp
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2UpOgorCiAyMDE5LTA4LTI0ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFBhZ2UgY3Jhc2hlcyB1bmRlciBDR1Bh
dGhBZGRVbmV2ZW5Db3JuZXJzUm91bmRlZFJlY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAy
NDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpDYXB0aW9uVXMKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgog
CisgICAgICAgIC8qCiAgICAgICAgIE1URW5hYmxlQ2FwdGlvbjIwMTVCZWhhdmlvclB0clR5cGUg
ZnVuY3Rpb24gPSBNVEVuYWJsZUNhcHRpb24yMDE1QmVoYXZpb3JQdHIoKTsKICAgICAgICAgaWYg
KCFmdW5jdGlvbiB8fCAhZnVuY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzOCw2
ICsxMzksNyBAQCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Q2FwdGlvblVzCiAgICAg
ICAgIHNldFVzZXJQcmVmZXJzU3VidGl0bGVzKGZhbHNlKTsKICAgICAgICAgc2V0VXNlclByZWZl
cnNUZXh0RGVzY3JpcHRpb25zKGZhbHNlKTsKICAgICAgICAgZW5kQmxvY2tpbmdOb3RpZmljYXRp
b25zKCk7CisgICAgICAgICovCiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwogI2VsaWYgVVNFKERJUkVDVDJEKQot
ICAgIENPTVB0cjxJV0lDQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01QdHI8SVdJQ0JpdG1hcD4g
c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Q7CisgICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmgJKHJldmlzaW9uIDI0ODkxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogI2lmIFVT
RShDRykKIHR5cGVkZWYgUmV0YWluUHRyPENHSW1hZ2VSZWY+IE5hdGl2ZUltYWdlUHRyOwogI2Vs
aWYgVVNFKERJUkVDVDJEKQotdHlwZWRlZiBDT01QdHI8SVdJQ0JpdG1hcD4gTmF0aXZlSW1hZ2VQ
dHI7Cit0eXBlZGVmIENPTVB0cjxJRDJEMUJpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBV
U0UoQ0FJUk8pCiB0eXBlZGVmIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRy
OwogI2VsaWYgVVNFKFdJTkdESSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lv
biAyNDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0
bWFwVGV4dHVyZUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDI4ICsxNjMsNyBAQCB2b2lk
IEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hCiAgICAgaW1hZ2VEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShz
dXJmYWNlKSk7CiAgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKHN1cmZhY2UpOwogI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2Vz
cyB0aGUgYml0bWFwJ3MgbWVtb3J5IHdoZW4gaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIEJlZ2lu
RHJhdy9FbmREcmF3Ci0gICAgV0lDUmVjdCByY0xvY2sgPSB7IDAsIDAsIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSB9OwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBMb2Nr
PiBiaXRtYXBEYXRhOwotICAgIEhSRVNVTFQgaHIgPSBmcmFtZUltYWdlLT5Mb2NrKCZyY0xvY2ss
IFdJQ0JpdG1hcExvY2tSZWFkLCAmYml0bWFwRGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBVSU5UIHN0cmlkZSA9IDA7Ci0gICAgaHIgPSBiaXRt
YXBEYXRhLT5HZXRTdHJpZGUoJnN0cmlkZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBieXRlc1BlckxpbmUgPSBzdHJpZGU7Ci0KLSAgICBVSU5UIGJ1
ZmZlclNpemUgPSAwOwotICAgIFdJQ0luUHJvY1BvaW50ZXIgZGF0YVB0ciA9IG51bGxwdHI7Ci0g
ICAgaHIgPSBiaXRtYXBEYXRhLT5HZXREYXRhUG9pbnRlcigmYnVmZmVyU2l6ZSwgJmRhdGFQdHIp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1hZ2VE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVB0cik7CisgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKICNlbmRpZgogCiAgICAgdXBkYXRlQ29udGVudHMoaW1hZ2VEYXRh
LCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGluZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw4
ICs1MjgsNiBAQCB2b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAg
ICAgIEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50KCksIGNvbnRleHQtPkdldFNpemUo
KSk7CiAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgY29udGV4dFJl
Y3QsIGRyYXdGdW5jdGlvbik7CiAgICAgfQotCi0gICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsK
IH0KIAogdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0
YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTU1NCw4ICs1NTIsNiBAQCB2b2lkIGZpbGxQYXRoKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgICAgIEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9h
dFBvaW50KCksIGNvbnRleHQtPkdldFNpemUoKSk7CiAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgY29udGV4dFJlY3QsIGRyYXdGdW5jdGlvbik7CiAgICAgfQotCi0g
ICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsKIH0KIAogdm9pZCBzdHJva2VSZWN0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3Qg
U2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQpAQCAtNTg4LDggKzU4NCw2IEBAIHZvaWQgc3Ryb2tl
UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBkcmF3RnVuY3Rpb24pOwog
ICAgIGVsc2UKICAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3Vu
ZGluZ1JlY3QsIGRyYXdGdW5jdGlvbik7Ci0KLSAgICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwog
fQogCiB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBj
b25zdCBTaGFkb3dTdGF0ZSYpCkBAIC02NTUsMTMgKzY0OSwxMSBAQCB2b2lkIGRyYXdXaXRoU2hh
ZG93KFBsYXRmb3JtQ29udGV4dERpcmVjCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5
IHRvIGEgYml0bWFwIGNvbnRleHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+Q3JlYXRlQ29tcGF0aWJs
ZVJlbmRlclRhcmdldCgmYml0bWFwVGFyZ2V0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChjb250ZXh0KTsKIAogICAgIGJpdG1hcFRhcmdl
dC0+QmVnaW5EcmF3KCk7CiAgICAgZHJhd0NvbW1hbmRzKGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0g
ICAgaHIgPSBiaXRtYXBUYXJnZXQtPkVuZERyYXcoKTsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFw
VGFyZ2V0LT5FbmREcmF3KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAK
ICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKQEAgLTgzNiwxNCArODI4LDE0IEBAIHZv
aWQgZHJhd05hdGl2ZUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmUKICAgICBlbHNlCiAgICAgICAg
IGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgZHJh
d0Z1bmN0aW9uKTsKIAotICAgIGZsdXNoKHBsYXRmb3JtQ29udGV4dCk7Ci0KICAgICBpZiAoIXN0
YXRlU2F2ZXIuZGlkU2F2ZSgpKQogICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtKTsK
IH0KIAotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0LCBJV0lDQml0bWFwKiB0aWxlSW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQordm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBJRDJEMUJpdG1hcCogc291cmNlSW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogeworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gdGlsZUltYWdlID0gc291cmNlSW1hZ2U7CisK
ICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAgICAg
UGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7CiAK
QEAgLTg2Niw4ICs4NTgsNiBAQCB2b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJECiAgICAgLy8gSWYgd2Ugb25seSB3YW50IGEgc3Vic2V0IG9mIHRoZSBiaXRtYXAsIHdlIG5l
ZWQgdG8gY3JlYXRlIGEgY3JvcHBlZCBiaXRtYXAgaW1hZ2UuIEFjY29yZGluZyB0byB0aGUgZG9j
dW1lbnRhdGlvbiwKICAgICAvLyB0aGlzIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBiaXRtYXAgbWVt
b3J5LgogICAgIGlmIChzaXplLndpZHRoKCkgPiBkZXN0UmVjdC53aWR0aCgpIHx8IHNpemUuaGVp
Z2h0KCkgPiBkZXN0UmVjdC5oZWlnaHQoKSkgewotICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAg
IC8qCiAgICAgICAgIGZsb2F0IGRwaVggPSAwOwogICAgICAgICBmbG9hdCBkcGlZID0gMDsKICAg
ICAgICAgdGlsZUltYWdlLT5HZXREcGkoJmRwaVgsICZkcGlZKTsKQEAgLTg4MCwxNiArODcwLDEw
IEBAIHZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQKICAgICAgICAgICAg
IGlmIChTVUNDRUVERUQoaHIpKQogICAgICAgICAgICAgICAgIHRpbGVJbWFnZSA9IHN1YkltYWdl
OwogICAgICAgICB9Ci0gICAgICAgICovCiAgICAgfQogCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
PiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPkNyZWF0ZUJpdG1hcEZyb21XaWNC
aXRtYXAodGlsZUltYWdlLCBudWxscHRyLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybjsKLQogICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBwYXR0
ZXJuQnJ1c2g7Ci0gICAgaHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaChiaXRtYXAuZ2V0
KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1
c2gpOworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaCh0aWxlSW1h
Z2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0
ZXJuQnJ1c2gpOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICBpZiAoIVNVQ0NFRURF
RChocikpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDksOCArMTA5Myw4IEBAIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnQKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6VHJhbnNwYXJlbmN5TGF5ZXJTdGF0ZSB0cmFuc3BhcmVuY3lMYXllcjsKICAgICB0cmFuc3Bh
cmVuY3lMYXllci5vcGFjaXR5ID0gb3BhY2l0eTsKIAotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQoJnRy
YW5zcGFyZW5jeUxheWVyLnJlbmRlclRhcmdldCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisgICAgdHJhbnNwYXJlbmN5TGF5ZXIucmVuZGVyVGFyZ2V0ID0gY3JlYXRlQml0
bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisKICAgICBw
bGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmFwcGVuZChXVEZNb3ZlKHRy
YW5zcGFyZW5jeUxheWVyKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQtPkJlZ2luRHJhdygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
NyArMTMwLDcgQEAgdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFwKiwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24sIElu
dGVycG9sYXRpb25RdWFsaXR5LCBmbG9hdCwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZHJh
d05hdGl2ZUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFCaXRtYXAqLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiwgSW50ZXJw
b2xhdGlvblF1YWxpdHksIGZsb2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBkcmF3UGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3Vy
Y2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIElXSUNCaXRtYXAqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwordm9pZCBkcmF3UGF0dGVybihQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxQml0bWFwKiwgY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKIAogdm9p
ZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJU
YXJnZXQqKT4mIGRyYXdDb21tYW5kcyk7CiB2b2lkIGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRv
d1N0YXRlJiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBk
cmF3Q29tbWFuZHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJEVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNDg5MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgQ09NUHRyPElXSUNCaXRt
YXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IENPTVB0cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbU1lbW9y
eShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBC
R1JBLCBzdHJpZGUsIHN0YXRpY19jYXN0PFVJTlQ+KG51bUJ5dGVzLnVuc2FmZUdldCgpKSwgcmVp
bnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZzdXJmYWNlKTsKKyAgICBIUkVTVUxUIGhyID0g
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1h
cEZyb21NZW1vcnkoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB3aWNCaXRtYXBGb3JtYXQo
KSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxVSU5UPihudW1CeXRlcy51bnNhZmVHZXQoKSksIHJlaW50
ZXJwcmV0X2Nhc3Q8QllURSo+KGRhdGEpLCAmc3VyZmFjZSk7CiAgICAgaWYgKCFTVUNDRUVERUQo
aHIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTI1LDMxICsxMjUsNTggQEAgQ09N
UHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdQogQ09NUHRyPElXSUNCaXRtYXA+
IGNyZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIENPTVB0cjxJV0lD
Qml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwUEJHUkEsIFdJQ0JpdG1hcENhY2hlT25E
ZW1hbmQsICZzdXJmYWNlKTsKKyAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6
OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3Vy
ZmFjZSk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBzdXJmYWNlOwogfQogCitEMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1h
dEZvclNvZnR3YXJlTWFuaXB1bGF0aW9uKCkKK3sKKyAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3Jt
YXQoRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBM
SUVEKTsKK30KKworRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKQoreworICAgIC8vIFNp
bmNlIHdlIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBIREMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFy
ZSBmb3JjZWQgdG8gdXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhB
X01PREVfUFJFTVVMVElQTElFRAorICAgIHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZP
Uk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpOworfQor
CitHVUlEIHdpY0JpdG1hcEZvcm1hdCgpCit7CisgICAgLy8gVGhpcyBpcyB0aGUgV0lDIGZvcm1h
dCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0uIEl0IGlzIGFsc28g
c3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2llbnQgaW4tbWVtb3J5CisgICAgLy8gcmVwcmVzZW50
YXRpb24gZm9yIFdJQyBpbWFnZXMuCisgICAgcmV0dXJuIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJw
cFBCR1JBOworfQorCitEMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKQor
eworICAgIHJldHVybiBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKHBpeGVsRm9ybWF0KCkpOworfQor
CiBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGF1dG8gYml0bWFwUHJvcGVy
dGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMoRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKSk7CisgICAg
YXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVydGllcygpOwogCiAgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAgICAgRDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9
IHNpemU7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1h
cFNpemUsIGJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOworICAgIEhSRVNVTFQgaHIgPSByZW5k
ZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVz
LCAmYml0bWFwKTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIGJpdG1hcDsKIH0KIAorRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BF
UlRJRVMgcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIEQyRDE6OlJlbmRl
clRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKKyAgICAg
ICAgcGl4ZWxGb3JtYXQoKSwgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01Q
QVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVMVCk7Cit9CisKIENPTVB0cjxJRDJEMVJl
bmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKiBi
aXRtYXBTb3VyY2UpCiB7Ci0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVy
VGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZBVUxULAotICAgICAg
ICBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBI
QV9NT0RFX1BSRU1VTFRJUExJRUQpLAotICAgICAgICAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRf
VVNBR0VfTk9ORSwgRDJEMV9GRUFUVVJFX0xFVkVMX0RFRkFVTFQpOworICAgIGF1dG8gdGFyZ2V0
UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAogICAgIENPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVdpY0JpdG1hcFJlbmRlclRhcmdldChiaXRt
YXBTb3VyY2UsICZ0YXJnZXRQcm9wZXJ0aWVzLCAmYml0bWFwQ29udGV4dCk7CkBAIC0xNjEsOSAr
MTg4LDcgQEAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVSZW5kZXJUYQogCiBDT01Q
dHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBh
dXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKEQyRDFf
UkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCi0gICAgICAgIEQyRDE6OlBpeGVsRm9ybWF0KERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCks
Ci0gICAgICAgIDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwg
RDJEMV9GRUFUVVJFX0xFVkVMX0RFRkFVTFQpOworICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9
IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAogICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFy
Z2V0PiByZW5kZXJUYXJnZXQ7CiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgJnJl
bmRlclRhcmdldCk7CkBAIC0xNzMsNiArMTk4LDM2IEBAIENPTVB0cjxJRDJEMURDUmVuZGVyVGFy
Z2V0PiBjcmVhdGVHRElSZW4KICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCitDT01QdHI8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAg
ICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQo
KTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsK
KyAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFy
Z2V0KG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFS
R0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZiaXRtYXBDb250ZXh0KTsKKyAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGJpdG1h
cENvbnRleHQ7Cit9CisKK0NPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0
bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQoreworICAgIFVOVVNF
RF9QQVJBTShkZXZpY2VTY2FsZUZhY3Rvcik7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAg
ICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0
KCk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7
CisgICAgYXV0byBkZXNpcmVkU2l6ZSA9IEQyRDE6OlNpemVGKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CisgICAgRDJEMV9TSVpFX1UgcGl4ZWxTaXplID0gc2l6ZTsKKyAgICBIUkVTVUxU
IGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KCZkZXNpcmVk
U2l6ZSwgJnBpeGVsU2l6ZSwgbnVsbHB0ciwgRDJEMV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRf
T1BUSU9OU19HRElfQ09NUEFUSUJMRSwgJmJpdG1hcENvbnRleHQpOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYml0bWFwQ29u
dGV4dDsKK30KKwogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0
bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkKIHsKICAgICBJ
bnRTaXplIHNvdXJjZUJpdG1hcFNpemUgPSBmcm9tLT5HZXRQaXhlbFNpemUoKTsKQEAgLTE5OSw3
ICsyNTQsNyBAQCB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoSUQyCiAgICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwogfQogCi12b2lkIHdyaXRlSW1hZ2VUb0Rpc2tBc1BORyhJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENX
U1RSIGZpbGVOYW1lKQordm9pZCB3cml0ZURpYWdub3N0aWNQTkdUb1BhdGgoSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCwgSUQyRDFCaXRtYXAqIGJpdG1hcCwgTFBDV1NUUiBmaWxlTmFt
ZSkKIHsKICAgICBDT01QdHI8SVdJQ0JpdG1hcEVuY29kZXI+IHdpY0JpdG1hcEVuY29kZXI7CiAg
ICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9y
eSgpLT5DcmVhdGVFbmNvZGVyKEdVSURfQ29udGFpbmVyRm9ybWF0UG5nLCBudWxscHRyLCAmd2lj
Qml0bWFwRW5jb2Rlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAkocmV2aXNpb24gMjQ4OTEwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNiBAQAogI2luY2x1ZGUgIkludFNpemUu
aCIKIAogaW50ZXJmYWNlIElEMkQxQml0bWFwOworaW50ZXJmYWNlIElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0OwogaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSUQyRDFS
ZW5kZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSVdJQ0JpdG1hcFNvdXJjZTsKIGludGVyZmFjZSBJV0lD
Qml0bWFwOwogCitzdHJ1Y3QgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzsKK3N0cnVjdCBEMkQxX1BJ
WEVMX0ZPUk1BVDsKK3N0cnVjdCBEMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUzsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNDgsNiArNTMsMTQgQEAg
Y2xhc3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIERpcmVjdDJEIHsKIAorR1VJRCB3aWNCaXRtYXBG
b3JtYXQoKTsKK0QyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0KCk7IC8vIEJHUkEKK0QyRDFf
UElYRUxfRk9STUFUIHBpeGVsRm9ybWF0Rm9yU29mdHdhcmVNYW5pcHVsYXRpb24oKTsgLy8gUkdC
QQorRDJEMV9CSVRNQVBfUFJPUEVSVElFUyBiaXRtYXBQcm9wZXJ0aWVzKCk7CitEMkQxX1JFTkRF
Ul9UQVJHRVRfUFJPUEVSVElFUyByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7CisKK3ZvaWQgaW5Q
bGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBhcHBs
eVByZW11bHRpcGxpY2F0aW9uID0gZmFsc2UpOworCiBJbnRTaXplIGJpdG1hcFNpemUoSVdJQ0Jp
dG1hcFNvdXJjZSopOwogRmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqKTsKIEZsb2F0
UG9pbnQgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKik7CkBAIC01NywxMSArNzAs
MTMgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXAoSUQyRDFSZQogQ09NUHRyPElX
SUNCaXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJik7CiBDT01QdHI8SVdJQ0Jp
dG1hcD4gY3JlYXRlRGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25z
dCBJbnRTaXplJiwgdW5zaWduZWQgc3RyaWRlKTsKIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4g
Y3JlYXRlUmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKik7CitDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25z
dCBJbnRTaXplJiwgSUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0ciwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IgPSAxLjApOworQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVC
aXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0cik7CiBDT01QdHI8
SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCk7CiAKIHZvaWQgY29w
eVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRt
YXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJiBkZXN0T2Zmc2V0ID0gSW50U2l6ZSgpKTsKIAotdm9pZCB3cml0ZUltYWdlVG9E
aXNrQXNQTkcoSUQyRDFSZW5kZXJUYXJnZXQqLCBJRDJEMUJpdG1hcCosIExQQ1dTVFIgZmlsZU5h
bWUpOwordm9pZCB3cml0ZURpYWdub3N0aWNQTkdUb1BhdGgoSUQyRDFSZW5kZXJUYXJnZXQqLCBJ
RDJEMUJpdG1hcCosIExQQ1dTVFIgZmlsZU5hbWUpOwogCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3Qy
RAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkRpcmVjdDJEVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgog
I2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgpAQCAtNTQsOSArNTUsNyBAQCBHcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJl
Y3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4K
LSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCi0gICAgICAgIEQyRDE6OlBpeGVsRm9y
bWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQ
TElFRCksCi0gICAgICAgIDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9OT05FLCBEMkQx
X0ZFQVRVUkVfTEVWRUxfREVGQVVMVCk7CisgICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGly
ZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAogICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdl
dFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CkBAIC05OSw2ICs5OCw3IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRl
eHQ6OmRlZmEKICAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6
Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKDo6R2V0RGVza3RvcFdpbmRvdygpLCBEMkQxOjpT
aXplVSgxMCwgMTApKTsKICAgICAgICAgSFJFU1VMVCBociA9IHN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJU
YXJnZXRQcm9wZXJ0aWVzLCByZWludGVycHJldF9jYXN0PElEMkQxSHduZFJlbmRlclRhcmdldCoq
PigmZGVmYXVsdFJlbmRlclRhcmdldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+QWRkUmVmKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJnZXQ7CkBAIC0xMTMsOCArMTEzLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaAogCiAgICAgRElCUGl4ZWxEYXRh
IHBpeGVsRGF0YShiaXRtYXApOwogCi0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6
UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAgIHRhcmdldFByb3BlcnRpZXMucGl4ZWxGb3Jt
YXQgPSBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9B
TFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpOworICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IERp
cmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7CiAKICAgICBDT01QdHI8SUQyRDFEQ1Jl
bmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwogICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0
KTsKQEAgLTIwOCw3ICsyMDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRm
b3JtU3RhCiAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBDT01QdHI8SVdJQ0Jp
dG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoY29uc3Qg
Q09NUHRyPElEMkQxQml0bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI0MCw3ICsyMzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShzb3VyY2VC
aXRtYXAuZ2V0KCkpOwogICAgIEFTU0VSVChwaXhlbERhdGEuYml0c1BlclBpeGVsKCkgPT0gMzIp
OwogCi0gICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllcyhE
MkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9N
T0RFX1BSRU1VTFRJUExJRUQpKTsKKyAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3Qy
RDo6Yml0bWFwUHJvcGVydGllcygpOwogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAqdGhpcy0+cGxhdGZvcm1Db250ZXh0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMiBAQAogI2lmIFVTRShE
SVJFQ1QyRCkKIAogI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0
aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhXbmRE
Qy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
QEAgLTQyLDcgKzQ0LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBh
Y2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0
CisvLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1
ZmZlcgordGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KK3Zv
aWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVk
IHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5zaWduZWQgc3JjU3RyaWRlLCB1bnNpZ25l
ZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHkg
PSAwOyB5IDwgcm93Q291bnQ7ICsreSkgeworICAgICAgICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUg
cG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRvIG9ubHkgY29weSB0aGUgYml0cyB0aGF0
CisgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJlY3RhbmdsZSBzdXBwbGllZCBieSB0aGUg
Y2FsbGVyLgorICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUm93ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5KTsKKyAgICAgICAgdWlu
dDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgeCA9IDA7IHggPCBjb2xDb3VudDsgKyt4KSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlUG9zaXRpb24gPSB4ICogNDsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQ
aXhlbCA9IHNyY1JvdyArIHg7CisKKyAgICAgICAgICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhw
ZWN0IChQKVJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgUEJH
UkEgdG8gYmUgY29tcGF0aWJsZS4KKyAgICAgICAgICAgIHVpbnQzMl90IGFscGhhID0gKCpzcmNQ
aXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OworICAgICAgICAgICAgdWludDMyX3QgcmVkID0gKCpz
cmNQaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OworICAgICAgICAgICAgdWludDMyX3QgZ3JlZW4g
PSAoKnNyY1BpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKKyAgICAgICAgICAgIHVpbnQzMl90IGJs
dWUgPSAoKnNyY1BpeGVsICYgMHgwMDAwMDBGRik7CisKKyAgICAgICAgICAgIGlmIChkZXNpcmVk
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAg
ICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGdyZWVu
ID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUg
KiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uXSAgICAgPSByZWQ7CisgICAgICAgICAgICBkZXN0
Um93W2J5dGVQb3NpdGlvbiArIDFdID0gZ3JlZW47CisgICAgICAgICAgICBkZXN0Um93W2J5dGVQ
b3NpdGlvbiArIDJdID0gYmx1ZTsKKyAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsg
M10gPSBhbHBoYTsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNp
cmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykg
Y29uc3QKIHsKICAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93Pigp
ICogNDsKICAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQpAQCAtNTMsMjkgKzkwLDgx
IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXQKICAgICBpZiAoIXJl
c3VsdERhdGEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV0lDUmVjdCByY0xvY2sg
PSB7IDAsIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGlmICghYml0bWFw
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUg
ZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBp
cyBvcGVuLgogICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAotICAgIENPTVB0cjxJV0lDQml0bWFw
TG9jaz4gYml0bWFwRGF0YUxvY2s7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+TG9j
aygmcmNMb2NrLCBXSUNCaXRtYXBMb2NrUmVhZCwgJmJpdG1hcERhdGFMb2NrKTsKLSAgICBpZiAo
U1VDQ0VFREVEKGhyKSkgewotICAgICAgICBVSU5UIGJ1ZmZlclNpemUgPSAwOwotICAgICAgICBX
SUNJblByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxscHRyOwotICAgICAgICBociA9IGJpdG1hcERh
dGFMb2NrLT5HZXREYXRhUG9pbnRlcigmYnVmZmVyU2l6ZSwgJmRhdGFQdHIpOwotICAgICAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVB0ciksIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICB9CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dDsKKyAg
ICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZkMmREZXZpY2VDb250ZXh0KSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisg
ICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHNpemUud2lkdGgoKSAqIDQ7CisKKyAgICBDT01Q
dHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEg
Yml0bWFwUHJvcGVydGllczIgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9P
UFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0
MkQ6OnBpeGVsRm9ybWF0KCkpOworICAgIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKHNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwg
JmNwdUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEQyRDFfUE9JTlRfMlUgdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwor
ICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gcmVjdDsKKyAgICBociA9IGNwdUJpdG1hcC0+Q29w
eUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0bWFwLmdldCgpLCAmZGF0YVJlY3QpOworICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01B
UFBFRF9SRUNUIG1hcHBlZERhdGE7CisgICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9P
UFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdC
QSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNv
bXBhdGlibGUuCisgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAg
Q2hlY2tlZDxpbnQ+IHdpZHRoID0gcmVjdC53aWR0aCgpOworCisgICAgaWYgKGRlc2lyZWRGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBz
d2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51bnNhZmVHZXQoKSwgd2lkdGgudW5zYWZlR2V0
KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCByZXN1bHREYXRhKTsKKyAg
ICBlbHNlCisgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51bnNhZmVHZXQoKSwg
d2lkdGgudW5zYWZlR2V0KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBy
ZXN1bHREYXRhKTsKIAotICAgIC8vIE9uY2Ugd2UgYXJlIGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRh
LCB1bmxvY2sgdGhlIGJpdG1hcAotICAgIGJpdG1hcERhdGFMb2NrID0gbnVsbHB0cjsKKyAgICBo
ciA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAg
ICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIFN3
aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCit0
ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQ+Cit2b2lkIGluUGxh
Y2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCit7CisgICAg
c2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OworICAgIGF1dG8qIHBpeGVsRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgeworICAgICAgICB1aW50MzJfdCBwaXhlbCA9
ICpwaXhlbERhdGE7CisgICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24gPSBpICogNDsKKworICAg
ICAgICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OworICAgICAg
ICB1aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKKyAgICAgICAgdWlu
dDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OworICAgICAgICB1aW50MzJf
dCBibHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7CisKKyAgICAgICAgLy8gKFApUkdCQSAtPiBQ
QkdSQQorICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAg
ICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAg
ICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAg
ICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2
IHwgZ3JlZW4gIDw8IDggfCBibHVlOworICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisK
IHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJp
bmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7CkBAIC0xMTQsNTkgKzIwMyw5OSBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6
cHV0RGF0YShjb25zdCBVaW50CiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAg
ICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2lu
ZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KICAg
ICBjb250ZXh0LT5lbmREcmF3KCk7CiAKLSAgICBXSUNSZWN0IHJjTG9jayA9IHsgMCwgMCwgc291
cmNlU2l6ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhlaWdodCgpIH07Ci0KLSAgICBDT01QdHI8SVdJ
Q0JpdG1hcExvY2s+IGJpdG1hcERhdGFMb2NrOwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3Vy
Y2UtPkxvY2soJnJjTG9jaywgV0lDQml0bWFwTG9ja1dyaXRlLCAmYml0bWFwRGF0YUxvY2spOwor
ICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NFUlQo
cGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOworICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0
ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49
IHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGJpdG1hcCBkYXRh
IGlzIGluIFJHQkEuIFdlIG5lZWQgdG8gc3dpenpsZSB0byBwcmVtdWx0aXBsaWVkIEJHUkEgdG8g
YmUgY29tcGF0aWJsZQorICAgIC8vIHdpdGggdGhlIEhXTkQvSERDIHJlbmRlciBiYWNraW5nIHdl
IHVzZS4KKyAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkKKyAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOyAv
LyBSR0JBIC0+IFBCR1JBCisgICAgZWxzZQorICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVu
Z3RoKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQorCisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0PiBiaXRtYXBSZW5kZXJUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiaXRtYXBSZW5kZXJUYXJn
ZXQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBhdXRvIGJ5dGVzUGVyUm93
SW5EYXRhID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKKworICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gc3dpenpsZWRCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUyBiaXRtYXBQcm9w
ZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllcyhEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7
CisgICAgaHIgPSBiaXRtYXBSZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChzb3VyY2VTaXplLCBz
b3VyY2UuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllcywgJnN3aXp6
bGVkQml0bWFwKTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFVJTlQgc3RyaWRlID0gMDsKLSAgICBociA9IGJpdG1hcERhdGFMb2NrLT5HZXRTdHJpZGUo
JnN0cmlkZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47CisgICAg
RDJEMV9QT0lOVF8yVSBkZXN0UG9pbnREMkQgPSBkZXN0UG9pbnQ7CisgICAgRDJEMV9SRUNUX1Ug
c3JjUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KCZz
cmNSZWN0LCBzb3VyY2UuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7CisgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwogCi0gICAgVUlOVCBidWZmZXJTaXplID0gMDsKLSAgICBXSUNJblByb2NQ
b2ludGVyIGRhdGFQdHIgPSBudWxscHRyOwotICAgIGhyID0gYml0bWFwRGF0YUxvY2stPkdldERh
dGFQb2ludGVyKCZidWZmZXJTaXplLCAmZGF0YVB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm47CisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Cit9CiAKLSAgICBB
U1NFUlQoYnVmZmVyU2l6ZSA9PSBzb3VyY2UuYnl0ZUxlbmd0aCgpKTsKK0NPTVB0cjxJRDJEMUJp
dG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVy
biBiaXRtYXA7CiAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXpl
LndpZHRoKCk7CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVu
ZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm4gYml0bWFwOwogCi0gICAgQVNTRVJUKHNyY0J5dGVz
UGVyUm93ID09IHN0cmlkZSk7CisgICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdp
bnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKKyAgICBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6
ZS5oZWlnaHQgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byByb3cgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhf
dD4oc3JjQnl0ZXNQZXJSb3cpOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2Fm
ZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYm
IGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJvd1tiYXNleF0gPSAoc3JjUm93c1ti
YXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgcm93W2Jhc2V4ICsg
MV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgIHJvd1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICByb3dbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHJvdy5nZXQoKSArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3Qq
PihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICB9CisgICAgLy8gQ29weSB0aGUgYml0cyBm
cm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdl
IGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFj
dGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAgICBjb250ZXh0LT5lbmREcmF3KCk7CiAKLSAg
ICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGFQdHIgKyB5ICogc3JjQnl0
ZXNQZXJSb3cpLCByb3cuZ2V0KCksIHNyY0J5dGVzUGVyUm93KTsKKyAgICBDT01QdHI8SUQyRDFE
ZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0OworICAgIEhSRVNVTFQgaHIgPSBwbGF0
Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJE
MURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnNvdXJjZURldmljZUNv
bnRleHQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKLSAgICB9CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIE9uY2Ugd2UgYXJlIGRvbmUgbW9kaWZ5
aW5nIHRoZSBkYXRhLCB1bmxvY2sgdGhlIGJpdG1hcAotICAgIGJpdG1hcERhdGFMb2NrID0gbnVs
bHB0cjsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJE
MV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3Bl
cnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05T
X0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgaHIgPSBzb3VyY2VE
ZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0
ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVC
aXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFw
LmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOworICAg
IGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVk
U291cmNlRGF0YSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRl
eHQ7CisgICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQx
RGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdGFyZ2V0RGV2aWNlQ29u
dGV4dCkpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNy
ZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMs
IG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZj
b21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICBy
ZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAoraW50ZXJmYWNlIElEMkQxUmVuZGVyVGFy
Z2V0OworaW50ZXJmYWNlIElEMkQxQml0bWFwOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwpAQCAtNDQsMTAgKzQ3LDEyIEBAIHN0cnVjdCBJ
bWFnZUJ1ZmZlckRhdGEgewogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gcGxhdGZvcm1Db250ZXh0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0gICAgQ09NUHRyPElXSUNCaXRt
YXA+IGJpdG1hcFNvdXJjZTsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKIAogICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKICAgICB2b2lkIHB1dERhdGEoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgor
I2luY2x1ZGUgPGQyZDFfMS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3aW5jb2Rl
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03Niw3ICs3Niw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICByZXR1cm4gYnVmZmVyOwog
fQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCosIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgLypjb2xvclNwYWNl
Ki8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1f
bG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2Fs
ZSkKIHsKQEAgLTEwMSwxNyArMTAxLDIzIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUKICAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEuZGF0YSA9IFZlY3RvcjxjaGFyPihudW1CeXRlcy51bnNhZmVH
ZXQoKSwgMCk7CisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRh
cmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5k
ZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdl
dCgpIDogbnVsbHB0cjsKIAotICAgIG1fZGF0YS5iaXRtYXBTb3VyY2UgPSBEaXJlY3QyRDo6Y3Jl
YXRlRGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0YShtX2RhdGEuZGF0YS5kYXRhKCksIG1fc2l6
ZSwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIW1fZGF0YS5iaXRt
YXBTb3VyY2UpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7
CisKKyAgICBEMkQxX1NJWkVfRiBkZXNpcmVkU2l6ZSA9IEZsb2F0U2l6ZShtX2xvZ2ljYWxTaXpl
KTsKKyAgICBEMkQxX1NJWkVfVSBwaXhlbFNpemUgPSBJbnRTaXplKG1fbG9naWNhbFNpemUpOwog
Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6
OmNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRtYXAobV9kYXRhLmJpdG1hcFNvdXJjZS5nZXQo
KSk7CisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRl
clRhcmdldE9mU2l6ZShtX2xvZ2ljYWxTaXplLCByZW5kZXJUYXJnZXQpOwogICAgIGlmICghYml0
bWFwQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gTm90ZTogVGhpcyBwbGFjZXMg
dGhlIGJpdG1hcGNvbnRleHQgaW50byBhIGxvY2tlZCBzdGF0ZSBiZWNhdXNlIG9mIHRoZSBCZWdp
bkRyYXcgY2FsbCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgSFJFU1VMVCBociA9IGJpdG1hcENv
bnRleHQtPkdldEJpdG1hcCgmbV9kYXRhLmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm47CisKICAgICBtX2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVu
aXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSk7CiAgICAg
bV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRm
b3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZTo6R1BVTWVtb3J5KTsKIApAQCAtMTQwLDM0ICsxNDYsMjcgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKICAgICBjb250ZXh0KCkuZmx1c2goKTsKIH0KIAotc3Rh
dGljIENPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJV0lD
Qml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQorc3RhdGljIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBi
b3VuZHMpCiB7CiAgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VT
aXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwogCiAgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5k
cy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBEMkRfUE9J
TlRfMlUgb3JpZ2luID0geyB9OwotICAgICAgICBXSUNSZWN0IGNyb3BwZWREaW1lbnNpb25zID0g
eyAwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpIH07Ci0KLSAgICAgICAgQ09N
UHRyPElXSUNCaXRtYXBDbGlwcGVyPiBiaXRtYXBDbGlwcGVyOwotICAgICAgICBIUkVTVUxUIGhy
ID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJp
dG1hcENsaXBwZXIoJmJpdG1hcENsaXBwZXIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkg
ewotICAgICAgICAgICAgaHIgPSBiaXRtYXBDbGlwcGVyLT5Jbml0aWFsaXplKGltYWdlLCAmY3Jv
cHBlZERpbWVuc2lvbnMpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAg
ICAgICAgICAgICBDT01QdHI8SVdJQ0JpdG1hcD4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAgICAg
ICAgICBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5D
cmVhdGVCaXRtYXBGcm9tU291cmNlKGltYWdlLCBXSUNCaXRtYXBOb0NhY2hlLCAmY3JvcHBlZEJp
dG1hcCk7Ci0gICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwotICAgICAgICAgICAgfQorICAgICAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJp
dG1hcFRhcmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAg
ICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgp
LCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRt
YXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJp
dG1hcDsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBpbWFnZTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChDT01Q
dHI8SVdJQ0JpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9n
aWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorc3RhdGljIFJlZlB0cjxJ
bWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIElu
dFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdT
dG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKIHsKICAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2Vy
dmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUp
OworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRh
cmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgogICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpAQCAtMTgxLDEzICsxODAsMTQgQEAgc3RhdGljIFJlZlB0cjxJbWFnZT4gY3Jl
YXRlQml0bWFwSW1hZ2VBZgogCiBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0gICAgQ09NUHRyPElXSUNCaXRtYXA+IGltYWdlOworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CiAgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQogICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwogICAgIGVsc2UKICAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCi0g
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgYXV0byBi
aXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4o
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRl
cm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVz
b2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCiBSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCkBAIC0xOTcs
NyArMTk3LDggQEAgUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZQogICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZTsKICAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNv
bHV0aW9uU2NhbGU7CiAKLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJu
YWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGltYWdlQnVmZmVyLT5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIHNpbmtJbnRvTmF0aXZlSW1h
Z2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNr
aW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAK
IEJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKQEAgLTIw
NSwxNCArMjA2LDIwIEBAIEJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW0K
ICAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7CiB9CiAKLUNPTVB0cjxJV0lDQml0bWFw
PiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyKQorQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
KQogewogICAgIC8vIEZJWE1FOiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBp
bWFnZS4KICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7CiB9CiAKLUNPTVB0cjxJV0lDQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAorQ09NUHRyPElE
MkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yKSBjb25zdAogeworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOworICAgIEhSRVNVTFQgaHIg
PSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKwogICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBh
c2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KICAg
ICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNF
bXB0eSgpKQogICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKQEAg
LTIyMSwxNSArMjI4LDEzIEBAIENPTVB0cjxJV0lDQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5h
dGkKICAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIEhSRVNVTFQgaHIgPSBTX09LOwotICAgIENPTVB0cjxJV0lDQml0bWFwPiBp
bWFnZTsKICAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAg
ICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CiAgICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5n
U3RvcmU6Ci0gICAgICAgICAgICBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFn
aW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291cmNlKG1fZGF0YS5iaXRtYXBTb3VyY2Uu
Z2V0KCksIFdJQ0JpdG1hcE5vQ2FjaGUsICZpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJj
ZShtX2RhdGEuYml0bWFwU291cmNlLmdldCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmaW1h
Z2UpOworICAgICAgICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJ
bnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAgICAg
IGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5k
YXRhLmRhdGEoKSwgMzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI1NCwxNiArMjU5LDEzIEBAIHZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JgogICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwogCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJ
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUobV9kYXRhLmJpdG1hcFNvdXJjZSk7Ci0KLSAgICAv
LyBZb3UgY2FuJ3QgY29udmVydCBhIElXSUNCaXRtYXAgdG8gYSBJRDJEMUJpdG1hcCB3aXRoIGFu
IGFjdGl2ZSBHcmFwaGljc0NvbnRleHQgYXR0YWNoZWQgdG8gaXQuCi0gICAgbV9kYXRhLmNvbnRl
eHQtPmVuZERyYXcoKTsKKyAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBtX2RhdGEuY29tcGF0
aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkp
OwogCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1fZGF0YS5iaXRtYXBTb3VyY2Us
IGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1v
ZGUpOwotCi0gICAgbV9kYXRhLmNvbnRleHQtPmJlZ2luRHJhdygpOworICAgIEZsb2F0U2l6ZSBj
dXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXApOworICAg
IGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBk
ZXN0Q29udGV4dC5mbHVzaCgpOworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21w
YXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBvcCwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTMsOCArMjUzLDEzIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlRGVjb2RlckRpcmVj
dDJEOjpjcmUKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgQ09NUHRyPElXSUNCaXRtYXA+IGJpdG1hcDsKLSAgICBociA9IHN5c3RlbUltYWdp
bmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21Tb3VyY2UoY29udmVydGVyLmdldCgpLCBXSUNC
aXRtYXBDYWNoZU9uRGVtYW5kLCAmYml0bWFwKTsKKyAgICBDT01QdHI8SVdJQ0JpdG1hcD4gd2lj
Qml0bWFwOworICAgIGhyID0gc3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJv
bVNvdXJjZShjb252ZXJ0ZXIuZ2V0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZ3aWNCaXRt
YXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKKyAgICBociA9IG1fcmVuZGVyVGFyZ2V0
LT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKHdpY0JpdG1hcC5nZXQoKSwgJmJpdG1hcCk7CiAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjg2
LDYgKzI5MSw3IEBAIHZvaWQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNldERhdGEoU2hhcmUKIAog
ICAgIC8vIEltYWdlIHdhcyB2YWxpZC4KIH0KKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1h
Z2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsMTEgKzU2LDcgQEAgSW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZlSW1h
ZwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBIUkVTVUxUIGhy
ID0gaW1hZ2UtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gaW1hZ2UtPkdldFBpeGVsU2l6ZSgpOwogfQogCiBib29sIG5hdGl2
ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpAQCAtNjgsMjggKzY0
LDggQEAgYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYQogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFdJQ1BpeGVsRm9ybWF0R1VJRCBw
aXhlbEZvcm1hdEdVSUQgPSB7IH07Ci0gICAgSFJFU1VMVCBociA9IGltYWdlLT5HZXRQaXhlbEZv
cm1hdCgmcGl4ZWxGb3JtYXRHVUlEKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UganVzdCBjaGVjayB0aGUg
cGl4ZWxGb3JtYXRHVUlEIGZvciByZWxldmFudCBJRCdzIHdlIHVzZT8KLQotICAgIENPTVB0cjxJ
V0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50SW5mbzsKLSAgICBociA9IGltYWdpbmdGYWN0b3J5
KCktPkNyZWF0ZUNvbXBvbmVudEluZm8ocGl4ZWxGb3JtYXRHVUlELCAmY29tcG9uZW50SW5mbyk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBD
T01QdHI8SVdJQ1BpeGVsRm9ybWF0SW5mbz4gcGl4ZWxGb3JtYXRJbmZvKFF1ZXJ5LCBjb21wb25l
bnRJbmZvLmdldCgpKTsKLSAgICBpZiAoIXBpeGVsRm9ybWF0SW5mbykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVUlOVCBjaGFubmVsQ291bnQgPSAwOwotICAgIGhyID0gcGl4ZWxGb3Jt
YXRJbmZvLT5HZXRDaGFubmVsQ291bnQoJmNoYW5uZWxDb3VudCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY2hhbm5lbENvdW50
ID4gMzsKKyAgICBEMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCA9IGltYWdlLT5HZXRQaXhl
bEZvcm1hdCgpOworICAgIHJldHVybiBwaXhlbEZvcm1hdC5hbHBoYU1vZGUgIT0gRDJEMV9BTFBI
QV9NT0RFX0lHTk9SRTsKIH0KIAogQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29s
b3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpAQCAtMTE2LDEzICs5Miw3IEBAIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHQKIAogICAgIGZsb2F0IG9wYWNpdHkg
PSAxLjBmOwogCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBo
ciA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNC
aXRtYXAoaW1hZ2UuZ2V0KCksICZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+RHJh
d0JpdG1hcChiaXRtYXAuZ2V0KCksIGRlc3RSZWN0LCBvcGFjaXR5LCBEMkQxX0JJVE1BUF9JTlRF
UlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUiwgYWRqdXN0ZWRTcmNSZWN0KTsKLSAgICBj
b250ZXh0LmZsdXNoKCk7CisgICAgcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+RHJh
d0JpdG1hcChpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIG9wYWNpdHksIEQyRDFfQklUTUFQX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SLCBhZGp1c3RlZFNyY1JlY3QpOwogfQogCiB2
b2lkIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSwxMyArNTksOCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQ
bGF0Zm9yCiAgICAgYXV0byYgcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CiAgICAgYXV0byBu
YXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFnZS5uYXRpdmVJbWFnZShudWxscHRyKTsKIAotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LnJlbmRl
clRhcmdldCgpLT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKG5hdGl2ZUltYWdlLmdldCgpLCAm
Yml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCiAgICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0gbnVsbHB0cjsKLSAgICBo
ciA9IGNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNoKGJpdG1hcC5nZXQo
KSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVz
aCk7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1h
cEJydXNoKG5hdGl2ZUltYWdlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQ
cm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAg
ICAgcmV0dXJuIHBhdHRlcm5CcnVzaDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAog
I2lmIFVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRlICJEaXJlY3Qy
RFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlRGVjb2RlckRpcmVjdDJELmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
aCIKICNpbmNsdWRlIDxkMmQxLmg+CkBAIC0yMzUsMTIgKzIzNiwxMSBAQCBOYXRpdmVJbWFnZVB0
ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoY29uCiAgICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENv
bnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQ09NUHRyPElXSUNCaXRtYXA+
IG5hdGl2ZUltYWdlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lz
dGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHJlY3QoKS53aWR0aCgpLCByZWN0KCku
aGVpZ2h0KCksIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBSR0JBLCBXSUNCaXRtYXBDYWNoZU9u
TG9hZCwgJm5hdGl2ZUltYWdlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIEFTU0VSVCh0YXJnZXRDb250ZXh0LT5oYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpOwogCi0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0
PiBuYXRpdmVJbWFnZVRhcmdldCA9IERpcmVjdDJEOjpjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lD
Qml0bWFwKG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemUoc2l6ZSgp
LndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgYXV0byBuYXRpdmVJbWFnZVRhcmdldCA9
IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoYml0bWFwU2l6ZSwgcmVu
ZGVyVGFyZ2V0LCAxLjApOwogICAgIGlmICghbmF0aXZlSW1hZ2VUYXJnZXQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCkBAIC0yNDksNiArMjQ5LDE3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0lt
YWdlOjpuYXRpdmVJbWFnZShjb24KIAogICAgIGRyYXcobG9jYWxDb250ZXh0LCByZWN0KCksIHJl
Y3QoKSwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwsIERlY29kaW5nTW9k
ZTo6U3luY2hyb25vdXMsIEltYWdlT3JpZW50YXRpb246Ok5vbmUpOwogCisgICAgQ09NUHRyPElE
MkQxQml0bWFwPiBuYXRpdmVJbWFnZTsKKyAgICBIUkVTVUxUIGhyID0gbmF0aXZlSW1hZ2VUYXJn
ZXQtPkdldEJpdG1hcCgmbmF0aXZlSW1hZ2UpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZm5kZWYgX05ERUJVRworICAgIGF1dG8gbmF0aXZl
SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2UtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChuYXRp
dmVJbWFnZVNpemUuaGVpZ2h0ID0gcmVjdCgpLnNpemUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJU
KG5hdGl2ZUltYWdlU2l6ZS53aWR0aCA9IHJlY3QoKS5zaXplKCkud2lkdGgoKSk7CisjZW5kaWYK
KwogICAgIHJldHVybiBuYXRpdmVJbWFnZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTktMDgtMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0ZUV10gR28gYmFjayB0byBJRDJEMUJpdG1hcCBhcyBvdXIgTmF0
aXZlSW1hZ2UgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAxMTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gQnVnIDIwMDA5MyBJIHN3aXRjaGVkIHRoZSBPUyB0eXBlIG9mIE5hdGl2ZUltYWdl
UHRyIGZyb20gSUQyRDFCaXRtYXAgdG8gSVdJQ0JpdG1hcC4KKyAgICAgICAgSG93ZXZlciwgdGhp
cyB3YXMgYW4gaWxsLWFkdmlzZWQgYXBwcm9hY2gsIGJlY2F1c2UgaXQgZHJhbWF0aWNhbGx5IGhh
cm1lZCBwZXJmb3JtYW5jZSBkdWUKKyAgICAgICAgdG8gdGhlIGhlYXZ5IHVzZSBvZiBzb2Z0d2Fy
ZSByZW5kZXJpbmcuCisKKyAgICAgICAgSSBvcmlnaW5hbGx5IG1hZGUgdGhpcyBjaGFuZ2UgYmVj
YXVzZSBJIHRob3VnaHQgdGhpcyB3YXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0byB0aGUgYmFja2lu
ZworICAgICAgICBiaXRzIG9mIHRoZSBiaXRtYXBzLCBidXQgaXQgdHVybnMgb3V0IHRoYXQgYSBt
b3JlIHJlY2VudCBEaXJlY3QyRCBkYXRhIHR5cGUgKElEMkQxQml0bWFwMSkKKyAgICAgICAgaGFz
IHRoZSBhYmlsaXR5IHRvIG1hcCBpdHMgbWVtb3J5IHRvIENQVS1hY2Nlc3NpYmxlIG1lbW9yeSwg
YWxsb3dpbmcgc29mdHdhcmUgZmlsdGVyIGVmZmVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBz
d2l0Y2hlcyBiYWNrIHRvIHRoZSBJRDJEMUJpdGFwIGRhdGEgdHlwZSwgYW5kIGhvb2tzIHVwIHRo
ZSBJRDJEMUJpdG1hcDEgZGF0YSB0eXBlCisgICAgICAgIHRvIGFjY2VzcyB0aGUgdW5kZXJseWlu
ZyBtZW1vcnkgb2YgdGhlIGJpdG1hcHMgd2hlbiBzb2Z0d2FyZSBmaWx0ZXIgZWZmZWN0cyBhcmUg
dXNlZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJs
ZUJpdG1hcERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9y
ZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorCiAyMDE5LTA4LTIw
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtGVFddIEZp
eCBzY3JvbGxpbmcgaW4gbW9kZXJuIFdlYktpdCB2aWV3cwpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBA
CiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJV0lDQml0bWFwOworaW50
ZXJmYWNlIElEMkQxQml0bWFwOworaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwogCiAjaW5j
bHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNlbmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2Ugd2hlbiB3ZSBrbm93IHRoYXQgdGhl
IGNvbnRlbnRzIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIHdvbid0IGNoYW5nZS4KICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVDYWlyb1N1cmZhY2UoKTsKICNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKCk7Cisg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQyRDFSZW5kZXJU
YXJnZXQqKTsKICAgICB2b2lkIHN5bmMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAjZW5k
aWYKIApAQCAtMTYyLDE0ICsxNjMsMTQgQEAgcHJpdmF0ZToKICAgICBDb25maWd1cmF0aW9uIG1f
Y29uZmlndXJhdGlvbjsKIAogI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1h
cD4gbV9iaXRtYXA7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JpdG1hcDsKICNlbmRpZgog
CiAgICAgLy8gSWYgdGhlIHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2VkIGJ5IHNoYXJlZCBtZW1v
cnksIHRoaXMgcG9pbnRzIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdC4KICAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUg
Yml0bWFwIGlzIGJhY2tlZCBieSBmYXN0TWFsbG9jZWQgbWVtb3J5LCB0aGlzIHBvaW50cyB0byB0
aGUgZGF0YS4KLSAgICB2b2lkKiBtX2RhdGE7CisgICAgdm9pZCogbV9kYXRhIHsgbnVsbHB0ciB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0
ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+
CisjaW5jbHVkZSA8ZDJkMV8xLmg+CiAjaW5jbHVkZSA8d2luY29kZWMuaD4KICNpbmNsdWRlIDx3
dGYvUHJvY2Vzc0lELmg+CiAKQEAgLTQyLDExICs0Myw5IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgYXV0byBiaXRtYXBGb3Jt
YXQgPSBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQQkdSQTsKLQogc3RhdGljIHVuc2lnbmVkIHN0
cmlkZUZvcldpZHRoKHVuc2lnbmVkIHdpZHRoKQogewotICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRz
UGVyUGl4ZWwgPSBEaXJlY3QyRDo6Yml0c1BlclBpeGVsKGJpdG1hcEZvcm1hdCk7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERpcmVjdDJEOjpiaXRzUGVyUGl4ZWwoRGlyZWN0
MkQ6OndpY0JpdG1hcEZvcm1hdCgpKTsKICAgICByZXR1cm4gYml0c1BlclBpeGVsICogd2lkdGgg
LyA4OwogfQogCkBAIC02OCw4ICs2NywxMiBAQCBzdGF0aWMgaW5saW5lIENPTVB0cjxJV0lDQml0
bWFwPiBjcmVhdGVTCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKLSAgICBtX2JpdG1hcCA9IGNyZWF0
ZURpcmVjdDJEU3VyZmFjZSgpOwotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gYml0bWFw
Q29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKG1fYml0
bWFwLmdldCgpKTsKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0
bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fc2l6ZSk7CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0
LT5HZXRCaXRtYXAoJm1fYml0bWFwKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7CiB9CiAK
QEAgLTgwLDEzICs4MywxMiBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3ND
b250CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJm
YWNlKCk7CisgICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKIAogI2lmbmRlZiBfTkRFQlVHCi0g
ICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsKLSAgICBIUkVTVUxUIGhyID0gc3VyZmFjZS0+R2V0
U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCA9PSBtX3NpemUud2lkdGgo
KSk7Ci0gICAgQVNTRVJUKGhlaWdodCA9PSBtX3NpemUuaGVpZ2h0KCkpOworICAgIGF1dG8gYml0
bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChiaXRtYXBTaXpl
LndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQg
PT0gbV9zaXplLmhlaWdodCgpKTsKICNlbmRpZgogCiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRz
dFBvaW50LCBzcmNSZWN0LnNpemUoKSk7CkBAIC0xMDAsMTUgKzEwMiwyMiBAQCB2b2lkIFNoYXJl
YWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250CiAgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJ
bWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3RTY2FsZWQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb24oKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUu
YWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi1DT01QdHI8SVdJQ0Jp
dG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVEaXJlY3QyRFN1cmZhY2UoKQorQ09NUHRyPElE
MkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewotICAgIG1fYml0bWFwID0gY3JlYXRlU3VyZmFj
ZUZyb21EYXRhKGRhdGEoKSwgbV9zaXplKTsKLSAgICByZXR1cm4gbV9iaXRtYXA7CisgICAgYXV0
byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKTsKKworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOworICAgIHVpbnQzMl90IHN0cmlkZSA9IDQgKiBt
X3NpemUud2lkdGgoKTsKKyAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRt
YXAobV9zaXplLCBkYXRhKCksIHN0cmlkZSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gYml0bWFwOwogfQogCiBSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
SW1hZ2UoKQogewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZSgpOwor
ICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7CiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApAQCAtMTIxLDIwICsxMzAsNTAgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6
OnN5bmMoR3JhcGhpY3NDb250ZQogCiAgICAgZ3JhcGhpY3NDb250ZXh0LmVuZERyYXcoKTsKIAot
ICAgIFdJQ1JlY3QgcmNMb2NrID0geyAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpIH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcExvY2s+IGJpdG1hcERhdGFMb2NrOwotICAg
IEhSRVNVTFQgaHIgPSBtX2JpdG1hcC0+TG9jaygmcmNMb2NrLCBXSUNCaXRtYXBMb2NrUmVhZCwg
JmJpdG1hcERhdGFMb2NrKTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBVSU5U
IGJ1ZmZlclNpemUgPSAwOwotICAgICAgICBXSUNJblByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxs
cHRyOwotICAgICAgICBociA9IGJpdG1hcERhdGFMb2NrLT5HZXREYXRhUG9pbnRlcigmYnVmZmVy
U2l6ZSwgJmRhdGFQdHIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAg
IG1lbWNweShkYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGFQdHIpLCBidWZmZXJT
aXplKTsKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0Owor
ICAgIEhSRVNVTFQgaHIgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRl
clRhcmdldCgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzdHJpZGUgPSBzdHJpZGVGb3JX
aWR0aChtX3NpemUud2lkdGgoKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRt
YXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6
OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJ
VE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAg
aHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9zaXplLCBudWxscHRyLCBzdHJp
ZGUsIGJpdG1hcFByb3BlcnRpZXMsICZjcHVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRCho
cikpCisgICAgICAgIHJldHVybjsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsK
KyAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERh
dGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1hcHBlZERhdGEucGl0Y2ggPT0gc3RyaWRlKQorICAgICAgICBtZW1jcHkoZGF0YSgpLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWREYXRhLmJpdHMpLCBzdHJpZGUgKiBtX3NpemUuaGVp
Z2h0KCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBTdHJpZGUgaXMgZGlmZmVyZW50LCBzbyBt
dXN0IGRvIGEgcm93d2lzZSBjb3B5OgorICAgICAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gbV9z
aXplLmhlaWdodCgpOworICAgICAgICBDaGVja2VkPGludD4gd2lkdGggPSBtX3NpemUud2lkdGgo
KTsKKworICAgICAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gbWFwcGVkRGF0YS5iaXRzOwor
ICAgICAgICB1aW50OF90KiByb3cgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKCkp
OworCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kp
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgeworICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyb3cgKyBiYXNleClbMF0gPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3JjUm93cyArPSBtYXBwZWREYXRhLnBpdGNoOworICAgICAgICAg
ICAgcm93ICs9IHN0cmlkZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIE9uY2Ugd2UgYXJl
IGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRhLCB1bmxvY2sgdGhlIGJpdG1hcAotICAgIGJpdG1hcERh
dGFMb2NrID0gbnVsbHB0cjsKKyAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNDg5MTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFj
a2luZ1N0b3JlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywyMCArNzMsNyBAQCB2
b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhCiAKICAgICBJbnRQb2ludCB1
cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9j
YXRpb24oKTsKIAotICAgIGF1dG8gdXBkYXRlV0lDQml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJl
Y3QyRFN1cmZhY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBTX09LOwotI2lmbmRlZiBfTkRFQlVH
Ci0gICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsKLSAgICBociA9IHVwZGF0ZVdJQ0JpdG1hcC0+
R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCA9PSB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGhlaWdodCA9PSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotI2VuZGlmCi0KLSAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1hcDsKLSAgICBociA9IG1fYmFja2VuZC0+cmVuZGVy
VGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAodXBkYXRlV0lDQml0bWFwLmdldCgp
LCAmZGV2aWNlVXBkYXRlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1hcCA9IGJp
dG1hcC0+Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKG1fYmFja2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwog
CiAjaWZuZGVmIF9OREVCVUcKICAgICBhdXRvIGRldmljZUJpdG1hcFNpemUgPSBkZXZpY2VVcGRh
dGVCaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2
aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTQsNyArNzU0LDggQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3M6OmRpcwogICAgIH0KIAogI2lmIFVTRShESVJFQ1QyRCkKLSAgICBiaXRtYXAtPnN5bmMo
KmdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgYml0
bWFwLT5zeW5jKCpncmFwaGljc0NvbnRleHQpOwogI2VuZGlmCiAKICAgICAvLyBMYXlvdXQgY2Fu
IHRyaWdnZXIgbW9yZSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHdlIGRvbid0IHdhbnQg
dG8gcHJvY2VzcyB0aGVtCkluZGV4OiBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQkocmV2aXNpb24gMjQ4OTEw
KQorKysgU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEy
LDYgKzEyLDEzIEBAIGlmICgoTk9UIERFRklORUQgRU5BQkxFX1dFQktJVF9MRUdBQ1kpIE8KICAg
ICBzZXQoRU5BQkxFX1dFQktJVCBPRkYpCiBlbmRpZiAoKQogCitpZiAoREVGSU5FRCBFTlZ7QXBw
bGVBcHBsaWNhdGlvblN1cHBvcnRTREt9KQorICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntB
cHBsZUFwcGxpY2F0aW9uU3VwcG9ydFNES30vQXBwbGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklF
U19ESVIpCisgICAgc2V0KFdFQktJVF9MSUJSQVJJRVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJ
QlJBUklFU19ESVJ9L2luY2x1ZGUiKQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRf
TElCUkFSSUVTX0lOQ0xVREVfRElSfSkKKyAgICBzZXQoQVBQTEVfQlVJTEQgMSkKK2VuZGlmICgp
CisKIFdFQktJVF9PUFRJT05fQkVHSU4oKQogCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfVkVS
U0lPTl9TVEFNUEVSICJUb2dnbGUgc3RhbXBpbmcgdmVyc2lvbiBpbmZvcm1hdGlvbiBkdXJpbmcg
YnVpbGQiIFBSSVZBVEUgT0ZGKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377218</attachid>
            <date>2019-08-24 19:30:26 -0700</date>
            <delta_ts>2019-08-26 11:24:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201122-20190824193022.patch</filename>
            <type>text/plain</type>
            <size>63602</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA4LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEdvIGJhY2sgdG8g
SUQyRDFCaXRtYXAgYXMgb3VyIE5hdGl2ZUltYWdlIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTEyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIEJ1ZyAyMDAwOTMgSSBzd2l0Y2hlZCB0aGUg
T1MgdHlwZSBvZiBOYXRpdmVJbWFnZVB0ciBmcm9tIElEMkQxQml0bWFwIHRvIElXSUNCaXRtYXAu
CisgICAgICAgIEhvd2V2ZXIsIHRoaXMgd2FzIGFuIGlsbC1hZHZpc2VkIGFwcHJvYWNoLCBiZWNh
dXNlIGl0IGRyYW1hdGljYWxseSBoYXJtZWQgcGVyZm9ybWFuY2UgZHVlCisgICAgICAgIHRvIHRo
ZSBoZWF2eSB1c2Ugb2Ygc29mdHdhcmUgcmVuZGVyaW5nLgorCisgICAgICAgIEkgb3JpZ2luYWxs
eSBtYWRlIHRoaXMgY2hhbmdlIGJlY2F1c2UgSSB0aG91Z2h0IHRoaXMgd2FzIHRoZSBvbmx5IHdh
eSB0byBnZXQgdG8gdGhlIGJhY2tpbmcKKyAgICAgICAgYml0cyBvZiB0aGUgYml0bWFwcywgYnV0
IGl0IHR1cm5zIG91dCB0aGF0IGEgbW9yZSByZWNlbnQgRGlyZWN0MkQgZGF0YSB0eXBlIChJRDJE
MUJpdG1hcDEpCisgICAgICAgIGhhcyB0aGUgYWJpbGl0eSB0byBtYXAgaXRzIG1lbW9yeSB0byBD
UFUtYWNjZXNzaWJsZSBtZW1vcnksIGFsbG93aW5nIHNvZnR3YXJlIGZpbHRlciBlZmZlY3RzLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggc3dpdGNoZXMgYmFjayB0byB0aGUgSUQyRDFCaXRhcCBkYXRh
IHR5cGUsIGFuZCBob29rcyB1cCB0aGUgSUQyRDFCaXRtYXAxIGRhdGEgdHlwZQorICAgICAgICB0
byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG9mIHRoZSBiaXRtYXBzIHdoZW4gc29mdHdh
cmUgZmlsdGVyIGVmZmVjdHMgYXJlIHVzZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6d3JpdGVEaWFnbm9zdGljUE5HVG9QYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjp3cml0ZUltYWdlVG9EaXNrQXNQTkcpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZl
SW1hZ2VEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRl
cm5EaXJlY3QyRC5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKwog
MjAxOS0wOC0yNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBQYWdlIGNyYXNoZXMgdW5kZXIgQ0dQYXRoQWRkVW5ldmVuQ29ybmVyc1JvdW5kZWRSZWN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNv
bnN0OwogI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJV0lDQml0bWFwPiBjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAg
IHN0YXRpYyBDT01QdHI8SVdJQ0JpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisgICAgc3Rh
dGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwogI2VuZGlm
CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2
ZUltYWdlLmgJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL05hdGl2ZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogI2lmIFVTRShDRykKIHR5cGVkZWYgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IE5hdGl2ZUltYWdlUHRyOwogI2VsaWYgVVNFKERJUkVDVDJEKQotdHlwZWRlZiBDT01Q
dHI8SVdJQ0JpdG1hcD4gTmF0aXZlSW1hZ2VQdHI7Cit0eXBlZGVmIENPTVB0cjxJRDJEMUJpdG1h
cD4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOwogI2VsaWYgVVNFKFdJTkdESSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9C
aXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lvbiAyNDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDI4ICsxNjMsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVu
dHMoSW1hCiAgICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSk7CiAgICAgYnl0ZXNQZXJMaW5lID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwogI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0aGUgYml0bWFwJ3MgbWVtb3J5IHdoZW4gaXQg
aXMgaW4gdGhlIG1pZGRsZSBvZiBhIEJlZ2luRHJhdy9FbmREcmF3Ci0gICAgV0lDUmVjdCByY0xv
Y2sgPSB7IDAsIDAsIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSB9Owot
Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBMb2NrPiBiaXRtYXBEYXRhOwotICAgIEhSRVNVTFQgaHIg
PSBmcmFtZUltYWdlLT5Mb2NrKCZyY0xvY2ssIFdJQ0JpdG1hcExvY2tSZWFkLCAmYml0bWFwRGF0
YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVSU5U
IHN0cmlkZSA9IDA7Ci0gICAgaHIgPSBiaXRtYXBEYXRhLT5HZXRTdHJpZGUoJnN0cmlkZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBieXRlc1Blckxp
bmUgPSBzdHJpZGU7Ci0KLSAgICBVSU5UIGJ1ZmZlclNpemUgPSAwOwotICAgIFdJQ0luUHJvY1Bv
aW50ZXIgZGF0YVB0ciA9IG51bGxwdHI7Ci0gICAgaHIgPSBiaXRtYXBEYXRhLT5HZXREYXRhUG9p
bnRlcigmYnVmZmVyU2l6ZSwgJmRhdGFQdHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
ZGF0YVB0cik7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKICNlbmRpZgogCiAg
ICAgdXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVy
TGluZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ4OTEwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw4ICs1MjgsNiBAQCB2b2lkIGZpbGxQYXRoKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgICAgIEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9h
dFBvaW50KCksIGNvbnRleHQtPkdldFNpemUoKSk7CiAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgY29udGV4dFJlY3QsIGRyYXdGdW5jdGlvbik7CiAgICAgfQotCi0g
ICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsKIH0KIAogdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTU1NCw4ICs1
NTIsNiBAQCB2b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgICAg
IEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50KCksIGNvbnRleHQtPkdldFNpemUoKSk7
CiAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgY29udGV4dFJlY3Qs
IGRyYXdGdW5jdGlvbik7CiAgICAgfQotCi0gICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsKIH0K
IAogdm9pZCBzdHJva2VSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoLCBjb25zdCBTdHJva2VT
b3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQpAQCAt
NTg4LDggKzU4NCw2IEBAIHZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYK
ICAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNo
YWRvd1N0YXRlLCBkcmF3RnVuY3Rpb24pOwogICAgIGVsc2UKICAgICAgICAgZHJhd1dpdGhvdXRT
aGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIGRyYXdGdW5jdGlvbik7Ci0KLSAg
ICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwogfQogCiB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0
cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYpCkBAIC02NTUsMTMg
KzY0OSwxMSBAQCB2b2lkIGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjCiAgICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgLy8g
UmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRvIGEgYml0bWFwIGNvbnRleHQKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhy
ID0gY29udGV4dC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldCgmYml0bWFwVGFyZ2V0KTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChj
b250ZXh0KTsKIAogICAgIGJpdG1hcFRhcmdldC0+QmVnaW5EcmF3KCk7CiAgICAgZHJhd0NvbW1h
bmRzKGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQtPkVuZERyYXco
KTsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5FbmREcmF3KCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1h
cDsKQEAgLTgzNiwxNCArODI4LDE0IEBAIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBsYXRmb3JtQ29u
dGV4dERpcmUKICAgICBlbHNlCiAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgZHJhd0Z1bmN0aW9uKTsKIAotICAgIGZsdXNoKHBsYXRm
b3JtQ29udGV4dCk7Ci0KICAgICBpZiAoIXN0YXRlU2F2ZXIuZGlkU2F2ZSgpKQogICAgICAgICBj
b250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtKTsKIH0KIAotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBJV0lDQml0bWFwKiB0aWxlSW1hZ2Us
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBJRDJEMUJpdG1hcCogc291cmNlSW1hZ2Us
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogeworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
dGlsZUltYWdlID0gc291cmNlSW1hZ2U7CisKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCk7CiAgICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7CiAKQEAgLTg2Niw4ICs4NTgsNiBAQCB2b2lkIGRyYXdQ
YXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJECiAgICAgLy8gSWYgd2Ugb25seSB3YW50IGEg
c3Vic2V0IG9mIHRoZSBiaXRtYXAsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY3JvcHBlZCBiaXRtYXAg
aW1hZ2UuIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwKICAgICAvLyB0aGlzIGRvZXMg
bm90IGFsbG9jYXRlIG5ldyBiaXRtYXAgbWVtb3J5LgogICAgIGlmIChzaXplLndpZHRoKCkgPiBk
ZXN0UmVjdC53aWR0aCgpIHx8IHNpemUuaGVpZ2h0KCkgPiBkZXN0UmVjdC5oZWlnaHQoKSkgewot
ICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAgIC8qCiAgICAgICAgIGZsb2F0IGRwaVggPSAwOwog
ICAgICAgICBmbG9hdCBkcGlZID0gMDsKICAgICAgICAgdGlsZUltYWdlLT5HZXREcGkoJmRwaVgs
ICZkcGlZKTsKQEAgLTg4MCwxNiArODcwLDEwIEBAIHZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQKICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQogICAgICAgICAg
ICAgICAgIHRpbGVJbWFnZSA9IHN1YkltYWdlOwogICAgICAgICB9Ci0gICAgICAgICovCiAgICAg
fQogCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IGNv
bnRleHQtPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAodGlsZUltYWdlLCBudWxscHRyLCAmYml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQogICAgIENP
TVB0cjxJRDJEMUJpdG1hcEJydXNoPiBwYXR0ZXJuQnJ1c2g7Ci0gICAgaHIgPSBjb250ZXh0LT5D
cmVhdGVCaXRtYXBCcnVzaChiaXRtYXAuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZi
cnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0
LT5DcmVhdGVCaXRtYXBCcnVzaCh0aWxlSW1hZ2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRp
ZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwogICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybjsKQEAgLTEx
MDksOCArMTA5Myw4IEBAIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnQK
ICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6VHJhbnNwYXJlbmN5TGF5ZXJTdGF0ZSB0cmFu
c3BhcmVuY3lMYXllcjsKICAgICB0cmFuc3BhcmVuY3lMYXllci5vcGFjaXR5ID0gb3BhY2l0eTsK
IAotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0
ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQoJnRyYW5zcGFyZW5jeUxheWVyLnJlbmRlclRhcmdldCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgdHJhbnNwYXJlbmN5TGF5
ZXIucmVuZGVyVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKSk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmFwcGVuZChXVEZNb3ZlKHRyYW5zcGFyZW5jeUxheWVyKSk7CiAKICAgICBwbGF0
Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQt
PkJlZ2luRHJhdygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjQ4OTEwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBkcmF3R2x5cGhzKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJgogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFwKiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb24sIEludGVycG9sYXRpb25RdWFsaXR5LCBmbG9hdCwgY29u
c3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgSUQyRDFCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSwgSW1hZ2VPcmllbnRhdGlvbiwgSW50ZXJwb2xhdGlvblF1YWxpdHksIGZsb2F0LCBjb25zdCBT
aGFkb3dTdGF0ZSYpOwogdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNv
bnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9p
ZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElXSUNCaXRtYXAqLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUpOwordm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQx
Qml0bWFwKiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKTsKIAogdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBXVEY6
OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcyk7CiB2b2lk
IGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0
JiBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuY3BwCShyZXZpc2lvbiAyNDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
NyArMTE1LDcgQEAgQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENPTVB0cjxJV0lDQml0bWFwPiBzdXJmYWNlOwot
ICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3Rv
cnkoKS0+Q3JlYXRlQml0bWFwRnJvbU1lbW9yeShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
IEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBCR1JBLCBzdHJpZGUsIHN0YXRpY19jYXN0PFVJTlQ+
KG51bUJ5dGVzLnVuc2FmZUdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZz
dXJmYWNlKTsKKyAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21NZW1vcnkoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCB3aWNCaXRtYXBGb3JtYXQoKSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxVSU5UPihu
dW1CeXRlcy51bnNhZmVHZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRhdGEpLCAmc3Vy
ZmFjZSk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMTI1LDMxICsxMjUsNTggQEAgQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJE
SW1hZ2VTdQogQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIENPTVB0cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQg
aHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRl
Qml0bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR1VJRF9XSUNQaXhlbEZvcm1hdDMy
YnBwUEJHUkEsIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZzdXJmYWNlKTsKKyAgICBIUkVTVUxU
IGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0
ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBX
SUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3VyZmFjZSk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBzdXJmYWNlOwogfQogCitE
MkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNvZnR3YXJlTWFuaXB1bGF0aW9uKCkKK3sK
KyAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0s
IEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsKK30KKworRDJEMV9QSVhFTF9GT1JNQVQg
cGl4ZWxGb3JtYXQoKQoreworICAgIC8vIFNpbmNlIHdlIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBI
REMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFyZSBmb3JjZWQgdG8gdXNlIERYR0lfRk9STUFUX0I4
RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRAorICAgIHJldHVy
biBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBI
QV9NT0RFX1BSRU1VTFRJUExJRUQpOworfQorCitHVUlEIHdpY0JpdG1hcEZvcm1hdCgpCit7Cisg
ICAgLy8gVGhpcyBpcyB0aGUgV0lDIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk0uIEl0IGlzIGFsc28gc3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2llbnQg
aW4tbWVtb3J5CisgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIFdJQyBpbWFnZXMuCisgICAgcmV0
dXJuIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBCR1JBOworfQorCitEMkQxX0JJVE1BUF9QUk9Q
RVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKQoreworICAgIHJldHVybiBEMkQxOjpCaXRtYXBQcm9w
ZXJ0aWVzKHBpeGVsRm9ybWF0KCkpOworfQorCiBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJp
dG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMo
RDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sIEQyRDFfQUxQSEFf
TU9ERV9QUkVNVUxUSVBMSUVEKSk7CisgICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0g
Yml0bWFwUHJvcGVydGllcygpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAg
ICAgRDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IHNpemU7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRl
clRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcFByb3BlcnRpZXMsICZiaXRt
YXApOworICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBT
aXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKICAgICBpZiAoIVNVQ0NFRURF
RChocikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGJpdG1hcDsKIH0K
IAorRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
Cit7CisgICAgcmV0dXJuIEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJf
VEFSR0VUX1RZUEVfREVGQVVMVCwKKyAgICAgICAgcGl4ZWxGb3JtYXQoKSwgMCwgMCwgRDJEMV9S
RU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVG
QVVMVCk7Cit9CisKIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0
RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKiBiaXRtYXBTb3VyY2UpCiB7Ci0gICAgYXV0byB0YXJn
ZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9U
QVJHRVRfVFlQRV9ERUZBVUxULAotICAgICAgICBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpLAotICAgICAg
ICAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfTk9ORSwgRDJEMV9GRUFUVVJFX0xFVkVM
X0RFRkFVTFQpOworICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3Bl
cnRpZXMoKTsKIAogICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsK
ICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZVdpY0JpdG1hcFJlbmRlclRhcmdldChiaXRtYXBTb3VyY2UsICZ0YXJnZXRQcm9wZXJ0aWVzLCAm
Yml0bWFwQ29udGV4dCk7CkBAIC0xNjEsOSArMTg4LDcgQEAgQ09NUHRyPElEMkQxUmVuZGVyVGFy
Z2V0PiBjcmVhdGVSZW5kZXJUYQogCiBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRl
R0RJUmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpS
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCi0g
ICAgICAgIEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQx
X0FMUEhBX01PREVfUFJFTVVMVElQTElFRCksCi0gICAgICAgIDAsIDAsIEQyRDFfUkVOREVSX1RB
UkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwgRDJEMV9GRUFUVVJFX0xFVkVMX0RFRkFVTFQpOwor
ICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAog
ICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7CiAgICAgSFJFU1VM
VCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRh
cmdldCgmdGFyZ2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7CkBAIC0xNzMsNiArMTk4LDM2
IEBAIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElSZW4KICAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0OwogfQogCitDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0
ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQorewor
ICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKKyAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZi
aXRtYXBDb250ZXh0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Cit9CisKK0NPTVB0cjxJRDJEMUJp
dG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKGNvbnN0IElu
dFNpemUmIHNpemUsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShkZXZpY2VTY2FsZUZhY3Rvcik7CisK
KyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7CisgICAgYXV0byBkZXNpcmVkU2l6ZSA9IEQyRDE6
OlNpemVGKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgRDJEMV9TSVpFX1UgcGl4
ZWxTaXplID0gc2l6ZTsKKyAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21w
YXRpYmxlUmVuZGVyVGFyZ2V0KCZkZXNpcmVkU2l6ZSwgJnBpeGVsU2l6ZSwgbnVsbHB0ciwgRDJE
MV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFUSUJMRSwgJmJpdG1h
cENvbnRleHQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKK30KKwogdm9pZCBjb3B5UmVjdEZyb21P
bmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNv
bnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
U2l6ZSYgZGVzdE9mZnNldCkKIHsKICAgICBJbnRTaXplIHNvdXJjZUJpdG1hcFNpemUgPSBmcm9t
LT5HZXRQaXhlbFNpemUoKTsKQEAgLTE5OSw3ICsyNTQsNyBAQCB2b2lkIGNvcHlSZWN0RnJvbU9u
ZVN1cmZhY2VUb0Fub3RoZXIoSUQyCiAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogfQogCi12
b2lkIHdyaXRlSW1hZ2VUb0Rpc2tBc1BORyhJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENXU1RSIGZpbGVOYW1lKQordm9pZCB3cml0ZURpYWdu
b3N0aWNQTkdUb1BhdGgoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgSUQyRDFCaXRt
YXAqIGJpdG1hcCwgTFBDV1NUUiBmaWxlTmFtZSkKIHsKICAgICBDT01QdHI8SVdJQ0JpdG1hcEVu
Y29kZXI+IHdpY0JpdG1hcEVuY29kZXI7CiAgICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRp
cmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVFbmNvZGVyKEdVSURfQ29udGFp
bmVyRm9ybWF0UG5nLCBudWxscHRyLCAmd2ljQml0bWFwRW5jb2Rlcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuaAkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCwxNiBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKIAogaW50ZXJmYWNlIElEMkQxQml0bWFwOwor
aW50ZXJmYWNlIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0OwogaW50ZXJmYWNlIElEMkQxRENSZW5k
ZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSVdJQ0Jp
dG1hcFNvdXJjZTsKIGludGVyZmFjZSBJV0lDQml0bWFwOwogCitzdHJ1Y3QgRDJEMV9CSVRNQVBf
UFJPUEVSVElFUzsKK3N0cnVjdCBEMkQxX1BJWEVMX0ZPUk1BVDsKK3N0cnVjdCBEMkQxX1JFTkRF
Ul9UQVJHRVRfUFJPUEVSVElFUzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9h
dFBvaW50OwpAQCAtNDgsNiArNTMsMTQgQEAgY2xhc3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIERp
cmVjdDJEIHsKIAorR1VJRCB3aWNCaXRtYXBGb3JtYXQoKTsKK0QyRDFfUElYRUxfRk9STUFUIHBp
eGVsRm9ybWF0KCk7IC8vIEJHUkEKK0QyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0Rm9yU29m
dHdhcmVNYW5pcHVsYXRpb24oKTsgLy8gUkdCQQorRDJEMV9CSVRNQVBfUFJPUEVSVElFUyBiaXRt
YXBQcm9wZXJ0aWVzKCk7CitEMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUyByZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzKCk7CisKK3ZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEs
IHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBhcHBseVByZW11bHRpcGxpY2F0aW9uID0gZmFsc2UpOwor
CiBJbnRTaXplIGJpdG1hcFNpemUoSVdJQ0JpdG1hcFNvdXJjZSopOwogRmxvYXRTaXplIGJpdG1h
cFNpemUoSUQyRDFCaXRtYXAqKTsKIEZsb2F0UG9pbnQgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0
bWFwU291cmNlKik7CkBAIC01NywxMSArNzAsMTMgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVCaXRtYXAoSUQyRDFSZQogQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChjb25z
dCBJbnRTaXplJik7CiBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRJbWFnZVN1cmZh
Y2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgc3RyaWRlKTsK
IENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1h
cChJV0lDQml0bWFwKik7CitDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJp
dG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiwgSUQyRDFSZW5kZXJUYXJnZXQq
ID0gbnVsbHB0ciwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAxLjApOworQ09NUHRyPElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJU
YXJnZXQqID0gbnVsbHB0cik7CiBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJ
UmVuZGVyVGFyZ2V0KCk7CiAKIHZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihJ
RDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3VyY2VP
ZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0ID0gSW50U2l6
ZSgpKTsKIAotdm9pZCB3cml0ZUltYWdlVG9EaXNrQXNQTkcoSUQyRDFSZW5kZXJUYXJnZXQqLCBJ
RDJEMUJpdG1hcCosIExQQ1dTVFIgZmlsZU5hbWUpOwordm9pZCB3cml0ZURpYWdub3N0aWNQTkdU
b1BhdGgoSUQyRDFSZW5kZXJUYXJnZXQqLCBJRDJEMUJpdG1hcCosIExQQ1dTVFIgZmlsZU5hbWUp
OwogCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIkRpcmVj
dDJET3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgpAQCAt
NTQsOSArNTUsNyBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjCiBH
cmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFy
Z2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgLy8g
Q3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFV
TFQsCi0gICAgICAgIEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JN
LCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCksCi0gICAgICAgIDAsIDAsIEQyRDFfUkVO
REVSX1RBUkdFVF9VU0FHRV9OT05FLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVMVCk7CisgICAg
YXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMo
KTsKIAogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CkBAIC05OSw2ICs5OCw3IEBAIElEMkQx
UmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmEKICAgICAgICAgYXV0byBod25kUmVu
ZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKDo6
R2V0RGVza3RvcFdpbmRvdygpLCBEMkQxOjpTaXplVSgxMCwgMTApKTsKICAgICAgICAgSFJFU1VM
VCBociA9IHN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFy
Z2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCByZWludGVycHJldF9j
YXN0PElEMkQxSHduZFJlbmRlclRhcmdldCoqPigmZGVmYXVsdFJlbmRlclRhcmdldCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgZGVmYXVsdFJlbmRl
clRhcmdldC0+QWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJn
ZXQ7CkBAIC0xMTMsOCArMTEzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChIREMgaAogCiAgICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShiaXRtYXApOwogCi0gICAgYXV0
byB0YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAg
IHRhcmdldFByb3BlcnRpZXMucGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZP
Uk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpOworICAg
IGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KCk7CiAKICAgICBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwogICAg
IEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJn
ZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKQEAgLTIwOCw3ICsyMDcsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhCiAgICAgRGlyZWN0MkQ6OnJlc3RvcmUo
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShjb25zdCBDT01QdHI8SVdJQ0JpdG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYgaW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0MCw3ICsy
MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgRElC
UGl4ZWxEYXRhIHBpeGVsRGF0YShzb3VyY2VCaXRtYXAuZ2V0KCkpOwogICAgIEFTU0VSVChwaXhl
bERhdGEuYml0c1BlclBpeGVsKCkgPT0gMzIpOwogCi0gICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVz
ID0gRDJEMTo6Qml0bWFwUHJvcGVydGllcyhEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpKTsKKyAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwogCiAgICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQg
PSAqdGhpcy0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEwICsyOSwxMiBAQAogI2lmIFVTRShESVJFQ1QyRCkKIAogI2luY2x1ZGUgIkJpdG1hcElu
Zm8uaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KQEAgLTQyLDcgKzQ0LDQyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6
OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAv
KiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0CisvLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUg
Ynl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgordGVtcGxhdGUgPEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzaXJlZEZvcm1hdD4KK3ZvaWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0
IHVpbnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwg
dW5zaWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93
cykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgeworICAg
ICAgICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVk
IHRvIG9ubHkgY29weSB0aGUgYml0cyB0aGF0CisgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhl
IHJlY3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgorICAgICAgICBjb25zdCB1aW50MzJf
dCogc3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBz
cmNTdHJpZGUgKiB5KTsKKyAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVz
dFN0cmlkZSAqIHk7CisgICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2xDb3VudDsg
Kyt4KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlUG9zaXRpb24gPSB4ICogNDsKKyAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQaXhlbCA9IHNyY1JvdyArIHg7CisKKyAgICAgICAg
ICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IChQKVJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8g
c3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgUEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KKyAgICAgICAg
ICAgIHVpbnQzMl90IGFscGhhID0gKCpzcmNQaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OworICAg
ICAgICAgICAgdWludDMyX3QgcmVkID0gKCpzcmNQaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2Owor
ICAgICAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAoKnNyY1BpeGVsICYgMHgwMDAwRkYwMCkgPj4g
ODsKKyAgICAgICAgICAgIHVpbnQzMl90IGJsdWUgPSAoKnNyY1BpeGVsICYgMHgwMDAwMDBGRik7
CisKKyAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBo
YSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7
CisgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKKyAgICAg
ICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uXSAg
ICAgPSByZWQ7CisgICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDFdID0gZ3JlZW47
CisgICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDJdID0gYmx1ZTsKKyAgICAgICAg
ICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgM10gPSBhbHBoYTsKKyAgICAgICAgfQorICAgIH0K
K30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZs
b2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKIHsKICAgICBhdXRvIG51bUJ5dGVzID0g
cmVjdC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKICAgICBpZiAobnVtQnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQpAQCAtNTMsMjkgKzkwLDgxIEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXJEYXQKICAgICBpZiAoIXJlc3VsdERhdGEpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgV0lDUmVjdCByY0xvY2sgPSB7IDAsIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSB9OworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hp
bGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgogICAgIGNvbnRleHQtPmVuZERyYXco
KTsKIAotICAgIENPTVB0cjxJV0lDQml0bWFwTG9jaz4gYml0bWFwRGF0YUxvY2s7Ci0gICAgSFJF
U1VMVCBociA9IGJpdG1hcFNvdXJjZS0+TG9jaygmcmNMb2NrLCBXSUNCaXRtYXBMb2NrUmVhZCwg
JmJpdG1hcERhdGFMb2NrKTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBVSU5U
IGJ1ZmZlclNpemUgPSAwOwotICAgICAgICBXSUNJblByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxs
cHRyOwotICAgICAgICBociA9IGJpdG1hcERhdGFMb2NrLT5HZXREYXRhUG9pbnRlcigmYnVmZmVy
U2l6ZSwgJmRhdGFQdHIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAg
IG1lbWNweShyZXN1bHQtPmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVB0ciks
IG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICB9CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gZDJkRGV2aWNlQ29udGV4dDsKKyAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0
LT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250
ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZkMmREZXZpY2VDb250ZXh0KSk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHNp
emUud2lkdGgoKSAqIDQ7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7Cisg
ICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBEMkQxOjpCaXRt
YXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBf
T1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOworICAgIGhyID0g
ZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93
SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfUE9JTlRfMlUgdGFy
Z2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOworICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gcmVj
dDsKKyAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0bWFw
LmdldCgpLCAmZGF0YVJlY3QpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7CisgICAgaHIg
PSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKKyAg
ICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8g
U29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZy
b20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCisgICAgQ2hlY2tlZDxpbnQ+IGhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gcmVjdC53aWR0
aCgpOworCisgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51
bnNhZmVHZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVy
Um93SW5EYXRhLCByZXN1bHREYXRhKTsKKyAgICBlbHNlCisgICAgICAgIHN3aXp6bGVBbmRQcmVt
dWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRh
LmJpdHMsIGhlaWdodC51bnNhZmVHZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIG1hcHBlZERhdGEu
cGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCByZXN1bHREYXRhKTsKIAotICAgIC8vIE9uY2Ugd2Ug
YXJlIGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRhLCB1bmxvY2sgdGhlIGJpdG1hcAotICAgIGJpdG1h
cERhdGFMb2NrID0gbnVsbHB0cjsKKyAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKKyAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBv
ZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCit0ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQ+Cit2b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1
bnNpZ25lZCBieXRlQ291bnQpCit7CisgICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQg
LyA0OworICAgIGF1dG8qIHBpeGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihi
eXRlRGF0YSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkg
eworICAgICAgICB1aW50MzJfdCBwaXhlbCA9ICpwaXhlbERhdGE7CisgICAgICAgIHNpemVfdCBi
eXRlUG9zaXRpb24gPSBpICogNDsKKworICAgICAgICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAm
IDB4RkYwMDAwMDApID4+IDI0OworICAgICAgICB1aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAw
RkYwMDAwKSA+PiAxNjsKKyAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBG
RjAwKSA+PiA4OworICAgICAgICB1aW50MzJfdCBibHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7
CisKKyAgICAgICAgLy8gKFApUkdCQSAtPiBQQkdSQQorICAgICAgICBpZiAoc291cmNlRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICAg
ICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBo
YSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKnBpeGVsRGF0YSA9
IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOworICAgICAg
ICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXpl
LCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkK
IHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CkBAIC0xMTQsNTkgKzIwMyw5
OSBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50CiAgICAgaWYgKHdp
ZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGNh
bm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2
ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KICAgICBjb250ZXh0LT5lbmREcmF3KCk7CiAKLSAgICBX
SUNSZWN0IHJjTG9jayA9IHsgMCwgMCwgc291cmNlU2l6ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhl
aWdodCgpIH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcExvY2s+IGJpdG1hcERhdGFMb2NrOwot
ICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkxvY2soJnJjTG9jaywgV0lDQml0bWFwTG9j
a1dyaXRlLCAmYml0bWFwRGF0YUxvY2spOworICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5H
ZXRQaXhlbFNpemUoKTsKKyAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUu
d2lkdGgoKSk7CisgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwor
ICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAg
IEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gU29m
dHdhcmUgZ2VuZXJhdGVkIGJpdG1hcCBkYXRhIGlzIGluIFJHQkEuIFdlIG5lZWQgdG8gc3dpenps
ZSB0byBwcmVtdWx0aXBsaWVkIEJHUkEgdG8gYmUgY29tcGF0aWJsZQorICAgIC8vIHdpdGggdGhl
IEhXTkQvSERDIHJlbmRlciBiYWNraW5nIHdlIHVzZS4KKyAgICBpZiAoc291cmNlRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgaW5QbGFj
ZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2Uu
ZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOyAvLyBSR0JBIC0+IFBCR1JBCisgICAgZWxzZQorICAg
ICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
Pihzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQorCisg
ICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBSZW5kZXJUYXJnZXQ7Cisg
ICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50
ZXJmYWNlKF9fdXVpZG9mKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZiaXRtYXBSZW5kZXJUYXJnZXQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisKKyAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gc3dpenpsZWRCaXRtYXA7CisgICAgRDJEMV9C
SVRNQVBfUFJPUEVSVElFUyBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGll
cyhEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgaHIgPSBiaXRtYXBSZW5kZXJUYXJnZXQt
PkNyZWF0ZUJpdG1hcChzb3VyY2VTaXplLCBzb3VyY2UuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0
YSwgYml0bWFwUHJvcGVydGllcywgJnN3aXp6bGVkQml0bWFwKTsKICAgICBpZiAoIVNVQ0NFRURF
RChocikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVJTlQgc3RyaWRlID0gMDsKLSAgICBociA9
IGJpdG1hcERhdGFMb2NrLT5HZXRTdHJpZGUoJnN0cmlkZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47CisgICAgRDJEMV9QT0lOVF8yVSBkZXN0UG9pbnREMkQgPSBk
ZXN0UG9pbnQ7CisgICAgRDJEMV9SRUNUX1Ugc3JjUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgaHIg
PSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KCZzcmNSZWN0LCBzb3VyY2UuZGF0YSgpLCBieXRlc1Bl
clJvd0luRGF0YSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAgVUlOVCBidWZm
ZXJTaXplID0gMDsKLSAgICBXSUNJblByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxscHRyOwotICAg
IGhyID0gYml0bWFwRGF0YUxvY2stPkdldERhdGFQb2ludGVyKCZidWZmZXJTaXplLCAmZGF0YVB0
cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47CisgICAgY29udGV4
dC0+YmVnaW5EcmF3KCk7Cit9CiAKLSAgICBBU1NFUlQoYnVmZmVyU2l6ZSA9PSBzb3VyY2UuYnl0
ZUxlbmd0aCgpKTsKK0NPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRp
YmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CiAKLSAgICB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7CisgICAgaWYgKHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm4gYml0
bWFwOwogCi0gICAgQVNTRVJUKHNyY0J5dGVzUGVyUm93ID09IHN0cmlkZSk7CisgICAgYXV0byBz
aXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jv
d3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbngg
KiA0KS51bnNhZmVHZXQoKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
bnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OworICAgIGlmIChudW1CeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBy
b3cgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhfdD4oc3JjQnl0ZXNQZXJSb3cpOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgIHJvd1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgcm93W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIHJvd1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICByb3db
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHJvdy5nZXQoKSArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAg
ICB9CisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRo
ZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2lu
ZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAg
ICBjb250ZXh0LT5lbmREcmF3KCk7CiAKLSAgICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGRhdGFQdHIgKyB5ICogc3JjQnl0ZXNQZXJSb3cpLCByb3cuZ2V0KCksIHNyY0J5dGVz
UGVyUm93KTsKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250
ZXh0OworICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJnNvdXJjZURldmljZUNvbnRleHQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiAKLSAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICB9CisgICAg
aWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IC8vIE9uY2Ugd2UgYXJlIGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRhLCB1bmxvY2sgdGhlIGJpdG1h
cAotICAgIGJpdG1hcERhdGFMb2NrID0gbnVsbHB0cjsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAx
PiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJv
cGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BV
X1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxG
b3JtYXQoKSk7CisgICAgaHIgPSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0
bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJp
dG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29w
eUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgRDJEMV9NQVBQRURf
UkVDVCBtYXBwZWRTb3VyY2VEYXRhOworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAoRDJE
MV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMURldmlj
ZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7CisgICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1
ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmdGFyZ2V0RGV2aWNlQ29udGV4dCkpOworICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBo
ciA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVj
dDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VD
UFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgY29u
dGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgJ
KHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5
IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IAoraW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OworaW50ZXJmYWNlIElEMkQxQml0bWFwOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwpA
QCAtNDQsMTAgKzQ3LDEyIEBAIHN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewogICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4g
cGxhdGZvcm1Db250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQ7Ci0gICAgQ09NUHRyPElXSUNCaXRtYXA+IGJpdG1hcFNvdXJjZTsKKyAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGJpdG1hcDsKIAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25z
dDsKICAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQy
RDFSZW5kZXJUYXJnZXQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGQyZDFfMS5oPgogI2luY2x1ZGUg
PG1hdGguaD4KICNpbmNsdWRlIDx3aW5jb2RlYy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CkBAIC03Niw3ICs3Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXIKICAgICByZXR1cm4gYnVmZmVyOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Lypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4
dCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSwxNyArMTAxLDIzIEBAIElt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUKICAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEuZGF0YSA9IFZl
Y3RvcjxjaGFyPihudW1CeXRlcy51bnNhZmVHZXQoKSwgMCk7CisgICAgYXV0byogcGxhdGZvcm1D
b250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBw
bGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKIAotICAgIG1fZGF0YS5i
aXRtYXBTb3VyY2UgPSBEaXJlY3QyRDo6Y3JlYXRlRGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0
YShtX2RhdGEuZGF0YS5kYXRhKCksIG1fc2l6ZSwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdl
dCgpKTsKLSAgICBpZiAoIW1fZGF0YS5iaXRtYXBTb3VyY2UpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250
ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBEMkQxX1NJWkVfRiBkZXNpcmVkU2l6
ZSA9IEZsb2F0U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBEMkQxX1NJWkVfVSBwaXhlbFNpemUg
PSBJbnRTaXplKG1fbG9naWNhbFNpemUpOwogCi0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0
PiBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRt
YXAobV9kYXRhLmJpdG1hcFNvdXJjZS5nZXQoKSk7CisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0g
RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShtX2xvZ2ljYWxTaXplLCBy
ZW5kZXJUYXJnZXQpOwogICAgIGlmICghYml0bWFwQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gTm90ZTogVGhpcyBwbGFjZXMgdGhlIGJpdG1hcGNvbnRleHQgaW50byBhIGxvY2tl
ZCBzdGF0ZSBiZWNhdXNlIG9mIHRoZSBCZWdpbkRyYXcgY2FsbCBpbiB0aGUgY29uc3RydWN0b3Iu
CisgICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmbV9kYXRhLmJpdG1h
cCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2Rh
dGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4o
Yml0bWFwQ29udGV4dC5nZXQoKSk7CiAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIApAQCAtMTQwLDM0
ICsxNDYsMjcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKICAgICBj
b250ZXh0KCkuZmx1c2goKTsKIH0KIAotc3RhdGljIENPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJV0lDQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzKQorc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZO
ZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRt
YXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7CiAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwogCiAg
ICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVp
Z2h0KCkpKSkgewotICAgICAgICBEMkRfUE9JTlRfMlUgb3JpZ2luID0geyB9OwotICAgICAgICBX
SUNSZWN0IGNyb3BwZWREaW1lbnNpb25zID0geyAwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRz
LmhlaWdodCgpIH07Ci0KLSAgICAgICAgQ09NUHRyPElXSUNCaXRtYXBDbGlwcGVyPiBiaXRtYXBD
bGlwcGVyOwotICAgICAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcENsaXBwZXIoJmJpdG1hcENsaXBwZXIpOwot
ICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAgaHIgPSBiaXRtYXBDbGlw
cGVyLT5Jbml0aWFsaXplKGltYWdlLCAmY3JvcHBlZERpbWVuc2lvbnMpOwotICAgICAgICAgICAg
aWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAgICAgICAgICAgICBDT01QdHI8SVdJQ0JpdG1hcD4g
Y3JvcHBlZEJpdG1hcDsKLSAgICAgICAgICAgICAgICBociA9IEltYWdlRGVjb2RlckRpcmVjdDJE
OjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291cmNlKGltYWdlLCBX
SUNCaXRtYXBOb0NhY2hlLCAmY3JvcHBlZEJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgaWYgKFNV
Q0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwot
ICAgICAgICAgICAgfQorICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAg
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKKyAgICAgICAg
aWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6
OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGlt
YWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKICAgICAgICAgfQogICAgIH0KIAogICAg
IHJldHVybiBpbWFnZTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChDT01QdHI8SVdJQ0JpdG1hcD4mJiBpbWFnZSwgSW50U2l6
ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3Jl
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQorc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01Q
dHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxv
Z2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKICAgICBpZiAocmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3Bw
ZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6
ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2Fs
ZWQgdmVyc2lvbgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTgxLDEzICsxODAsMTQg
QEAgc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZgogCiBSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0gICAgQ09N
UHRyPElXSUNCaXRtYXA+IGltYWdlOworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CiAg
ICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQogICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpOwogICAgIGVsc2UKICAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2Fs
U2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNl
cnZlUmVzb2x1dGlvbik7CisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBU
YXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwogfQogCiBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCkBAIC0xOTcsNyArMTk3LDggQEAgUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9JbWFnZQogICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGlt
YWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKICAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7CiAKLSAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdU
Rk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0
b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIGF1dG8g
Yml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+
KGltYWdlQnVmZmVyLT5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgp
KTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRt
YXBUYXJnZXQsIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRl
cm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKIEJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkKQEAgLTIwNSwxNCArMjA2LDIwIEBAIEJhY2tpbmdTdG9yZUNv
cHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW0KICAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3Rv
cmU7CiB9CiAKLUNPTVB0cjxJV0lDQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQorQ09NUHRyPElE
MkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewogICAgIC8vIEZJWE1FOiBTZWUgaWYgd2Ug
Y2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBpbWFnZS4KICAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiB9CiAKLUNPTVB0cjxJV0lD
Qml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAorQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogeworICAgIGF1
dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGltYWdlOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1h
Z2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKwogICAgIC8vIEZJWE1FOiBtX2RhdGEu
ZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxl
YWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KICAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNr
aW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQogICAgICAgICBjb3B5QmVoYXZpb3Ig
PSBEb250Q29weUJhY2tpbmdTdG9yZTsKQEAgLTIyMSwxNSArMjI4LDEzIEBAIENPTVB0cjxJV0lD
Qml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGkKICAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZs
b3dlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEhSRVNVTFQgaHIgPSBTX09L
OwotICAgIENPTVB0cjxJV0lDQml0bWFwPiBpbWFnZTsKICAgICBpZiAoIWNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CiAg
ICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBociA9IEltYWdl
RGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9t
U291cmNlKG1fZGF0YS5iaXRtYXBTb3VyY2UuZ2V0KCksIFdJQ0JpdG1hcE5vQ2FjaGUsICZpbWFn
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgot
ICAgICAgICAgICAgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3Rv
cnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShtX2RhdGEuYml0bWFwU291cmNlLmdldCgpLCBX
SUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmaW1hZ2UpOworICAgICAgICAgICAgRDJEMV9SRUNUX1Ug
YmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplKTsKKyAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2lu
Z1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTI1NCwxNiArMjU5LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JgogICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwogCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUobV9k
YXRhLmJpdG1hcFNvdXJjZSk7Ci0KLSAgICAvLyBZb3UgY2FuJ3QgY29udmVydCBhIElXSUNCaXRt
YXAgdG8gYSBJRDJEMUJpdG1hcCB3aXRoIGFuIGFjdGl2ZSBHcmFwaGljc0NvbnRleHQgYXR0YWNo
ZWQgdG8gaXQuCi0gICAgbV9kYXRhLmNvbnRleHQtPmVuZERyYXcoKTsKKyAgICBhdXRvIGNvbXBh
dGlibGVCaXRtYXAgPSBtX2RhdGEuY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwogCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2
ZUltYWdlKG1fZGF0YS5iaXRtYXBTb3VyY2UsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1vZGUpOwotCi0gICAgbV9kYXRhLmNvbnRleHQtPmJl
Z2luRHJhdygpOworICAgIEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VT
aXplKGNvbXBhdGlibGVCaXRtYXApOworICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygp
KQorICAgICAgICByZXR1cm47CiAKLSAgICBkZXN0Q29udGV4dC5mbHVzaCgpOworICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXpl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
NDg5MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDEzIEBAIE5hdGl2
ZUltYWdlUHRyIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmUKICAgICBpZiAoIVNVQ0NFRURFRCho
cikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQ09NUHRyPElXSUNCaXRtYXA+IGJp
dG1hcDsKLSAgICBociA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21T
b3VyY2UoY29udmVydGVyLmdldCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmYml0bWFwKTsK
KyAgICBDT01QdHI8SVdJQ0JpdG1hcD4gd2ljQml0bWFwOworICAgIGhyID0gc3lzdGVtSW1hZ2lu
Z0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0ZXIuZ2V0KCksIFdJQ0Jp
dG1hcENhY2hlT25EZW1hbmQsICZ3aWNCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1h
cDsKKyAgICBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKHdp
Y0JpdG1hcC5nZXQoKSwgJmJpdG1hcCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjg2LDYgKzI5MSw3IEBAIHZvaWQgSW1hZ2VEZWNvZGVy
RGlyZWN0MkQ6OnNldERhdGEoU2hhcmUKIAogICAgIC8vIEltYWdlIHdhcyB2YWxpZC4KIH0KKwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDcgQEAgSW50U2l6ZSBuYXRp
dmVJbWFnZVNpemUoY29uc3QgTmF0aXZlSW1hZwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2UtPkdldFNpemUoJndpZHRoLCAmaGVp
Z2h0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gaW1hZ2UtPkdldFBp
eGVsU2l6ZSgpOwogfQogCiBib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1h
Z2VQdHImIGltYWdlKQpAQCAtNjgsMjggKzY0LDggQEAgYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhh
KGNvbnN0IE5hdGl2ZUltYQogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFdJQ1BpeGVsRm9ybWF0R1VJRCBwaXhlbEZvcm1hdEdVSUQgPSB7IH07Ci0gICAgSFJF
U1VMVCBociA9IGltYWdlLT5HZXRQaXhlbEZvcm1hdCgmcGl4ZWxGb3JtYXRHVUlEKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UganVzdCBjaGVjayB0aGUgcGl4ZWxGb3JtYXRHVUlEIGZvciByZWxldmFudCBJ
RCdzIHdlIHVzZT8KLQotICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50SW5m
bzsKLSAgICBociA9IGltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUNvbXBvbmVudEluZm8ocGl4ZWxG
b3JtYXRHVUlELCAmY29tcG9uZW50SW5mbyk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ1BpeGVsRm9ybWF0SW5mbz4gcGl4
ZWxGb3JtYXRJbmZvKFF1ZXJ5LCBjb21wb25lbnRJbmZvLmdldCgpKTsKLSAgICBpZiAoIXBpeGVs
Rm9ybWF0SW5mbykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVUlOVCBjaGFubmVsQ291
bnQgPSAwOwotICAgIGhyID0gcGl4ZWxGb3JtYXRJbmZvLT5HZXRDaGFubmVsQ291bnQoJmNoYW5u
ZWxDb3VudCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gY2hhbm5lbENvdW50ID4gMzsKKyAgICBEMkQxX1BJWEVMX0ZPUk1BVCBw
aXhlbEZvcm1hdCA9IGltYWdlLT5HZXRQaXhlbEZvcm1hdCgpOworICAgIHJldHVybiBwaXhlbEZv
cm1hdC5hbHBoYU1vZGUgIT0gRDJEMV9BTFBIQV9NT0RFX0lHTk9SRTsKIH0KIAogQ29sb3IgbmF0
aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdl
KQpAQCAtMTE2LDEzICs5Miw3IEBAIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUlt
YWdlUHQKIAogICAgIGZsb2F0IG9wYWNpdHkgPSAxLjBmOwogCi0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFy
Z2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAoaW1hZ2UuZ2V0KCksICZiaXRtYXApOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1D
b250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+RHJhd0JpdG1hcChiaXRtYXAuZ2V0KCksIGRlc3RSZWN0
LCBvcGFjaXR5LCBEMkQxX0JJVE1BUF9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJP
UiwgYWRqdXN0ZWRTcmNSZWN0KTsKLSAgICBjb250ZXh0LmZsdXNoKCk7CisgICAgcGxhdGZvcm1D
b250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+RHJhd0JpdG1hcChpbWFnZS5nZXQoKSwgZGVzdFJlY3Qs
IG9wYWNpdHksIEQyRDFfQklUTUFQX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9S
LCBhZGp1c3RlZFNyY1JlY3QpOwogfQogCiB2b2lkIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMyArNTksOCBAQCBJRDJEMUJp
dG1hcEJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9yCiAgICAgYXV0byYgcGF0dGVybkltYWdl
ID0gdGlsZUltYWdlKCk7CiAgICAgYXV0byBuYXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFnZS5uYXRp
dmVJbWFnZShudWxscHRyKTsKIAotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAg
IEhSRVNVTFQgaHIgPSBjb250ZXh0LnJlbmRlclRhcmdldCgpLT5DcmVhdGVCaXRtYXBGcm9tV2lj
Qml0bWFwKG5hdGl2ZUltYWdlLmdldCgpLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0
dGVybkJydXNoID0gbnVsbHB0cjsKLSAgICBociA9IGNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNy
ZWF0ZUJpdG1hcEJydXNoKGJpdG1hcC5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJy
dXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNoKG5hdGl2ZUltYWdlLmdldCgpLCAmYml0
bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKICAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgcmV0dXJuIHBhdHRlcm5CcnVzaDsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjQ4
OTEwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2lmIFVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJD
T01QdHIuaCIKICNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxLmg+CkBAIC0yMzUs
MTIgKzIzNiwxMSBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoY29uCiAg
ICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgQ09NUHRyPElXSUNCaXRtYXA+IG5hdGl2ZUltYWdlOwotICAgIEhSRVNVTFQgaHIg
PSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0
bWFwKHJlY3QoKS53aWR0aCgpLCByZWN0KCkuaGVpZ2h0KCksIEdVSURfV0lDUGl4ZWxGb3JtYXQz
MmJwcFBSR0JBLCBXSUNCaXRtYXBDYWNoZU9uTG9hZCwgJm5hdGl2ZUltYWdlKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVCh0YXJn
ZXRDb250ZXh0LT5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYXV0byogcmVuZGVyVGFyZ2V0
ID0gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpOwogCi0g
ICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBuYXRpdmVJbWFnZVRhcmdldCA9IERpcmVjdDJE
OjpjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKG5hdGl2ZUltYWdlLmdldCgpKTsKKyAg
ICBJbnRTaXplIGJpdG1hcFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Cisg
ICAgYXV0byBuYXRpdmVJbWFnZVRhcmdldCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXRPZlNpemUoYml0bWFwU2l6ZSwgcmVuZGVyVGFyZ2V0LCAxLjApOwogICAgIGlmICghbmF0
aXZlSW1hZ2VUYXJnZXQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDksNiArMjQ5
LDE3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZShjb24KIAogICAgIGRy
YXcobG9jYWxDb250ZXh0LCByZWN0KCksIHJlY3QoKSwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxl
bmRNb2RlOjpOb3JtYWwsIERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMsIEltYWdlT3JpZW50YXRp
b246Ok5vbmUpOwogCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRpdmVJbWFnZTsKKyAgICBI
UkVTVUxUIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkdldEJpdG1hcCgmbmF0aXZlSW1hZ2UpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZm5k
ZWYgX05ERUJVRworICAgIGF1dG8gbmF0aXZlSW1hZ2VTaXplID0gbmF0aXZlSW1hZ2UtPkdldFBp
eGVsU2l6ZSgpOworICAgIEFTU0VSVChuYXRpdmVJbWFnZVNpemUuaGVpZ2h0ID0gcmVjdCgpLnNp
emUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKG5hdGl2ZUltYWdlU2l6ZS53aWR0aCA9IHJlY3Qo
KS5zaXplKCkud2lkdGgoKSk7CisjZW5kaWYKKwogICAgIHJldHVybiBuYXRpdmVJbWFnZTsKIH0K
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTktMDgtMjQgIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZUV10gR28gYmFj
ayB0byBJRDJEMUJpdG1hcCBhcyBvdXIgTmF0aXZlSW1hZ2UgdHlwZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTIyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gQnVnIDIwMDA5MyBJIHN3aXRjaGVk
IHRoZSBPUyB0eXBlIG9mIE5hdGl2ZUltYWdlUHRyIGZyb20gSUQyRDFCaXRtYXAgdG8gSVdJQ0Jp
dG1hcC4KKyAgICAgICAgSG93ZXZlciwgdGhpcyB3YXMgYW4gaWxsLWFkdmlzZWQgYXBwcm9hY2gs
IGJlY2F1c2UgaXQgZHJhbWF0aWNhbGx5IGhhcm1lZCBwZXJmb3JtYW5jZSBkdWUKKyAgICAgICAg
dG8gdGhlIGhlYXZ5IHVzZSBvZiBzb2Z0d2FyZSByZW5kZXJpbmcuCisKKyAgICAgICAgSSBvcmln
aW5hbGx5IG1hZGUgdGhpcyBjaGFuZ2UgYmVjYXVzZSBJIHRob3VnaHQgdGhpcyB3YXMgdGhlIG9u
bHkgd2F5IHRvIGdldCB0byB0aGUgYmFja2luZworICAgICAgICBiaXRzIG9mIHRoZSBiaXRtYXBz
LCBidXQgaXQgdHVybnMgb3V0IHRoYXQgYSBtb3JlIHJlY2VudCBEaXJlY3QyRCBkYXRhIHR5cGUg
KElEMkQxQml0bWFwMSkKKyAgICAgICAgaGFzIHRoZSBhYmlsaXR5IHRvIG1hcCBpdHMgbWVtb3J5
IHRvIENQVS1hY2Nlc3NpYmxlIG1lbW9yeSwgYWxsb3dpbmcgc29mdHdhcmUgZmlsdGVyIGVmZmVj
dHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzd2l0Y2hlcyBiYWNrIHRvIHRoZSBJRDJEMUJpdGFw
IGRhdGEgdHlwZSwgYW5kIGhvb2tzIHVwIHRoZSBJRDJEMUJpdG1hcDEgZGF0YSB0eXBlCisgICAg
ICAgIHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgdGhlIGJpdG1hcHMgd2hlbiBz
b2Z0d2FyZSBmaWx0ZXIgZWZmZWN0cyBhcmUgdXNlZC4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoKKyAg
ICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcDoKKyAgICAgICAg
KiBVSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwOgorCiAyMDE5LTA4LTIwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFtGVFddIEZpeCBzY3JvbGxpbmcgaW4gbW9kZXJuIFdlYktpdCB2
aWV3cwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlzaW9u
IDI0ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkK
LWludGVyZmFjZSBJV0lDQml0bWFwOworaW50ZXJmYWNlIElEMkQxQml0bWFwOworaW50ZXJmYWNl
IElEMkQxUmVuZGVyVGFyZ2V0OwogCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNlbmRp
ZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIG9ubHkgc2FmZSB0
byB1c2Ugd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzaGFyZWFibGUgYml0
bWFwIHdvbid0IGNoYW5nZS4KICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVDYWly
b1N1cmZhY2UoKTsKICNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4g
Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKCk7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVE
aXJlY3QyRFN1cmZhY2UoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICAgICB2b2lkIHN5bmMoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAjZW5kaWYKIApAQCAtMTYyLDE0ICsxNjMsMTQgQEAgcHJp
dmF0ZToKICAgICBDb25maWd1cmF0aW9uIG1fY29uZmlndXJhdGlvbjsKIAogI2lmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gbV9iaXRtYXA7CisgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBtX2JpdG1hcDsKICNlbmRpZgogCiAgICAgLy8gSWYgdGhlIHNoYXJlYWJsZSBiaXRt
YXAgaXMgYmFja2VkIGJ5IHNoYXJlZCBtZW1vcnksIHRoaXMgcG9pbnRzIHRvIHRoZSBzaGFyZWQg
bWVtb3J5IG9iamVjdC4KICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsK
IAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUgYml0bWFwIGlzIGJhY2tlZCBieSBmYXN0TWFsbG9j
ZWQgbWVtb3J5LCB0aGlzIHBvaW50cyB0byB0aGUgZGF0YS4KLSAgICB2b2lkKiBtX2RhdGE7Cisg
ICAgdm9pZCogbV9kYXRhIHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRt
YXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODkxMCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CisjaW5jbHVkZSA8ZDJkMV8xLmg+CiAjaW5jbHVk
ZSA8d2luY29kZWMuaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAKQEAgLTQyLDExICs0
Myw5IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1z
dGF0aWMgY29uc3QgYXV0byBiaXRtYXBGb3JtYXQgPSBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQ
QkdSQTsKLQogc3RhdGljIHVuc2lnbmVkIHN0cmlkZUZvcldpZHRoKHVuc2lnbmVkIHdpZHRoKQog
ewotICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzUGVyUGl4ZWwgPSBEaXJlY3QyRDo6Yml0c1BlclBp
eGVsKGJpdG1hcEZvcm1hdCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERp
cmVjdDJEOjpiaXRzUGVyUGl4ZWwoRGlyZWN0MkQ6OndpY0JpdG1hcEZvcm1hdCgpKTsKICAgICBy
ZXR1cm4gYml0c1BlclBpeGVsICogd2lkdGggLyA4OwogfQogCkBAIC02OCw4ICs2NywxMiBAQCBz
dGF0aWMgaW5saW5lIENPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVTCiAKIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkKIHsKLSAgICBtX2JpdG1hcCA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZSgpOwotICAgIENPTVB0
cjxJRDJEMVJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVSZW5k
ZXJUYXJnZXRGcm9tV0lDQml0bWFwKG1fYml0bWFwLmdldCgpKTsKKyAgICBhdXRvIGJpdG1hcENv
bnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fc2l6ZSk7
CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJm1fYml0bWFwKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShi
aXRtYXBDb250ZXh0LmdldCgpKSk7CiB9CiAKQEAgLTgwLDEzICs4MywxMiBAQCB2b2lkIFNoYXJl
YWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJ
bnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgYXV0byBz
dXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKCk7CisgICAgYXV0byBzdXJmYWNlID0gY3Jl
YXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdl
dCgpKTsKIAogI2lmbmRlZiBfTkRFQlVHCi0gICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsKLSAg
ICBIUkVTVUxUIGhyID0gc3VyZmFjZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIEFT
U0VSVCh3aWR0aCA9PSBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGhlaWdodCA9PSBtX3Np
emUuaGVpZ2h0KCkpOworICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6
ZSgpOworICAgIEFTU0VSVChiaXRtYXBTaXplLndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKKyAg
ICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQgPT0gbV9zaXplLmhlaWdodCgpKTsKICNlbmRpZgog
CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNpemUoKSk7CkBAIC0x
MDAsMTUgKzEwMiwyMiBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250
CiAgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2Uu
Z2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24oKSwgc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCi1DT01QdHI8SVdJQ0JpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVE
aXJlY3QyRFN1cmZhY2UoKQorQ09NUHRyPElEMkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZURpcmVjdDJEU3VyZmFjZShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewot
ICAgIG1fYml0bWFwID0gY3JlYXRlU3VyZmFjZUZyb21EYXRhKGRhdGEoKSwgbV9zaXplKTsKLSAg
ICByZXR1cm4gbV9iaXRtYXA7CisgICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6
OmJpdG1hcFByb3BlcnRpZXMoKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwor
ICAgIHVpbnQzMl90IHN0cmlkZSA9IDQgKiBtX3NpemUud2lkdGgoKTsKKyAgICBIUkVTVUxUIGhy
ID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAobV9zaXplLCBkYXRhKCksIHN0cmlkZSwgJmJp
dG1hcFByb3BlcnRpZXMsICZiaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYml0bWFwOwogfQogCiBSZWZQdHI8SW1h
Z2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQogewotICAgIGF1dG8gc3VyZmFjZSA9
IGNyZWF0ZURpcmVjdDJEU3VyZmFjZSgpOworICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVj
dDJEU3VyZmFjZShHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7CiAgICAg
aWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTIxLDIwICsxMzAs
NTAgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6OnN5bmMoR3JhcGhpY3NDb250ZQogCiAgICAgZ3Jh
cGhpY3NDb250ZXh0LmVuZERyYXcoKTsKIAotICAgIFdJQ1JlY3QgcmNMb2NrID0geyAwLCAwLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpIH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1h
cExvY2s+IGJpdG1hcERhdGFMb2NrOwotICAgIEhSRVNVTFQgaHIgPSBtX2JpdG1hcC0+TG9jaygm
cmNMb2NrLCBXSUNCaXRtYXBMb2NrUmVhZCwgJmJpdG1hcERhdGFMb2NrKTsKLSAgICBpZiAoU1VD
Q0VFREVEKGhyKSkgewotICAgICAgICBVSU5UIGJ1ZmZlclNpemUgPSAwOwotICAgICAgICBXSUNJ
blByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxscHRyOwotICAgICAgICBociA9IGJpdG1hcERhdGFM
b2NrLT5HZXREYXRhUG9pbnRlcigmYnVmZmVyU2l6ZSwgJmRhdGFQdHIpOwotICAgICAgICBpZiAo
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIG1lbWNweShkYXRhKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGRhdGFQdHIpLCBidWZmZXJTaXplKTsKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VD
b250ZXh0PiBkMmREZXZpY2VDb250ZXh0OworICAgIEhSRVNVTFQgaHIgPSBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQyZERl
dmljZUNvbnRleHQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBzdHJpZGUgPSBzdHJpZGVGb3JXaWR0aChtX3NpemUud2lkdGgoKSk7CisKKyAgICBD
T01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElF
UzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQ
X09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJl
Y3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVC
aXRtYXAobV9zaXplLCBudWxscHRyLCBzdHJpZGUsIGJpdG1hcFByb3BlcnRpZXMsICZjcHVCaXRt
YXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIg
PSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxs
cHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIEQy
RDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKKyAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFf
TUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1hcHBlZERhdGEucGl0Y2ggPT0gc3RyaWRlKQor
ICAgICAgICBtZW1jcHkoZGF0YSgpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWREYXRh
LmJpdHMpLCBzdHJpZGUgKiBtX3NpemUuaGVpZ2h0KCkpOworICAgIGVsc2UgeworICAgICAgICAv
LyBTdHJpZGUgaXMgZGlmZmVyZW50LCBzbyBtdXN0IGRvIGEgcm93d2lzZSBjb3B5OgorICAgICAg
ICBDaGVja2VkPGludD4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOworICAgICAgICBDaGVja2Vk
PGludD4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKworICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gbWFwcGVkRGF0YS5iaXRzOworICAgICAgICB1aW50OF90KiByb3cgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKCkpOworCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihy
b3cgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIGJhc2V4KVswXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3JjUm93cyArPSBt
YXBwZWREYXRhLnBpdGNoOworICAgICAgICAgICAgcm93ICs9IHN0cmlkZTsKKyAgICAgICAgfQog
ICAgIH0KIAotICAgIC8vIE9uY2Ugd2UgYXJlIGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRhLCB1bmxv
Y2sgdGhlIGJpdG1hcAotICAgIGJpdG1hcERhdGFMb2NrID0gbnVsbHB0cjsKKyAgICBociA9IGNw
dUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDg5MTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MywyMCArNzMsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVV
cGRhdGUoU2hhCiAKICAgICBJbnRQb2ludCB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRh
dGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKIAotICAgIGF1dG8gdXBkYXRlV0lD
Qml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJlY3QyRFN1cmZhY2UoKTsKLQotICAgIEhSRVNVTFQg
aHIgPSBTX09LOwotI2lmbmRlZiBfTkRFQlVHCi0gICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsK
LSAgICBociA9IHVwZGF0ZVdJQ0JpdG1hcC0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAg
IEFTU0VSVCh3aWR0aCA9PSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKGhlaWdodCA9PSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkp
OwotI2VuZGlmCi0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1hcDsK
LSAgICBociA9IG1fYmFja2VuZC0+cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNC
aXRtYXAodXBkYXRlV0lDQml0bWFwLmdldCgpLCAmZGV2aWNlVXBkYXRlQml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGRldmljZVVwZGF0ZUJpdG1hcCA9IGJpdG1hcC0+Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKG1f
YmFja2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwogCiAjaWZuZGVmIF9OREVCVUcKICAgICBhdXRvIGRl
dmljZUJpdG1hcFNpemUgPSBkZXZpY2VVcGRhdGVCaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNyArNzU0LDggQEAgdm9p
ZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgIH0KIAogI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICBiaXRtYXAtPnN5bmMoKmdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKGdy
YXBoaWNzQ29udGV4dCkKKyAgICAgICAgYml0bWFwLT5zeW5jKCpncmFwaGljc0NvbnRleHQpOwog
I2VuZGlmCiAKICAgICAvLyBMYXlvdXQgY2FuIHRyaWdnZXIgbW9yZSBjYWxscyB0byBzZXROZWVk
c0Rpc3BsYXkgYW5kIHdlIGRvbid0IHdhbnQgdG8gcHJvY2VzcyB0aGVtCkluZGV4OiBTb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9u
c1dpbi5jbWFrZQkocmV2aXNpb24gMjQ4OTEwKQorKysgU291cmNlL2NtYWtlL09wdGlvbnNXaW4u
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDEzIEBAIGlmICgoTk9UIERFRklORUQg
RU5BQkxFX1dFQktJVF9MRUdBQ1kpIE8KICAgICBzZXQoRU5BQkxFX1dFQktJVCBPRkYpCiBlbmRp
ZiAoKQogCitpZiAoREVGSU5FRCBFTlZ7QXBwbGVBcHBsaWNhdGlvblN1cHBvcnRTREt9KQorICAg
IGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntBcHBsZUFwcGxpY2F0aW9uU3VwcG9ydFNES30vQXBw
bGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklFU19ESVIpCisgICAgc2V0KFdFQktJVF9MSUJSQVJJ
RVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiKQorICAgIGlu
Y2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElSfSkKKyAgICBz
ZXQoQVBQTEVfQlVJTEQgMSkKK2VuZGlmICgpCisKIFdFQktJVF9PUFRJT05fQkVHSU4oKQogCiBX
RUJLSVRfT1BUSU9OX0RFRklORShVU0VfVkVSU0lPTl9TVEFNUEVSICJUb2dnbGUgc3RhbXBpbmcg
dmVyc2lvbiBpbmZvcm1hdGlvbiBkdXJpbmcgYnVpbGQiIFBSSVZBVEUgT0ZGKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377255</attachid>
            <date>2019-08-26 11:25:18 -0700</date>
            <delta_ts>2019-08-26 12:09:04 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201122-20190826112516.patch</filename>
            <type>text/plain</type>
            <size>67561</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA4LTI2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEdvIGJhY2sgdG8g
SUQyRDFCaXRtYXAgYXMgb3VyIE5hdGl2ZUltYWdlIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTEyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgSW4gQnVnIDIwMDA5MyBJIHN3aXRjaGVkIHRo
ZSBPUyB0eXBlIG9mIE5hdGl2ZUltYWdlUHRyIGZyb20gSUQyRDFCaXRtYXAgdG8gSVdJQ0JpdG1h
cC4KKyAgICAgICAgSG93ZXZlciwgdGhpcyB3YXMgYW4gaWxsLWFkdmlzZWQgYXBwcm9hY2gsIGJl
Y2F1c2UgaXQgZHJhbWF0aWNhbGx5IGhhcm1lZCBwZXJmb3JtYW5jZSBkdWUKKyAgICAgICAgdG8g
dGhlIGhlYXZ5IHVzZSBvZiBzb2Z0d2FyZSByZW5kZXJpbmcuCisKKyAgICAgICAgSSBvcmlnaW5h
bGx5IG1hZGUgdGhpcyBjaGFuZ2UgYmVjYXVzZSBJIHRob3VnaHQgdGhpcyB3YXMgdGhlIG9ubHkg
d2F5IHRvIGdldCB0byB0aGUgYmFja2luZworICAgICAgICBiaXRzIG9mIHRoZSBiaXRtYXBzLCBi
dXQgaXQgdHVybnMgb3V0IHRoYXQgYSBtb3JlIHJlY2VudCBEaXJlY3QyRCBkYXRhIHR5cGUgKElE
MkQxQml0bWFwMSkKKyAgICAgICAgaGFzIHRoZSBhYmlsaXR5IHRvIG1hcCBpdHMgbWVtb3J5IHRv
IENQVS1hY2Nlc3NpYmxlIG1lbW9yeSwgYWxsb3dpbmcgc29mdHdhcmUgZmlsdGVyIGVmZmVjdHMu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBzd2l0Y2hlcyBiYWNrIHRvIHRoZSBJRDJEMUJpdGFwIGRh
dGEgdHlwZSwgYW5kIGhvb2tzIHVwIHRoZSBJRDJEMUJpdG1hcDEgZGF0YSB0eXBlCisgICAgICAg
IHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgdGhlIGJpdG1hcHMgd2hlbiBzb2Z0
d2FyZSBmaWx0ZXIgZWZmZWN0cyBhcmUgdXNlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1h
Z2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdM
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjp3cml0ZURpYWdub3N0aWNQTkdUb1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OndyaXRlSW1hZ2VUb0Rpc2tBc1BORyk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRp
dmVJbWFnZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
dGVybkRpcmVjdDJELmNwcDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgor
CiAyMDE5LTA4LTI2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOjpjb21wdXRlUmVhbEJvZHlTaXplIGlzIG5vdCB0aHJl
YWQtc2FmZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNw
cAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBJbWFnZTo6
ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQwogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKCFu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQorICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoJmN0eHQpKQogICAgICAgICByZXR1cm47CiAKICAgICBjdHh0LmRyYXdQYXR0ZXJu
KCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcCwgYmxlbmRNb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2
LDggKzE0Niw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwogICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRy
PElXSUNCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tp
bmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJV0lDQml0bWFwPiBzaW5rSW50b05h
dGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlKSBjb25zdDsKKyAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2
ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwogICAgIHZvaWQgZmx1c2hDb250
ZXh0KCkgY29uc3Q7CiAjZW5kaWYKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAjaWYgVVNFKENHKQogdHlw
ZWRlZiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoRElS
RUNUMkQpCi10eXBlZGVmIENPTVB0cjxJV0lDQml0bWFwPiBOYXRpdmVJbWFnZVB0cjsKK3R5cGVk
ZWYgQ09NUHRyPElEMkQxQml0bWFwPiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFVTRShDQUlSTykK
IHR5cGVkZWYgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBV
U0UoV0lOR0RJKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0JpdG1hcFRleHR1cmVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAJKHJldmlzaW9uIDI0OTEwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjggKzE2Myw3IEBAIHZvaWQgQml0bWFwVGV4
dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWEKICAgICBpbWFnZURhdGEgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpKTsK
ICAgICBieXRlc1BlckxpbmUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFj
ZSk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gV2UgY2FuJ3QgYWNjZXNzIHRoZSBiaXRt
YXAncyBtZW1vcnkgd2hlbiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgQmVnaW5EcmF3L0VuZERy
YXcKLSAgICBXSUNSZWN0IHJjTG9jayA9IHsgMCwgMCwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpIH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcExvY2s+IGJpdG1hcERh
dGE7Ci0gICAgSFJFU1VMVCBociA9IGZyYW1lSW1hZ2UtPkxvY2soJnJjTG9jaywgV0lDQml0bWFw
TG9ja1JlYWQsICZiaXRtYXBEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFVJTlQgc3RyaWRlID0gMDsKLSAgICBociA9IGJpdG1hcERhdGEtPkdl
dFN0cmlkZSgmc3RyaWRlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJ5dGVzUGVyTGluZSA9IHN0cmlkZTsKLQotICAgIFVJTlQgYnVmZmVyU2l6ZSA9
IDA7Ci0gICAgV0lDSW5Qcm9jUG9pbnRlciBkYXRhUHRyID0gbnVsbHB0cjsKLSAgICBociA9IGJp
dG1hcERhdGEtPkdldERhdGFQb2ludGVyKCZidWZmZXJTaXplLCAmZGF0YVB0cik7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbWFnZURhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihkYXRhUHRyKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogI2Vu
ZGlmCiAKICAgICB1cGRhdGVDb250ZW50cyhpbWFnZURhdGEsIHRhcmdldFJlY3QsIG9mZnNldCwg
Ynl0ZXNQZXJMaW5lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkx
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI4LDggKzUyOCw2IEBAIHZvaWQgZmlsbFBh
dGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKICAgICAgICAgRmxvYXRSZWN0IGNvbnRleHRS
ZWN0KEZsb2F0UG9pbnQoKSwgY29udGV4dC0+R2V0U2l6ZSgpKTsKICAgICAgICAgZHJhd1dpdGhv
dXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBjb250ZXh0UmVjdCwgZHJhd0Z1bmN0aW9uKTsKICAg
ICB9Ci0KLSAgICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwogfQogCiB2b2lkIGZpbGxQYXRoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQpAQCAt
NTU0LDggKzU1Miw2IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAK
ICAgICAgICAgRmxvYXRSZWN0IGNvbnRleHRSZWN0KEZsb2F0UG9pbnQoKSwgY29udGV4dC0+R2V0
U2l6ZSgpKTsKICAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBjb250
ZXh0UmVjdCwgZHJhd0Z1bmN0aW9uKTsKICAgICB9Ci0KLSAgICBmbHVzaChwbGF0Zm9ybUNvbnRl
eHQpOwogfQogCiB2b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgsIGNvbnN0
IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3Rh
dGUpCkBAIC01ODgsOCArNTg0LDYgQEAgdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJgogICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJvdW5kaW5n
UmVjdCwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7CiAgICAgZWxzZQogICAgICAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgZHJhd0Z1bmN0aW9u
KTsKLQotICAgIGZsdXNoKHBsYXRmb3JtQ29udGV4dCk7CiB9CiAKIHZvaWQgZHJhd1BhdGgoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwg
Y29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJikKQEAg
LTY0MCwxMyArNjM0LDYgQEAgdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJEMVJlbmRlclRh
cgogICAgIGNvbXBvc2l0b3ItPlNldElucHV0RWZmZWN0KDAsIHRyYW5zZm9ybUVmZmVjdC5nZXQo
KSk7CiAgICAgY29tcG9zaXRvci0+U2V0SW5wdXQoMSwgYml0bWFwKTsKIAotICAgIC8vIEZsaXAg
dGhlIGNvbnRleHQKLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdG07Ci0gICAgZGV2aWNlQ29udGV4
dC0+R2V0VHJhbnNmb3JtKCZjdG0pOwotICAgIGF1dG8gdHJhbnNsYXRlID0gRDJEMTo6TWF0cml4
M3gyRjo6VHJhbnNsYXRpb24oMC4wZiwgZGV2aWNlQ29udGV4dC0+R2V0U2l6ZSgpLmhlaWdodCk7
Ci0gICAgYXV0byBmbGlwID0gRDJEMTo6TWF0cml4M3gyRjo6U2NhbGUoRDJEMTo6U2l6ZUYoMS4w
ZiwgLTEuMGYpKTsKLSAgICBkZXZpY2VDb250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtICogZmxpcCAq
IHRyYW5zbGF0ZSk7Ci0KICAgICBkZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoY29tcG9zaXRvci5n
ZXQoKSwgRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSKTsKIH0KIApAQCAtNjU1LDEzICs2
NDIsMTEgQEAgdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlYwogICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAogICAgIC8vIFJl
bmRlciB0aGUgY3VycmVudCBnZW9tZXRyeSB0byBhIGJpdG1hcCBjb250ZXh0Ci0gICAgQ09NUHRy
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9
IGNvbnRleHQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQoJmJpdG1hcFRhcmdldCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgQ09NUHRyPElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoY29u
dGV4dCk7CiAKICAgICBiaXRtYXBUYXJnZXQtPkJlZ2luRHJhdygpOwogICAgIGRyYXdDb21tYW5k
cyhiaXRtYXBUYXJnZXQuZ2V0KCkpOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5FbmREcmF3KCk7
CisgICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+RW5kRHJhdygpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7
CkBAIC04MzYsMTMgKzgyMSwxMSBAQCB2b2lkIGRyYXdOYXRpdmVJbWFnZShQbGF0Zm9ybUNvbnRl
eHREaXJlCiAgICAgZWxzZQogICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRl
eHQsIGFkanVzdGVkRGVzdFJlY3QsIGRyYXdGdW5jdGlvbik7CiAKLSAgICBmbHVzaChwbGF0Zm9y
bUNvbnRleHQpOwotCiAgICAgaWYgKCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkKICAgICAgICAgY29u
dGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CiB9CiAKLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgSVdJQ0JpdG1hcCogdGlsZUltYWdlLCBj
b25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIHRpbGVJ
bWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogICAgIFBsYXRmb3JtQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwpAQCAtODY2LDggKzg0OSw2IEBAIHZv
aWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQKICAgICAvLyBJZiB3ZSBvbmx5
IHdhbnQgYSBzdWJzZXQgb2YgdGhlIGJpdG1hcCwgd2UgbmVlZCB0byBjcmVhdGUgYSBjcm9wcGVk
IGJpdG1hcCBpbWFnZS4gQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uLAogICAgIC8vIHRo
aXMgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJpdG1hcCBtZW1vcnkuCiAgICAgaWYgKHNpemUud2lk
dGgoKSA+IGRlc3RSZWN0LndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IGRlc3RSZWN0LmhlaWdo
dCgpKSB7Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgLyoKICAgICAgICAgZmxvYXQgZHBp
WCA9IDA7CiAgICAgICAgIGZsb2F0IGRwaVkgPSAwOwogICAgICAgICB0aWxlSW1hZ2UtPkdldERw
aSgmZHBpWCwgJmRwaVkpOwpAQCAtODgwLDE2ICs4NjEsMTAgQEAgdm9pZCBkcmF3UGF0dGVybihQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRAogICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCiAg
ICAgICAgICAgICAgICAgdGlsZUltYWdlID0gc3ViSW1hZ2U7CiAgICAgICAgIH0KLSAgICAgICAg
Ki8KICAgICB9CiAKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBIUkVTVUxU
IGhyID0gY29udGV4dC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcCh0aWxlSW1hZ2UsIG51bGxw
dHIsICZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IHBhdHRlcm5CcnVzaDsKLSAgICBociA9IGNv
bnRleHQtPkNyZWF0ZUJpdG1hcEJydXNoKGJpdG1hcC5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVy
dGllcywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7CisgICAgSFJFU1VMVCBociA9
IGNvbnRleHQtPkNyZWF0ZUJpdG1hcEJydXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNo
UHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7CiAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTEwOSw4ICsxMDg0LDggQEAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKFBsYXRm
b3JtQ29udAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpUcmFuc3BhcmVuY3lMYXllclN0
YXRlIHRyYW5zcGFyZW5jeUxheWVyOwogICAgIHRyYW5zcGFyZW5jeUxheWVyLm9wYWNpdHkgPSBv
cGFjaXR5OwogCi0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KS0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldCgmdHJhbnNwYXJlbmN5TGF5ZXIucmVuZGVy
VGFyZ2V0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB0cmFuc3Bh
cmVuY3lMYXllci5yZW5kZXJUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQocGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5z
cGFyZW5jeUxheWVyU3RhY2suYXBwZW5kKFdURk1vdmUodHJhbnNwYXJlbmN5TGF5ZXIpKTsKIAog
ICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgpLnJlbmRl
clRhcmdldC0+QmVnaW5EcmF3KCk7CkBAIC0xMjIyLDcgKzExOTcsMjAgQEAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihQbGF0Zm9ybUNvbnRleHREaQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
Kwordm9pZCBjb3B5Qml0cyhjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCByb3dDb3Vu
dCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQgZGVzdFN0
cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCit7CisgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHJvd0NvdW50OyArK3kpIHsKKyAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBvd2VyLW9m
LXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAorICAgICAg
ICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4K
KyAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7CisgICAgICAgIHVpbnQzMl90KiBk
ZXN0Um93ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgZGVzdFN0cmlk
ZSAqIHkpOworICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBjb2xDb3VudCk7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAyNDkxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KICNpbmNsdWRlIDxkMmQxLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEz
MCw3ICsxMzEsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiB2
b2lkIGRyYXdOYXRpdmVJbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElXSUNCaXRtYXAq
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiwg
SW50ZXJwb2xhdGlvblF1YWxpdHksIGZsb2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJRDJEMUJpdG1hcCosIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uLCBJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgZmxvYXQsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGRyYXdQ
YXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgSVdJQ0JpdG1hcCosIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIGRyYXdQYXR0ZXJu
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgQ09NUHRyPElEMkQxQml0bWFwPiYmLCBjb25zdCBJ
bnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUpOwogCiB2b2lkIGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChJ
RDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKTsKIHZvaWQgZHJhd1dpdGhTaGFkb3co
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwg
Y29uc3QgU2hhZG93U3RhdGUmLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJU
YXJnZXQqKT4mIGRyYXdDb21tYW5kcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI0OTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBDT01Q
dHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRJbWFnZVN1CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgQ09NUHRyPElXSUNCaXRtYXA+IHN1cmZhY2U7Ci0gICAgSFJFU1VMVCBociA9
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRt
YXBGcm9tTWVtb3J5KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR1VJRF9XSUNQaXhlbEZv
cm1hdDMyYnBwUEJHUkEsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8VUlOVD4obnVtQnl0ZXMudW5zYWZl
R2V0KCkpLCByZWludGVycHJldF9jYXN0PEJZVEUqPihkYXRhKSwgJnN1cmZhY2UpOworICAgIEhS
RVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+
Q3JlYXRlQml0bWFwRnJvbU1lbW9yeShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0Jp
dG1hcEZvcm1hdCgpLCBzdHJpZGUsIHN0YXRpY19jYXN0PFVJTlQ+KG51bUJ5dGVzLnVuc2FmZUdl
dCgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZzdXJmYWNlKTsKICAgICBpZiAo
IVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMjUsMzEgKzEy
NSw1OCBAQCBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRJbWFnZVN1CiBDT01QdHI8
SVdJQ0JpdG1hcD4gY3JlYXRlV2ljQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAg
Q09NUHRyPElXSUNCaXRtYXA+IHN1cmZhY2U7Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2Rl
ckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXAoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpLCBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQQkdSQSwgV0lDQml0
bWFwQ2FjaGVPbkRlbWFuZCwgJnN1cmZhY2UpOworICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgd2ljQml0bWFwRm9ybWF0KCksIFdJQ0JpdG1hcENhY2hlT25E
ZW1hbmQsICZzdXJmYWNlKTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKK0QyRDFfUElYRUxfRk9STUFU
IHBpeGVsRm9ybWF0Rm9yU29mdHdhcmVNYW5pcHVsYXRpb24oKQoreworICAgIHJldHVybiBEMkQx
OjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RF
X1BSRU1VTFRJUExJRUQpOworfQorCitEMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgpCit7
CisgICAgLy8gU2luY2Ugd2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIEhEQyBmcm9tIHRpbWUtdG8t
dGltZSwgd2UgYXJlIGZvcmNlZCB0byB1c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gYW5k
IEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVECisgICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9y
bWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQ
TElFRCk7Cit9CisKK0dVSUQgd2ljQml0bWFwRm9ybWF0KCkKK3sKKyAgICAvLyBUaGlzIGlzIHRo
ZSBXSUMgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STS4g
SXQgaXMgYWxzbyBzdXBwb3NlZGx5IHRoZSBtb3N0IGVmZmljaWVudCBpbi1tZW1vcnkKKyAgICAv
LyByZXByZXNlbnRhdGlvbiBmb3IgV0lDIGltYWdlcy4KKyAgICByZXR1cm4gR1VJRF9XSUNQaXhl
bEZvcm1hdDMyYnBwUEJHUkE7Cit9CisKK0QyRDFfQklUTUFQX1BST1BFUlRJRVMgYml0bWFwUHJv
cGVydGllcygpCit7CisgICAgcmV0dXJuIEQyRDE6OkJpdG1hcFByb3BlcnRpZXMocGl4ZWxGb3Jt
YXQoKSk7Cit9CisKIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgYXV0byBi
aXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllcyhEMkQxOjpQaXhlbEZvcm1h
dChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJ
RUQpKTsKKyAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBiaXRtYXBQcm9wZXJ0aWVz
KCk7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKICAgICBEMkQxX1NJWkVfVSBi
aXRtYXBTaXplID0gc2l6ZTsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVC
aXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwUHJvcGVydGllcywgJmJpdG1hcCk7CisgICAgSFJFU1VM
VCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcENyZWF0
ZVByb3BlcnRpZXMsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gYml0bWFwOwogfQogCitEMkQxX1JFTkRFUl9U
QVJHRVRfUFJPUEVSVElFUyByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCkKK3sKKyAgICByZXR1cm4g
RDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZB
VUxULAorICAgICAgICBwaXhlbEZvcm1hdCgpLCAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNB
R0VfR0RJX0NPTVBBVElCTEUsIEQyRDFfRkVBVFVSRV9MRVZFTF9ERUZBVUxUKTsKK30KKwogQ09N
UHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKElX
SUNCaXRtYXAqIGJpdG1hcFNvdXJjZSkKIHsKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFV
TFQsCi0gICAgICAgIEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JN
LCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCksCi0gICAgICAgIDAsIDAsIEQyRDFfUkVO
REVSX1RBUkdFVF9VU0FHRV9OT05FLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVMVCk7CisgICAg
YXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCiAgICAg
Q09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwogICAgIEhSRVNVTFQgaHIg
PSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlV2ljQml0bWFwUmVuZGVy
VGFyZ2V0KGJpdG1hcFNvdXJjZSwgJnRhcmdldFByb3BlcnRpZXMsICZiaXRtYXBDb250ZXh0KTsK
QEAgLTE2MSw5ICsxODgsNyBAQCBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVJlbmRl
clRhCiAKIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQo
KQogewotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3Bl
cnRpZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgRDJEMTo6UGl4
ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVN
VUxUSVBMSUVEKSwKLSAgICAgICAgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9D
T01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVMVCk7CisgICAgYXV0byB0YXJnZXRQ
cm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCiAgICAgQ09NUHRyPElEMkQx
RENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9w
ZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKQEAgLTE3Myw2ICsxOTgsMzYgQEAgQ09NUHRyPElEMkQx
RENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbgogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9
CiAKK0NPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFy
Z2V0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKCFyZW5kZXJU
YXJnZXQpCisgICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRt
YXBDb250ZXh0OworICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGli
bGVSZW5kZXJUYXJnZXQobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgRDJEMV9DT01QQVRJQkxF
X1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFUSUJMRSwgJmJpdG1hcENvbnRleHQpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gYml0bWFwQ29udGV4dDsKK30KKworQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7
CisgICAgVU5VU0VEX1BBUkFNKGRldmljZVNjYWxlRmFjdG9yKTsKKworICAgIGlmICghcmVuZGVy
VGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRS
ZW5kZXJUYXJnZXQoKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0
bWFwQ29udGV4dDsKKyAgICBhdXRvIGRlc2lyZWRTaXplID0gRDJEMTo6U2l6ZUYoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBEMkQxX1NJWkVfVSBwaXhlbFNpemUgPSBzaXplOwor
ICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJn
ZXQoJmRlc2lyZWRTaXplLCAmcGl4ZWxTaXplLCBudWxscHRyLCBEMkQxX0NPTVBBVElCTEVfUkVO
REVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmYml0bWFwQ29udGV4dCk7CisgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBiaXRtYXBDb250ZXh0OworfQorCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3Ro
ZXIoSUQyRDFCaXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0bywgY29uc3QgSW50U2l6ZSYgc291
cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0
KQogewogICAgIEludFNpemUgc291cmNlQml0bWFwU2l6ZSA9IGZyb20tPkdldFBpeGVsU2l6ZSgp
OwpAQCAtMTk5LDcgKzI1NCw3IEBAIHZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhl
cihJRDIKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9CiAKLXZvaWQgd3JpdGVJbWFnZVRv
RGlza0FzUE5HKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIElEMkQxQml0bWFwKiBi
aXRtYXAsIExQQ1dTVFIgZmlsZU5hbWUpCit2b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENX
U1RSIGZpbGVOYW1lKQogewogICAgIENPTVB0cjxJV0lDQml0bWFwRW5jb2Rlcj4gd2ljQml0bWFw
RW5jb2RlcjsKICAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUVuY29kZXIoR1VJRF9Db250YWluZXJGb3JtYXRQbmcsIG51
bGxwdHIsICZ3aWNCaXRtYXBFbmNvZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCShyZXZpc2lv
biAyNDkxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE2IEBACiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogCiBpbnRlcmZhY2UgSUQyRDFCaXRtYXA7CitpbnRlcmZhY2UgSUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSUQyRDFEQ1JlbmRlclRhcmdldDsKIGludGVy
ZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKIGludGVyZmFjZSBJV0lDQml0bWFwU291cmNlOwogaW50
ZXJmYWNlIElXSUNCaXRtYXA7CiAKK3N0cnVjdCBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTOworc3Ry
dWN0IEQyRDFfUElYRUxfRk9STUFUOworc3RydWN0IEQyRDFfUkVOREVSX1RBUkdFVF9QUk9QRVJU
SUVTOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC00OCw2
ICs1MywxNCBAQCBjbGFzcyBJbnRTaXplOwogCiBuYW1lc3BhY2UgRGlyZWN0MkQgewogCitHVUlE
IHdpY0JpdG1hcEZvcm1hdCgpOworRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKTsgLy8g
QkdSQQorRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JTb2Z0d2FyZU1hbmlwdWxhdGlv
bigpOyAvLyBSR0JBCitEMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKTsK
K0QyRDFfUkVOREVSX1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsK
Kwordm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgbGVuZ3Ro
LCBib29sIGFwcGx5UHJlbXVsdGlwbGljYXRpb24gPSBmYWxzZSk7CisKIEludFNpemUgYml0bWFw
U2l6ZShJV0lDQml0bWFwU291cmNlKik7CiBGbG9hdFNpemUgYml0bWFwU2l6ZShJRDJEMUJpdG1h
cCopOwogRmxvYXRQb2ludCBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2UqKTsKQEAg
LTU3LDExICs3MCwxMyBAQCBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJl
CiBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlV2ljQml0bWFwKGNvbnN0IEludFNpemUmKTsKIENP
TVB0cjxJV0lDQml0bWFwPiBjcmVhdGVEaXJlY3QyREltYWdlU3VyZmFjZVdpdGhEYXRhKHZvaWQq
IGRhdGEsIGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBzdHJpZGUpOwogQ09NUHRyPElEMkQxUmVu
ZGVyVGFyZ2V0PiBjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKElXSUNCaXRtYXAqKTsK
K0NPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0
T2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDJEMVJlbmRlclRhcmdldCogPSBudWxscHRyLCBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IDEuMCk7CitDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogPSBudWxscHRy
KTsKIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQoKTsK
IAogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9t
LCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQgPSBJbnRTaXplKCkpOwogCi12b2lkIHdy
aXRlSW1hZ2VUb0Rpc2tBc1BORyhJRDJEMVJlbmRlclRhcmdldCosIElEMkQxQml0bWFwKiwgTFBD
V1NUUiBmaWxlTmFtZSk7Cit2b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJRDJEMVJlbmRl
clRhcmdldCosIElEMkQxQml0bWFwKiwgTFBDV1NUUiBmaWxlTmFtZSk7CiAKIH0gLy8gbmFtZXNw
YWNlIERpcmVjdDJECiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2
aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiQ09NUHRyLmgiCiAjaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJl
Y29yZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCkBAIC01NCw5ICs1NSw3IEBAIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMKIEdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJn
ZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKIHsKICAgICAvLyBDcmVhdGUgYSBEQyByZW5k
ZXIgdGFyZ2V0LgotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdl
dFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgRDJE
MTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9E
RV9QUkVNVUxUSVBMSUVEKSwKLSAgICAgICAgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdF
X05PTkUsIEQyRDFfRkVBVFVSRV9MRVZFTF9ERUZBVUxUKTsKKyAgICBhdXRvIHRhcmdldFByb3Bl
cnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCiAgICAgSFJFU1VM
VCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRh
cmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKQEAgLTk5LDYgKzk4LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdy
YXBoaWNzQ29udGV4dDo6ZGVmYQogICAgICAgICBhdXRvIGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzID0gRDJEMTo6SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMoOjpHZXREZXNrdG9wV2luZG93
KCksIEQyRDE6OlNpemVVKDEwLCAxMCkpOwogICAgICAgICBIUkVTVUxUIGhyID0gc3lzdGVtRmFj
dG9yeSgpLT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAm
aHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFId25kUmVu
ZGVyVGFyZ2V0Kio+KCZkZWZhdWx0UmVuZGVyVGFyZ2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOworICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5BZGRSZWYo
KTsKICAgICB9CiAKICAgICByZXR1cm4gZGVmYXVsdFJlbmRlclRhcmdldDsKQEAgLTExMyw4ICsx
MTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoCiAKICAgICBE
SUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7CiAKLSAgICBhdXRvIHRhcmdldFByb3BlcnRp
ZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgdGFyZ2V0UHJvcGVydGll
cy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VO
T1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCk7CisgICAgYXV0byB0YXJnZXRQcm9w
ZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAogICAgIENPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7CiAgICAgSFJFU1VMVCBociA9IHN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsICZy
ZW5kZXJUYXJnZXQpOwpAQCAtMjA4LDcgKzIwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlUGxhdGZvcm1TdGEKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKGNvbnN0IENP
TVB0cjxJV0lDQml0bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZShjb25zdCBDT01QdHI8SUQyRDFCaXRtYXA+JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzIzOSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBESUJQaXhlbERhdGEgcGl4ZWxE
YXRhKHNvdXJjZUJpdG1hcC5nZXQoKSk7CiAgICAgQVNTRVJUKHBpeGVsRGF0YS5iaXRzUGVyUGl4
ZWwoKSA9PSAzMik7CiAKLSAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQ
cm9wZXJ0aWVzKEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBE
MkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCkpOworICAgIGF1dG8gYml0bWFwUHJvcGVydGll
cyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7CiAKICAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICp0aGlzLT5wbGF0Zm9y
bUNvbnRleHQoKTsKQEAgLTQzNSw4ICs0MzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2UmCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBpZiAoYXV0byB0aWxlSW1hZ2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgp
LCB0aWxlSW1hZ2UuZ2V0KCksIEludFNpemUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSk7CisgICAgaWYgKGF1dG8gdGlsZUltYWdlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUodGhpcykpCisgICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250
ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb21wb3NpdGVPcGVyYXRvciwg
YmxlbmRNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MTA1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw4ICsyOTEsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd05hCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNv
bnRleHQsIHN1cmZhY2UuZ2V0KCksIEludFNpemUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7CisgICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAo
YXV0byBzdXJmYWNlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkp
CisgICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybihtX3BsYXRmb3JtQ29udGV4dCwgV1RGTW92
ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQpAQCAtNDIxLDggKzQyMiw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG8KICAgICBpZiAoIWltYWdlKQog
ICAgICAgICByZXR1cm47CiAKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29u
dGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoY29udGV4dCkpCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEyIEBACiAjaWYgVVNFKERJUkVDVDJE
KQogCiAjaW5jbHVkZSAiQml0bWFwSW5mby5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgpAQCAtNDIs
NyArNDQsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJh
dGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKKy8vIFN3
aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCit0
ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgordm9pZCBzd2l6
emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291
bnQsIHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RT
dHJpZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQoreworICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkg
PCByb3dDb3VudDsgKyt5KSB7CisgICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1v
Zi10d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKKyAgICAg
ICAgLy8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIu
CisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOworICAgICAgICB1aW50OF90KiBk
ZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCB4ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQ
b3NpdGlvbiA9IHggKiA0OworICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1BpeGVsID0g
c3JjUm93ICsgeDsKKworICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgKFAp
UkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQQkdSQSB0byBi
ZSBjb21wYXRpYmxlLgorICAgICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNyY1BpeGVsICYg
MHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgICAgICAgICB1aW50MzJfdCByZWQgPSAoKnNyY1BpeGVs
ICYgMHgwMEZGMDAwMCkgPj4gMTY7CisgICAgICAgICAgICB1aW50MzJfdCBncmVlbiA9ICgqc3Jj
UGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OworICAgICAgICAgICAgdWludDMyX3QgYmx1ZSA9ICgq
c3JjUGl4ZWwgJiAweDAwMDAwMEZGKTsKKworICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBy
ZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVl
biAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAv
IGFscGhhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZGVzdFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJlZDsKKyAgICAgICAgICAgIGRlc3RSb3dbYnl0
ZVBvc2l0aW9uICsgMV0gPSBncmVlbjsKKyAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9u
ICsgMl0gPSBibHVlOworICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAzXSA9IGFs
cGhhOworICAgICAgICB9CisgICAgfQorfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNj
ZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKSBjb25zdAog
ewogICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0Owog
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCkBAIC01MywyOSArOTAsODEgQEAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdAogICAgIGlmICghcmVzdWx0RGF0
YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBXSUNSZWN0IHJjTG9jayA9IHsgMCwg
MCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgaWYgKCFiaXRtYXApCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJh
Y2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4u
CiAgICAgY29udGV4dC0+ZW5kRHJhdygpOwogCi0gICAgQ09NUHRyPElXSUNCaXRtYXBMb2NrPiBi
aXRtYXBEYXRhTG9jazsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwU291cmNlLT5Mb2NrKCZyY0xv
Y2ssIFdJQ0JpdG1hcExvY2tSZWFkLCAmYml0bWFwRGF0YUxvY2spOwotICAgIGlmIChTVUNDRUVE
RUQoaHIpKSB7Ci0gICAgICAgIFVJTlQgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgIFdJQ0luUHJv
Y1BvaW50ZXIgZGF0YVB0ciA9IG51bGxwdHI7Ci0gICAgICAgIGhyID0gYml0bWFwRGF0YUxvY2st
PkdldERhdGFQb2ludGVyKCZidWZmZXJTaXplLCAmZGF0YVB0cik7Ci0gICAgICAgIGlmIChTVUND
RUVERUQoaHIpKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCByZWludGVycHJl
dF9jYXN0PGNoYXIqPihkYXRhUHRyKSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIH0KKyAg
ICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OworICAgIEhSRVNV
TFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZShf
X3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQy
ZERldmljZUNvbnRleHQpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBhdXRv
IGJ5dGVzUGVyUm93SW5EYXRhID0gc2l6ZS53aWR0aCgpICogNDsKKworICAgIENPTVB0cjxJRDJE
MUJpdG1hcDE+IGNwdUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQ
cm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNf
Q1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4
ZWxGb3JtYXQoKSk7CisgICAgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoc2l6
ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0
bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgRDJEMV9QT0lOVF8yVSB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7CisgICAgRDJE
MV9SRUNUX1UgZGF0YVJlY3QgPSByZWN0OworICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJp
dG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfTUFQUEVEX1JF
Q1QgbWFwcGVkRGF0YTsKKyAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNf
UkVBRCwgJm1hcHBlZERhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVz
LiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJs
ZS4KKyAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKyAgICBDaGVja2Vk
PGludD4gd2lkdGggPSByZWN0LndpZHRoKCk7CisKKyAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIHN3aXp6bGVB
bmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KG1h
cHBlZERhdGEuYml0cywgaGVpZ2h0LnVuc2FmZUdldCgpLCB3aWR0aC51bnNhZmVHZXQoKSwgbWFw
cGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIHJlc3VsdERhdGEpOworICAgIGVsc2UK
KyAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgaGVpZ2h0LnVuc2FmZUdldCgpLCB3aWR0aC51
bnNhZmVHZXQoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIHJlc3VsdERh
dGEpOwogCi0gICAgLy8gT25jZSB3ZSBhcmUgZG9uZSBtb2RpZnlpbmcgdGhlIGRhdGEsIHVubG9j
ayB0aGUgYml0bWFwCi0gICAgYml0bWFwRGF0YUxvY2sgPSBudWxscHRyOworICAgIGhyID0gY3B1
Qml0bWFwLT5Vbm1hcCgpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIGNvbnRl
eHQtPmJlZ2luRHJhdygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gU3dpenpsZSB0
aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKK3RlbXBsYXRl
IDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdD4KK3ZvaWQgaW5QbGFjZVN3aXp6
bGUodWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKK3sKKyAgICBzaXplX3Qg
cGl4ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7CisgICAgYXV0byogcGl4ZWxEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGJ5dGVEYXRhKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IHBpeGVsID0gKnBpeGVs
RGF0YTsKKyAgICAgICAgc2l6ZV90IGJ5dGVQb3NpdGlvbiA9IGkgKiA0OworCisgICAgICAgIHVp
bnQzMl90IGFscGhhID0gKHBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgICAgIHVpbnQz
Ml90IHJlZCA9IChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OworICAgICAgICB1aW50MzJfdCBn
cmVlbiA9IChwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgICAgIHVpbnQzMl90IGJsdWUg
PSAocGl4ZWwgJiAweDAwMDAwMEZGKTsKKworICAgICAgICAvLyAoUClSR0JBIC0+IFBCR1JBCisg
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAg
ICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBn
cmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBibHVl
ID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAqcGl4ZWxEYXRhID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVl
biAgPDwgOCB8IGJsdWU7CisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwogdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkg
PiAwKTsKQEAgLTExNCw1OSArMjAzLDk5IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KGNvbnN0IFVpbnQKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElX
SUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgogICAgIGNvbnRl
eHQtPmVuZERyYXcoKTsKIAotICAgIFdJQ1JlY3QgcmNMb2NrID0geyAwLCAwLCBzb3VyY2VTaXpl
LndpZHRoKCksIHNvdXJjZVNpemUuaGVpZ2h0KCkgfTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFw
TG9jaz4gYml0bWFwRGF0YUxvY2s7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+TG9j
aygmcmNMb2NrLCBXSUNCaXRtYXBMb2NrV3JpdGUsICZiaXRtYXBEYXRhTG9jayk7CisgICAgYXV0
byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChwaXhlbFNp
emUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQocGl4ZWxTaXplLndp
ZHRoID49IHNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291
cmNlU2l6ZS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4g
UkdCQS4gV2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBjb21w
YXRpYmxlCisgICAgLy8gd2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNlLgor
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKQorICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQ+KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7IC8vIFJHQkEg
LT4gUEJHUkEKKyAgICBlbHNlCisgICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7
IC8vIFBSR0JBIC0+IFBCR1JBCisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFJlbmRlclRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5y
ZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJpdG1hcFJlbmRlclRhcmdldCkpOwor
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEg
PSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBzd2l6
emxlZEJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMg
PSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBo
ciA9IGJpdG1hcFJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKHNvdXJjZVNpemUsIHNvdXJjZS5k
YXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc3dpenpsZWRCaXRt
YXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVUlO
VCBzdHJpZGUgPSAwOwotICAgIGhyID0gYml0bWFwRGF0YUxvY2stPkdldFN0cmlkZSgmc3RyaWRl
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKKyAgICBEMkQxX1BP
SU5UXzJVIGRlc3RQb2ludEQyRCA9IGRlc3RQb2ludDsKKyAgICBEMkQxX1JFQ1RfVSBzcmNSZWN0
ID0gc291cmNlUmVjdDsKKyAgICBociA9IGJpdG1hcC0+Q29weUZyb21NZW1vcnkoJnNyY1JlY3Qs
IHNvdXJjZS5kYXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiAKLSAgICBVSU5UIGJ1ZmZlclNpemUgPSAwOwotICAgIFdJQ0luUHJvY1BvaW50ZXIg
ZGF0YVB0ciA9IG51bGxwdHI7Ci0gICAgaHIgPSBiaXRtYXBEYXRhTG9jay0+R2V0RGF0YVBvaW50
ZXIoJmJ1ZmZlclNpemUsICZkYXRhUHRyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybjsKKyAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKK30KIAotICAgIEFTU0VSVChi
dWZmZXJTaXplID09IHNvdXJjZS5ieXRlTGVuZ3RoKCkpOworQ09NUHRyPElEMkQxQml0bWFwPiBJ
bWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkKK3sKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuIGJpdG1h
cDsKIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgo
KTsKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSByZW5kZXJUYXJn
ZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CiAKLSAgICBBU1NFUlQoc3JjQnl0ZXNQZXJSb3cg
PT0gc3RyaWRlKTsKKyAgICBhdXRvIHNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwogCi0g
ICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOworICAgIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdo
dCAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIHJvdyA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90PihzcmNC
eXRlc1BlclJvdyk7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQo
KTsgKyt5KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1aW50
OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcm93W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICByb3dbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
cm93W2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgIHJvd1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocm93Lmdl
dCgpICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jv
d3MgKyBiYXNleClbMF07Ci0gICAgICAgIH0KKyAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3Vy
cmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCisgICAgLy8gV2UgY2Fubm90
IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRy
YXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAotICAgICAgICBt
ZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YVB0ciArIHkgKiBzcmNCeXRlc1BlclJv
dyksIHJvdy5nZXQoKSwgc3JjQnl0ZXNQZXJSb3cpOworICAgIENPTVB0cjxJRDJEMURldmljZUNv
bnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNl
Q29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc291cmNlRGV2aWNlQ29udGV4dCkp
OworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgIH0KKyAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgLy8gT25jZSB3ZSBhcmUgZG9uZSBtb2RpZnlpbmcgdGhl
IGRhdGEsIHVubG9jayB0aGUgYml0bWFwCi0gICAgYml0bWFwRGF0YUxvY2sgPSBudWxscHRyOwor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1B
UF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEo
RDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9U
X0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBociA9IHNvdXJjZURldmljZUNv
bnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRl
c1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmICghc291cmNlQ1BVQml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGhy
ID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCks
IG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7CisgICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VE
YXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKKyAg
ICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VD
b250ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0YXJnZXREZXZpY2VDb250ZXh0KSk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
b21wYXRpYmxlQml0bWFwOworICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVk
U291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGli
bGVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CiAKICAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKKworICAgIHJldHVybiBj
b21wYXRpYmxlQml0bWFwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogCitpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Citp
bnRlcmZhY2UgSUQyRDFCaXRtYXA7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ7CkBAIC00NCwxMCArNDcsMTIgQEAgc3RydWN0IEltYWdlQnVm
ZmVyRGF0YSB7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gYml0
bWFwU291cmNlOworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwogCiAgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0OwogICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwg
Y29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCopOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5
MTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVk
ZSA8ZDJkMV8xLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHdpbmNvZGVjLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUlt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9v
bCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29sJiBzdWNjZXNzKQogICAgIDogbV9sb2dpY2Fs
U2l6ZShzaXplKQogICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQogewpA
QCAtMTAxLDE3ICsxMDEsMjMgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZQogICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZGF0YS5kYXRhID0gVmVjdG9yPGNoYXI+KG51bUJ5dGVzLnVuc2FmZUdldCgpLCAw
KTsKKyAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOworICAgIGF1dG8qIHJlbmRlclRhcmdl
dCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBu
dWxscHRyOwogCi0gICAgbV9kYXRhLmJpdG1hcFNvdXJjZSA9IERpcmVjdDJEOjpjcmVhdGVEaXJl
Y3QyREltYWdlU3VyZmFjZVdpdGhEYXRhKG1fZGF0YS5kYXRhLmRhdGEoKSwgbV9zaXplLCBtX2Rh
dGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgIGlmICghbV9kYXRhLmJpdG1hcFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZW5k
ZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKworICAg
IEQyRDFfU0laRV9GIGRlc2lyZWRTaXplID0gRmxvYXRTaXplKG1fbG9naWNhbFNpemUpOworICAg
IEQyRDFfU0laRV9VIHBpeGVsU2l6ZSA9IEludFNpemUobV9sb2dpY2FsU2l6ZSk7CiAKLSAgICBD
T01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRl
UmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1hcChtX2RhdGEuYml0bWFwU291cmNlLmdldCgpKTsKKyAg
ICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0
T2ZTaXplKG1fbG9naWNhbFNpemUsIHJlbmRlclRhcmdldCk7CiAgICAgaWYgKCFiaXRtYXBDb250
ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBOb3RlOiBUaGlzIHBsYWNlcyB0aGUgYml0
bWFwY29udGV4dCBpbnRvIGEgbG9ja2VkIHN0YXRlIGJlY2F1c2Ugb2YgdGhlIEJlZ2luRHJhdyBj
YWxsIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+
R2V0Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpKTsKICAgICBtX2RhdGEu
Y29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihtX2RhdGEucGxhdGZvcm1Db250
ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpH
UFVNZW1vcnkpOwogCkBAIC0xNDAsMzQgKzE0NiwyNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpmbHVz
aENvbnRleHQoKSBjb25zdAogICAgIGNvbnRleHQoKS5mbHVzaCgpOwogfQogCi1zdGF0aWMgQ09N
UHRyPElXSUNCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElXSUNCaXRtYXAq
IGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCitzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFw
PiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCog
Yml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykK
IHsKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1h
Z2UpIDogRmxvYXRTaXplKCk7CiAKICAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVf
dD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRo
KCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIEQyRF9QT0lOVF8yVSBv
cmlnaW4gPSB7IH07Ci0gICAgICAgIFdJQ1JlY3QgY3JvcHBlZERpbWVuc2lvbnMgPSB7IDAsIDAs
IGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkgfTsKLQotICAgICAgICBDT01QdHI8SVdJ
Q0JpdG1hcENsaXBwZXI+IGJpdG1hcENsaXBwZXI7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBJbWFn
ZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwQ2xp
cHBlcigmYml0bWFwQ2xpcHBlcik7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0gICAg
ICAgICAgICBociA9IGJpdG1hcENsaXBwZXItPkluaXRpYWxpemUoaW1hZ2UsICZjcm9wcGVkRGlt
ZW5zaW9ucyk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAg
ICAgIENPTVB0cjxJV0lDQml0bWFwPiBjcm9wcGVkQml0bWFwOwotICAgICAgICAgICAgICAgIGhy
ID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJp
dG1hcEZyb21Tb3VyY2UoaW1hZ2UsIFdJQ0JpdG1hcE5vQ2FjaGUsICZjcm9wcGVkQml0bWFwKTsK
LSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0gICAgICAgICAgICB9CisgICAgICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFy
Z2V0LCBib3VuZHMpOworICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgeworICAgICAgICAgICAg
YXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSk7CisgICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29w
eUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgIGlm
IChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGF0aWMgUmVmUHRy
PEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKENPTVB0cjxJV0lD
Qml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6
ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCitzdGF0aWMgUmVmUHRyPEltYWdlPiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFy
Z2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBp
bnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQogewogICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAg
ICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBp
bWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6
IE5lZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCiAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CkBAIC0xODEsMTMgKzE4MCwxNCBAQCBzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRt
YXBJbWFnZUFmCiAKIFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKIHsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gaW1hZ2U7CisgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBpbWFnZTsKICAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCiAgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CiAgICAgZWxzZQogICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAKLSAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwg
aW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBt
X3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICBhdXRvIGJpdG1hcFRh
cmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6
ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKIFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKQEAgLTE5Nyw3ICsxOTcs
OCBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlCiAgICAgSW50U2l6
ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
OwogICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25T
Y2FsZTsKIAotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUs
IGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7CisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgc2lua0ludG9OYXRpdmVJbWFnZShXVEZN
b3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9y
ZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAogQmFja2lu
Z1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQpAQCAtMjA1LDE0ICsy
MDYsMjAgQEAgQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbQogICAgIHJl
dHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKIH0KIAotQ09NUHRyPElXSUNCaXRtYXA+IEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIpCitDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpzaW5rSW50b05h
dGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7CiAg
ICAgLy8gRklYTUU6IFNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIG9uLWhhcmR3YXJlIGltYWdlLgog
ICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKIH0KIAotQ09NUHRyPElXSUNCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0CitDT01QdHI8SUQyRDFCaXRt
YXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IpIGNvbnN0CiB7CisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsK
KworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgSFJFU1VMVCBociA9IGJpdG1h
cFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CiAgICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0
byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgogICAgIGlmIChj
b3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkp
CiAgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwpAQCAtMjIxLDE1
ICsyMjgsMTMgQEAgQ09NUHRyPElXSUNCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aQogICAg
IGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgSFJFU1VMVCBociA9IFNfT0s7Ci0gICAgQ09NUHRyPElXSUNCaXRtYXA+IGltYWdlOwog
ICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgc3dp
dGNoIChjb3B5QmVoYXZpb3IpIHsKICAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
LSAgICAgICAgICAgIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0
b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21Tb3VyY2UobV9kYXRhLmJpdG1hcFNvdXJjZS5nZXQoKSwg
V0lDQml0bWFwTm9DYWNoZSwgJmltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBociA9IEltYWdlRGVjb2RlckRpcmVj
dDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291cmNlKG1fZGF0
YS5iaXRtYXBTb3VyY2UuZ2V0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZpbWFnZSk7Cisg
ICAgICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3Qo
SW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOworICAgICAgICAgICAgaW1hZ2Ut
PkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0
YSgpLCAzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjU0LDE2ICsyNTksMTMgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmCiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7CiAgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7CiAKLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6
ZSA9IG5hdGl2ZUltYWdlU2l6ZShtX2RhdGEuYml0bWFwU291cmNlKTsKLQotICAgIC8vIFlvdSBj
YW4ndCBjb252ZXJ0IGEgSVdJQ0JpdG1hcCB0byBhIElEMkQxQml0bWFwIHdpdGggYW4gYWN0aXZl
IEdyYXBoaWNzQ29udGV4dCBhdHRhY2hlZCB0byBpdC4KLSAgICBtX2RhdGEuY29udGV4dC0+ZW5k
RHJhdygpOworICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21wYXRpYmxlQml0
bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7CiAKLSAg
ICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9kYXRhLmJpdG1hcFNvdXJjZSwgY3VycmVu
dEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIGJsZW5kTW9kZSk7Ci0K
LSAgICBtX2RhdGEuY29udGV4dC0+YmVnaW5EcmF3KCk7CisgICAgRmxvYXRTaXplIGN1cnJlbnRJ
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1
cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGRlc3RDb250
ZXh0LmZsdXNoKCk7CisgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVC
aXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBi
bGVuZE1vZGUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzOSw2ICsyMzksOSBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZURlY29kZXJEaXJlY3QyRDo6Y3Jl
CiAgICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisg
ICAgaWYgKCFtX3JlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBD
T01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKICAgICBIUkVTVUxUIGhyID0gbV9u
YXRpdmVEZWNvZGVyLT5HZXRGcmFtZSgwLCAmZnJhbWUpOwogICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKQEAgLTI1Myw4ICsyNTYsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyRGlyZWN0
MkQ6OmNyZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gYml0bWFwOwotICAgIGhyID0gc3lzdGVtSW1hZ2lu
Z0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0ZXIuZ2V0KCksIFdJQ0Jp
dG1hcENhY2hlT25EZW1hbmQsICZiaXRtYXApOworICAgIENPTVB0cjxJV0lDQml0bWFwPiB3aWNC
aXRtYXA7CisgICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9t
U291cmNlKGNvbnZlcnRlci5nZXQoKSwgV0lDQml0bWFwQ2FjaGVPbkRlbWFuZCwgJndpY0JpdG1h
cCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOworICAgIGhyID0gbV9yZW5kZXJUYXJnZXQt
PkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAod2ljQml0bWFwLmdldCgpLCAmYml0bWFwKTsKICAg
ICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yODYs
NiArMjk0LDcgQEAgdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6c2V0RGF0YShTaGFyZQogCiAg
ICAgLy8gSW1hZ2Ugd2FzIHZhbGlkLgogfQorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFn
ZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMSArNTYsNyBAQCBJbnRTaXplIG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFn
CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEhSRVNVTFQgaHIg
PSBpbWFnZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWln
aHQpOworICAgIHJldHVybiBpbWFnZS0+R2V0UGl4ZWxTaXplKCk7CiB9CiAKIGJvb2wgbmF0aXZl
SW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCkBAIC02OCwyOCArNjQs
OCBAQCBib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hCiAgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV0lDUGl4ZWxGb3JtYXRHVUlEIHBp
eGVsRm9ybWF0R1VJRCA9IHsgfTsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2UtPkdldFBpeGVsRm9y
bWF0KCZwaXhlbEZvcm1hdEdVSUQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBqdXN0IGNoZWNrIHRoZSBw
aXhlbEZvcm1hdEdVSUQgZm9yIHJlbGV2YW50IElEJ3Mgd2UgdXNlPwotCi0gICAgQ09NUHRyPElX
SUNDb21wb25lbnRJbmZvPiBjb21wb25lbnRJbmZvOwotICAgIGhyID0gaW1hZ2luZ0ZhY3Rvcnko
KS0+Q3JlYXRlQ29tcG9uZW50SW5mbyhwaXhlbEZvcm1hdEdVSUQsICZjb21wb25lbnRJbmZvKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENP
TVB0cjxJV0lDUGl4ZWxGb3JtYXRJbmZvPiBwaXhlbEZvcm1hdEluZm8oUXVlcnksIGNvbXBvbmVu
dEluZm8uZ2V0KCkpOwotICAgIGlmICghcGl4ZWxGb3JtYXRJbmZvKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBVSU5UIGNoYW5uZWxDb3VudCA9IDA7Ci0gICAgaHIgPSBwaXhlbEZvcm1h
dEluZm8tPkdldENoYW5uZWxDb3VudCgmY2hhbm5lbENvdW50KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjaGFubmVsQ291bnQg
PiAzOworICAgIEQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0ID0gaW1hZ2UtPkdldFBpeGVs
Rm9ybWF0KCk7CisgICAgcmV0dXJuIHBpeGVsRm9ybWF0LmFscGhhTW9kZSAhPSBEMkQxX0FMUEhB
X01PREVfSUdOT1JFOwogfQogCiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xv
cihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCkBAIC0xMTYsMTMgKzkyLDcgQEAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdAogCiAgICAgZmxvYXQgb3BhY2l0eSA9
IDEuMGY7CiAKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBIUkVTVUxUIGhy
ID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwRnJvbVdpY0Jp
dG1hcChpbWFnZS5nZXQoKSwgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5EcmF3
Qml0bWFwKGJpdG1hcC5nZXQoKSwgZGVzdFJlY3QsIG9wYWNpdHksIEQyRDFfQklUTUFQX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SLCBhZGp1c3RlZFNyY1JlY3QpOwotICAgIGNv
bnRleHQuZmx1c2goKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5EcmF3
Qml0bWFwKGltYWdlLmdldCgpLCBkZXN0UmVjdCwgb3BhY2l0eSwgRDJEMV9CSVRNQVBfSU5URVJQ
T0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1IsIGFkanVzdGVkU3JjUmVjdCk7CiB9CiAKIHZv
aWQgY2xlYXJOYXRpdmVJbWFnZVN1YmltYWdlcyhjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDEzICs1OSw4IEBAIElEMkQxQml0bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBs
YXRmb3IKICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSB0aWxlSW1hZ2UoKTsKICAgICBhdXRvIG5h
dGl2ZUltYWdlID0gcGF0dGVybkltYWdlLm5hdGl2ZUltYWdlKG51bGxwdHIpOwogCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAobmF0aXZlSW1hZ2UuZ2V0KCksICZi
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KICAgICBJRDJEMUJpdG1hcEJydXNoKiBwYXR0ZXJuQnJ1c2ggPSBudWxscHRyOwotICAgIGhy
ID0gY29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwQnJ1c2goYml0bWFwLmdldCgp
LCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNo
KTsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFw
QnJ1c2gobmF0aXZlSW1hZ2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFBy
b3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKICAg
ICByZXR1cm4gcGF0dGVybkJydXNoOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAyNDkxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAj
aWYgVVNFKERJUkVDVDJEKQogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIkRpcmVjdDJE
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VEZWNvZGVyRGlyZWN0MkQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
IgogI2luY2x1ZGUgPGQyZDEuaD4KQEAgLTIzNSwxMiArMjM2LDExIEBAIE5hdGl2ZUltYWdlUHRy
IFNWR0ltYWdlOjpuYXRpdmVJbWFnZShjb24KICAgICBpZiAoIW1fcGFnZSB8fCAhdGFyZ2V0Q29u
dGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4g
bmF0aXZlSW1hZ2U7Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0
ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXAocmVjdCgpLndpZHRoKCksIHJlY3QoKS5o
ZWlnaHQoKSwgR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwUFJHQkEsIFdJQ0JpdG1hcENhY2hlT25M
b2FkLCAmbmF0aXZlSW1hZ2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgQVNTRVJUKHRhcmdldENvbnRleHQtPmhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+
IG5hdGl2ZUltYWdlVGFyZ2V0ID0gRGlyZWN0MkQ6OmNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNC
aXRtYXAobmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIEludFNpemUgYml0bWFwU2l6ZShzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlVGFyZ2V0ID0g
RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShiaXRtYXBTaXplLCByZW5k
ZXJUYXJnZXQsIDEuMCk7CiAgICAgaWYgKCFuYXRpdmVJbWFnZVRhcmdldCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKQEAgLTI0OSw2ICsyNDksMTcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1h
Z2U6Om5hdGl2ZUltYWdlKGNvbgogCiAgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVj
dCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCwgRGVjb2RpbmdNb2Rl
OjpTeW5jaHJvbm91cywgSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSk7CiAKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IG5hdGl2ZUltYWdlOworICAgIEhSRVNVTFQgaHIgPSBuYXRpdmVJbWFnZVRhcmdl
dC0+R2V0Qml0bWFwKCZuYXRpdmVJbWFnZSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhdXRvIG5h
dGl2ZUltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NFUlQo
bmF0aXZlSW1hZ2VTaXplLmhlaWdodCA9IHJlY3QoKS5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFT
U0VSVChuYXRpdmVJbWFnZVNpemUud2lkdGggPSByZWN0KCkuc2l6ZSgpLndpZHRoKCkpOworI2Vu
ZGlmCisKICAgICByZXR1cm4gbmF0aXZlSW1hZ2U7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNDkxMDUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTA4LTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEdvIGJhY2sgdG8gSUQyRDFCaXRtYXAgYXMgb3Vy
IE5hdGl2ZUltYWdlIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMTEyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4u
CisKKyAgICAgICAgSW4gQnVnIDIwMDA5MyBJIHN3aXRjaGVkIHRoZSBPUyB0eXBlIG9mIE5hdGl2
ZUltYWdlUHRyIGZyb20gSUQyRDFCaXRtYXAgdG8gSVdJQ0JpdG1hcC4KKyAgICAgICAgSG93ZXZl
ciwgdGhpcyB3YXMgYW4gaWxsLWFkdmlzZWQgYXBwcm9hY2gsIGJlY2F1c2UgaXQgZHJhbWF0aWNh
bGx5IGhhcm1lZCBwZXJmb3JtYW5jZSBkdWUKKyAgICAgICAgdG8gdGhlIGhlYXZ5IHVzZSBvZiBz
b2Z0d2FyZSByZW5kZXJpbmcuCisKKyAgICAgICAgSSBvcmlnaW5hbGx5IG1hZGUgdGhpcyBjaGFu
Z2UgYmVjYXVzZSBJIHRob3VnaHQgdGhpcyB3YXMgdGhlIG9ubHkgd2F5IHRvIGdldCB0byB0aGUg
YmFja2luZworICAgICAgICBiaXRzIG9mIHRoZSBiaXRtYXBzLCBidXQgaXQgdHVybnMgb3V0IHRo
YXQgYSBtb3JlIHJlY2VudCBEaXJlY3QyRCBkYXRhIHR5cGUgKElEMkQxQml0bWFwMSkKKyAgICAg
ICAgaGFzIHRoZSBhYmlsaXR5IHRvIG1hcCBpdHMgbWVtb3J5IHRvIENQVS1hY2Nlc3NpYmxlIG1l
bW9yeSwgYWxsb3dpbmcgc29mdHdhcmUgZmlsdGVyIGVmZmVjdHMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBzd2l0Y2hlcyBiYWNrIHRvIHRoZSBJRDJEMUJpdGFwIGRhdGEgdHlwZSwgYW5kIGhvb2tz
IHVwIHRoZSBJRDJEMUJpdG1hcDEgZGF0YSB0eXBlCisgICAgICAgIHRvIGFjY2VzcyB0aGUgdW5k
ZXJseWluZyBtZW1vcnkgb2YgdGhlIGJpdG1hcHMgd2hlbiBzb2Z0d2FyZSBmaWx0ZXIgZWZmZWN0
cyBhcmUgdXNlZC4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oOgorICAgICAgICAqIFNoYXJlZC93aW4v
U2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vQmFj
a2luZ1N0b3JlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisKIDIw
MTktMDgtMjYgIFJ1c3NlbGwgRXBzdGVpbiAgPHJlcHN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ4OTYxLgpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlzaW9uIDI0OTEwNSkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBA
CiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJV0lDQml0bWFwOworaW50
ZXJmYWNlIElEMkQxQml0bWFwOworaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwogCiAjaW5j
bHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNlbmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2Ugd2hlbiB3ZSBrbm93IHRoYXQgdGhl
IGNvbnRlbnRzIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIHdvbid0IGNoYW5nZS4KICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVDYWlyb1N1cmZhY2UoKTsKICNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKCk7Cisg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQyRDFSZW5kZXJU
YXJnZXQqKTsKICAgICB2b2lkIHN5bmMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAjZW5k
aWYKIApAQCAtMTYyLDE0ICsxNjMsMTQgQEAgcHJpdmF0ZToKICAgICBDb25maWd1cmF0aW9uIG1f
Y29uZmlndXJhdGlvbjsKIAogI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SVdJQ0JpdG1h
cD4gbV9iaXRtYXA7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JpdG1hcDsKICNlbmRpZgog
CiAgICAgLy8gSWYgdGhlIHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2VkIGJ5IHNoYXJlZCBtZW1v
cnksIHRoaXMgcG9pbnRzIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdC4KICAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUg
Yml0bWFwIGlzIGJhY2tlZCBieSBmYXN0TWFsbG9jZWQgbWVtb3J5LCB0aGlzIHBvaW50cyB0byB0
aGUgZGF0YS4KLSAgICB2b2lkKiBtX2RhdGE7CisgICAgdm9pZCogbV9kYXRhIHsgbnVsbHB0ciB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0
OTEwNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+
CisjaW5jbHVkZSA8ZDJkMV8xLmg+CiAjaW5jbHVkZSA8d2luY29kZWMuaD4KICNpbmNsdWRlIDx3
dGYvUHJvY2Vzc0lELmg+CiAKQEAgLTQyLDExICs0Myw5IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgYXV0byBiaXRtYXBGb3Jt
YXQgPSBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQQkdSQTsKLQogc3RhdGljIHVuc2lnbmVkIHN0
cmlkZUZvcldpZHRoKHVuc2lnbmVkIHdpZHRoKQogewotICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRz
UGVyUGl4ZWwgPSBEaXJlY3QyRDo6Yml0c1BlclBpeGVsKGJpdG1hcEZvcm1hdCk7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERpcmVjdDJEOjpiaXRzUGVyUGl4ZWwoRGlyZWN0
MkQ6OndpY0JpdG1hcEZvcm1hdCgpKTsKICAgICByZXR1cm4gYml0c1BlclBpeGVsICogd2lkdGgg
LyA4OwogfQogCkBAIC02OCw4ICs2NywxMiBAQCBzdGF0aWMgaW5saW5lIENPTVB0cjxJV0lDQml0
bWFwPiBjcmVhdGVTCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKLSAgICBtX2JpdG1hcCA9IGNyZWF0
ZURpcmVjdDJEU3VyZmFjZSgpOwotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gYml0bWFw
Q29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKG1fYml0
bWFwLmdldCgpKTsKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0
bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fc2l6ZSk7CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0
LT5HZXRCaXRtYXAoJm1fYml0bWFwKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7CiB9CiAK
QEAgLTgwLDEzICs4MywxMiBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3ND
b250CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJm
YWNlKCk7CisgICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKIAogI2lmbmRlZiBfTkRFQlVHCi0g
ICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsKLSAgICBIUkVTVUxUIGhyID0gc3VyZmFjZS0+R2V0
U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCA9PSBtX3NpemUud2lkdGgo
KSk7Ci0gICAgQVNTRVJUKGhlaWdodCA9PSBtX3NpemUuaGVpZ2h0KCkpOworICAgIGF1dG8gYml0
bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChiaXRtYXBTaXpl
LndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQg
PT0gbV9zaXplLmhlaWdodCgpKTsKICNlbmRpZgogCiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRz
dFBvaW50LCBzcmNSZWN0LnNpemUoKSk7CkBAIC0xMDAsMTUgKzEwMiwyMiBAQCB2b2lkIFNoYXJl
YWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250CiAgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJ
bWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3RTY2FsZWQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb24oKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUu
YWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi1DT01QdHI8SVdJQ0Jp
dG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVEaXJlY3QyRFN1cmZhY2UoKQorQ09NUHRyPElE
MkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewotICAgIG1fYml0bWFwID0gY3JlYXRlU3VyZmFj
ZUZyb21EYXRhKGRhdGEoKSwgbV9zaXplKTsKLSAgICByZXR1cm4gbV9iaXRtYXA7CisgICAgYXV0
byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKTsKKworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOworICAgIHVpbnQzMl90IHN0cmlkZSA9IDQgKiBt
X3NpemUud2lkdGgoKTsKKyAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRt
YXAobV9zaXplLCBkYXRhKCksIHN0cmlkZSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gYml0bWFwOwogfQogCiBSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
SW1hZ2UoKQogewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZSgpOwor
ICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7CiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApAQCAtMTIxLDIwICsxMzAsNTAgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6
OnN5bmMoR3JhcGhpY3NDb250ZQogCiAgICAgZ3JhcGhpY3NDb250ZXh0LmVuZERyYXcoKTsKIAot
ICAgIFdJQ1JlY3QgcmNMb2NrID0geyAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpIH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcExvY2s+IGJpdG1hcERhdGFMb2NrOwotICAg
IEhSRVNVTFQgaHIgPSBtX2JpdG1hcC0+TG9jaygmcmNMb2NrLCBXSUNCaXRtYXBMb2NrUmVhZCwg
JmJpdG1hcERhdGFMb2NrKTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBVSU5U
IGJ1ZmZlclNpemUgPSAwOwotICAgICAgICBXSUNJblByb2NQb2ludGVyIGRhdGFQdHIgPSBudWxs
cHRyOwotICAgICAgICBociA9IGJpdG1hcERhdGFMb2NrLT5HZXREYXRhUG9pbnRlcigmYnVmZmVy
U2l6ZSwgJmRhdGFQdHIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAg
IG1lbWNweShkYXRhKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGFQdHIpLCBidWZmZXJT
aXplKTsKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0Owor
ICAgIEhSRVNVTFQgaHIgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRl
clRhcmdldCgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzdHJpZGUgPSBzdHJpZGVGb3JX
aWR0aChtX3NpemUud2lkdGgoKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRt
YXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6
OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJ
VE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAg
aHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9zaXplLCBudWxscHRyLCBzdHJp
ZGUsIGJpdG1hcFByb3BlcnRpZXMsICZjcHVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRCho
cikpCisgICAgICAgIHJldHVybjsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsK
KyAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERh
dGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1hcHBlZERhdGEucGl0Y2ggPT0gc3RyaWRlKQorICAgICAgICBtZW1jcHkoZGF0YSgpLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWREYXRhLmJpdHMpLCBzdHJpZGUgKiBtX3NpemUuaGVp
Z2h0KCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBTdHJpZGUgaXMgZGlmZmVyZW50LCBzbyBt
dXN0IGRvIGEgcm93d2lzZSBjb3B5OgorICAgICAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gbV9z
aXplLmhlaWdodCgpOworICAgICAgICBDaGVja2VkPGludD4gd2lkdGggPSBtX3NpemUud2lkdGgo
KTsKKworICAgICAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gbWFwcGVkRGF0YS5iaXRzOwor
ICAgICAgICB1aW50OF90KiByb3cgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKCkp
OworCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kp
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgeworICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyb3cgKyBiYXNleClbMF0gPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3JjUm93cyArPSBtYXBwZWREYXRhLnBpdGNoOworICAgICAgICAg
ICAgcm93ICs9IHN0cmlkZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIE9uY2Ugd2UgYXJl
IGRvbmUgbW9kaWZ5aW5nIHRoZSBkYXRhLCB1bmxvY2sgdGhlIGJpdG1hcAotICAgIGJpdG1hcERh
dGFMb2NrID0gbnVsbHB0cjsKKyAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNDkxMDUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFj
a2luZ1N0b3JlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywyMCArNzMsNyBAQCB2
b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhCiAKICAgICBJbnRQb2ludCB1
cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9j
YXRpb24oKTsKIAotICAgIGF1dG8gdXBkYXRlV0lDQml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJl
Y3QyRFN1cmZhY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBTX09LOwotI2lmbmRlZiBfTkRFQlVH
Ci0gICAgdW5zaWduZWQgd2lkdGgsIGhlaWdodDsKLSAgICBociA9IHVwZGF0ZVdJQ0JpdG1hcC0+
R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCA9PSB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGhlaWdodCA9PSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotI2VuZGlmCi0KLSAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1hcDsKLSAgICBociA9IG1fYmFja2VuZC0+cmVuZGVy
VGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAodXBkYXRlV0lDQml0bWFwLmdldCgp
LCAmZGV2aWNlVXBkYXRlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1hcCA9IGJp
dG1hcC0+Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKG1fYmFja2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwog
CiAjaWZuZGVmIF9OREVCVUcKICAgICBhdXRvIGRldmljZUJpdG1hcFNpemUgPSBkZXZpY2VVcGRh
dGVCaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2
aXNpb24gMjQ5MTA1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTQsNyArNzU0LDggQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3M6OmRpcwogICAgIH0KIAogI2lmIFVTRShESVJFQ1QyRCkKLSAgICBiaXRtYXAtPnN5bmMo
KmdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgYml0
bWFwLT5zeW5jKCpncmFwaGljc0NvbnRleHQpOwogI2VuZGlmCiAKICAgICAvLyBMYXlvdXQgY2Fu
IHRyaWdnZXIgbW9yZSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHdlIGRvbid0IHdhbnQg
dG8gcHJvY2VzcyB0aGVtCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>