<?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>137644</bug_id>
          
          <creation_ts>2014-10-11 21:11:33 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for Filter / FilterOperation subclasses</short_desc>
          <delta_ts>2014-10-13 11:28:32 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137056</dependson>
          <blocked>137657</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041182</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-11 21:11:33 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for Filter / FilterOperation subclasses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041186</commentid>
    <comment_count>1</comment_count>
      <attachid>239697</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-11 21:40:10 -0700</bug_when>
    <thetext>Created attachment 239697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041223</commentid>
    <comment_count>2</comment_count>
      <attachid>239708</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-12 14:12:18 -0700</bug_when>
    <thetext>Created attachment 239708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041244</commentid>
    <comment_count>3</comment_count>
      <attachid>239708</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2014-10-13 01:03:31 -0700</bug_when>
    <thetext>Comment on attachment 239708
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:488
&gt; +        float amount = filterOperation ? downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation)-&gt;amount() : 0;

I guess here you could also use downcast&lt;BasicComponentTransferFilterOperation&gt;(*filterOperation).amount() like above. Same below.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:82
&gt;  {

I think it is worth to change o -&gt; operation here too.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:166
&gt;  {

Same here,i would change o -&gt; operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041285</commentid>
    <comment_count>4</comment_count>
      <attachid>239708</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-13 09:32:36 -0700</bug_when>
    <thetext>Comment on attachment 239708
Patch

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

Pleas consider all my comment optional things. Not sure they are all good ideas

One thing all these switch statements point to is the C++ anti-pattern where we don’t make sufficient use of polymorphism. Maybe this is more efficient?

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:82
&gt; +            const DropShadowFilterOperation&amp; dropShadowOperation = downcast&lt;DropShadowFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:96
&gt; +            const BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:161
&gt; +            const BlurFilterOperation&amp; blurOperation = downcast&lt;BlurFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:170
&gt; +            const BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:180
&gt; +            const BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:201
&gt; +            const BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:210
&gt; +            const BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:220
&gt; +            const BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:251
&gt; +            const BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:274
&gt; +            const BlurFilterOperation&amp; blurOperation = downcast&lt;BlurFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt;&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:488
&gt;&gt; +        float amount = filterOperation ? downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation)-&gt;amount() : 0;
&gt; 
&gt; I guess here you could also use downcast&lt;BasicComponentTransferFilterOperation&gt;(*filterOperation).amount() like above. Same below.

Is that right? What guarantees filterOperation is non-null?

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:76
&gt; +    const BasicColorMatrixFilterOperation* fromOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(from);

I suggest auto* or const auto* here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:85
&gt; +    const BasicColorMatrixFilterOperation&amp; other = downcast&lt;BasicColorMatrixFilterOperation&gt;(o);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:112
&gt; +    const BasicComponentTransferFilterOperation* fromOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(from);

I suggest auto* or const auto* here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:121
&gt; +    const BasicComponentTransferFilterOperation&amp; other = downcast&lt;BasicComponentTransferFilterOperation&gt;(operation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:160
&gt; +    const BlurFilterOperation* fromOperation = downcast&lt;BlurFilterOperation&gt;(from);

I suggest auto* or const auto* here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:169
&gt; +    const DropShadowFilterOperation&amp; other = downcast&lt;DropShadowFilterOperation&gt;(o);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:184
&gt; +    const DropShadowFilterOperation* fromOperation = downcast&lt;DropShadowFilterOperation&gt;(from);

I suggest auto* or const auto* here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperations.cpp:108
&gt;      for (size_t i = 0; i &lt; m_operations.size(); ++i) {

Can this just use a modern for loop?

&gt; Source/WebCore/platform/graphics/filters/FilterOperations.cpp:112
&gt; +            const BlurFilterOperation&amp; blurOperation = downcast&lt;BlurFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/platform/graphics/filters/FilterOperations.cpp:120
&gt; +            const DropShadowFilterOperation&amp; dropShadowOperation = downcast&lt;DropShadowFilterOperation&gt;(filterOperation);

I suggest auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:144
&gt;      for (size_t i = 0; i &lt; operations.operations().size(); ++i) {

Can this just use a modern for loop?

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:149
&gt; +            ReferenceFilterOperation&amp; referenceOperation = downcast&lt;ReferenceFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:183
&gt; +            BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:211
&gt; +            BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:218
&gt; +            BasicColorMatrixFilterOperation&amp; colorMatrixOperation = downcast&lt;BasicColorMatrixFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:225
&gt; +            BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:238
&gt; +            BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:251
&gt; +            BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:262
&gt; +            BasicComponentTransferFilterOperation&amp; componentTransferOperation = downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:274
&gt; +            BlurFilterOperation&amp; blurOperation = downcast&lt;BlurFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:280
&gt; +            DropShadowFilterOperation&amp; dropShadowOperation = downcast&lt;DropShadowFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/RenderLayerFilterInfo.cpp:101
&gt;      for (size_t i = 0, size = operations.size(); i &lt; size; ++i) {

Could we just use a modern for loop here?

&gt; Source/WebCore/rendering/RenderLayerFilterInfo.cpp:105
&gt; +        ReferenceFilterOperation&amp; referenceFilterOperation = downcast&lt;ReferenceFilterOperation&gt;(filterOperation);

I suggest auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebCore/rendering/RenderLayerFilterInfo.cpp:106
&gt; +        CachedSVGDocumentReference* documentReference = referenceFilterOperation.cachedSVGDocumentReference();

I suggest auto* here since the type here isn’t all that interesting; we just use this immediately on the next line.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp:73
&gt;  FloatRect RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(FilterEffect* effect)

Should take a FilterEffect&amp;.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp:75
&gt; +    SVGFilter&amp; filter = downcast&lt;SVGFilter&gt;(effect-&gt;filter());

Could consider auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:66
&gt;      for (size_t i = 0; i &lt; filters.size(); ++i) {

Maybe a modern for loop?

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:87
&gt; +            const DropShadowFilterOperation&amp; shadow = downcast&lt;DropShadowFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:697
&gt; +        const BasicColorMatrixFilterOperation&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:702
&gt; +        const BasicColorMatrixFilterOperation&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:712
&gt; +        const BasicColorMatrixFilterOperation&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:717
&gt; +        const BasicComponentTransferFilterOperation&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:722
&gt; +        const BasicComponentTransferFilterOperation&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:727
&gt; +        const BasicComponentTransferFilterOperation&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:732
&gt; +        const BasicComponentTransferFilterOperation&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:737
&gt; +        const BlurFilterOperation&amp; blurFilter = downcast&lt;BlurFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:742
&gt; +        const DropShadowFilterOperation&amp; dropShadowFilter = downcast&lt;DropShadowFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm:751
&gt; +        const DefaultFilterOperation&amp; defaultFilter = downcast&lt;DefaultFilterOperation&gt;(filter);

Could consider auto&amp; or const auto&amp; here since we don’t need to repeat the class name twice on the same line of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041290</commentid>
    <comment_count>5</comment_count>
      <attachid>239708</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-13 10:05:21 -0700</bug_when>
    <thetext>Comment on attachment 239708
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm:488
&gt;&gt;&gt; +        float amount = filterOperation ? downcast&lt;BasicComponentTransferFilterOperation&gt;(filterOperation)-&gt;amount() : 0;
&gt;&gt; 
&gt;&gt; I guess here you could also use downcast&lt;BasicComponentTransferFilterOperation&gt;(*filterOperation).amount() like above. Same below.
&gt; 
&gt; Is that right? What guarantees filterOperation is non-null?

There is a null check on the same line :)

&gt;&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:66
&gt;&gt;      for (size_t i = 0; i &lt; filters.size(); ++i) {
&gt; 
&gt; Maybe a modern for loop?

I actually thought about that but FilterOperations does not have begin() / end() defined. We could add those methods in order to user modern loops but this seemed a bit out of scope for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041293</commentid>
    <comment_count>6</comment_count>
      <attachid>239730</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-13 10:19:07 -0700</bug_when>
    <thetext>Created attachment 239730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041314</commentid>
    <comment_count>7</comment_count>
      <attachid>239730</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-13 11:28:27 -0700</bug_when>
    <thetext>Comment on attachment 239730
Patch

Clearing flags on attachment: 239730

Committed r174654: &lt;http://trac.webkit.org/changeset/174654&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041316</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-13 11:28:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239697</attachid>
            <date>2014-10-11 21:40:10 -0700</date>
            <delta_ts>2014-10-12 14:12:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137644-20141011214013.patch</filename>
            <type>text/plain</type>
            <size>75312</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2VjZDRjZjljZWQxYzU1
MDEyMGZjZDAwYTY5NGExYTZhMjgzM2Y3MC4uYWJlYTljOGQzNmIxYmYxMTU2Yzk2MmViMDk3MmU0
MTI1YmEzMzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE0LTEwLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgRmlsdGVyIC8gRmlsdGVyT3BlcmF0aW9uIHN1YmNsYXNzZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY0NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJhdGlvbiBzdWJjbGFzc2VzLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1D
QUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtQ0FG
aWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRGaWx0
ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Om91dHNldHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3RSZW5kZXJlcjo6YnVpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
ckluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVw
ZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6Cisg
ICAgICAgIChpc1R5cGUpOgorCiAyMDE0LTEwLTExICBLd2FuZ0h5dWsgS2ltICA8aHl1a2kua2lt
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBXZWJQIHN1cHBvcnQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggOWJmZDFhZGI5YWZiYWQ0NmM4NTlkMjU1ODJjYTk1NTUzZGY4YWZlMC4uMTM2Njll
YjhmNzIzNGZlNTQ2OTBhMjA2NWU2ZjIwMTFjMjBmYjM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTEwLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAg
ICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRmlsdGVyIC8gRmlsdGVyT3BlcmF0
aW9uIHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNzY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJh
dGlvbiBzdWJjbGFzc2VzLgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxGaWx0ZXJPcGVyYXRpb24+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorCiAyMDE0LTEwLTEwICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4o
KSBmb3IgSW1hZ2Ugc3ViY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCBmOWM0YmE1YTNkMDVjMDRkMWQ0ODJkZDNm
NjRlNzYxMGRmNzhiM2RjLi42Yjc4MzZiYjkzNGRhNDcyZGI4YzlmMzBlNzZiY2Q1NTRlYjhkOTkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcApAQCAtODkzLDczICs4OTMsNzMgQEAgUGFzc1JlZjxDU1NWYWx1ZT4gQ29tcHV0ZWRT
dHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWwKIAog
ICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGZpbHRlck9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWx0ZXJPcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmls
dGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgc3dp
dGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBGaWx0ZXJPcGVyYXRpb24m
IGZpbHRlck9wZXJhdGlvbiA9ICoqaXQ7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9u
LnR5cGUoKSkgewogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0g
ICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qIHJlZmVyZW5jZU9wZXJhdGlvbiA9
IHRvUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0
PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAg
IGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZh
bHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0aW9u
LT51cmwoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKKyAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0
aW9uLnVybCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTog
ewotICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRy
aXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNv
bG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAg
ICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRyaXhPcGVyYXRp
b24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsK
KyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3Jl
YXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNv
bG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRyaXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
ICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29sb3JN
YXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykpOwor
ICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENT
U0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTog
ewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0
ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogYnJpZ2h0bmVzc09wZXJhdGlv
biA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRp
b24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYg
YnJpZ2h0bmVzc09wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdo
dG5lc3NGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShicmlnaHRuZXNzT3BlcmF0aW9uLT5hbW91bnQoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVl
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYnJpZ2h0bmVzc09wZXJhdGlvbi5h
bW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
ewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29u
dHJhc3RPcGVyYXRpb24gPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbnRyYXN0T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZp
bHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb250cmFzdE9wZXJhdGlvbi0+YW1v
dW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0
ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbnRyYXN0T3BlcmF0
aW9uLmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKLSAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24qIGJsdXJPcGVyYXRpb24gPSB0b0Js
dXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoYWRqdXN0TGVuZ3RoRm9yWm9v
bShibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgc3R5bGUsIGFkanVzdCkpOworICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChhZGp1c3RMZW5ndGhGb3Jab29tKGJsdXJPcGVyYXRp
b24uc3RkRGV2aWF0aW9uKCksIHN0eWxlLCBhZGp1c3QpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewot
ICAgICAgICAgICAgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZHJvcFNoYWRvd09wZXJhdGlv
biA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbiA9IGRv
d25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAg
ICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAg
Ly8gV2Ugd2FudCBvdXIgY29tcHV0ZWQgc3R5bGUgdG8gbG9vayBsaWtlIHRoYXQgb2YgYSB0ZXh0
IHNoYWRvdyAoaGFzIG5laXRoZXIgc3ByZWFkIG5vciBpbnNldCBzdHlsZSkuCi0gICAgICAgICAg
ICBTaGFkb3dEYXRhIHNoYWRvd0RhdGEgPSBTaGFkb3dEYXRhKGRyb3BTaGFkb3dPcGVyYXRpb24t
PmxvY2F0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCAwLCBOb3Jt
YWwsIGZhbHNlLCBkcm9wU2hhZG93T3BlcmF0aW9uLT5jb2xvcigpKTsKKyAgICAgICAgICAgIFNo
YWRvd0RhdGEgc2hhZG93RGF0YSA9IFNoYWRvd0RhdGEoZHJvcFNoYWRvd09wZXJhdGlvbi5sb2Nh
dGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwLCBOb3JtYWwsIGZh
bHNlLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCkpOwogICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZCh2YWx1ZUZvclNoYWRvdygmc2hhZG93RGF0YSwgQ1NTUHJvcGVydHlUZXh0U2hh
ZG93LCBzdHlsZSwgYWRqdXN0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3Jt
Q0FGaWx0ZXJzTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tCmluZGV4IDI0OGY5ZWQ2NTY4M2IzNjgyMGIyZmFmZDM5
OTMwYTA0YTkzYWM0MTAuLjliMDNjYTUxOTA5MjVkZTE4NDUwMzA0MzQwMzQwNGZkMDc4ZTBlMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0
Zm9ybUNBRmlsdGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KQEAgLTcxLDM3ICs3MSwzNyBAQCB2b2lk
IFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXll
ciwgY29uc3QgRmlsdGVyT3BlcgogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
aWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gU3RyaW5n
Ojpmb3JtYXQoImZpbHRlcl8lZCIsIGkpOwotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVy
T3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXJPcGVyYXRpb24gPSAqZmlsdGVycy5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVy
YXRpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogRm9yIG5vdyBhc3N1bWUgZHJvcCBzaGFkb3cgaXMgdGhlIGxhc3QgZmlsdGVyLCBw
dXQgaXQgb24gdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEwOTU5
OTY5PiBIYW5kbGUgY2FzZSB3aGVyZSBkcm9wLXNoYWRvdyBpcyBub3QgdGhlIGxhc3QgZmlsdGVy
LgotICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Ry
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFts
YXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShvcC0+eCgpLCBvcC0+eSgpKV07CisgICAg
ICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0
aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9wU2hh
ZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCkpXTsKIAogICAgICAgICAg
ICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgICAgICAgICAgb3AtPmNvbG9yKCkuZ2V0UkdC
QShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKKyAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKS5nZXRSR0JBKGNv
bXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10p
OwogICAgICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwogICAgICAgICAgICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2Uu
Z2V0KCksIGNvbXBvbmVudHMpKTsKICAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpj
b2xvci5nZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOm9wLT5zdGRE
ZXZpYXRpb24oKV07CisgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOmRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCldOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRv
d09wYWNpdHk6MV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIFVTRV9DQV9G
SUxURVJTCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRl
cldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6
QCJpbnB1dEFtb3VudCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OmNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJp
bnB1dEFtb3VudCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwog
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7
Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi0+
dHlwZSgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+
IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZv
ckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmls
dGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJp
eFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKQEAgLTEwOSwyNCArMTA5LDI0IEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAg
ICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRl
ckNvbG9yU2F0dXJhdGVdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKKyAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJheS5n
ZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlw
ZTprQ0FGaWx0ZXJDb2xvckh1ZVJvdGF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6
QCJpbnB1dEFuZ2xlIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZv
cktleTpAImlucHV0QW5nbGUiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpAImh1ZVJv
dGF0ZSJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAg
ICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNB
RmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24tPnR5cGUo
KSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xv
ck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0
ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAg
ICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNv
bG9yTWF0cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1
ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
RmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZp
bHRlck9wZXIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4g
Y29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9y
RmlsdGVyKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmls
dGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAm
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0
ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JN
YXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQ
bGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsK
LSAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZv
cm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50
eXBlKCksIGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4g
Y29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9y
RmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAg
ICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0
ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4
VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1Zh
bHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCksIGZpbHRlck9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBl
KCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRD
b2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpA
QCAtMTU4LDMwICsxNTgsMzAgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09u
TGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7
Ci0gICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmx1ckZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmls
dGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckdhdXNzaWFuQmx1cl07Ci0gICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxl
bmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTW9ub2Nocm9tZSJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1
dEludGVuc2l0eSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1
dEludGVuc2l0eSJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lDb2xvciBjb2xv
cldpdGhSZWQ6MC42NyBncmVlbjowLjY3IGJsdWU6MC42N10gZm9yS2V5OkAiaW5wdXRDb2xvciJd
OyAvLyBDb2xvciBkZXJpdmVkIGVtcGlyaWNhbGx5IHRvIG1hdGNoIHplcm8gc2F0dXJhdGlvbiBs
ZXZlbHMuCiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CiAgICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZh
dWx0c107CiAKLSAgICAgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgpOworICAgICAgICAg
ICAgZG91YmxlIHQgPSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKTsKICAgICAgICAgICAg
IHQgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjAsIHQpLCAxLjApOwogICAgICAgICAgICAgLy8gRklY
TUU6IHJlc3VsdHMgZG9uJ3QgbWF0Y2ggdGhlIHNvZnR3YXJlIGZpbHRlci4KICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KQpAQCAt
MTk4LDMwICsxOTgsMzAgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5
ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTog
ewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3Ag
PSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0
ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lIdWVBZGp1c3QiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVs
dHNdOwogCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07CisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJh
ZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFth
cnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAg
ICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciog
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAKLSAgICAgICAgICAgIGRvdWJsZSBtdWx0
aXBsaWVyID0gMSAtIG9wLT5hbW91bnQoKSAqIDI7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlw
bGllciA9IDEgLSBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSAqIDI7CiAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiB0aGUgcmVzdWx0cyBvZiB0aGlzIGZpbHRlciBsb29rIHdyb25n
LgogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6bXVs
dGlwbGllciBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CkBAIC0yMzQsMjQg
KzIzNCwyNCBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0
Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0g
dG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7
CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
JiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZp
bHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktleTpA
ImlucHV0UlZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6MCBZOjEgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjEg
VzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOm9wLT5hbW91bnQoKV0gZm9yS2V5
OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzpjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91
bnQoKV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEJp
YXNWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJP
cGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAg
ICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91
bnQgPSBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKTsKIAogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6YW1vdW50IFk6MCBaOjAgVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTphbW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRH
VmVjdG9yIl07CkBAIC0yNjEsMjAgKzI2MSwyMCBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpz
ZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Blcgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJQ29sb3JDb250cm9scyJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0
c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dENvbnRyYXN0Il07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0Q29udHJhc3QiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KLSAgICAgICAgICAgIGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9u
ID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUdh
dXNzaWFuQmx1ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1
ZUZvckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OmZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZv
cktleTpAImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTMwMiw4ICszMDIsOCBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxh
dGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJh
dAogICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gb3BlcmF0aW9uLT50
eXBlKCk7CiAgICAgUmV0YWluUHRyPGlkPiB2YWx1ZTsKICAgICAKLSAgICBpZiAodHlwZSA9PSBG
aWx0ZXJPcGVyYXRpb246OkRFRkFVTFQpIHsKLSAgICAgICAgdHlwZSA9IHRvRGVmYXVsdEZpbHRl
ck9wZXJhdGlvbihvcGVyYXRpb24pLT5yZXByZXNlbnRlZFR5cGUoKTsKKyAgICBpZiAoaXM8RGVm
YXVsdEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpIHsKKyAgICAgICAgdHlwZSA9IGRvd25j
YXN0PERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLnJlcHJlc2VudGVkVHlwZSgp
OwogICAgICAgICBvcGVyYXRpb24gPSBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTMxNiw3ICsz
MTYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVl
Rm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAvLyBDQUZpbHRlcjogaW5w
dXRBbW91bnQKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CiAgICAgICAgIGlmIChvcGVyYXRp
b24pCi0gICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24ob3BlcmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAg
ICAgICAgCiAgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50
XTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTIgKzMyOCwxMCBAQCBSZXRhaW5QdHI8TlNWYWx1
ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRl
ck9wZXJhdAogI2Vsc2UKICAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRH
VmVjdG9yLCBpbnB1dEJWZWN0b3IKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0gICAgICAg
IGlmIChvcGVyYXRpb24pIHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKG9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG9wZXJhdGlvbikKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogCi0gICAg
ICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9y
ID0gbnVsbHB0cjsKICAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgp
IHsKICAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0
aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMF0sIGFtb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBd
WzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIGFtb3VudCkKQEAgLTM1NCw3ICszNTIsNyBA
QCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3Bl
cmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAvLyBDQUZpbHRlcjogaW5wdXRBbW91
bnQKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CiAgICAgICAgIGlmIChvcGVyYXRpb24pCi0g
ICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24ob3Bl
cmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAgICAgICAg
CiAgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKICAg
ICAgICAgYnJlYWs7CkBAIC0zNjQsNyArMzYyLDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXQK
ICAgICAgICAgLy8gSHVlIHJvdGF0ZSBDQUZpbHRlcjogaW5wdXRBbmdsZQogICAgICAgICBkb3Vi
bGUgYW1vdW50ID0gMDsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3Vu
dCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5hbW91bnQo
KTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAgYW1vdW50
ID0gZGVnMnJhZChhbW91bnQpOwogICAgICAgICB2YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOmFtb3VudF07CkBAIC0zNzgsNyArMzc2LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBs
YXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVy
YXQKICAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRHVmVjdG9yLCBpbnB1
dEJWZWN0b3IsIGlucHV0Qmlhc1ZlY3RvcgogICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKICAg
ICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAgICAg
ICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAgZG91YmxlIG11bHRp
cGxpZXIgPSAxIC0gYW1vdW50ICogMjsKIApAQCAtNDA0LDcgKzQwMiw3IEBAIFJldGFpblB0cjxO
U1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3Qg
RmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIE9wYWNpdHkgQ0lGaWx0ZXI6IGlucHV0QVZlY3Rvcgog
ICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAg
ICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihv
cGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwog
ICAgICAgICAKICAgICAgICAgdmFsdWUgPSBhZG9wdE5TKFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRX
aXRoWDowIFk6MCBaOjAgVzphbW91bnRdKTsKICNlbmRpZgpAQCAtNDE5LDkgKzQxNyw5IEBAIFJl
dGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRp
b24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIEJyaWdodG5lc3MgQ0lGaWx0ZXI6IGlu
cHV0Q29sb3JNYXRyaXgKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CiAgICAgICAgIGlmIChv
cGVyYXRpb24pCi0gICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24ob3BlcmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQg
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKS5hbW91bnQoKTsKICAgICAgICAgCi0gICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAw
OworICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0gbnVsbHB0cjsKICAgICAgICAgc3dpdGNo
IChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKICAgICAgICAgY2FzZSAwOiByb3dWZWN0
b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6YW1vdW50IFk6MCBaOjAgVzowXTsgYnJl
YWs7IC8vIGlucHV0UlZlY3RvcgogICAgICAgICBjYXNlIDE6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0
b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6YW1vdW50IFo6MCBXOjBdOyBicmVhazsgLy8gaW5wdXRH
VmVjdG9yCkBAIC00NDAsNyArNDM4LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FG
aWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXQKICAgICAg
ICAgLy8gQ29udHJhc3QgQ0lGaWx0ZXI6IGlucHV0Q29udHJhc3QKICAgICAgICAgZG91YmxlIGFt
b3VudCA9IDE7CiAgICAgICAgIGlmIChvcGVyYXRpb24pCi0gICAgICAgICAgICBhbW91bnQgPSB0
b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24ob3BlcmF0aW9uKS0+YW1vdW50
KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAgICAgICAgCiAgICAgICAg
IHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKICNlbmRpZgpAQCAt
NDUxLDcgKzQ0OSw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Zmls
dGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIENBRmls
dGVyOiBpbnB1dFJhZGl1cwogICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKICAgICAgICAgaWYg
KG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodG9C
bHVyRmlsdGVyT3BlcmF0aW9uKG9wZXJhdGlvbiktPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAg
ICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikuc3RkRGV2aWF0aW9uKCksIDApOwogICAgICAgICAKICAgICAg
ICAgdmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOwogICAgICAgICBi
cmVhazsKQEAgLTQ2OCw3ICs0NjYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZp
bHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOgogewogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAg
ICAgICBkb3VibGUgdCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDA7CisgICAgICAgIGRvdWJs
ZSB0ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbikuYW1vdW50KCkgOiAwOwogICAgICAgICB0ID0gc3Rk
OjptaW4oc3RkOjptYXgoMC4wLCB0KSwgMS4wKTsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xv
ck1hdHJpeCA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVu
ZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgdCkp
LApAQCAtNDg3LDcgKzQ4NSw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVy
czo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4XTsKICAgICB9
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICBmbG9hdCBhbW91
bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkgOiAwOworICAgICAgICBmbG9hdCBhbW91
bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDA7CiAgICAgICAgIGZs
b2F0IG11bHRpcGxpZXIgPSAxIC0gYW1vdW50ICogMjsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBj
b2xvck1hdHJpeCA9IHsKICAgICAgICAgICAgIG11bHRpcGxpZXIsIDAsIDAsIDAsIGFtb3VudCwK
QEAgLTQ5OCw3ICs0OTYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6
OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOgogICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CiAgICAgfQog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgIGZsb2F0IGFtb3Vu
dCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDE7CisgICAgICAgIGZsb2F0IGFtb3Vu
dCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbiktPmFtb3VudCgpIDogMTsKICAgICAgICAgQ0FD
b2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsCiAg
ICAgICAgICAgICAwLCAxLCAwLCAwLCAwLApAQCAtNTA4LDcgKzUwNiw3IEBAIFJldGFpblB0cjxO
U1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihGaWx0
ZXJPcGVyYXRpb246CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0
cml4OmNvbG9yTWF0cml4XTsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRS
QVNUOiB7Ci0gICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQo
KSA6IDE7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbikt
PmFtb3VudCgpIDogMTsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCAr
IDAuNTsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKICAgICAgICAgICAg
IGFtb3VudCwgMCwgMCwgMCwgaW50ZXJjZXB0LApAQCAtNTE5LDcgKzUxNyw3IEBAIFJldGFpblB0
cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihG
aWx0ZXJPcGVyYXRpb246CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9y
TWF0cml4OmNvbG9yTWF0cml4XTsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6IHsKLSAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gdG9C
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbiktPmFt
b3VudCgpIDogMTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKS0+YW1vdW50KCkgOiAxOwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0g
ewogICAgICAgICAgICAgYW1vdW50LCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgYW1vdW50
LCAwLCAwLCAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKaW5kZXggNzEwYWU2MzRhZmM4ZDcyYjZhNTgwMjM3OTBjNzI2Y2VhM2QxYmVi
MC4uZGQ1MTJhM2FjYjE3MGVkYmQ1MTgyZWJlOWU3M2UwZmMwMjQxZTEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MCw5
ICs3MCw2IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9maWx0ZXJTY2FsZTsKIH07CiAKLSNkZWZp
bmUgRklMVEVSX1RZUEVfQ0FTVFMoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLSAgICBU
WVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBGaWx0ZXIsIGZpbHRlciwgZmlsdGVyLT5w
cmVkaWNhdGUsIGZpbHRlci5wcmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKaW5kZXggZjVlZDczMjg0
YjIyZjE0YjY3ZGZiYjEwYzUzZmMzZDg4MDY5MDIyOC4uNzZkZDM0Y2UzYzk4ZmFkOTY4M2JkM2Nh
ZjIzYzI2Y2ZkNTVhOTc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcApAQCAtMzEsMTIgKzMx
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLWJvb2wgRGVmYXVsdEZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0Citib29s
IERlZmF1bHRGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiBvcGVyYXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICgh
aXNTYW1lVHlwZShvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
cmV0dXJuIHJlcHJlc2VudGVkVHlwZSgpID09IHRvRGVmYXVsdEZpbHRlck9wZXJhdGlvbihvKS5y
ZXByZXNlbnRlZFR5cGUoKTsKKyAgICByZXR1cm4gcmVwcmVzZW50ZWRUeXBlKCkgPT0gZG93bmNh
c3Q8RGVmYXVsdEZpbHRlck9wZXJhdGlvbj4ob3BlcmF0aW9uKS5yZXByZXNlbnRlZFR5cGUoKTsK
IH0KIAogUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24o
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCkBAIC01MCwxMiArNTAs
MTIgQEAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjp+UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
KCkKIHsKIH0KICAgICAKLWJvb2wgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKK2Jvb2wgUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb25z
dAogewotICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICBpZiAoIWlzU2FtZVR5cGUob3BlcmF0
aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBtX3VybCA9PSB0
b1JlZmVyZW5jZUZpbHRlck9wZXJhdGlvbihvKS5tX3VybDsKKyAgICByZXR1cm4gbV91cmwgPT0g
ZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihvcGVyYXRpb24pLm1fdXJsOwogfQog
ICAgIAogQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UqIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bjo6Z2V0T3JDcmVhdGVDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpCkBAIC03Myw4ICs3Myw4
IEBAIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPCiAgICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkK
ICAgICAgICAgcmV0dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91bnQoKSwgcHJvZ3Jlc3MpLCBt
X3R5cGUpOwogICAgICAgICAKLSAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKiBmcm9tT3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZnJvbSk7Ci0g
ICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3AgPyBmcm9tT3AtPmFtb3VudCgpIDogcGFzc3Ro
cm91Z2hBbW91bnQoKTsKKyAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZnJvbSk7CisgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9w
ZXJhdGlvbi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwogICAgIHJldHVybiBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFt
b3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIApAQCAtODIsNyArODIsNyBA
QCBpbmxpbmUgYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbwogewogICAgIGlmICghaXNTYW1lVHlwZShvKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIG90aGVyID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKG8pOworICAg
IGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIG90aGVyID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4obyk7CiAgICAgcmV0dXJuIG1fYW1vdW50
ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMDksMTYgKzEwOSwxNiBAQCBQYXNzUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
YmxlbmQoY29uc3QgRgogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCiAgICAgICAgIHJldHVy
biBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNzKSwgbV90eXBlKTsK
ICAgICAgICAgCi0gICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogZnJvbU9wID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZyb20p
OwotICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9wID8gZnJvbU9wLT5hbW91bnQoKSA6IHBh
c3N0aHJvdWdoQW1vdW50KCk7CisgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24+KGZyb20pOworICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9w
ZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91bnQoKTsK
ICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7
CiB9CiAKLWlubGluZSBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246
Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAoraW5saW5lIGJvb2wg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWlzU2FtZVR5cGUo
bykpCisgICAgaWYgKCFpc1NhbWVUeXBlKG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvdGhl
ciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvKTsKKyAgICBjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbik7CiAgICAg
cmV0dXJuIG1fYW1vdW50ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMzksMTIgKzEzOSwx
MiBAQCBkb3VibGUgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6cGFzc3Ro
cm91Z2hBbW91bnQoKSBjb25zdAogICAgIH0KIH0KICAgICAKLWJvb2wgQmx1ckZpbHRlck9wZXJh
dGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0Citib29sIEJs
dXJGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVy
YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICghaXNTYW1l
VHlwZShvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IG1fc3RkRGV2aWF0aW9uID09IHRvQmx1ckZpbHRlck9wZXJhdGlvbihvKS5zdGREZXZpYXRpb24o
KTsKKyAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8Rmls
dGVyT3BlcmF0aW9uPiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCkBA
IC0xNTcsOCArMTU3LDggQEAgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJP
cGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnIKICAgICBpZiAoYmxlbmRU
b1Bhc3N0aHJvdWdoKQogICAgICAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aChsZW5ndGhUeXBlKS5ibGVuZChtX3N0ZERldmlhdGlvbiwgcHJvZ3Jlc3MpKTsKIAot
ICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHRvQmx1ckZpbHRlck9wZXJh
dGlvbihmcm9tKTsKLSAgICBMZW5ndGggZnJvbUxlbmd0aCA9IGZyb21PcCA/IGZyb21PcC0+bV9z
dGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7CisgICAgY29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZy
b20pOworICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRp
b24tPm1fc3RkRGV2aWF0aW9uIDogTGVuZ3RoKGxlbmd0aFR5cGUpOwogICAgIHJldHVybiBCbHVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobV9zdGREZXZpYXRpb24uYmxlbmQoZnJvbUxlbmd0aCwg
cHJvZ3Jlc3MpKTsKIH0KICAgICAKQEAgLTE2Niw3ICsxNjYsNyBAQCBib29sIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25z
dAogewogICAgIGlmICghaXNTYW1lVHlwZShvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIG90aGVyID0gdG9Ecm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKG8pOworICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIG90
aGVyID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4obyk7CiAgICAgcmV0dXJu
IG1fbG9jYXRpb24gPT0gb3RoZXIubV9sb2NhdGlvbiAmJiBtX3N0ZERldmlhdGlvbiA9PSBvdGhl
ci5tX3N0ZERldmlhdGlvbiAmJiBtX2NvbG9yID09IG90aGVyLm1fY29sb3I7CiB9CiAgICAgCkBA
IC0xODEsMTAgKzE4MSwxMCBAQCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aQogICAgICAgICAgICAg
V2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dyZXNzKSwKICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIHByb2dy
ZXNzKSk7CiAKLSAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AgPSB0
b0Ryb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZnJvbSk7Ci0gICAgSW50UG9pbnQgZnJvbUxvY2F0
aW9uID0gZnJvbU9wID8gZnJvbU9wLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKLSAgICBpbnQg
ZnJvbVN0ZERldmlhdGlvbiA9IGZyb21PcCA/IGZyb21PcC0+c3RkRGV2aWF0aW9uKCkgOiAwOwot
ICAgIENvbG9yIGZyb21Db2xvciA9IGZyb21PcCA/IGZyb21PcC0+Y29sb3IoKSA6IENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiog
ZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20p
OworICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0
aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKKyAgICBpbnQgZnJvbVN0ZERldmlhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSA6IDA7CisgICAg
Q29sb3IgZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkg
OiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgIAogICAgIHJldHVybiBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21Mb2Nh
dGlvbiwgbV9sb2NhdGlvbiwgcHJvZ3Jlc3MpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYTE4
ZDk5NWJiZDcwMjUzYzc1MWFhYzc0M2IxYTI4MzM2NWE2MDVmZC4uNWZlMjAxMGRjOGI2MDY1NzFj
NjE3ZDgyN2JmOTIxMTBmM2U1MWI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIC8vIEFubm95aW5nbHksIHdp
bmdkaS5oICNkZWZpbmVzIHRoaXMuCkBAIC0xMTQsOSArMTE1LDYgQEAgcHJvdGVjdGVkOgogICAg
IE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAotI2RlZmluZSBGSUxURVJPUEVSQVRJT05fVFlQ
RV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFT
RShUb1ZhbHVlVHlwZU5hbWUsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbiwgdmFsdWUsIHZhbHVl
LT5wcmVkaWNhdGUsIHZhbHVlLnByZWRpY2F0ZSkKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgRGVm
YXVsdEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShPcGVy
YXRpb25UeXBlIHJlcHJlc2VudGVkVHlwZSkKQEAgLTE0Myw5ICsxNDEsNiBAQCBwcml2YXRlOgog
ICAgIE9wZXJhdGlvblR5cGUgbV9yZXByZXNlbnRlZFR5cGU7CiB9OwogCi1GSUxURVJPUEVSQVRJ
T05fVFlQRV9DQVNUUyhEZWZhdWx0RmlsdGVyT3BlcmF0aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3Bl
cmF0aW9uOjpERUZBVUxUKTsKLQotCiBjbGFzcyBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbiA6
IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGUoKQpAQCAtMTcwLDggKzE2NSw2IEBA
IHByaXZhdGU6CiAgICAgfQogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoUGFzc3Ro
cm91Z2hGaWx0ZXJPcGVyYXRpb24sIHR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJP
VUdIKTsKLQogY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21l
bnQpCkBAIC0yMTAsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2ZpbHRlckVmZmVjdDsKIH07CiAKLUZJTFRFUk9QRVJBVElPTl9UWVBFX0NBU1RTKFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiwgdHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
KTsKLQogLy8gR1JBWVNDQUxFLCBTRVBJQSwgU0FUVVJBVEUgYW5kIEhVRV9ST1RBVEUgYXJlIHZh
cmlhdGlvbnMgb24gYSBiYXNpYyBjb2xvciBtYXRyaXggZWZmZWN0LgogLy8gRm9yIEhVRV9ST1RB
VEUsIHRoZSBhbmdsZSBvZiByb3RhdGlvbiBpcyBzdG9yZWQgaW4gbV9hbW91bnQuCiBjbGFzcyBX
RUJDT1JFX0VYUE9SVCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZp
bHRlck9wZXJhdGlvbiB7CkBAIC0yNDQsOCArMjM1LDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV9hbW91bnQ7CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSk7
Ci0KIC8vIElOVkVSVCwgQlJJR0hUTkVTUywgQ09OVFJBU1QgYW5kIE9QQUNJVFkgYXJlIHZhcmlh
dGlvbnMgb24gYSBiYXNpYyBjb21wb25lbnQgdHJhbnNmZXIgZWZmZWN0LgogY2xhc3MgV0VCQ09S
RV9FWFBPUlQgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBG
aWx0ZXJPcGVyYXRpb24gewogcHVibGljOgpAQCAtMjc5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1fYW1vdW50OwogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiwgaXNCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uKCkpOwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBCbHVyRmlsdGVy
T3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Qmx1ckZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKExlbmd0aCBzdGREZXZpYXRp
b24pCkBAIC0zMTIsOCArMjk5LDYgQEAgcHJpdmF0ZToKICAgICBMZW5ndGggbV9zdGREZXZpYXRp
b247CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCbHVyRmlsdGVyT3BlcmF0aW9u
LCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpCTFVSKTsKLQogY2xhc3MgV0VCQ09SRV9FWFBP
UlQgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+
IGNyZWF0ZShjb25zdCBJbnRQb2ludCYgbG9jYXRpb24sIGludCBzdGREZXZpYXRpb24sIENvbG9y
IGNvbG9yKQpAQCAtMzUzLDggKzMzOCwxOSBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7
CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVyk7Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9Q
RVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIHsgcmV0dXJu
IG9wZXJhdGlvbi5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihEZWZhdWx0RmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUGFzc3Rocm91Z2hGaWx0ZXJPcGVy
YXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24sIGlzQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbigp
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oQmx1ckZpbHRlck9wZXJh
dGlvbiwgdHlwZSgpID09IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6QkxVUikKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24s
IHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKQorCiAjZW5k
aWYgLy8gRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCmluZGV4IGFm
ODIzNjYyMzcxMmE3ZTc4MjAzYWM1M2UwNGU3MmE2NjQwNDdjYzIuLmUxNTA1ZGQ4NTk2ZTI1MjUz
ODhkY2ExZDVjYjM5ZDFkZmY1MjgxODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcApAQCAt
MTA2LDI0ICsxMDYsMjQgQEAgRmlsdGVyT3V0c2V0cyBGaWx0ZXJPcGVyYXRpb25zOjpvdXRzZXRz
KCkgY29uc3QKIHsKICAgICBGaWx0ZXJPdXRzZXRzIHRvdGFsT3V0c2V0czsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IG1fb3BlcmF0aW9ucy5hdChpKS5n
ZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICptX29wZXJhdGlvbnMu
YXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgY29uc3QgQmx1ckZp
bHRlck9wZXJhdGlvbiogYmx1ck9wZXJhdGlvbiA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgICAgICAg
ICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1
ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IHN0
ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRp
b24oKSwgMCk7CiAgICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUgPSBvdXRzZXRTaXplRm9y
Qmx1cihzdGREZXZpYXRpb24pOwogICAgICAgICAgICAgRmlsdGVyT3V0c2V0cyBvdXRzZXRzKG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQo
KSwgb3V0c2V0U2l6ZS53aWR0aCgpKTsKICAgICAgICAgICAgIHRvdGFsT3V0c2V0cyArPSBvdXRz
ZXRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKiBkcm9wU2hhZG93T3BlcmF0aW9uID0gdG9Ecm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUg
PSBvdXRzZXRTaXplRm9yQmx1cihkcm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSk7
CisgICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93
T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IG91dHNldFNpemVGb3JC
bHVyKGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCkpOwogICAgICAgICAgICAgRmls
dGVyT3V0c2V0cyBvdXRzZXRzKAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91dHNldFNp
emUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9uLT55KCkpLAotICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KDAsIG91dHNldFNpemUud2lkdGgoKSArIGRyb3BTaGFkb3dPcGVyYXRpb24tPngo
KSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIGRy
b3BTaGFkb3dPcGVyYXRpb24tPnkoKSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0
c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlvbi0+eCgpKQorICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9u
LnkoKSksCisgICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
ZHJvcFNoYWRvd09wZXJhdGlvbi54KCkpLAorICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSksCisgICAgICAgICAg
ICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlv
bi54KCkpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgdG90YWxPdXRzZXRzICs9IG91dHNl
dHM7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGFlZjkwMmQ5OTk5NTY2ZDQ0MWIzNGY1NDAx
ODdhNjU5MjIzYjhhYjEuLmM1NWU3YWNhOWRiOGQ3NWUxOTEwMmI1Nzg1OTQ5YTgyYjBiYmFlODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcApAQCAtMTQzLDE4ICsxNDMsMTggQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYzsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgRmls
dGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
dChpKS5nZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgewor
ICAgICAgICBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAg
ICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlT3BlcmF0aW9uID0gdG9SZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgcmVmZXJl
bmNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZU9wZXJhdGlvbi0+c2V0RmlsdGVy
RWZmZWN0KGVmZmVjdCk7CisgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJl
ZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVy
KHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgJnJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAg
ICAgICByZWZlcmVuY2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0KGVmZmVjdCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNn
cmF5c2NhbGVFcXVpdmFsZW50CiAgICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KQEAgLTE4MCw5ICsxODAsOSBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpi
dWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNz
ZXBpYUVxdWl2YWxlbnQKICAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgpAQCAtMjA4LDI2ICsyMDgsMjYgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTogewotICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiog
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSkpOwor
ICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUodGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBp
bnB1dFBhcmFtZXRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gdG9CYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
CiAgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsKLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJp
eE9wZXJhdGlvbi0+YW1vdW50KCkpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkp
OwogICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKHRoaXMsIEZFQ09M
T1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIGlucHV0UGFyYW1ldGVycyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7
Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX1RBQkxFOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKSk7Ci0gICAgICAg
ICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAt
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSkpOworICAgICAgICAgICAgdHJh
bnNmZXJQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRl
cnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAtIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFs
dWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOwogCiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKQEAgLTIzNSwxMiArMjM1LDEyIEBAIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSB0b0Jh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKICAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRTsKICAgICAgICAgICAgIFZl
Y3RvcjxmbG9hdD4gdHJhbnNmZXJQYXJhbWV0ZXJzOwogICAgICAgICAgICAgdHJhbnNmZXJQYXJh
bWV0ZXJzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi0+YW1vdW50
KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwogICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsK
IAogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBA
IC0yNDgsMTAgKzI0OCwxMCBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3Vu
dCgpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKICAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKIAogICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwogICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKTsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKICAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIApAQCAtMjcxLDE1ICsyNzEsMTUgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBCbHVyRmlsdGVyT3BlcmF0aW9uKiBibHVyT3Bl
cmF0aW9uID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRp
b24tPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKICAgICAgICAgICAgIGVmZmVj
dCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUodGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRp
b24sIGNvbnN1bWVyID09IEZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RF
X0RVUExJQ0FURSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qIGRyb3BTaGFkb3dPcGVyYXRpb24gPSB0b0Ryb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNo
YWRvdzo6Y3JlYXRlKHRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCBk
cm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24tPngoKSwgZHJv
cFNoYWRvd09wZXJhdGlvbi0+eSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLT5jb2xvcigpLCAxKTsK
KyAgICAgICAgICAgIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRp
b24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUodGhpcywgZHJvcFNo
YWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZp
YXRpb24oKSwKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNo
YWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMjkyLDcgKzI5
Miw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBlZmZlY3QtPnNldENs
aXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyRnVuY3Rpb24pOwogICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCkgIT0gRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICAgICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQocHJldmlvdXNFZmZlY3QpOwogICAgICAgICAg
ICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoZWZmZWN0KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXgg
OGZiYjQxODNiZDdlM2IwMTNiMWU3ODcwYTIxZjE1YjQyYzE4OTU5Mi4uNjI4MjYyOGE5M2JjOTlj
OWEyZGVjZjUxZmUyZmQ1MjJlOGQ3Y2UwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTk5LDEyICs5OSwxMiBAQCB2b2lk
IFJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjp1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbgogewogICAgIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG9wZXJhdGlvbnMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0g
b3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChmaWx0ZXJPcGVy
YXRpb24tPnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAgRmls
dGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
aV07CisgICAgICAgIGlmICghaXM8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uID0gdG9SZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2UqIGRvY3VtZW50UmVmZXJlbmNlID0gcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLT5jYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZSgpOwotICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVk
U1ZHRG9jdW1lbnQgPSBkb2N1bWVudFJlZmVyZW5jZSA/IGRvY3VtZW50UmVmZXJlbmNlLT5kb2N1
bWVudCgpIDogMDsKKyAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiByZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKiBkb2N1bWVu
dFJlZmVyZW5jZSA9IHJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbi5jYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSgpOworICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkU1ZHRG9jdW1lbnQg
PSBkb2N1bWVudFJlZmVyZW5jZSA/IGRvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKIAogICAgICAgICBpZiAoY2FjaGVkU1ZHRG9jdW1lbnQpIHsKICAgICAgICAgICAgIC8v
IFJlZmVyZW5jZSBpcyBleHRlcm5hbDsgd2FpdCBmb3Igbm90aWZ5RmluaXNoZWQoKS4KQEAgLTEx
MywxMSArMTEzLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVy
ZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBSZWZlcmVuY2UgaXMgaW50ZXJuYWw7IGFkZCBsYXllciBhcyBhIGNs
aWVudCBzbyB3ZSBjYW4gdHJpZ2dlcgogICAgICAgICAgICAgLy8gZmlsdGVyIHJlcGFpbnQgb24g
U1ZHIGF0dHJpYnV0ZSBjaGFuZ2UuCi0gICAgICAgICAgICBFbGVtZW50KiBmaWx0ZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb24tPmZyYWdtZW50KCkpOworICAgICAgICAgICAgRWxlbWVudCogZmlsdGVyID0gbV9s
YXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQocmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uLmZyYWdtZW50KCkpOwogCi0gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCAhZmls
dGVyLT5yZW5kZXJlcigpIHx8ICFmaWx0ZXItPnJlbmRlcmVyKCktPmlzU1ZHUmVzb3VyY2VGaWx0
ZXIoKSkKKyAgICAgICAgICAgIGlmICghZmlsdGVyIHx8ICFpczxSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcj4oZmlsdGVyLT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKmZpbHRlci0+cmVuZGVyZXIo
KSkuYWRkQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOworICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXItPnJlbmRlcmVyKCkpLmFkZENsaWVudFJl
bmRlckxheWVyKCZtX2xheWVyKTsKICAgICAgICAgICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2Vz
LmFwcGVuZChmaWx0ZXIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmNwcAppbmRleCA4ZDA5NDE3ZWY3ZjQwNTRkNDYyMzE4ZWNmYjVhNjJmNTg0ZDY5ZmEw
Li5iMmMwMzljNjg3MzVmZmU2YTU3ZDgwODE2ZjFmYzlhNjJjOTZmNjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmNwcApAQCAtNzIsOCArNzIsNyBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29ucwogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsK
LSAgICBTVkdGaWx0ZXIqIGZpbHRlciA9IHRvU1ZHRmlsdGVyKCYoZWZmZWN0LT5maWx0ZXIoKSkp
OwotICAgIEFTU0VSVChmaWx0ZXIpOworICAgIFNWR0ZpbHRlciYgZmlsdGVyID0gZG93bmNhc3Q8
U1ZHRmlsdGVyPihlZmZlY3QtPmZpbHRlcigpKTsKIAogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxl
bmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJl
Z2lvbiBhcyB1bml0ZSByZWN0LgogICAgIEZsb2F0UmVjdCBzdWJyZWdpb247CkBAIC04MiwxMSAr
ODEsMTEgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmkKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCiAgICAgICAgICAgICBzdWJyZWdp
b24udW5pdGUoZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRF
ZmZlY3QoaSkpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gZmlsdGVyLT5maWx0
ZXJSZWdpb25JblVzZXJTcGFjZSgpOworICAgICAgICBzdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVy
UmVnaW9uSW5Vc2VyU3BhY2UoKTsKIAogICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3Vi
cmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KICAgICBpZiAoZWZmZWN0LT5maWx0ZXJFZmZlY3RU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRl
ci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICAgICAgc3VicmVnaW9uID0gZmlsdGVy
LmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7CiAKICAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcyA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwogICAgIGlmIChlZmZlY3QtPmhhc1go
KSkKQEAgLTEwMCwxMiArOTksMTIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmkKIAogICAgIGVm
ZmVjdC0+c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7CiAKLSAgICBGbG9h
dFJlY3QgYWJzb2x1dGVTdWJyZWdpb24gPSBmaWx0ZXItPmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChzdWJyZWdpb24pOwotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlU3VicmVnaW9uID0g
ZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOworICAgIEZsb2F0
U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKICAgICBh
YnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uLndpZHRoKCksIGZpbHRlclJl
c29sdXRpb24uaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRv
IHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVNjYWxlZEZpbHRlclJl
Z2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlU2Nh
bGVkRmlsdGVyUmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogICAgIGFic29sdXRlU2Nh
bGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVz
b2x1dGlvbi5oZWlnaHQoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29s
dXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA1NzY1Y2JhNTkxYmMwNGZhOGVjYjVlMjI4YWUx
NDEwZjU3MmY0Yzk5Li41ODdmYTExZGM3ZTI1Njc5NzQwMDQyZDQzYmJjYTAzY2Q0ZGY4YzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDggKzU5LDEwIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOwogfTsKIAotRklMVEVSX1RZUEVf
Q0FTVFMoU1ZHRmlsdGVyLCBpc1NWR0ZpbHRlcigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1
cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
KwogI2VuZGlmIC8vIFNWR0ZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBmNzI5ZjVhNzhiMTE2YTVlYzVjMmUx
Njg4ODdjNDk2NjY5NjNjMTk4Li44MTIyNWYyMWJhYWY5NGIzMDYwMjVlNjE1YjIxNjJiZjhhNTNh
YzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVu
dENvZGVycy5jcHAKQEAgLTY0LDMwICs2NCwzMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsCiB7
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmlsdGVycy5zaXplKCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlciA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAg
IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLT50eXBlKCk7Cisg
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyID0gKmZpbHRlcnMuYXQoaSk7Cisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLnR5cGUo
KTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0FUVVJBVEU6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgot
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHRvQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLT5hbW91bnQoKSk7CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oKmZpbHRlcikuYW1vdW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbihmaWx0ZXIpLT5hbW91bnQoKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGRvdWJsZT4oZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oKmZpbHRlcikuYW1vdW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICAgICAgQXJndW1lbnRDb2Rl
cjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcikt
PnN0ZERldmlhdGlvbigpKTsKKyAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5j
b2RlKGVuY29kZXIsIGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpmaWx0ZXIpLnN0ZERl
dmlhdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24qIHNoYWRvdyA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOwot
ICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFk
b3ctPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQz
Ml90PihzaGFkb3ctPnN0ZERldmlhdGlvbigpKTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8
Q29sb3I+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5jb2xvcigpKTsKKyAgICAgICAgICAgIGNv
bnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIHNoYWRvdyA9IGRvd25jYXN0PERyb3BTaGFk
b3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CisgICAgICAgICAgICBBcmd1bWVudENvZGVyPElu
dFBvaW50Pjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LnN0ZERldmlhdGlvbigpKTsK
KyAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93
LmNvbG9yKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggY2RmYTcwZmMwNjk3MWQ2ZjNmMjBkNzcyNTA3
YjkwZjVhMTIxZjllNy4uYTYwMWNhODVkNTA1MjVlNDE4OTA1OGI5MzA4M2E5ZjEzMGRhY2JmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
QEAgLTE1MzgsMjYgKzE1MzgsMjYgQEAgdm9pZCBBcmd1bWVudENvZGVyPEZpbHRlck9wZXJhdGlv
bj46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZpbHQKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBlbmNv
ZGVyIDw8IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLmFtb3VudCgp
OworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlcikuYW1vdW50KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOgotICAgICAgICBlbmNvZGVyIDw8IHRvQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLmFtb3VudCgpOworICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlciku
YW1vdW50KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgotICAgICAgICBlbmNvZGVyIDw8IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLnN0ZERl
dmlhdGlvbigpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlcikuc3RkRGV2aWF0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICBjb25zdCBhdXRvJiBkcm9wU2hh
ZG93RmlsdGVyID0gdG9Ecm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAg
IGNvbnN0IGF1dG8mIGRyb3BTaGFkb3dGaWx0ZXIgPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICBlbmNvZGVyIDw8IGRyb3BTaGFkb3dGaWx0ZXIu
bG9jYXRpb24oKTsKICAgICAgICAgZW5jb2RlciA8PCBkcm9wU2hhZG93RmlsdGVyLnN0ZERldmlh
dGlvbigpOwogICAgICAgICBlbmNvZGVyIDw8IGRyb3BTaGFkb3dGaWx0ZXIuY29sb3IoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgot
ICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0odG9EZWZhdWx0RmlsdGVyT3BlcmF0aW9uKGZpbHRl
cikucmVwcmVzZW50ZWRUeXBlKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oZG93bmNh
c3Q8RGVmYXVsdEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKS5yZXByZXNlbnRlZFR5cGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCAxMTI3NmMzZmI5MjQ3MmNmM2JlNGRkYWIy
YzM0NzUxNDIwYTgxNmQzLi4zZmU2OGQ4MzE0NTBlMGViN2RjMjI3NDdmYzgwZDc3ODI1ZTIwNjZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0KQEAgLTY5NCw1MiArNjk0LDUyIEBAIFJlbW90ZUxheWVyVHJlZVRl
eHRTdHJlYW0mIFJlbW90ZUxheWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRmls
dGVyT3BlCiAgICAgICAgIHRzIDw8ICJyZWZlcmVuY2UiOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gdG9CYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImdyYXlz
Y2FsZSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRlciA9
IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRlciA9IGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAg
IHRzIDw8ICJzZXBpYSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTog
ewotICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1h
dHJpeEZpbHRlciA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOwor
ICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eEZpbHRlciA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
cik7CiAgICAgICAgIHRzIDw8ICJzYXR1cmF0ZSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3Vu
dCgpIDw8ICIpIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImh1ZS1yb3RhdGUoIiA8PCBjb2xv
ck1hdHJpeEZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0g
dG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRy
YW5zZmVyRmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImludmVydCgiIDw8IGNvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0gdG9C
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgIm9wYWNpdHkoIiA8PCBjb21wb25lbnRUcmFuc2Zl
ckZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICBjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2ZlckZpbHRlciA9IHRv
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBj
b25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFu
c2ZlckZpbHRlciA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlcik7CiAgICAgICAgIHRzIDw8ICJicmlnaHRuZXNzKCIgPDwgY29tcG9uZW50VHJh
bnNmZXJGaWx0ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0g
dG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRy
YW5zZmVyRmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImNvbnRyYXN0KCIgPDwgY29tcG9uZW50VHJh
bnNmZXJGaWx0ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiYgYmx1ckZpbHRlciA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAg
ICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyRmlsdGVyID0gZG93bmNhc3Q8Qmx1
ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImJsdXIoIiA8PCBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXJGaWx0ZXIuc3RkRGV2aWF0aW9uKCksIDApIDw8ICIpIjsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzogewotICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93
RmlsdGVyID0gdG9Ecm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNv
bnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dGaWx0ZXIgPSBkb3duY2Fz
dDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICB0cyA8PCAiZHJv
cC1zaGFkb3coIiA8PCBkcm9wU2hhZG93RmlsdGVyLngoKSA8PCAiICIgPDwgZHJvcFNoYWRvd0Zp
bHRlci55KCkgPDwgIiAiIDw8IGRyb3BTaGFkb3dGaWx0ZXIubG9jYXRpb24oKSA8PCAiICI7CiAg
ICAgICAgIHRzIDw8IGRyb3BTaGFkb3dGaWx0ZXIuY29sb3IoKSA8PCAiKSI7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNzQ4LDcgKzc0OCw3IEBAIFJlbW90ZUxheWVyVHJlZVRleHRTdHJlYW0mIFJlbW90
ZUxheWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRmlsdGVyT3BlCiAgICAgICAg
IHRzIDw8ICJwYXNzdGhyb3VnaCI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpERUZBVUxUOiB7Ci0gICAgICAgIGNvbnN0IERlZmF1bHRGaWx0ZXJPcGVyYXRpb24m
IGRlZmF1bHRGaWx0ZXIgPSB0b0RlZmF1bHRGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsKKyAgICAg
ICAgY29uc3QgRGVmYXVsdEZpbHRlck9wZXJhdGlvbiYgZGVmYXVsdEZpbHRlciA9IGRvd25jYXN0
PERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAgIHRzIDw8ICJkZWZhdWx0
IHR5cGU9IiA8PCAoaW50KWRlZmF1bHRGaWx0ZXIucmVwcmVzZW50ZWRUeXBlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239708</attachid>
            <date>2014-10-12 14:12:18 -0700</date>
            <delta_ts>2014-10-13 10:19:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137644-20141012141221.patch</filename>
            <type>text/plain</type>
            <size>75309</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2VjZDRjZjljZWQxYzU1
MDEyMGZjZDAwYTY5NGExYTZhMjgzM2Y3MC4uYWJlYTljOGQzNmIxYmYxMTU2Yzk2MmViMDk3MmU0
MTI1YmEzMzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE0LTEwLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgRmlsdGVyIC8gRmlsdGVyT3BlcmF0aW9uIHN1YmNsYXNzZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY0NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJhdGlvbiBzdWJjbGFzc2VzLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1D
QUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtQ0FG
aWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRGaWx0
ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Om91dHNldHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3RSZW5kZXJlcjo6YnVpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
ckluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVw
ZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6Cisg
ICAgICAgIChpc1R5cGUpOgorCiAyMDE0LTEwLTExICBLd2FuZ0h5dWsgS2ltICA8aHl1a2kua2lt
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBXZWJQIHN1cHBvcnQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggOWJmZDFhZGI5YWZiYWQ0NmM4NTlkMjU1ODJjYTk1NTUzZGY4YWZlMC4uMTM2Njll
YjhmNzIzNGZlNTQ2OTBhMjA2NWU2ZjIwMTFjMjBmYjM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTEwLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAg
ICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRmlsdGVyIC8gRmlsdGVyT3BlcmF0
aW9uIHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNzY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJh
dGlvbiBzdWJjbGFzc2VzLgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxGaWx0ZXJPcGVyYXRpb24+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorCiAyMDE0LTEwLTEwICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4o
KSBmb3IgSW1hZ2Ugc3ViY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCBmOWM0YmE1YTNkMDVjMDRkMWQ0ODJkZDNm
NjRlNzYxMGRmNzhiM2RjLi42Yjc4MzZiYjkzNGRhNDcyZGI4YzlmMzBlNzZiY2Q1NTRlYjhkOTkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcApAQCAtODkzLDczICs4OTMsNzMgQEAgUGFzc1JlZjxDU1NWYWx1ZT4gQ29tcHV0ZWRT
dHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWwKIAog
ICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGZpbHRlck9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWx0ZXJPcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmls
dGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgc3dp
dGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBGaWx0ZXJPcGVyYXRpb24m
IGZpbHRlck9wZXJhdGlvbiA9ICoqaXQ7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9u
LnR5cGUoKSkgewogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0g
ICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qIHJlZmVyZW5jZU9wZXJhdGlvbiA9
IHRvUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0
PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAg
IGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZh
bHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0aW9u
LT51cmwoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKKyAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0
aW9uLnVybCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTog
ewotICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRy
aXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNv
bG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAg
ICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRyaXhPcGVyYXRp
b24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsK
KyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3Jl
YXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNv
bG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRyaXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
ICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29sb3JN
YXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykpOwor
ICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENT
U0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTog
ewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0
ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogYnJpZ2h0bmVzc09wZXJhdGlv
biA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRp
b24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYg
YnJpZ2h0bmVzc09wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdo
dG5lc3NGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShicmlnaHRuZXNzT3BlcmF0aW9uLT5hbW91bnQoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVl
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYnJpZ2h0bmVzc09wZXJhdGlvbi5h
bW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
ewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29u
dHJhc3RPcGVyYXRpb24gPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbnRyYXN0T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZp
bHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb250cmFzdE9wZXJhdGlvbi0+YW1v
dW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0
ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbnRyYXN0T3BlcmF0
aW9uLmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKLSAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24qIGJsdXJPcGVyYXRpb24gPSB0b0Js
dXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoYWRqdXN0TGVuZ3RoRm9yWm9v
bShibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgc3R5bGUsIGFkanVzdCkpOworICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChhZGp1c3RMZW5ndGhGb3Jab29tKGJsdXJPcGVyYXRp
b24uc3RkRGV2aWF0aW9uKCksIHN0eWxlLCBhZGp1c3QpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewot
ICAgICAgICAgICAgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZHJvcFNoYWRvd09wZXJhdGlv
biA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbiA9IGRv
d25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAg
ICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAg
Ly8gV2Ugd2FudCBvdXIgY29tcHV0ZWQgc3R5bGUgdG8gbG9vayBsaWtlIHRoYXQgb2YgYSB0ZXh0
IHNoYWRvdyAoaGFzIG5laXRoZXIgc3ByZWFkIG5vciBpbnNldCBzdHlsZSkuCi0gICAgICAgICAg
ICBTaGFkb3dEYXRhIHNoYWRvd0RhdGEgPSBTaGFkb3dEYXRhKGRyb3BTaGFkb3dPcGVyYXRpb24t
PmxvY2F0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCAwLCBOb3Jt
YWwsIGZhbHNlLCBkcm9wU2hhZG93T3BlcmF0aW9uLT5jb2xvcigpKTsKKyAgICAgICAgICAgIFNo
YWRvd0RhdGEgc2hhZG93RGF0YSA9IFNoYWRvd0RhdGEoZHJvcFNoYWRvd09wZXJhdGlvbi5sb2Nh
dGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwLCBOb3JtYWwsIGZh
bHNlLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCkpOwogICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZCh2YWx1ZUZvclNoYWRvdygmc2hhZG93RGF0YSwgQ1NTUHJvcGVydHlUZXh0U2hh
ZG93LCBzdHlsZSwgYWRqdXN0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3Jt
Q0FGaWx0ZXJzTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tCmluZGV4IDI0OGY5ZWQ2NTY4M2IzNjgyMGIyZmFmZDM5
OTMwYTA0YTkzYWM0MTAuLjliMDNjYTUxOTA5MjVkZTE4NDUwMzA0MzQwMzQwNGZkMDc4ZTBlMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0
Zm9ybUNBRmlsdGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KQEAgLTcxLDM3ICs3MSwzNyBAQCB2b2lk
IFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXll
ciwgY29uc3QgRmlsdGVyT3BlcgogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
aWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gU3RyaW5n
Ojpmb3JtYXQoImZpbHRlcl8lZCIsIGkpOwotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVy
T3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXJPcGVyYXRpb24gPSAqZmlsdGVycy5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVy
YXRpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogRm9yIG5vdyBhc3N1bWUgZHJvcCBzaGFkb3cgaXMgdGhlIGxhc3QgZmlsdGVyLCBw
dXQgaXQgb24gdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEwOTU5
OTY5PiBIYW5kbGUgY2FzZSB3aGVyZSBkcm9wLXNoYWRvdyBpcyBub3QgdGhlIGxhc3QgZmlsdGVy
LgotICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Ry
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFts
YXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShvcC0+eCgpLCBvcC0+eSgpKV07CisgICAg
ICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0
aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9wU2hh
ZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCkpXTsKIAogICAgICAgICAg
ICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgICAgICAgICAgb3AtPmNvbG9yKCkuZ2V0UkdC
QShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKKyAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKS5nZXRSR0JBKGNv
bXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10p
OwogICAgICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwogICAgICAgICAgICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2Uu
Z2V0KCksIGNvbXBvbmVudHMpKTsKICAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpj
b2xvci5nZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOm9wLT5zdGRE
ZXZpYXRpb24oKV07CisgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOmRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCldOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRv
d09wYWNpdHk6MV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIFVTRV9DQV9G
SUxURVJTCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRl
cldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6
QCJpbnB1dEFtb3VudCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OmNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJp
bnB1dEFtb3VudCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwog
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7
Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi0+
dHlwZSgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+
IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZv
ckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmls
dGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJp
eFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKQEAgLTEwOSwyNCArMTA5LDI0IEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAg
ICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRl
ckNvbG9yU2F0dXJhdGVdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKKyAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJheS5n
ZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlw
ZTprQ0FGaWx0ZXJDb2xvckh1ZVJvdGF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6
QCJpbnB1dEFuZ2xlIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZv
cktleTpAImlucHV0QW5nbGUiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpAImh1ZVJv
dGF0ZSJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAg
ICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNB
RmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24tPnR5cGUo
KSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xv
ck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0
ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAg
ICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNv
bG9yTWF0cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1
ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
RmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZp
bHRlck9wZXIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4g
Y29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9y
RmlsdGVyKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmls
dGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAm
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0
ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JN
YXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQ
bGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsK
LSAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZv
cm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50
eXBlKCksIGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4g
Y29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9y
RmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAg
ICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0
ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4
VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1Zh
bHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCksIGZpbHRlck9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBl
KCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRD
b2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpA
QCAtMTU4LDMwICsxNTgsMzAgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09u
TGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7
Ci0gICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmx1ckZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmls
dGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckdhdXNzaWFuQmx1cl07Ci0gICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxl
bmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTW9ub2Nocm9tZSJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1
dEludGVuc2l0eSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1
dEludGVuc2l0eSJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lDb2xvciBjb2xv
cldpdGhSZWQ6MC42NyBncmVlbjowLjY3IGJsdWU6MC42N10gZm9yS2V5OkAiaW5wdXRDb2xvciJd
OyAvLyBDb2xvciBkZXJpdmVkIGVtcGlyaWNhbGx5IHRvIG1hdGNoIHplcm8gc2F0dXJhdGlvbiBs
ZXZlbHMuCiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CiAgICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZh
dWx0c107CiAKLSAgICAgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgpOworICAgICAgICAg
ICAgZG91YmxlIHQgPSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKTsKICAgICAgICAgICAg
IHQgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjAsIHQpLCAxLjApOwogICAgICAgICAgICAgLy8gRklY
TUU6IHJlc3VsdHMgZG9uJ3QgbWF0Y2ggdGhlIHNvZnR3YXJlIGZpbHRlci4KICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KQpAQCAt
MTk4LDMwICsxOTgsMzAgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5
ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTog
ewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3Ag
PSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0
ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lIdWVBZGp1c3QiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVs
dHNdOwogCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07CisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJh
ZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFth
cnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAg
ICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciog
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAKLSAgICAgICAgICAgIGRvdWJsZSBtdWx0
aXBsaWVyID0gMSAtIG9wLT5hbW91bnQoKSAqIDI7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlw
bGllciA9IDEgLSBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSAqIDI7CiAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiB0aGUgcmVzdWx0cyBvZiB0aGlzIGZpbHRlciBsb29rIHdyb25n
LgogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6bXVs
dGlwbGllciBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CkBAIC0yMzQsMjQg
KzIzNCwyNCBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0
Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0g
dG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7
CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
JiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZp
bHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktleTpA
ImlucHV0UlZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6MCBZOjEgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjEg
VzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOm9wLT5hbW91bnQoKV0gZm9yS2V5
OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzpjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91
bnQoKV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEJp
YXNWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJP
cGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAg
ICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91
bnQgPSBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKTsKIAogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6YW1vdW50IFk6MCBaOjAgVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTphbW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRH
VmVjdG9yIl07CkBAIC0yNjEsMjAgKzI2MSwyMCBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpz
ZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Blcgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJQ29sb3JDb250cm9scyJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0
c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dENvbnRyYXN0Il07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0Q29udHJhc3QiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KLSAgICAgICAgICAgIGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9u
ID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUdh
dXNzaWFuQmx1ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1
ZUZvckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OmZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZv
cktleTpAImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTMwMiw4ICszMDIsOCBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxh
dGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJh
dAogICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gb3BlcmF0aW9uLT50
eXBlKCk7CiAgICAgUmV0YWluUHRyPGlkPiB2YWx1ZTsKICAgICAKLSAgICBpZiAodHlwZSA9PSBG
aWx0ZXJPcGVyYXRpb246OkRFRkFVTFQpIHsKLSAgICAgICAgdHlwZSA9IHRvRGVmYXVsdEZpbHRl
ck9wZXJhdGlvbihvcGVyYXRpb24pLT5yZXByZXNlbnRlZFR5cGUoKTsKKyAgICBpZiAoaXM8RGVm
YXVsdEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpIHsKKyAgICAgICAgdHlwZSA9IGRvd25j
YXN0PERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLnJlcHJlc2VudGVkVHlwZSgp
OwogICAgICAgICBvcGVyYXRpb24gPSBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTMxNiw3ICsz
MTYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVl
Rm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAvLyBDQUZpbHRlcjogaW5w
dXRBbW91bnQKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CiAgICAgICAgIGlmIChvcGVyYXRp
b24pCi0gICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24ob3BlcmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAg
ICAgICAgCiAgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50
XTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTIgKzMyOCwxMCBAQCBSZXRhaW5QdHI8TlNWYWx1
ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRl
ck9wZXJhdAogI2Vsc2UKICAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRH
VmVjdG9yLCBpbnB1dEJWZWN0b3IKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0gICAgICAg
IGlmIChvcGVyYXRpb24pIHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKG9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG9wZXJhdGlvbikKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogCi0gICAg
ICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9y
ID0gbnVsbHB0cjsKICAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgp
IHsKICAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0
aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMF0sIGFtb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBd
WzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIGFtb3VudCkKQEAgLTM1NCw3ICszNTIsNyBA
QCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3Bl
cmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAvLyBDQUZpbHRlcjogaW5wdXRBbW91
bnQKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CiAgICAgICAgIGlmIChvcGVyYXRpb24pCi0g
ICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24ob3Bl
cmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAgICAgICAg
CiAgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKICAg
ICAgICAgYnJlYWs7CkBAIC0zNjQsNyArMzYyLDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXQK
ICAgICAgICAgLy8gSHVlIHJvdGF0ZSBDQUZpbHRlcjogaW5wdXRBbmdsZQogICAgICAgICBkb3Vi
bGUgYW1vdW50ID0gMDsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3Vu
dCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5hbW91bnQo
KTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAgYW1vdW50
ID0gZGVnMnJhZChhbW91bnQpOwogICAgICAgICB2YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOmFtb3VudF07CkBAIC0zNzgsNyArMzc2LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBs
YXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVy
YXQKICAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRHVmVjdG9yLCBpbnB1
dEJWZWN0b3IsIGlucHV0Qmlhc1ZlY3RvcgogICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKICAg
ICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAgICAg
ICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAgZG91YmxlIG11bHRp
cGxpZXIgPSAxIC0gYW1vdW50ICogMjsKIApAQCAtNDA0LDcgKzQwMiw3IEBAIFJldGFpblB0cjxO
U1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3Qg
RmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIE9wYWNpdHkgQ0lGaWx0ZXI6IGlucHV0QVZlY3Rvcgog
ICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAg
ICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihv
cGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwog
ICAgICAgICAKICAgICAgICAgdmFsdWUgPSBhZG9wdE5TKFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRX
aXRoWDowIFk6MCBaOjAgVzphbW91bnRdKTsKICNlbmRpZgpAQCAtNDE5LDkgKzQxNyw5IEBAIFJl
dGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRp
b24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIEJyaWdodG5lc3MgQ0lGaWx0ZXI6IGlu
cHV0Q29sb3JNYXRyaXgKICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CiAgICAgICAgIGlmIChv
cGVyYXRpb24pCi0gICAgICAgICAgICBhbW91bnQgPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24ob3BlcmF0aW9uKS0+YW1vdW50KCk7CisgICAgICAgICAgICBhbW91bnQg
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKS5hbW91bnQoKTsKICAgICAgICAgCi0gICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAw
OworICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0gbnVsbHB0cjsKICAgICAgICAgc3dpdGNo
IChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKICAgICAgICAgY2FzZSAwOiByb3dWZWN0
b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6YW1vdW50IFk6MCBaOjAgVzowXTsgYnJl
YWs7IC8vIGlucHV0UlZlY3RvcgogICAgICAgICBjYXNlIDE6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0
b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6YW1vdW50IFo6MCBXOjBdOyBicmVhazsgLy8gaW5wdXRH
VmVjdG9yCkBAIC00NDAsNyArNDM4LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FG
aWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXQKICAgICAg
ICAgLy8gQ29udHJhc3QgQ0lGaWx0ZXI6IGlucHV0Q29udHJhc3QKICAgICAgICAgZG91YmxlIGFt
b3VudCA9IDE7CiAgICAgICAgIGlmIChvcGVyYXRpb24pCi0gICAgICAgICAgICBhbW91bnQgPSB0
b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24ob3BlcmF0aW9uKS0+YW1vdW50
KCk7CisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAgICAgICAgCiAgICAgICAg
IHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKICNlbmRpZgpAQCAt
NDUxLDcgKzQ0OSw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Zmls
dGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIENBRmls
dGVyOiBpbnB1dFJhZGl1cwogICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKICAgICAgICAgaWYg
KG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodG9C
bHVyRmlsdGVyT3BlcmF0aW9uKG9wZXJhdGlvbiktPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAg
ICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikuc3RkRGV2aWF0aW9uKCksIDApOwogICAgICAgICAKICAgICAg
ICAgdmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOwogICAgICAgICBi
cmVhazsKQEAgLTQ2OCw3ICs0NjYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZp
bHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOgogewogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAg
ICAgICBkb3VibGUgdCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDA7CisgICAgICAgIGRvdWJs
ZSB0ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbikuYW1vdW50KCkgOiAwOwogICAgICAgICB0ID0gc3Rk
OjptaW4oc3RkOjptYXgoMC4wLCB0KSwgMS4wKTsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xv
ck1hdHJpeCA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVu
ZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgdCkp
LApAQCAtNDg3LDcgKzQ4NSw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVy
czo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4XTsKICAgICB9
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICBmbG9hdCBhbW91
bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkgOiAwOworICAgICAgICBmbG9hdCBhbW91
bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDA7CiAgICAgICAgIGZs
b2F0IG11bHRpcGxpZXIgPSAxIC0gYW1vdW50ICogMjsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBj
b2xvck1hdHJpeCA9IHsKICAgICAgICAgICAgIG11bHRpcGxpZXIsIDAsIDAsIDAsIGFtb3VudCwK
QEAgLTQ5OCw3ICs0OTYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6
OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOgogICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CiAgICAgfQog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgIGZsb2F0IGFtb3Vu
dCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDE7CisgICAgICAgIGZsb2F0IGFtb3Vu
dCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbiktPmFtb3VudCgpIDogMTsKICAgICAgICAgQ0FD
b2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsCiAg
ICAgICAgICAgICAwLCAxLCAwLCAwLCAwLApAQCAtNTA4LDcgKzUwNiw3IEBAIFJldGFpblB0cjxO
U1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihGaWx0
ZXJPcGVyYXRpb246CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0
cml4OmNvbG9yTWF0cml4XTsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRS
QVNUOiB7Ci0gICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IHRvQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQo
KSA6IDE7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbikt
PmFtb3VudCgpIDogMTsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCAr
IDAuNTsKICAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKICAgICAgICAgICAg
IGFtb3VudCwgMCwgMCwgMCwgaW50ZXJjZXB0LApAQCAtNTE5LDcgKzUxNyw3IEBAIFJldGFpblB0
cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihG
aWx0ZXJPcGVyYXRpb246CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9y
TWF0cml4OmNvbG9yTWF0cml4XTsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6IHsKLSAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gdG9C
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbiktPmFt
b3VudCgpIDogMTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKS0+YW1vdW50KCkgOiAxOwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0g
ewogICAgICAgICAgICAgYW1vdW50LCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgYW1vdW50
LCAwLCAwLCAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKaW5kZXggNzEwYWU2MzRhZmM4ZDcyYjZhNTgwMjM3OTBjNzI2Y2VhM2QxYmVi
MC4uZGQ1MTJhM2FjYjE3MGVkYmQ1MTgyZWJlOWU3M2UwZmMwMjQxZTEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MCw5
ICs3MCw2IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9maWx0ZXJTY2FsZTsKIH07CiAKLSNkZWZp
bmUgRklMVEVSX1RZUEVfQ0FTVFMoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLSAgICBU
WVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBGaWx0ZXIsIGZpbHRlciwgZmlsdGVyLT5w
cmVkaWNhdGUsIGZpbHRlci5wcmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKaW5kZXggZjVlZDczMjg0
YjIyZjE0YjY3ZGZiYjEwYzUzZmMzZDg4MDY5MDIyOC4uNzZkZDM0Y2UzYzk4ZmFkOTY4M2JkM2Nh
ZjIzYzI2Y2ZkNTVhOTc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcApAQCAtMzEsMTIgKzMx
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLWJvb2wgRGVmYXVsdEZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0Citib29s
IERlZmF1bHRGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiBvcGVyYXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICgh
aXNTYW1lVHlwZShvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
cmV0dXJuIHJlcHJlc2VudGVkVHlwZSgpID09IHRvRGVmYXVsdEZpbHRlck9wZXJhdGlvbihvKS5y
ZXByZXNlbnRlZFR5cGUoKTsKKyAgICByZXR1cm4gcmVwcmVzZW50ZWRUeXBlKCkgPT0gZG93bmNh
c3Q8RGVmYXVsdEZpbHRlck9wZXJhdGlvbj4ob3BlcmF0aW9uKS5yZXByZXNlbnRlZFR5cGUoKTsK
IH0KIAogUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24o
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCkBAIC01MCwxMiArNTAs
MTIgQEAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjp+UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
KCkKIHsKIH0KICAgICAKLWJvb2wgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKK2Jvb2wgUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb25z
dAogewotICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICBpZiAoIWlzU2FtZVR5cGUob3BlcmF0
aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBtX3VybCA9PSB0
b1JlZmVyZW5jZUZpbHRlck9wZXJhdGlvbihvKS5tX3VybDsKKyAgICByZXR1cm4gbV91cmwgPT0g
ZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihvcGVyYXRpb24pLm1fdXJsOwogfQog
ICAgIAogQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UqIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bjo6Z2V0T3JDcmVhdGVDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpCkBAIC03Myw4ICs3Myw4
IEBAIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPCiAgICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkK
ICAgICAgICAgcmV0dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91bnQoKSwgcHJvZ3Jlc3MpLCBt
X3R5cGUpOwogICAgICAgICAKLSAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKiBmcm9tT3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZnJvbSk7Ci0g
ICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3AgPyBmcm9tT3AtPmFtb3VudCgpIDogcGFzc3Ro
cm91Z2hBbW91bnQoKTsKKyAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZnJvbSk7CisgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9w
ZXJhdGlvbi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwogICAgIHJldHVybiBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFt
b3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIApAQCAtODIsNyArODIsNyBA
QCBpbmxpbmUgYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbwogewogICAgIGlmICghaXNTYW1lVHlwZShvKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIG90aGVyID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKG8pOworICAg
IGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIG90aGVyID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4obyk7CiAgICAgcmV0dXJuIG1fYW1vdW50
ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMDksMTYgKzEwOSwxNiBAQCBQYXNzUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
YmxlbmQoY29uc3QgRgogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCiAgICAgICAgIHJldHVy
biBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNzKSwgbV90eXBlKTsK
ICAgICAgICAgCi0gICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogZnJvbU9wID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZyb20p
OwotICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9wID8gZnJvbU9wLT5hbW91bnQoKSA6IHBh
c3N0aHJvdWdoQW1vdW50KCk7CisgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24+KGZyb20pOworICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9w
ZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91bnQoKTsK
ICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7
CiB9CiAKLWlubGluZSBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246
Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAoraW5saW5lIGJvb2wg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWlzU2FtZVR5cGUo
bykpCisgICAgaWYgKCFpc1NhbWVUeXBlKG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvdGhl
ciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvKTsKKyAgICBjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbik7CiAgICAg
cmV0dXJuIG1fYW1vdW50ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMzksMTIgKzEzOSwx
MiBAQCBkb3VibGUgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6cGFzc3Ro
cm91Z2hBbW91bnQoKSBjb25zdAogICAgIH0KIH0KICAgICAKLWJvb2wgQmx1ckZpbHRlck9wZXJh
dGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0Citib29sIEJs
dXJGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVy
YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICghaXNTYW1l
VHlwZShvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IG1fc3RkRGV2aWF0aW9uID09IHRvQmx1ckZpbHRlck9wZXJhdGlvbihvKS5zdGREZXZpYXRpb24o
KTsKKyAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8Rmls
dGVyT3BlcmF0aW9uPiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCkBA
IC0xNTcsOCArMTU3LDggQEAgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJP
cGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnIKICAgICBpZiAoYmxlbmRU
b1Bhc3N0aHJvdWdoKQogICAgICAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aChsZW5ndGhUeXBlKS5ibGVuZChtX3N0ZERldmlhdGlvbiwgcHJvZ3Jlc3MpKTsKIAot
ICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHRvQmx1ckZpbHRlck9wZXJh
dGlvbihmcm9tKTsKLSAgICBMZW5ndGggZnJvbUxlbmd0aCA9IGZyb21PcCA/IGZyb21PcC0+bV9z
dGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7CisgICAgY29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZy
b20pOworICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRp
b24tPm1fc3RkRGV2aWF0aW9uIDogTGVuZ3RoKGxlbmd0aFR5cGUpOwogICAgIHJldHVybiBCbHVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobV9zdGREZXZpYXRpb24uYmxlbmQoZnJvbUxlbmd0aCwg
cHJvZ3Jlc3MpKTsKIH0KICAgICAKQEAgLTE2Niw3ICsxNjYsNyBAQCBib29sIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25z
dAogewogICAgIGlmICghaXNTYW1lVHlwZShvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIG90aGVyID0gdG9Ecm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKG8pOworICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIG90
aGVyID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4obyk7CiAgICAgcmV0dXJu
IG1fbG9jYXRpb24gPT0gb3RoZXIubV9sb2NhdGlvbiAmJiBtX3N0ZERldmlhdGlvbiA9PSBvdGhl
ci5tX3N0ZERldmlhdGlvbiAmJiBtX2NvbG9yID09IG90aGVyLm1fY29sb3I7CiB9CiAgICAgCkBA
IC0xODEsMTAgKzE4MSwxMCBAQCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aQogICAgICAgICAgICAg
V2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dyZXNzKSwKICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIHByb2dy
ZXNzKSk7CiAKLSAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AgPSB0
b0Ryb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZnJvbSk7Ci0gICAgSW50UG9pbnQgZnJvbUxvY2F0
aW9uID0gZnJvbU9wID8gZnJvbU9wLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKLSAgICBpbnQg
ZnJvbVN0ZERldmlhdGlvbiA9IGZyb21PcCA/IGZyb21PcC0+c3RkRGV2aWF0aW9uKCkgOiAwOwot
ICAgIENvbG9yIGZyb21Db2xvciA9IGZyb21PcCA/IGZyb21PcC0+Y29sb3IoKSA6IENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiog
ZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20p
OworICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0
aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKKyAgICBpbnQgZnJvbVN0ZERldmlhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSA6IDA7CisgICAg
Q29sb3IgZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkg
OiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgIAogICAgIHJldHVybiBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21Mb2Nh
dGlvbiwgbV9sb2NhdGlvbiwgcHJvZ3Jlc3MpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYTE4
ZDk5NWJiZDcwMjUzYzc1MWFhYzc0M2IxYTI4MzM2NWE2MDVmZC4uNWZlMjAxMGRjOGI2MDY1NzFj
NjE3ZDgyN2JmOTIxMTBmM2U1MWI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIC8vIEFubm95aW5nbHksIHdp
bmdkaS5oICNkZWZpbmVzIHRoaXMuCkBAIC0xMTQsOSArMTE1LDYgQEAgcHJvdGVjdGVkOgogICAg
IE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAotI2RlZmluZSBGSUxURVJPUEVSQVRJT05fVFlQ
RV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFT
RShUb1ZhbHVlVHlwZU5hbWUsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbiwgdmFsdWUsIHZhbHVl
LT5wcmVkaWNhdGUsIHZhbHVlLnByZWRpY2F0ZSkKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgRGVm
YXVsdEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShPcGVy
YXRpb25UeXBlIHJlcHJlc2VudGVkVHlwZSkKQEAgLTE0Myw5ICsxNDEsNiBAQCBwcml2YXRlOgog
ICAgIE9wZXJhdGlvblR5cGUgbV9yZXByZXNlbnRlZFR5cGU7CiB9OwogCi1GSUxURVJPUEVSQVRJ
T05fVFlQRV9DQVNUUyhEZWZhdWx0RmlsdGVyT3BlcmF0aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3Bl
cmF0aW9uOjpERUZBVUxUKTsKLQotCiBjbGFzcyBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbiA6
IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGUoKQpAQCAtMTcwLDggKzE2NSw2IEBA
IHByaXZhdGU6CiAgICAgfQogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoUGFzc3Ro
cm91Z2hGaWx0ZXJPcGVyYXRpb24sIHR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJP
VUdIKTsKLQogY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21l
bnQpCkBAIC0yMTAsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2ZpbHRlckVmZmVjdDsKIH07CiAKLUZJTFRFUk9QRVJBVElPTl9UWVBFX0NBU1RTKFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiwgdHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
KTsKLQogLy8gR1JBWVNDQUxFLCBTRVBJQSwgU0FUVVJBVEUgYW5kIEhVRV9ST1RBVEUgYXJlIHZh
cmlhdGlvbnMgb24gYSBiYXNpYyBjb2xvciBtYXRyaXggZWZmZWN0LgogLy8gRm9yIEhVRV9ST1RB
VEUsIHRoZSBhbmdsZSBvZiByb3RhdGlvbiBpcyBzdG9yZWQgaW4gbV9hbW91bnQuCiBjbGFzcyBX
RUJDT1JFX0VYUE9SVCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZp
bHRlck9wZXJhdGlvbiB7CkBAIC0yNDQsOCArMjM1LDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV9hbW91bnQ7CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSk7
Ci0KIC8vIElOVkVSVCwgQlJJR0hUTkVTUywgQ09OVFJBU1QgYW5kIE9QQUNJVFkgYXJlIHZhcmlh
dGlvbnMgb24gYSBiYXNpYyBjb21wb25lbnQgdHJhbnNmZXIgZWZmZWN0LgogY2xhc3MgV0VCQ09S
RV9FWFBPUlQgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBG
aWx0ZXJPcGVyYXRpb24gewogcHVibGljOgpAQCAtMjc5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1fYW1vdW50OwogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiwgaXNCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uKCkpOwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBCbHVyRmlsdGVy
T3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Qmx1ckZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKExlbmd0aCBzdGREZXZpYXRp
b24pCkBAIC0zMTIsOCArMjk5LDYgQEAgcHJpdmF0ZToKICAgICBMZW5ndGggbV9zdGREZXZpYXRp
b247CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCbHVyRmlsdGVyT3BlcmF0aW9u
LCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpCTFVSKTsKLQogY2xhc3MgV0VCQ09SRV9FWFBP
UlQgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+
IGNyZWF0ZShjb25zdCBJbnRQb2ludCYgbG9jYXRpb24sIGludCBzdGREZXZpYXRpb24sIENvbG9y
IGNvbG9yKQpAQCAtMzUzLDggKzMzOCwxOSBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7
CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVyk7Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9Q
RVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIHsgcmV0dXJu
IG9wZXJhdGlvbi5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihEZWZhdWx0RmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUGFzc3Rocm91Z2hGaWx0ZXJPcGVy
YXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24sIGlzQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbigp
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oQmx1ckZpbHRlck9wZXJh
dGlvbiwgdHlwZSgpID09IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6QkxVUikKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24s
IHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKQorCiAjZW5k
aWYgLy8gRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCmluZGV4IGFm
ODIzNjYyMzcxMmE3ZTc4MjAzYWM1M2UwNGU3MmE2NjQwNDdjYzIuLmUxNTA1ZGQ4NTk2ZTI1MjUz
ODhkY2ExZDVjYjM5ZDFkZmY1MjgxODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcApAQCAt
MTA2LDI0ICsxMDYsMjQgQEAgRmlsdGVyT3V0c2V0cyBGaWx0ZXJPcGVyYXRpb25zOjpvdXRzZXRz
KCkgY29uc3QKIHsKICAgICBGaWx0ZXJPdXRzZXRzIHRvdGFsT3V0c2V0czsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IG1fb3BlcmF0aW9ucy5hdChpKS5n
ZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICptX29wZXJhdGlvbnMu
YXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgY29uc3QgQmx1ckZp
bHRlck9wZXJhdGlvbiogYmx1ck9wZXJhdGlvbiA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgICAgICAg
ICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1
ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IHN0
ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRp
b24oKSwgMCk7CiAgICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUgPSBvdXRzZXRTaXplRm9y
Qmx1cihzdGREZXZpYXRpb24pOwogICAgICAgICAgICAgRmlsdGVyT3V0c2V0cyBvdXRzZXRzKG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQo
KSwgb3V0c2V0U2l6ZS53aWR0aCgpKTsKICAgICAgICAgICAgIHRvdGFsT3V0c2V0cyArPSBvdXRz
ZXRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKiBkcm9wU2hhZG93T3BlcmF0aW9uID0gdG9Ecm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUg
PSBvdXRzZXRTaXplRm9yQmx1cihkcm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSk7
CisgICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93
T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IG91dHNldFNpemVGb3JC
bHVyKGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCkpOwogICAgICAgICAgICAgRmls
dGVyT3V0c2V0cyBvdXRzZXRzKAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91dHNldFNp
emUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9uLT55KCkpLAotICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KDAsIG91dHNldFNpemUud2lkdGgoKSArIGRyb3BTaGFkb3dPcGVyYXRpb24tPngo
KSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIGRy
b3BTaGFkb3dPcGVyYXRpb24tPnkoKSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0
c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlvbi0+eCgpKQorICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9u
LnkoKSksCisgICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
ZHJvcFNoYWRvd09wZXJhdGlvbi54KCkpLAorICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSksCisgICAgICAgICAg
ICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlv
bi54KCkpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgdG90YWxPdXRzZXRzICs9IG91dHNl
dHM7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGFlZjkwMmQ5OTk5NTY2ZDQ0MWIzNGY1NDAx
ODdhNjU5MjIzYjhhYjEuLmM1NWU3YWNhOWRiOGQ3NWUxOTEwMmI1Nzg1OTQ5YTgyYjBiYmFlODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcApAQCAtMTQzLDE4ICsxNDMsMTggQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYzsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgRmls
dGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
dChpKS5nZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgewor
ICAgICAgICBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAg
ICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlT3BlcmF0aW9uID0gdG9SZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgcmVmZXJl
bmNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZU9wZXJhdGlvbi0+c2V0RmlsdGVy
RWZmZWN0KGVmZmVjdCk7CisgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJl
ZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVy
KHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgJnJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAg
ICAgICByZWZlcmVuY2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0KGVmZmVjdCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNn
cmF5c2NhbGVFcXVpdmFsZW50CiAgICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KQEAgLTE4MCw5ICsxODAsOSBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpi
dWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNz
ZXBpYUVxdWl2YWxlbnQKICAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgpAQCAtMjA4LDI2ICsyMDgsMjYgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTogewotICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiog
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSkpOwor
ICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUodGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBp
bnB1dFBhcmFtZXRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gdG9CYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
CiAgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsKLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJp
eE9wZXJhdGlvbi0+YW1vdW50KCkpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkp
OwogICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKHRoaXMsIEZFQ09M
T1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIGlucHV0UGFyYW1ldGVycyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7
Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX1RBQkxFOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKSk7Ci0gICAgICAg
ICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAt
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSkpOworICAgICAgICAgICAgdHJh
bnNmZXJQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRl
cnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAtIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFs
dWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOwogCiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKQEAgLTIzNSwxMiArMjM1LDEyIEBAIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSB0b0Jh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKICAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRTsKICAgICAgICAgICAgIFZl
Y3RvcjxmbG9hdD4gdHJhbnNmZXJQYXJhbWV0ZXJzOwogICAgICAgICAgICAgdHJhbnNmZXJQYXJh
bWV0ZXJzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi0+YW1vdW50
KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwogICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsK
IAogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBA
IC0yNDgsMTAgKzI0OCwxMCBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3Vu
dCgpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKICAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKIAogICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwogICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKTsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKICAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIApAQCAtMjcxLDE1ICsyNzEsMTUgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBCbHVyRmlsdGVyT3BlcmF0aW9uKiBibHVyT3Bl
cmF0aW9uID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRp
b24tPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKICAgICAgICAgICAgIGVmZmVj
dCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUodGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRp
b24sIGNvbnN1bWVyID09IEZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RF
X0RVUExJQ0FURSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qIGRyb3BTaGFkb3dPcGVyYXRpb24gPSB0b0Ryb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNo
YWRvdzo6Y3JlYXRlKHRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCBk
cm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24tPngoKSwgZHJv
cFNoYWRvd09wZXJhdGlvbi0+eSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLT5jb2xvcigpLCAxKTsK
KyAgICAgICAgICAgIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRp
b24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUodGhpcywgZHJvcFNo
YWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZp
YXRpb24oKSwKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNo
YWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMjkyLDcgKzI5
Miw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBlZmZlY3QtPnNldENs
aXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyRnVuY3Rpb24pOwogICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCkgIT0gRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICAgICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQocHJldmlvdXNFZmZlY3QpOwogICAgICAgICAg
ICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoZWZmZWN0KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXgg
OGZiYjQxODNiZDdlM2IwMTNiMWU3ODcwYTIxZjE1YjQyYzE4OTU5Mi4uNjI4MjYyOGE5M2JjOTlj
OWEyZGVjZjUxZmUyZmQ1MjJlOGQ3Y2UwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTk5LDEyICs5OSwxMiBAQCB2b2lk
IFJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjp1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbgogewogICAgIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG9wZXJhdGlvbnMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0g
b3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChmaWx0ZXJPcGVy
YXRpb24tPnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAgRmls
dGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
aV07CisgICAgICAgIGlmICghaXM8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uID0gdG9SZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2UqIGRvY3VtZW50UmVmZXJlbmNlID0gcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLT5jYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZSgpOwotICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVk
U1ZHRG9jdW1lbnQgPSBkb2N1bWVudFJlZmVyZW5jZSA/IGRvY3VtZW50UmVmZXJlbmNlLT5kb2N1
bWVudCgpIDogMDsKKyAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiByZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKiBkb2N1bWVu
dFJlZmVyZW5jZSA9IHJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbi5jYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSgpOworICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkU1ZHRG9jdW1lbnQg
PSBkb2N1bWVudFJlZmVyZW5jZSA/IGRvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKIAogICAgICAgICBpZiAoY2FjaGVkU1ZHRG9jdW1lbnQpIHsKICAgICAgICAgICAgIC8v
IFJlZmVyZW5jZSBpcyBleHRlcm5hbDsgd2FpdCBmb3Igbm90aWZ5RmluaXNoZWQoKS4KQEAgLTEx
MywxMSArMTEzLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVy
ZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBSZWZlcmVuY2UgaXMgaW50ZXJuYWw7IGFkZCBsYXllciBhcyBhIGNs
aWVudCBzbyB3ZSBjYW4gdHJpZ2dlcgogICAgICAgICAgICAgLy8gZmlsdGVyIHJlcGFpbnQgb24g
U1ZHIGF0dHJpYnV0ZSBjaGFuZ2UuCi0gICAgICAgICAgICBFbGVtZW50KiBmaWx0ZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb24tPmZyYWdtZW50KCkpOworICAgICAgICAgICAgRWxlbWVudCogZmlsdGVyID0gbV9s
YXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQocmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uLmZyYWdtZW50KCkpOwogCi0gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCAhZmls
dGVyLT5yZW5kZXJlcigpIHx8ICFmaWx0ZXItPnJlbmRlcmVyKCktPmlzU1ZHUmVzb3VyY2VGaWx0
ZXIoKSkKKyAgICAgICAgICAgIGlmICghZmlsdGVyIHx8ICFpczxSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcj4oZmlsdGVyLT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKmZpbHRlci0+cmVuZGVyZXIo
KSkuYWRkQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOworICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXItPnJlbmRlcmVyKCkpLmFkZENsaWVudFJl
bmRlckxheWVyKCZtX2xheWVyKTsKICAgICAgICAgICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2Vz
LmFwcGVuZChmaWx0ZXIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmNwcAppbmRleCA4ZDA5NDE3ZWY3ZjQwNTRkNDYyMzE4ZWNmYjVhNjJmNTg0ZDY5ZmEw
Li5iMmMwMzljNjg3MzVmZmU2YTU3ZDgwODE2ZjFmYzlhNjJjOTZmNjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmNwcApAQCAtNzIsOCArNzIsNyBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29ucwogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsK
LSAgICBTVkdGaWx0ZXIqIGZpbHRlciA9IHRvU1ZHRmlsdGVyKCYoZWZmZWN0LT5maWx0ZXIoKSkp
OwotICAgIEFTU0VSVChmaWx0ZXIpOworICAgIFNWR0ZpbHRlciYgZmlsdGVyID0gZG93bmNhc3Q8
U1ZHRmlsdGVyPihlZmZlY3QtPmZpbHRlcigpKTsKIAogICAgIC8vIEZFVGlsZSwgRkVUdXJidWxl
bmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJl
Z2lvbiBhcyB1bml0ZSByZWN0LgogICAgIEZsb2F0UmVjdCBzdWJyZWdpb247CkBAIC04MiwxMSAr
ODEsMTEgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmkKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCiAgICAgICAgICAgICBzdWJyZWdp
b24udW5pdGUoZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRF
ZmZlY3QoaSkpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gZmlsdGVyLT5maWx0
ZXJSZWdpb25JblVzZXJTcGFjZSgpOworICAgICAgICBzdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVy
UmVnaW9uSW5Vc2VyU3BhY2UoKTsKIAogICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3Vi
cmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KICAgICBpZiAoZWZmZWN0LT5maWx0ZXJFZmZlY3RU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRl
ci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICAgICAgc3VicmVnaW9uID0gZmlsdGVy
LmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7CiAKICAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcyA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwogICAgIGlmIChlZmZlY3QtPmhhc1go
KSkKQEAgLTEwMCwxMiArOTksMTIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmkKIAogICAgIGVm
ZmVjdC0+c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7CiAKLSAgICBGbG9h
dFJlY3QgYWJzb2x1dGVTdWJyZWdpb24gPSBmaWx0ZXItPmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChzdWJyZWdpb24pOwotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlU3VicmVnaW9uID0g
ZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOworICAgIEZsb2F0
U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKICAgICBh
YnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uLndpZHRoKCksIGZpbHRlclJl
c29sdXRpb24uaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRv
IHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVNjYWxlZEZpbHRlclJl
Z2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlU2Nh
bGVkRmlsdGVyUmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogICAgIGFic29sdXRlU2Nh
bGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVz
b2x1dGlvbi5oZWlnaHQoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29s
dXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA1NzY1Y2JhNTkxYmMwNGZhOGVjYjVlMjI4YWUx
NDEwZjU3MmY0Yzk5Li41ODdmYTExZGM3ZTI1Njc5NzQwMDQyZDQzYmJjYTAzY2Q0ZGY4YzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDggKzU5LDEwIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOwogfTsKIAotRklMVEVSX1RZUEVf
Q0FTVFMoU1ZHRmlsdGVyLCBpc1NWR0ZpbHRlcigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1
cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
KwogI2VuZGlmIC8vIFNWR0ZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBmNzI5ZjVhNzhiMTE2YTVlYzVjMmUx
Njg4ODdjNDk2NjY5NjNjMTk4Li5lM2QyYzRjYjQ0ZjE5MDJjNmZmMzMyYTBmODUwZDYyYmE5NzAx
NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVu
dENvZGVycy5jcHAKQEAgLTY0LDMwICs2NCwzMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsCiB7
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmlsdGVycy5zaXplKCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlciA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAg
IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLT50eXBlKCk7Cisg
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyID0gKmZpbHRlcnMuYXQoaSk7Cisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLnR5cGUo
KTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0FUVVJBVEU6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgot
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHRvQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLT5hbW91bnQoKSk7CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyKS5hbW91bnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDoKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4odG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKGZpbHRlciktPmFtb3VudCgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXIpLmFtb3VudCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8
TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLT5z
dGREZXZpYXRpb24oKSk7CisgICAgICAgICAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29k
ZShlbmNvZGVyLCBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpLnN0ZERldmlh
dGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVy
YXRpb24qIHNoYWRvdyA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOwotICAg
ICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFkb3ct
PmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQzMl90
PihzaGFkb3ctPnN0ZERldmlhdGlvbigpKTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8Q29s
b3I+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5jb2xvcigpKTsKKyAgICAgICAgICAgIGNvbnN0
IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIHNoYWRvdyA9IGRvd25jYXN0PERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CisgICAgICAgICAgICBBcmd1bWVudENvZGVyPEludFBv
aW50Pjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LnN0ZERldmlhdGlvbigpKTsKKyAg
ICAgICAgICAgIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LmNv
bG9yKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggY2RmYTcwZmMwNjk3MWQ2ZjNmMjBkNzcyNTA3Yjkw
ZjVhMTIxZjllNy4uYTYwMWNhODVkNTA1MjVlNDE4OTA1OGI5MzA4M2E5ZjEzMGRhY2JmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAg
LTE1MzgsMjYgKzE1MzgsMjYgQEAgdm9pZCBBcmd1bWVudENvZGVyPEZpbHRlck9wZXJhdGlvbj46
OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZpbHQKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRF
OgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBlbmNvZGVy
IDw8IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLmFtb3VudCgpOwor
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlcikuYW1vdW50KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgotICAgICAgICBlbmNvZGVyIDw8IHRvQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLmFtb3VudCgpOworICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1v
dW50KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgot
ICAgICAgICBlbmNvZGVyIDw8IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpLnN0ZERldmlh
dGlvbigpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlcikuc3RkRGV2aWF0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICBjb25zdCBhdXRvJiBkcm9wU2hhZG93
RmlsdGVyID0gdG9Ecm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNv
bnN0IGF1dG8mIGRyb3BTaGFkb3dGaWx0ZXIgPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXIpOwogICAgICAgICBlbmNvZGVyIDw8IGRyb3BTaGFkb3dGaWx0ZXIubG9j
YXRpb24oKTsKICAgICAgICAgZW5jb2RlciA8PCBkcm9wU2hhZG93RmlsdGVyLnN0ZERldmlhdGlv
bigpOwogICAgICAgICBlbmNvZGVyIDw8IGRyb3BTaGFkb3dGaWx0ZXIuY29sb3IoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgotICAg
ICAgICBlbmNvZGVyLmVuY29kZUVudW0odG9EZWZhdWx0RmlsdGVyT3BlcmF0aW9uKGZpbHRlciku
cmVwcmVzZW50ZWRUeXBlKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oZG93bmNhc3Q8
RGVmYXVsdEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKS5yZXByZXNlbnRlZFR5cGUoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCAxMTI3NmMzZmI5MjQ3MmNmM2JlNGRkYWIyYzM0
NzUxNDIwYTgxNmQzLi4zZmU2OGQ4MzE0NTBlMGViN2RjMjI3NDdmYzgwZDc3ODI1ZTIwNjZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24ubW0KQEAgLTY5NCw1MiArNjk0LDUyIEBAIFJlbW90ZUxheWVyVHJlZVRleHRT
dHJlYW0mIFJlbW90ZUxheWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRmlsdGVy
T3BlCiAgICAgICAgIHRzIDw8ICJyZWZlcmVuY2UiOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gdG9CYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImdyYXlzY2Fs
ZSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICBjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRlciA9IHRv
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRlciA9IGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAgIHRz
IDw8ICJzZXBpYSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewot
ICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eEZpbHRlciA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAg
ICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZp
bHRlciA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7
CiAgICAgICAgIHRzIDw8ICJzYXR1cmF0ZSgiIDw8IGNvbG9yTWF0cml4RmlsdGVyLmFtb3VudCgp
IDw8ICIpIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4RmlsdGVyID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4RmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImh1ZS1yb3RhdGUoIiA8PCBjb2xvck1h
dHJpeEZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0gdG9C
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImludmVydCgiIDw8IGNvbXBvbmVudFRyYW5zZmVy
RmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0gdG9CYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVy
RmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyKTsKICAgICAgICAgdHMgPDwgIm9wYWNpdHkoIiA8PCBjb21wb25lbnRUcmFuc2ZlckZp
bHRlci5hbW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2ZlckZpbHRlciA9IHRvQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ckZpbHRlciA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlcik7CiAgICAgICAgIHRzIDw8ICJicmlnaHRuZXNzKCIgPDwgY29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyID0gdG9C
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImNvbnRyYXN0KCIgPDwgY29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJh
dGlvbiYgYmx1ckZpbHRlciA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAg
ICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyRmlsdGVyID0gZG93bmNhc3Q8Qmx1ckZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMgPDwgImJsdXIoIiA8PCBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGJsdXJGaWx0ZXIuc3RkRGV2aWF0aW9uKCksIDApIDw8ICIpIjsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzog
ewotICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93Rmls
dGVyID0gdG9Ecm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7CisgICAgICAgIGNvbnN0
IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dGaWx0ZXIgPSBkb3duY2FzdDxE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICB0cyA8PCAiZHJvcC1z
aGFkb3coIiA8PCBkcm9wU2hhZG93RmlsdGVyLngoKSA8PCAiICIgPDwgZHJvcFNoYWRvd0ZpbHRl
ci55KCkgPDwgIiAiIDw8IGRyb3BTaGFkb3dGaWx0ZXIubG9jYXRpb24oKSA8PCAiICI7CiAgICAg
ICAgIHRzIDw8IGRyb3BTaGFkb3dGaWx0ZXIuY29sb3IoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFr
OwpAQCAtNzQ4LDcgKzc0OCw3IEBAIFJlbW90ZUxheWVyVHJlZVRleHRTdHJlYW0mIFJlbW90ZUxh
eWVyVHJlZVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRmlsdGVyT3BlCiAgICAgICAgIHRz
IDw8ICJwYXNzdGhyb3VnaCI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpERUZBVUxUOiB7Ci0gICAgICAgIGNvbnN0IERlZmF1bHRGaWx0ZXJPcGVyYXRpb24mIGRl
ZmF1bHRGaWx0ZXIgPSB0b0RlZmF1bHRGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsKKyAgICAgICAg
Y29uc3QgRGVmYXVsdEZpbHRlck9wZXJhdGlvbiYgZGVmYXVsdEZpbHRlciA9IGRvd25jYXN0PERl
ZmF1bHRGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAgIHRzIDw8ICJkZWZhdWx0IHR5
cGU9IiA8PCAoaW50KWRlZmF1bHRGaWx0ZXIucmVwcmVzZW50ZWRUeXBlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239730</attachid>
            <date>2014-10-13 10:19:07 -0700</date>
            <delta_ts>2014-10-13 11:28:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137644-20141013101912.patch</filename>
            <type>text/plain</type>
            <size>78037</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RlYjYzYjdlYThkMGI4
YjMyODE0NGEzZTY5MTdmYzY4ZjFkZjU4OS4uOWMzMmYwYjZkN2E2M2RkMGRlNmQ5NTVkYTQ1ZmU5
OTUwMzVkNzY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE0LTEwLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgRmlsdGVyIC8gRmlsdGVyT3BlcmF0aW9uIHN1YmNsYXNzZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY0NAorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2Fz
dDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJhdGlvbiBzdWJjbGFzc2VzLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUZp
bHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0
ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRGaWx0ZXJP
cGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Om91dHNldHMpOgorICAgICAgICAqIHJlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6YnVpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcklu
Zm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0
ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAg
ICAgIChpc1R5cGUpOgorCiAyMDE0LTEwLTEzICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRv
YmUuY29tPgogCiAgICAgICAgIFtDU1NSZWdpb25zXSBNYWtlIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbiBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGJhYmYyODFjYWY5
YzA2M2VhMTllZTRjNmMxZDI4OWJlMTIwY2RiY2MuLjhiMDM2MjYzMTNlMDUwNDA3Yzk5NDJjM2Q4
ZDhlMmI0NDQzMjA4YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNC0xMC0xMSAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIEZpbHRlciAvIEZpbHRlck9wZXJhdGlvbiBzdWJjbGFzc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc2NDQKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93
bmNhc3Q8PigpIGZvciBGaWx0ZXIgLyBGaWx0ZXJPcGVyYXRpb24gc3ViY2xhc3Nlcy4KKworICAg
ICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucz46OmVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RmlsdGVyT3BlcmF0aW9u
Pjo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUZXh0U3RyZWFtOjpvcGVy
YXRvcjw8KToKKwogMjAxNC0xMC0xMiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gW1dLMl0gV2ViUHJvY2VzcyBhbmQgTmV0d29ya1By
b2Nlc3MgaW5pdGlhbGl6YXRpb24gY2xlYXJzIGNhY2hlIGNvbnRlbnRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGY5YzRi
YTVhM2QwNWMwNGQxZDQ4MmRkM2Y2NGU3NjEwZGY3OGIzZGMuLjZiNzgzNmJiOTM0ZGE0NzJkYjhj
OWYzMGU3NmJjZDU1NGViOGQ5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC04OTMsNzMgKzg5Myw3MyBAQCBQYXNzUmVm
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bAogCiAgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+Pjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gZmlsdGVyT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuZW5kKCk7
CiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGZpbHRlck9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9ICgqaXQp
LmdldCgpOwotICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpKSB7CisgICAg
ICAgIEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uID0gKippdDsKKyAgICAgICAgc3dp
dGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiog
cmVmZXJlbmNlT3BlcmF0aW9uID0gdG9SZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgcmVmZXJlbmNl
T3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShyZWZlcmVuY2VPcGVyYXRpb24tPnVybCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkp
OworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShyZWZlcmVuY2VPcGVyYXRpb24udXJsKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAg
ZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRl
clZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlv
bi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAg
ICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNFUElBOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFs
dWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpT
ZXBpYUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVl
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHsKLSAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9w
ZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0g
ICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRp
b24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JN
YXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfREVHKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICAgICAgQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZp
bHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAg
ICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IHRvQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
KiBicmlnaHRuZXNzT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uJiBicmlnaHRuZXNzT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBm
aWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJyaWdodG5lc3NP
cGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShi
cmlnaHRuZXNzT3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBjb250cmFzdE9wZXJhdGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29udHJhc3RPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3Jl
YXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNv
bnRyYXN0T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoY29udHJhc3RPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgQmx1ckZpbHRlck9wZXJhdGlvbiog
Ymx1ck9wZXJhdGlvbiA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICAgICAgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0
ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkJsdXJGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChhZGp1c3RMZW5ndGhGb3Jab29tKGJsdXJPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCBzdHls
ZSwgYWRqdXN0KSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGFkanVzdExlbmd0
aEZvclpvb20oYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgc3R5bGUsIGFkanVzdCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
KiBkcm9wU2hhZG93T3BlcmF0aW9uID0gdG9Ecm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgICAgICBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9w
U2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICAvLyBXZSB3YW50IG91ciBjb21wdXRlZCBzdHlsZSB0byBsb29r
IGxpa2UgdGhhdCBvZiBhIHRleHQgc2hhZG93IChoYXMgbmVpdGhlciBzcHJlYWQgbm9yIGluc2V0
IHN0eWxlKS4KLSAgICAgICAgICAgIFNoYWRvd0RhdGEgc2hhZG93RGF0YSA9IFNoYWRvd0RhdGEo
ZHJvcFNoYWRvd09wZXJhdGlvbi0+bG9jYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi0+c3Rk
RGV2aWF0aW9uKCksIDAsIE5vcm1hbCwgZmFsc2UsIGRyb3BTaGFkb3dPcGVyYXRpb24tPmNvbG9y
KCkpOworICAgICAgICAgICAgU2hhZG93RGF0YSBzaGFkb3dEYXRhID0gU2hhZG93RGF0YShkcm9w
U2hhZG93T3BlcmF0aW9uLmxvY2F0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0
aW9uKCksIDAsIE5vcm1hbCwgZmFsc2UsIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSk7CiAg
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKHZhbHVlRm9yU2hhZG93KCZzaGFkb3dEYXRh
LCBDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHN0eWxlLCBhZGp1c3QpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KaW5kZXggMjQ4Zjll
ZDY1NjgzYjM2ODIwYjJmYWZkMzk5MzBhMDRhOTNhYzQxMC4uNGUyMjVmNDgwZWFjNTgwMTVkZjYy
MmIyN2MxOGE5ZDhiYTE0NmNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbQpAQCAt
NzEsMzcgKzcxLDM3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVy
KFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RyaW5n
IGZpbHRlck5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVyXyVkIiwgaSk7Ci0gICAgICAgIGNv
bnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKLSAg
ICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpmaWx0ZXJzLmF0KGkpOworICAgICAg
ICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRFRkFVTFQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFzc3VtZSBkcm9wIHNoYWRvdyBp
cyB0aGUgbGFzdCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIuCiAgICAgICAgICAgICAvLyA8
cmRhcjovL3Byb2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdoZXJlIGRyb3Atc2hhZG93IGlz
IG5vdCB0aGUgbGFzdCBmaWx0ZXIuCi0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKG9wLT54
KCksIG9wLT55KCkpXTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRp
b24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSldOwogCiAgICAgICAgICAg
ICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgICAgICAgICBvcC0+Y29sb3IoKS5nZXRSR0JB
KGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNb
M10pOworICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLmdldFJHQkEoY29t
cG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7
CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRv
cHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5n
ZXQoKSwgY29tcG9uZW50cykpOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd0NvbG9yOmNv
bG9yLmdldCgpXTsKLSAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dSYWRpdXM6b3AtPnN0ZERl
dmlhdGlvbigpXTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dSYWRpdXM6ZHJvcFNoYWRv
d09wZXJhdGlvbi5zdGREZXZpYXRpb24oKV07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93
T3BhY2l0eToxXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjaWYgVVNFX0NBX0ZJ
TFRFUlMKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAg
ICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Jhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmls
dGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNb25v
Y2hyb21lXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CisgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1Zh
bHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCksIGZpbHRlck9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBl
KCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRD
b2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpA
QCAtMTA5LDI0ICsxMDksMjQgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09u
TGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RTogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiog
b3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmls
dGVyQ29sb3JTYXR1cmF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOwor
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNv
bG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBjb25z
dCBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAq
ZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySHVlUm90YXRl
XTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDpkZWcycmFkKG9wLT5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKKyAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKGNv
bG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOkAiaHVlUm90YXRlIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CiAgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1
ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVl
Rm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAg
ICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNB
RmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgp
LCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FG
aWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29s
b3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKQEAg
LTEzNCw3ICsxMzQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXll
cihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsK
LSAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZv
cm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLT50
eXBlKCksIGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4g
Y29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9y
RmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAg
ICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0
ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4
VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgUmV0YWluUHRyPE5T
VmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhW
YWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSwgZmlsdGVyT3BlcmF0aW9uKTsK
KyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZv
cm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5
cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0g
W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1
dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09u
TGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDogewotICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQ
bGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRp
b24tPnR5cGUoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1Zh
bHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAg
ICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtD
QUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JN
YXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CkBAIC0xNTgsMzAgKzE1OCwzMCBAQCB2b2lk
IFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXll
ciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1
ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVy
ICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyR2F1c3NpYW5CbHVy
XTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDpmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpAImlu
cHV0UmFkaXVzIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlv
bigpLCAwKV0gZm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0
TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6Zmls
dGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JN
YXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZp
bHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNb25vY2hyb21lIl07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVt
YmVyIG51bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0SW50ZW5zaXR5
Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0SW50ZW5zaXR5
Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSUNvbG9yIGNvbG9yV2l0aFJlZDow
LjY3IGdyZWVuOjAuNjcgYmx1ZTowLjY3XSBmb3JLZXk6QCJpbnB1dENvbG9yIl07IC8vIENvbG9y
IGRlcml2ZWQgZW1waXJpY2FsbHkgdG8gbWF0Y2ggemVybyBzYXR1cmF0aW9uIGxldmVscy4KICAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAgICAgICAgICAgIFthcnJh
eS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKIAotICAgICAgICAgICAgZG91YmxlIHQgPSBvcC0+
YW1vdW50KCk7CisgICAgICAgICAgICBkb3VibGUgdCA9IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFt
b3VudCgpOwogICAgICAgICAgICAgdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogcmVzdWx0cyBkb24ndCBtYXRjaCB0aGUgc29mdHdhcmUg
ZmlsdGVyLgogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMF0sIHQpCkBAIC0xOTgsMzAgKzE5OCwzMCBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0
ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVy
T3BlcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwogICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIkNJQ29sb3JDb250cm9scyJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRE
ZWZhdWx0c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dFNhdHVyYXRpb24iXTsKKyAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CiAgICAgICAgICAgICBbYXJyYXku
Z2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAg
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBm
aWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUh1ZUFkanVzdCJdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKG9wLT5hbW91bnQoKSldIGZvcktl
eTpAImlucHV0QW5nbGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDpkZWcycmFkKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0g
Zm9yS2V5OkAiaW5wdXRBbmdsZSJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwogICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldERlZmF1bHRzXTsKIAotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSAx
IC0gb3AtPmFtb3VudCgpICogMjsKKyAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMSAt
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpICogMjsKIAogICAgICAgICAgICAg
Ly8gRklYTUU6IHRoZSByZXN1bHRzIG9mIHRoaXMgZmlsdGVyIGxvb2sgd3JvbmcuCiAgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDptdWx0aXBsaWVyIFk6
MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKQEAgLTIzNCwyNCArMjM0LDI0IEBA
IHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0Jhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAg
ICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUNvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKIAogICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MSBZOjAgWjow
IFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MSBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdW
ZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOjAgWTowIFo6MSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6b3AtPmFt
b3VudCgpXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOmNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOjBdIGZv
cktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOwogICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAgICAgICBkb3VibGUgYW1vdW50ID0g
b3AtPmFtb3VudCgpOworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uLmFtb3VudCgpOwogCiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDphbW91bnQgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0UlZl
Y3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6MCBZOmFtb3VudCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKQEAgLTI2MSwy
MCArMjYxLDIwIEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBs
YXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAg
ICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9w
ID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CiAgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldERl
ZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0Q29udHJhc3QiXTsKKyAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRDb250cmFzdCJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwogICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIGlnbm9yZSBzdGREZXZpYXRpb25ZLgotICAgICAgICAgICAgY29uc3Qg
Qmx1ckZpbHRlck9wZXJhdGlvbiogb3AgPSB0b0JsdXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0lG
aWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJR2F1c3NpYW5CbHVy
Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG9wLT5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpAImlucHV0UmFkaXVzIl07CisgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1
ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKV0gZm9yS2V5OkAiaW5w
dXRSYWRpdXMiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKICAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzAyLDggKzMwMiw4IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmls
dGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPnR5cGUoKTsKICAg
ICBSZXRhaW5QdHI8aWQ+IHZhbHVlOwogICAgIAotICAgIGlmICh0eXBlID09IEZpbHRlck9wZXJh
dGlvbjo6REVGQVVMVCkgewotICAgICAgICB0eXBlID0gdG9EZWZhdWx0RmlsdGVyT3BlcmF0aW9u
KG9wZXJhdGlvbiktPnJlcHJlc2VudGVkVHlwZSgpOworICAgIGlmIChpczxEZWZhdWx0RmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSkgeworICAgICAgICB0eXBlID0gZG93bmNhc3Q8RGVmYXVs
dEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikucmVwcmVzZW50ZWRUeXBlKCk7CiAgICAgICAg
IG9wZXJhdGlvbiA9IG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMzE2LDcgKzMxNiw3IEBAIFJl
dGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRp
b24oY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dEFtb3VudAog
ICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAg
ICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihvcGVyYXRp
b24pLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAg
ICAgICAgdmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOwogICAgICAg
ICBicmVhazsKQEAgLTMyOCwxMiArMzI4LDEwIEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9y
bUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0CiAj
ZWxzZQogICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRSVmVjdG9yLCBpbnB1dEdWZWN0b3IsIGlu
cHV0QlZlY3RvcgogICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKLSAgICAgICAgaWYgKG9wZXJh
dGlvbikgewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biogb3AgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
b3BlcmF0aW9uKQorICAgICAgICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7CiAKLSAgICAgICAgQ0lWZWN0
b3IqIHJvd1ZlY3RvciA9IDA7CisgICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSBudWxscHRy
OwogICAgICAgICBzd2l0Y2ggKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgewogICAgICAg
ICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDpXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsw
XSwgYW1vdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlh
RnVsbENvbnN0YW50c1swXVsxXSwgYW1vdW50KQpAQCAtMzU0LDcgKzM1Miw3IEBAIFJldGFpblB0
cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29u
c3QgRmlsdGVyT3BlcmF0CiAgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dEFtb3VudAogICAgICAg
ICBkb3VibGUgYW1vdW50ID0gMTsKICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAg
IGFtb3VudCA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5h
bW91bnQoKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAg
dmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOwogICAgICAgICBicmVh
azsKQEAgLTM2NCw3ICszNjIsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRl
cnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAv
LyBIdWUgcm90YXRlIENBRmlsdGVyOiBpbnB1dEFuZ2xlCiAgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAwOwogICAgICAgICBpZiAob3BlcmF0aW9uKQotICAgICAgICAgICAgYW1vdW50ID0gdG9CYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKG9wZXJhdGlvbiktPmFtb3VudCgpOworICAgICAg
ICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikuYW1vdW50KCk7CiAgICAgICAgIAogICAgICAgICBhbW91bnQgPSBkZWcycmFk
KGFtb3VudCk7CiAgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1v
dW50XTsKQEAgLTM3OCw3ICszNzYsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZp
bHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAg
ICAvLyBDSUZpbHRlcjogaW5wdXRSVmVjdG9yLCBpbnB1dEdWZWN0b3IsIGlucHV0QlZlY3Rvciwg
aW5wdXRCaWFzVmVjdG9yCiAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwogICAgICAgICBpZiAo
b3BlcmF0aW9uKQotICAgICAgICAgICAgYW1vdW50ID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKG9wZXJhdGlvbiktPmFtb3VudCgpOworICAgICAgICAgICAgYW1vdW50
ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJh
dGlvbikuYW1vdW50KCk7CiAgICAgICAgIAogICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEg
LSBhbW91bnQgKiAyOwogCkBAIC00MDQsNyArNDAyLDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBs
YXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVy
YXQKICAgICAgICAgLy8gT3BhY2l0eSBDSUZpbHRlcjogaW5wdXRBVmVjdG9yCiAgICAgICAgIGRv
dWJsZSBhbW91bnQgPSAxOwogICAgICAgICBpZiAob3BlcmF0aW9uKQotICAgICAgICAgICAgYW1v
dW50ID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKG9wZXJhdGlvbikt
PmFtb3VudCgpOworICAgICAgICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7CiAgICAgICAgIAog
ICAgICAgICB2YWx1ZSA9IGFkb3B0TlMoW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOjAgWTow
IFo6MCBXOmFtb3VudF0pOwogI2VuZGlmCkBAIC00MTksOSArNDE3LDkgQEAgUmV0YWluUHRyPE5T
VmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBG
aWx0ZXJPcGVyYXQKICAgICAgICAgLy8gQnJpZ2h0bmVzcyBDSUZpbHRlcjogaW5wdXRDb2xvck1h
dHJpeAogICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKICAgICAgICAgaWYgKG9wZXJhdGlvbikK
LSAgICAgICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbihvcGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3Vu
dCgpOwogICAgICAgICAKLSAgICAgICAgQ0lWZWN0b3IqIHJvd1ZlY3RvciA9IDA7CisgICAgICAg
IENJVmVjdG9yKiByb3dWZWN0b3IgPSBudWxscHRyOwogICAgICAgICBzd2l0Y2ggKGludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCkgewogICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtbQ0lW
ZWN0b3IgYWxsb2NdIGluaXRXaXRoWDphbW91bnQgWTowIFo6MCBXOjBdOyBicmVhazsgLy8gaW5w
dXRSVmVjdG9yCiAgICAgICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10g
aW5pdFdpdGhYOjAgWTphbW91bnQgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKQEAg
LTQ0MCw3ICs0MzgsNyBAQCBSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZp
bHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAvLyBDb250
cmFzdCBDSUZpbHRlcjogaW5wdXRDb250cmFzdAogICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsK
ICAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IHRvQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvcGVyYXRpb24pLT5hbW91bnQoKTsKKyAgICAg
ICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwogICAgICAgICAKICAgICAgICAgdmFsdWUgPSBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOwogI2VuZGlmCkBAIC00NTEsNyArNDQ5
LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXQKICAgICAgICAgLy8gQ0FGaWx0ZXI6IGlucHV0
UmFkaXVzCiAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwogICAgICAgICBpZiAob3BlcmF0aW9u
KQotICAgICAgICAgICAgYW1vdW50ID0gZmxvYXRWYWx1ZUZvckxlbmd0aCh0b0JsdXJGaWx0ZXJP
cGVyYXRpb24ob3BlcmF0aW9uKS0+c3RkRGV2aWF0aW9uKCksIDApOworICAgICAgICAgICAgYW1v
dW50ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKSwgMCk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9
IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF07CiAgICAgICAgIGJyZWFrOwpAQCAt
NDY4LDcgKzQ2Niw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29s
b3JNYXRyaXhWYWx1ZUZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246CiB7CiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgIGRvdWJs
ZSB0ID0gZmlsdGVyT3BlcmF0aW9uID8gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KGZpbHRlck9wZXJhdGlvbiktPmFtb3VudCgpIDogMDsKKyAgICAgICAgZG91YmxlIHQgPSBmaWx0
ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigq
ZmlsdGVyT3BlcmF0aW9uKS5hbW91bnQoKSA6IDA7CiAgICAgICAgIHQgPSBzdGQ6Om1pbihzdGQ6
Om1heCgwLjAsIHQpLCAxLjApOwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0g
ewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9u
ZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KSksCkBAIC00ODcs
NyArNDg1LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1h
dHJpeFZhbHVlRm9yRmlsdGVyKEZpbHRlck9wZXJhdGlvbjoKICAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOwogICAgIH0KICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRl
ck9wZXJhdGlvbiA/IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0
ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDA7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRl
ck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpmaWx0ZXJPcGVyYXRpb24pLmFtb3VudCgpIDogMDsKICAgICAgICAgZmxvYXQgbXVsdGlw
bGllciA9IDEgLSBhbW91bnQgKiAyOwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4
ID0gewogICAgICAgICAgICAgbXVsdGlwbGllciwgMCwgMCwgMCwgYW1vdW50LApAQCAtNDk4LDcg
KzQ5Niw3IEBAIFJldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRy
aXhWYWx1ZUZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4XTsKICAgICB9CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVy
T3BlcmF0aW9uID8gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRl
ck9wZXJhdGlvbiktPmFtb3VudCgpIDogMTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVy
T3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkgOiAxOwogICAgICAgICBDQUNvbG9yTWF0cml4
IGNvbG9yTWF0cml4ID0gewogICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCwKICAgICAgICAgICAg
IDAsIDEsIDAsIDAsIDAsCkBAIC01MDgsNyArNTA2LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBs
YXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKEZpbHRlck9wZXJhdGlv
bjoKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JN
YXRyaXhdOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAg
ICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gdG9CYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbiktPmFtb3VudCgpIDogMTsKKyAg
ICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkg
OiAxOwogICAgICAgICBmbG9hdCBpbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwogICAg
ICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gewogICAgICAgICAgICAgYW1vdW50LCAw
LCAwLCAwLCBpbnRlcmNlcHQsCkBAIC01MTksNyArNTE3LDcgQEAgUmV0YWluUHRyPE5TVmFsdWU+
IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKEZpbHRlck9wZXJh
dGlvbjoKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29s
b3JNYXRyaXhdOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzog
ewotICAgICAgICBmbG9hdCBhbW91bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyB0b0Jhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkgOiAx
OworICAgICAgICBmbG9hdCBhbW91bnQgPSBmaWx0ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pLT5hbW91
bnQoKSA6IDE7CiAgICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRyaXggPSB7CiAgICAgICAg
ICAgICBhbW91bnQsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBhbW91bnQsIDAsIDAsIDAs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aAppbmRleCA3MTBhZTYzNGFmYzhkNzJiNmE1ODAyMzc5MGM3MjZjZWEzZDFiZWIwLi5kZDUxMmEz
YWNiMTcwZWRiZDUxODJlYmU5ZTczZTBmYzAyNDFlMTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcwLDkgKzcwLDYgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxlOwogfTsKIAotI2RlZmluZSBGSUxURVJf
VFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNf
QkFTRShUb1ZhbHVlVHlwZU5hbWUsIEZpbHRlciwgZmlsdGVyLCBmaWx0ZXItPnByZWRpY2F0ZSwg
ZmlsdGVyLnByZWRpY2F0ZSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAppbmRleCBmNWVkNzMyODRiMjJmMTRiNjdk
ZmJiMTBjNTNmYzNkODgwNjkwMjI4Li5iMTg5ZTE0Y2RjYjY0ZGZhOWNhMmE5NWUxNWYwNmE4NGE1
OWY3YTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCkBAIC0zMSwxMiArMzEsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotYm9vbCBEZWZhdWx0RmlsdGVyT3BlcmF0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKK2Jvb2wgRGVmYXVsdEZp
bHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlv
bikgY29uc3QKIHsKLSAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgaWYgKCFpc1NhbWVUeXBl
KG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gcmVw
cmVzZW50ZWRUeXBlKCkgPT0gdG9EZWZhdWx0RmlsdGVyT3BlcmF0aW9uKG8pLnJlcHJlc2VudGVk
VHlwZSgpOworICAgIHJldHVybiByZXByZXNlbnRlZFR5cGUoKSA9PSBkb3duY2FzdDxEZWZhdWx0
RmlsdGVyT3BlcmF0aW9uPihvcGVyYXRpb24pLnJlcHJlc2VudGVkVHlwZSgpOwogfQogCiBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb246OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbihjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKQEAgLTUwLDEyICs1MCwxMiBAQCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb246On5SZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24oKQogewogfQog
ICAgIAotYm9vbCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmls
dGVyT3BlcmF0aW9uJiBvKSBjb25zdAorYm9vbCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246Om9w
ZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CiB7Ci0gICAg
aWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICghaXNTYW1lVHlwZShvcGVyYXRpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fdXJsID09IHRvUmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uKG8pLm1fdXJsOworICAgIHJldHVybiBtX3VybCA9PSBkb3duY2FzdDxS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbikubV91cmw7CiB9CiAgICAgCiBDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZSogUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpnZXRPckNy
ZWF0ZUNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKCkKQEAgLTczLDE2ICs3MywxNiBAQCBQYXNz
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6
YmxlbmQoY29uc3QgRmlsdGVyTwogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCiAgICAgICAg
IHJldHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNzKSwgbV90eXBlKTsK
ICAgICAgICAgCi0gICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogZnJv
bU9wID0gdG9CYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZyb20pOwotICAgIGRvdWJs
ZSBmcm9tQW1vdW50ID0gZnJvbU9wID8gZnJvbU9wLT5hbW91bnQoKSA6IHBhc3N0aHJvdWdoQW1v
dW50KCk7CisgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogZnJvbU9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZyb20p
OworICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24t
PmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91bnQoKTsKICAgICByZXR1cm4gQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1f
YW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWlubGluZSBib29sIEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBv
KSBjb25zdAoraW5saW5lIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6b3Bl
cmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKIHsKLSAgICBp
ZiAoIWlzU2FtZVR5cGUobykpCisgICAgaWYgKCFpc1NhbWVUeXBlKG9wZXJhdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uJiBvdGhlciA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihvKTsKKyAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IGRvd25jYXN0PEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIG1f
YW1vdW50ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMDksMTYgKzEwOSwxNiBAQCBQYXNz
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbjo6YmxlbmQoY29uc3QgRgogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCiAgICAgICAg
IHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2Vi
Q29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNzKSwgbV90
eXBlKTsKICAgICAgICAgCi0gICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiogZnJvbU9wID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
KGZyb20pOwotICAgIGRvdWJsZSBmcm9tQW1vdW50ID0gZnJvbU9wID8gZnJvbU9wLT5hbW91bnQo
KSA6IHBhc3N0aHJvdWdoQW1vdW50KCk7CisgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZyb20pOworICAgIGRvdWJsZSBmcm9tQW1vdW50ID0g
ZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91
bnQoKTsKICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1f
dHlwZSk7CiB9CiAKLWlubGluZSBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAoraW5saW5l
IGJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PShj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWlzU2Ft
ZVR5cGUobykpCisgICAgaWYgKCFpc1NhbWVUeXBlKG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
JiBvdGhlciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihvKTsKKyAg
ICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbik7
CiAgICAgcmV0dXJuIG1fYW1vdW50ID09IG90aGVyLm1fYW1vdW50OwogfQogCkBAIC0xMzksMTIg
KzEzOSwxMiBAQCBkb3VibGUgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
cGFzc3Rocm91Z2hBbW91bnQoKSBjb25zdAogICAgIH0KIH0KICAgICAKLWJvb2wgQmx1ckZpbHRl
ck9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0Citi
b29sIEJsdXJGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiBvcGVyYXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgIGlmICgh
aXNTYW1lVHlwZShvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
cmV0dXJuIG1fc3RkRGV2aWF0aW9uID09IHRvQmx1ckZpbHRlck9wZXJhdGlvbihvKS5zdGREZXZp
YXRpb24oKTsKKyAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKIFBhc3NSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91
Z2gpCkBAIC0xNTcsMTYgKzE1NywxNiBAQCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmx1
ckZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcgogICAgIGlm
IChibGVuZFRvUGFzc3Rocm91Z2gpCiAgICAgICAgIHJldHVybiBCbHVyRmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKGxlbmd0aFR5cGUpLmJsZW5kKG1fc3RkRGV2aWF0aW9uLCBwcm9ncmVz
cykpOwogCi0gICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogZnJvbU9wID0gdG9CbHVyRmls
dGVyT3BlcmF0aW9uKGZyb20pOwotICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gZnJvbU9wID8gZnJv
bU9wLT5tX3N0ZERldmlhdGlvbiA6IExlbmd0aChsZW5ndGhUeXBlKTsKKyAgICBjb25zdCBCbHVy
RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4oZnJvbSk7CisgICAgTGVuZ3RoIGZyb21MZW5ndGggPSBmcm9tT3BlcmF0aW9uID8gZnJv
bU9wZXJhdGlvbi0+bV9zdGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7CiAgICAgcmV0
dXJuIEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShtX3N0ZERldmlhdGlvbi5ibGVuZChmcm9t
TGVuZ3RoLCBwcm9ncmVzcykpOwogfQogICAgIAotYm9vbCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKK2Jvb2wgRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24m
IG9wZXJhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgaWYgKCFp
c1NhbWVUeXBlKG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbihvKTsKKyAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBvdGhlciA9IGRv
d25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbik7CiAgICAgcmV0dXJu
IG1fbG9jYXRpb24gPT0gb3RoZXIubV9sb2NhdGlvbiAmJiBtX3N0ZERldmlhdGlvbiA9PSBvdGhl
ci5tX3N0ZERldmlhdGlvbiAmJiBtX2NvbG9yID09IG90aGVyLm1fY29sb3I7CiB9CiAgICAgCkBA
IC0xODEsMTAgKzE4MSwxMCBAQCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aQogICAgICAgICAgICAg
V2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dyZXNzKSwKICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIHByb2dy
ZXNzKSk7CiAKLSAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AgPSB0
b0Ryb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZnJvbSk7Ci0gICAgSW50UG9pbnQgZnJvbUxvY2F0
aW9uID0gZnJvbU9wID8gZnJvbU9wLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKLSAgICBpbnQg
ZnJvbVN0ZERldmlhdGlvbiA9IGZyb21PcCA/IGZyb21PcC0+c3RkRGV2aWF0aW9uKCkgOiAwOwot
ICAgIENvbG9yIGZyb21Db2xvciA9IGZyb21PcCA/IGZyb21PcC0+Y29sb3IoKSA6IENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiog
ZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20p
OworICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0
aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKKyAgICBpbnQgZnJvbVN0ZERldmlhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSA6IDA7CisgICAg
Q29sb3IgZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkg
OiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgIAogICAgIHJldHVybiBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21Mb2Nh
dGlvbiwgbV9sb2NhdGlvbiwgcHJvZ3Jlc3MpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYTE4
ZDk5NWJiZDcwMjUzYzc1MWFhYzc0M2IxYTI4MzM2NWE2MDVmZC4uNWZlMjAxMGRjOGI2MDY1NzFj
NjE3ZDgyN2JmOTIxMTBmM2U1MWI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIC8vIEFubm95aW5nbHksIHdp
bmdkaS5oICNkZWZpbmVzIHRoaXMuCkBAIC0xMTQsOSArMTE1LDYgQEAgcHJvdGVjdGVkOgogICAg
IE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAotI2RlZmluZSBGSUxURVJPUEVSQVRJT05fVFlQ
RV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFT
RShUb1ZhbHVlVHlwZU5hbWUsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbiwgdmFsdWUsIHZhbHVl
LT5wcmVkaWNhdGUsIHZhbHVlLnByZWRpY2F0ZSkKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgRGVm
YXVsdEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShPcGVy
YXRpb25UeXBlIHJlcHJlc2VudGVkVHlwZSkKQEAgLTE0Myw5ICsxNDEsNiBAQCBwcml2YXRlOgog
ICAgIE9wZXJhdGlvblR5cGUgbV9yZXByZXNlbnRlZFR5cGU7CiB9OwogCi1GSUxURVJPUEVSQVRJ
T05fVFlQRV9DQVNUUyhEZWZhdWx0RmlsdGVyT3BlcmF0aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3Bl
cmF0aW9uOjpERUZBVUxUKTsKLQotCiBjbGFzcyBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbiA6
IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGUoKQpAQCAtMTcwLDggKzE2NSw2IEBA
IHByaXZhdGU6CiAgICAgfQogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoUGFzc3Ro
cm91Z2hGaWx0ZXJPcGVyYXRpb24sIHR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJP
VUdIKTsKLQogY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21l
bnQpCkBAIC0yMTAsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2ZpbHRlckVmZmVjdDsKIH07CiAKLUZJTFRFUk9QRVJBVElPTl9UWVBFX0NBU1RTKFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiwgdHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
KTsKLQogLy8gR1JBWVNDQUxFLCBTRVBJQSwgU0FUVVJBVEUgYW5kIEhVRV9ST1RBVEUgYXJlIHZh
cmlhdGlvbnMgb24gYSBiYXNpYyBjb2xvciBtYXRyaXggZWZmZWN0LgogLy8gRm9yIEhVRV9ST1RB
VEUsIHRoZSBhbmdsZSBvZiByb3RhdGlvbiBpcyBzdG9yZWQgaW4gbV9hbW91bnQuCiBjbGFzcyBX
RUJDT1JFX0VYUE9SVCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZp
bHRlck9wZXJhdGlvbiB7CkBAIC0yNDQsOCArMjM1LDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV9hbW91bnQ7CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSk7
Ci0KIC8vIElOVkVSVCwgQlJJR0hUTkVTUywgQ09OVFJBU1QgYW5kIE9QQUNJVFkgYXJlIHZhcmlh
dGlvbnMgb24gYSBiYXNpYyBjb21wb25lbnQgdHJhbnNmZXIgZWZmZWN0LgogY2xhc3MgV0VCQ09S
RV9FWFBPUlQgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBG
aWx0ZXJPcGVyYXRpb24gewogcHVibGljOgpAQCAtMjc5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1fYW1vdW50OwogfTsKIAotRklMVEVST1BFUkFUSU9OX1RZUEVfQ0FTVFMoQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiwgaXNCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uKCkpOwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBCbHVyRmlsdGVy
T3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Qmx1ckZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKExlbmd0aCBzdGREZXZpYXRp
b24pCkBAIC0zMTIsOCArMjk5LDYgQEAgcHJpdmF0ZToKICAgICBMZW5ndGggbV9zdGREZXZpYXRp
b247CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhCbHVyRmlsdGVyT3BlcmF0aW9u
LCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpCTFVSKTsKLQogY2xhc3MgV0VCQ09SRV9FWFBP
UlQgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+
IGNyZWF0ZShjb25zdCBJbnRQb2ludCYgbG9jYXRpb24sIGludCBzdGREZXZpYXRpb24sIENvbG9y
IGNvbG9yKQpAQCAtMzUzLDggKzMzOCwxOSBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7
CiB9OwogCi1GSUxURVJPUEVSQVRJT05fVFlQRV9DQVNUUyhEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uLCB0eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVyk7Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9Q
RVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIHsgcmV0dXJu
IG9wZXJhdGlvbi5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihEZWZhdWx0RmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUGFzc3Rocm91Z2hGaWx0ZXJPcGVy
YXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUk9QRVJBVElPTihCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uLCBpc0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24sIGlzQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbigp
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJPUEVSQVRJT04oQmx1ckZpbHRlck9wZXJh
dGlvbiwgdHlwZSgpID09IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6QkxVUikKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVST1BFUkFUSU9OKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24s
IHR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKQorCiAjZW5k
aWYgLy8gRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCmluZGV4IGFm
ODIzNjYyMzcxMmE3ZTc4MjAzYWM1M2UwNGU3MmE2NjQwNDdjYzIuLmUxNTA1ZGQ4NTk2ZTI1MjUz
ODhkY2ExZDVjYjM5ZDFkZmY1MjgxODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcApAQCAt
MTA2LDI0ICsxMDYsMjQgQEAgRmlsdGVyT3V0c2V0cyBGaWx0ZXJPcGVyYXRpb25zOjpvdXRzZXRz
KCkgY29uc3QKIHsKICAgICBGaWx0ZXJPdXRzZXRzIHRvdGFsT3V0c2V0czsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IG1fb3BlcmF0aW9ucy5hdChpKS5n
ZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICptX29wZXJhdGlvbnMu
YXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgY29uc3QgQmx1ckZp
bHRlck9wZXJhdGlvbiogYmx1ck9wZXJhdGlvbiA9IHRvQmx1ckZpbHRlck9wZXJhdGlvbihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgICAgICAg
ICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1
ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IHN0
ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRp
b24oKSwgMCk7CiAgICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUgPSBvdXRzZXRTaXplRm9y
Qmx1cihzdGREZXZpYXRpb24pOwogICAgICAgICAgICAgRmlsdGVyT3V0c2V0cyBvdXRzZXRzKG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQo
KSwgb3V0c2V0U2l6ZS53aWR0aCgpKTsKICAgICAgICAgICAgIHRvdGFsT3V0c2V0cyArPSBvdXRz
ZXRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKiBkcm9wU2hhZG93T3BlcmF0aW9uID0gdG9Ecm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUg
PSBvdXRzZXRTaXplRm9yQmx1cihkcm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSk7
CisgICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93
T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IG91dHNldFNpemVGb3JC
bHVyKGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCkpOwogICAgICAgICAgICAgRmls
dGVyT3V0c2V0cyBvdXRzZXRzKAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91dHNldFNp
emUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9uLT55KCkpLAotICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KDAsIG91dHNldFNpemUud2lkdGgoKSArIGRyb3BTaGFkb3dPcGVyYXRpb24tPngo
KSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIGRy
b3BTaGFkb3dPcGVyYXRpb24tPnkoKSksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0
c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlvbi0+eCgpKQorICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0aW9u
LnkoKSksCisgICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
ZHJvcFNoYWRvd09wZXJhdGlvbi54KCkpLAorICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSksCisgICAgICAgICAg
ICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09wZXJhdGlv
bi54KCkpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgdG90YWxPdXRzZXRzICs9IG91dHNl
dHM7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGFlZjkwMmQ5OTk5NTY2ZDQ0MWIzNGY1NDAx
ODdhNjU5MjIzYjhhYjEuLmM1NWU3YWNhOWRiOGQ3NWUxOTEwMmI1Nzg1OTQ5YTgyYjBiYmFlODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcApAQCAtMTQzLDE4ICsxNDMsMTggQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYzsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgRmls
dGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
dChpKS5nZXQoKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgewor
ICAgICAgICBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAg
ICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlT3BlcmF0aW9uID0gdG9SZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgcmVmZXJl
bmNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZU9wZXJhdGlvbi0+c2V0RmlsdGVy
RWZmZWN0KGVmZmVjdCk7CisgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJl
ZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVy
KHJlbmRlcmVyLCBwcmV2aW91c0VmZmVjdCwgJnJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAg
ICAgICByZWZlcmVuY2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0KGVmZmVjdCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNn
cmF5c2NhbGVFcXVpdmFsZW50CiAgICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KQEAgLTE4MCw5ICsxODAsOSBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpi
dWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiB7Ci0gICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIDAuMCwgMS4wKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CiAKICAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNz
ZXBpYUVxdWl2YWxlbnQKICAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgpAQCAtMjA4LDI2ICsyMDgsMjYgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTogewotICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiog
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24o
ZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSkpOwor
ICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUodGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBp
bnB1dFBhcmFtZXRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gdG9CYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
CiAgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsKLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJp
eE9wZXJhdGlvbi0+YW1vdW50KCkpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkp
OwogICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKHRoaXMsIEZFQ09M
T1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIGlucHV0UGFyYW1ldGVycyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7
Ci0gICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX1RBQkxFOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKSk7Ci0gICAgICAg
ICAgICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAt
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSkpOworICAgICAgICAgICAgdHJh
bnNmZXJQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICB0cmFuc2ZlclBhcmFtZXRl
cnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAtIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKSk7CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFs
dWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOwogCiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKQEAgLTIzNSwxMiArMjM1LDEyIEBAIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiogY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSB0b0Jh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKICAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRTsKICAgICAgICAgICAgIFZl
Y3RvcjxmbG9hdD4gdHJhbnNmZXJQYXJhbWV0ZXJzOwogICAgICAgICAgICAgdHJhbnNmZXJQYXJh
bWV0ZXJzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi0+YW1vdW50
KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwogICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsK
IAogICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBA
IC0yNDgsMTAgKzI0OCwxMCBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gdG9CYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3Vu
dCgpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKICAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKIAogICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbiA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwogICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpKTsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwogICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKICAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIApAQCAtMjcxLDE1ICsyNzEsMTUgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBCbHVyRmlsdGVyT3BlcmF0aW9uKiBibHVyT3Bl
cmF0aW9uID0gdG9CbHVyRmlsdGVyT3BlcmF0aW9uKGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRp
b24tPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKICAgICAgICAgICAgIGVmZmVj
dCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUodGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRp
b24sIGNvbnN1bWVyID09IEZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RF
X0RVUExJQ0FURSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qIGRyb3BTaGFkb3dPcGVyYXRpb24gPSB0b0Ryb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNo
YWRvdzo6Y3JlYXRlKHRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24tPnN0ZERldmlhdGlvbigpLCBk
cm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24tPngoKSwgZHJv
cFNoYWRvd09wZXJhdGlvbi0+eSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLT5jb2xvcigpLCAxKTsK
KyAgICAgICAgICAgIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRp
b24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUodGhpcywgZHJvcFNo
YWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZp
YXRpb24oKSwKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNo
YWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMjkyLDcgKzI5
Miw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBlZmZlY3QtPnNldENs
aXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyRnVuY3Rpb24pOwogICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCkgIT0gRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICAgICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQocHJldmlvdXNFZmZlY3QpOwogICAgICAgICAg
ICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoZWZmZWN0KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXgg
OGZiYjQxODNiZDdlM2IwMTNiMWU3ODcwYTIxZjE1YjQyYzE4OTU5Mi4uNjJlMDRiYzdiMGVjZjkx
YjA5NWNmOTVhYjM5ODY2NzUwYTE5ZGIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTk5LDEyICs5OSwxMiBAQCB2b2lk
IFJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjp1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbgogewogICAgIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG9wZXJhdGlvbnMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0g
b3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChmaWx0ZXJPcGVy
YXRpb24tPnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkKKyAgICAgICAgRmls
dGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
aV07CisgICAgICAgIGlmICghaXM8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uID0gdG9SZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2UqIGRvY3VtZW50UmVmZXJlbmNlID0gcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLT5jYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZSgpOwotICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVk
U1ZHRG9jdW1lbnQgPSBkb2N1bWVudFJlZmVyZW5jZSA/IGRvY3VtZW50UmVmZXJlbmNlLT5kb2N1
bWVudCgpIDogMDsKKyAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiByZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgIGF1dG8qIGRvY3VtZW50UmVmZXJlbmNlID0gcmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uLmNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKCk7CisgICAgICAgIENh
Y2hlZFNWR0RvY3VtZW50KiBjYWNoZWRTVkdEb2N1bWVudCA9IGRvY3VtZW50UmVmZXJlbmNlID8g
ZG9jdW1lbnRSZWZlcmVuY2UtPmRvY3VtZW50KCkgOiBudWxscHRyOwogCiAgICAgICAgIGlmIChj
YWNoZWRTVkdEb2N1bWVudCkgewogICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGlzIGV4dGVybmFs
OyB3YWl0IGZvciBub3RpZnlGaW5pc2hlZCgpLgpAQCAtMTEzLDExICsxMTMsMTEgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6RmlsdGVySW5mbzo6dXBkYXRlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cyhjb25z
dCBGaWx0ZXJPcGVyYXRpb24KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlZmVy
ZW5jZSBpcyBpbnRlcm5hbDsgYWRkIGxheWVyIGFzIGEgY2xpZW50IHNvIHdlIGNhbiB0cmlnZ2Vy
CiAgICAgICAgICAgICAvLyBmaWx0ZXIgcmVwYWludCBvbiBTVkcgYXR0cmlidXRlIGNoYW5nZS4K
LSAgICAgICAgICAgIEVsZW1lbnQqIGZpbHRlciA9IG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmdldEVsZW1lbnRCeUlkKHJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbi0+ZnJhZ21lbnQoKSk7
CisgICAgICAgICAgICBFbGVtZW50KiBmaWx0ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7
CiAKLSAgICAgICAgICAgIGlmICghZmlsdGVyIHx8ICFmaWx0ZXItPnJlbmRlcmVyKCkgfHwgIWZp
bHRlci0+cmVuZGVyZXIoKS0+aXNTVkdSZXNvdXJjZUZpbHRlcigpKQorICAgICAgICAgICAgaWYg
KCFmaWx0ZXIgfHwgIWlzPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPihmaWx0ZXItPnJlbmRlcmVy
KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdG9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcigqZmlsdGVyLT5yZW5kZXJlcigpKS5hZGRDbGllbnRSZW5kZXJMYXll
cigmbV9sYXllcik7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cj4oKmZpbHRlci0+cmVuZGVyZXIoKSkuYWRkQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOwog
ICAgICAgICAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuYXBwZW5kKGZpbHRlcik7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDJlNzFmMTUyOGJjNmJjODU1MmY1ZWYw
ZGJhNjBjYjQzNzBkZGJjOTIuLmFkNWZjYzM2YzgxYmI0MGY2MDg3YjhlMmFkMjdjODQwNjEwYmEz
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xODEsMTMgKzE4MSwxMyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZQogICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJl
ck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QpOworICAgIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
Kmxhc3RFZmZlY3QpOwogICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhF
ZmZlY3RSZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgogICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6ZShzdWJS
ZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKICAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRG
aWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihsYXN0RWZmZWN0KTsK
KyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigqbGFzdEVmZmVjdCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhl
IGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVy
PSIuLiIvPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKaW5kZXggOGQwOTQxN2Vm
N2Y0MDU0ZDQ2MjMxOGVjZmI1YTYyZjU4NGQ2OWZhMC4uNTQ2ODhjMjcyYWRhYjdkMmI2YzAxMGY3
MzliZjBjODVjYzUxODRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKQEAg
LTcwLDQ2ICs3MCw0NSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29ucwogICAgIH0KIH0KIAotRmxv
YXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitGbG9hdFJlY3QgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBTVkdGaWx0ZXIqIGZpbHRlciA9IHRv
U1ZHRmlsdGVyKCYoZWZmZWN0LT5maWx0ZXIoKSkpOwotICAgIEFTU0VSVChmaWx0ZXIpOworICAg
IGF1dG8mIGZpbHRlciA9IGRvd25jYXN0PFNWR0ZpbHRlcj4oZWZmZWN0LmZpbHRlcigpKTsKIAog
ICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZm
ZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgogICAgIEZsb2F0UmVj
dCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0gZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRFZmZlY3QoMCkpOworICAg
IGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC5pbnB1dEVmZmVjdHMo
KS5zaXplKCkpIHsKKyAgICAgICAgc3VicmVnaW9uID0gZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCplZmZlY3QuaW5wdXRFZmZlY3QoMCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKLSAgICAgICAgICAgIHN1YnJl
Z2lvbi51bml0ZShkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1
dEVmZmVjdChpKSkpOworICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigqZWZmZWN0LmlucHV0RWZmZWN0KGkpKSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsK
KyAgICAgICAgc3VicmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7CiAK
ICAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBv
biB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGls
ZT4uCi0gICAgaWYgKGVmZmVjdC0+ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5
cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbkluVXNlclNw
YWNlKCk7CisgICAgaWYgKGVmZmVjdC5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0
VHlwZVRpbGUpCisgICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJT
cGFjZSgpOwogCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3QtPmVmZmVj
dEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoZWZmZWN0LT5oYXNYKCkpCisgICAgRmxvYXRSZWN0IGVm
ZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3QuZWZmZWN0Qm91bmRhcmllcygpOworICAgIGlmIChlZmZl
Y3QuaGFzWCgpKQogICAgICAgICBzdWJyZWdpb24uc2V0WChlZmZlY3RCb3VuZGFyaWVzLngoKSk7
Ci0gICAgaWYgKGVmZmVjdC0+aGFzWSgpKQorICAgIGlmIChlZmZlY3QuaGFzWSgpKQogICAgICAg
ICBzdWJyZWdpb24uc2V0WShlZmZlY3RCb3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGVmZmVjdC0+
aGFzV2lkdGgoKSkKKyAgICBpZiAoZWZmZWN0Lmhhc1dpZHRoKCkpCiAgICAgICAgIHN1YnJlZ2lv
bi5zZXRXaWR0aChlZmZlY3RCb3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChlZmZlY3QtPmhh
c0hlaWdodCgpKQorICAgIGlmIChlZmZlY3QuaGFzSGVpZ2h0KCkpCiAgICAgICAgIHN1YnJlZ2lv
bi5zZXRIZWlnaHQoZWZmZWN0Qm91bmRhcmllcy5oZWlnaHQoKSk7CiAKLSAgICBlZmZlY3QtPnNl
dEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOworICAgIGVmZmVjdC5zZXRGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0
ZVN1YnJlZ2lvbiA9IGZpbHRlci0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHN1YnJlZ2lv
bik7Ci0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXItPmZpbHRlclJlc29s
dXRpb24oKTsKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVTdWJyZWdpb24gPSBmaWx0ZXIuYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7CisgICAgRmxvYXRTaXplIGZpbHRlclJl
c29sdXRpb24gPSBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpOwogICAgIGFic29sdXRlU3VicmVn
aW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5oZWln
aHQoKSk7CiAKICAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciBy
ZWdpb24uCi0gICAgRmxvYXRSZWN0IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gZmlsdGVy
LT5maWx0ZXJSZWdpb24oKTsKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdp
b24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAgICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdo
dCgpKTsKICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0
ZXJSZWdpb24pOwogCi0gICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVn
aW9uKTsKKyAgICBlZmZlY3Quc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7CiAg
ICAgcmV0dXJuIHN1YnJlZ2lvbjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCmlu
ZGV4IDkxNmU2ZTA4ZWI1NWNhY2NlNDYwNDM5OWYwMTA5YmUzMWRhMDRkNDUuLjJmOGRhM2E5NjUx
MWNmNjdiNjAxZTM5MWMzNjBiYTdlYzE2MmZhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8g
VGhleSBkZXBlbmQgb24gdGhlIFJlbmRlck9iamVjdCBhcmd1bWVudCBvZiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZS4KLSAgICBzdGF0aWMgRmxvYXRSZWN0IGRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqKTsKKyAgICBzdGF0aWMgRmxv
YXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QmKTsK
IAogICAgIGlubGluZSB2b2lkIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggNTc2NWNiYTU5MWJjMDRmYThlY2I1ZTIyOGFl
MTQxMGY1NzJmNGM5OS4uNTg3ZmExMWRjN2UyNTY3OTc0MDA0MmQ0M2JiY2EwM2NkNGRmOGM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCw4ICs1OSwxMCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKIH07CiAKLUZJTFRFUl9UWVBF
X0NBU1RTKFNWR0ZpbHRlciwgaXNTVkdGaWx0ZXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0
dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CisKICNlbmRpZiAvLyBTVkdGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKaW5kZXggZjcyOWY1YTc4YjExNmE1ZWM1YzJl
MTY4ODg3YzQ5NjY2OTYzYzE5OC4uZTNkMmM0Y2I0NGYxOTAyYzZmZjMzMmEwZjg1MGQ2MmJhOTcw
MTQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwCkBAIC02NCwzMCArNjQsMzAgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLAog
ewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpbHRlcnMuc2l6ZSgpKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwotICAgICAg
ICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci0+dHlwZSgpOwor
ICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciA9ICpmaWx0ZXJzLmF0KGkpOwor
ICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci50eXBl
KCk7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bSh0eXBlKTsKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNBVFVSQVRFOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToK
LSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0b0Jhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKS0+YW1vdW50KCkpOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1vdW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbihmaWx0ZXIpLT5hbW91bnQoKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGRvdWJsZT4oZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyKS5hbW91bnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVy
PExlbmd0aD46OmVuY29kZShlbmNvZGVyLCB0b0JsdXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKS0+
c3RkRGV2aWF0aW9uKCkpOworICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNv
ZGUoZW5jb2RlciwgZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKS5zdGREZXZp
YXRpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uKiBzaGFkb3cgPSB0b0Ryb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsKLSAg
ICAgICAgICAgIEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93
LT5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2hhZG93LT5zdGREZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPENv
bG9yPjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy0+Y29sb3IoKSk7CisgICAgICAgICAgICBjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBkb3duY2FzdDxEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOworICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQ
b2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFkb3cubG9jYXRpb24oKSk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDMyX3Q+KHNoYWRvdy5zdGREZXZpYXRpb24oKSk7Cisg
ICAgICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy5j
b2xvcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGNkZmE3MGZjMDY5NzFkNmYzZjIwZDc3MjUwN2I5
MGY1YTEyMWY5ZTcuLmE2MDFjYTg1ZDUwNTI1ZTQxODkwNThiOTMwODNhOWYxMzBkYWNiZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBA
IC0xNTM4LDI2ICsxNTM4LDI2IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxGaWx0ZXJPcGVyYXRpb24+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGaWx0CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgZW5jb2Rl
ciA8PCB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKS5hbW91bnQoKTsK
KyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXIpLmFtb3VudCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDoKLSAgICAgICAgZW5jb2RlciA8PCB0b0Jhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKS5hbW91bnQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpLmFt
b3VudCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoK
LSAgICAgICAgZW5jb2RlciA8PCB0b0JsdXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKS5zdGREZXZp
YXRpb24oKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXIpLnN0ZERldmlhdGlvbigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgY29uc3QgYXV0byYgZHJvcFNoYWRv
d0ZpbHRlciA9IHRvRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBj
b25zdCBhdXRvJiBkcm9wU2hhZG93RmlsdGVyID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgZW5jb2RlciA8PCBkcm9wU2hhZG93RmlsdGVyLmxv
Y2F0aW9uKCk7CiAgICAgICAgIGVuY29kZXIgPDwgZHJvcFNoYWRvd0ZpbHRlci5zdGREZXZpYXRp
b24oKTsKICAgICAgICAgZW5jb2RlciA8PCBkcm9wU2hhZG93RmlsdGVyLmNvbG9yKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6REVGQVVMVDoKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHRvRGVmYXVsdEZpbHRlck9wZXJhdGlvbihmaWx0ZXIp
LnJlcHJlc2VudGVkVHlwZSgpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGRvd25jYXN0
PERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikucmVwcmVzZW50ZWRUeXBlKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KaW5kZXggMTEyNzZjM2ZiOTI0NzJjZjNiZTRkZGFiMmMz
NDc1MTQyMGE4MTZkMy4uN2E3MTMwYjNiYTI0MzdhOGNmYjZiMDllNWVhYTkyMWExMDE3NWNhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLm1tCkBAIC02OTQsNTIgKzY5NCw1MiBAQCBSZW1vdGVMYXllclRyZWVUZXh0
U3RyZWFtJiBSZW1vdGVMYXllclRyZWVUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IEZpbHRl
ck9wZQogICAgICAgICB0cyA8PCAicmVmZXJlbmNlIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRlciA9IHRvQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25zdCBhdXRvJiBjb2xvck1h
dHJpeEZpbHRlciA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlcik7CiAgICAgICAgIHRzIDw8ICJncmF5c2NhbGUoIiA8PCBjb2xvck1hdHJpeEZpbHRlci5h
bW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiYgY29sb3JNYXRyaXhGaWx0ZXIgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24oZmlsdGVyKTsKKyAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhGaWx0ZXIgPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAg
ICB0cyA8PCAic2VwaWEoIiA8PCBjb2xvck1hdHJpeEZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHsKLSAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JN
YXRyaXhGaWx0ZXIgPSB0b0Jhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsK
KyAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhGaWx0ZXIgPSBkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICB0cyA8PCAic2F0dXJh
dGUoIiA8PCBjb2xvck1hdHJpeEZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeEZpbHRl
ciA9IHRvQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBj
b25zdCBhdXRvJiBjb2xvck1hdHJpeEZpbHRlciA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAgIHRzIDw8ICJodWUtcm90YXRlKCIgPDwg
Y29sb3JNYXRyaXhGaWx0ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICBjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2ZlckZpbHRl
ciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihmaWx0ZXIpOworICAg
ICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2ZlckZpbHRlciA9IGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAgICAgICAgIHRzIDw8
ICJpbnZlcnQoIiA8PCBjb21wb25lbnRUcmFuc2ZlckZpbHRlci5hbW91bnQoKSA8PCAiKSI7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTog
ewotICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBj
b21wb25lbnRUcmFuc2ZlckZpbHRlciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2ZlckZp
bHRlciA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlcik7CiAgICAgICAgIHRzIDw8ICJvcGFjaXR5KCIgPDwgY29tcG9uZW50VHJhbnNmZXJGaWx0
ZXIuYW1vdW50KCkgPDwgIikiOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJGaWx0ZXIgPSB0b0Jhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsKKyAgICAgICAgY29uc3Qg
YXV0byYgY29tcG9uZW50VHJhbnNmZXJGaWx0ZXIgPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICB0cyA8PCAiYnJpZ2h0bmVz
cygiIDw8IGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyLmFtb3VudCgpIDw8ICIpIjsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAg
ICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25l
bnRUcmFuc2ZlckZpbHRlciA9IHRvQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bihmaWx0ZXIpOworICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2ZlckZpbHRlciA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7
CiAgICAgICAgIHRzIDw8ICJjb250cmFzdCgiIDw8IGNvbXBvbmVudFRyYW5zZmVyRmlsdGVyLmFt
b3VudCgpIDw8ICIpIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJG
aWx0ZXIgPSB0b0JsdXJGaWx0ZXJPcGVyYXRpb24oZmlsdGVyKTsKKyAgICAgICAgY29uc3QgYXV0
byYgYmx1ckZpbHRlciA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcik7CiAg
ICAgICAgIHRzIDw8ICJibHVyKCIgPDwgZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyRmlsdGVyLnN0
ZERldmlhdGlvbigpLCAwKSA8PCAiKSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgY29uc3QgRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd0ZpbHRlciA9IHRvRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbihmaWx0ZXIpOworICAgICAgICBjb25zdCBhdXRvJiBkcm9wU2hhZG93RmlsdGVyID0g
ZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKTsKICAgICAgICAgdHMg
PDwgImRyb3Atc2hhZG93KCIgPDwgZHJvcFNoYWRvd0ZpbHRlci54KCkgPDwgIiAiIDw8IGRyb3BT
aGFkb3dGaWx0ZXIueSgpIDw8ICIgIiA8PCBkcm9wU2hhZG93RmlsdGVyLmxvY2F0aW9uKCkgPDwg
IiAiOwogICAgICAgICB0cyA8PCBkcm9wU2hhZG93RmlsdGVyLmNvbG9yKCkgPDwgIikiOwogICAg
ICAgICBicmVhazsKQEAgLTc0OCw3ICs3NDgsNyBAQCBSZW1vdGVMYXllclRyZWVUZXh0U3RyZWFt
JiBSZW1vdGVMYXllclRyZWVUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IEZpbHRlck9wZQog
ICAgICAgICB0cyA8PCAicGFzc3Rocm91Z2giOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6REVGQVVMVDogewotICAgICAgICBjb25zdCBEZWZhdWx0RmlsdGVyT3Bl
cmF0aW9uJiBkZWZhdWx0RmlsdGVyID0gdG9EZWZhdWx0RmlsdGVyT3BlcmF0aW9uKGZpbHRlcik7
CisgICAgICAgIGNvbnN0IGF1dG8mIGRlZmF1bHRGaWx0ZXIgPSBkb3duY2FzdDxEZWZhdWx0Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXIpOwogICAgICAgICB0cyA8PCAiZGVmYXVsdCB0eXBlPSIgPDwg
KGludClkZWZhdWx0RmlsdGVyLnJlcHJlc2VudGVkVHlwZSgpOwogICAgICAgICBicmVhazsKICAg
ICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>