<?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>226473</bug_id>
          
          <creation_ts>2021-05-31 12:07:55 -0700</creation_ts>
          <short_desc>Factor out token-type dependent CSS property parsing functions to allow more code sharing</short_desc>
          <delta_ts>2021-06-01 09:50:22 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765434</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-31 12:07:55 -0700</bug_when>
    <thetext>Factor out token-type dependent CSS property parsing functions to allow more code sharing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765435</commentid>
    <comment_count>1</comment_count>
      <attachid>430208</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-31 12:17:13 -0700</bug_when>
    <thetext>Created attachment 430208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765443</commentid>
    <comment_count>2</comment_count>
      <attachid>430211</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-31 13:50:18 -0700</bug_when>
    <thetext>Created attachment 430211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765453</commentid>
    <comment_count>3</comment_count>
      <attachid>430211</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-31 16:42:35 -0700</bug_when>
    <thetext>Comment on attachment 430211
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        a FunctionToken) into their own functions. This allow sharing between functions that

typo: allows

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:92
&gt; +    // FIXME: Presentational HTML attributes shouldn&apos;t use the CSS parser for lengths

Our style includes periods in sentence style comments.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:100
&gt; +    if (value == 0 &amp;&amp; unitlessZero == UnitlessZeroQuirk::Allow)
&gt; +        return true;
&gt; +
&gt; +    if (isUnitLessValueParsingEnabledForMode(cssParserMode))
&gt; +        return true;
&gt; +    
&gt; +    return cssParserMode == HTMLQuirksMode &amp;&amp; unitless == UnitlessQuirk::Allow;

I would be tempted to write a single boolean expression in the &quot;vertical style&quot; rather than three return statement paragraphs.

Noticing that &quot;unitless&quot; is capitalized as if it was two words in the isUnitLessValueParsingEnabledForMode function.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:319
&gt; +    CalcParser calcParser(range, CalculationCategory::Number, valueRange, symbolTable, cssValuePool);
&gt; +    return calcParser.consumeValueIfCategory(CalculationCategory::Number);

Just call the local variable &quot;parser?&quot; When the scope is this tight, for me the single word just makes the code more readable even if it’s not entirely unambiguous.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:504
&gt; +static RefPtr&lt;CSSPrimitiveValue&gt; consumeLengthCSSPrimitiveValueWithCalcWithKnownTokenTypeNumber(CSSParserTokenRange&amp; range, const CSSCalcSymbolTable&amp; symbolTable, ValueRange valueRange, CSSParserMode cssParserMode, UnitlessQuirk unitless, CSSValuePool&amp; cssValuePool)

Consider taking of the extra words off some of these argument names? I would just call the CSSValuePool pool.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1223
&gt; +static inline bool divisibleBy100(double value)
&gt; +{
&gt; +    return static_cast&lt;int&gt;(value / 100) * 100 == value;
&gt; +}

This works only because the caller already checks that the value is in range between 0 and 100. I think it’s also non-obvious that this checks if the number is an integer as a side effect.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1239
&gt; +#if !ENABLE(VARIATION_FONTS)
&gt; +        if (*result &lt;= 0 || *result &gt;= 1000 || !divisibleBy100(*result))
&gt; +            break;
&gt; +#endif

I noticed that the code below does [1,1000] but this does [0,1000].

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1245
&gt; +        if (result &lt; 1 || result &gt; 1000)

For better NaN handling I think we want to reverse the logic:

    if (!(result &gt;= 1 &amp;&amp; result &lt;= 1000))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765620</commentid>
    <comment_count>4</comment_count>
      <attachid>430264</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-01 08:24:38 -0700</bug_when>
    <thetext>Created attachment 430264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765647</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-01 09:49:15 -0700</bug_when>
    <thetext>Committed r278311 (238348@main): &lt;https://commits.webkit.org/238348@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430264.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765648</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-01 09:50:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/78719120&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430208</attachid>
            <date>2021-05-31 12:17:13 -0700</date>
            <delta_ts>2021-05-31 13:50:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226473-20210531121712.patch</filename>
            <type>text/plain</type>
            <size>88490</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAyMS0wNS0zMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCB0b2tlbi10eXBl
IGRlcGVuZGVudCBDU1MgcHJvcGVydHkgcGFyc2luZyBmdW5jdGlvbnMgdG8gYWxsb3cgbW9yZSBj
b2RlIHNoYXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFzIGEgc3RlcCB0b3dhcmQgcmVkdWNpbmcgZHVwbGljYXRlIGNvZGUgYW5kIG1ha2luZyBD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgYSBiaXQKKyAgICAgICAgZWFzaWVyIHRvIGZvbGxvdywg
dGhpcyBjaGFuZ2UgZXh0cmFjdHMgdGhlIHRva2VuIHR5cGUgc3BlY2lmaWMgcGFydHMgb2YgdGhl
IHByaW1pdGl2ZQorICAgICAgICBjb25zdW1lIGZ1bmN0aW9ucyAoZS5nLiB0aGUgcGFydCBvZiBj
b25zdW1lTnVtYmVyUmF3IHdoZXJlIHRoZSB0b2tlbiBpcyBrbm93biB0byBiZQorICAgICAgICBh
IEZ1bmN0aW9uVG9rZW4pIGludG8gdGhlaXIgb3duIGZ1bmN0aW9ucy4gVGhpcyBhbGxvdyBzaGFy
aW5nIGJldHdlZW4gZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgYm90aCBuZWVkIHRoYXQgbG9naWMg
KGUuZy4gY29uc3VtZU51bWJlclJhdyBhbmQgY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhdyBj
YW4gc2hhcmUpCisgICAgICAgIHdpdGhvdXQgZXh0cmEgYnJhbmNoZXMsIHJlY2hlY2tpbmcgdGhl
IHRva2VuIHR5cGUsIG9yIGR1cGxpY2F0aW9uLiBJdCBhbHNvIGhhcyB0aGUKKyAgICAgICAgYmVu
ZWZpdCBvZiBjcmVhdGluZyBhIHN0cmljdCBwYXR0ZXJuIGZvciBwcmltaXRpdmUgY29uc3VtZXJz
IGdvaW5nIGZvcndhcmQuCisKKyAgICAgICAgVGhlIG5ldyBuYW1lcyBhcmUgcmF0aGVyIGxvbmcg
dG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHdoYXQgdGhleSBkbywgYnV0IHRoZXkgYXJlIHVubGlrZWx5
CisgICAgICAgIHRvIHN0YXkgZm9yIHZlcnkgbG9uZy4gRnV0dXJlIGNoYW5nZXMgd2lsbCB0cnkg
dG8gZ2VuZXJhbGl6ZSB0aHJvdWdoIHRlbXBsYXRlcyB0byBhbGxvdworICAgICAgICBwcm9ncmFt
YXRpYyBjb21iaW5hdGlvbnMgb2YgdGhlIGNvbnN1bWVycyB3aXRob3V0IGFsd2F5cyBoYXZlaW5n
IHRvIHdyaXRlIHRoZSBib2lsZXJwbGF0ZS4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6c2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVn
ZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUlu
dGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnZhbGlkYXRl
ZE51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVy
Y2VudGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRMZW5ndGhSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVUaW1lQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRp
dmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRl
Z2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aXZlSW50ZWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y2FuQ29uc3VtZUNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVdv
cmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUFuZ2xlT3JQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
QW5nbGVSYXdPck51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZU51bWJlclJhd09yUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVy
UmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudERp
dmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmRpdmlzaWJsZUJ5MTAwKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1iZXJS
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
Rm9udFdlaWdodE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFdvcmtl
clNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lVXJsQXNTdHJpbmdWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
bGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVI
U0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhXQlBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFy
YW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBh
cnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6cGFyc2VMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVj
YXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUh1ZU9ySWRlbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JJZGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50T3JJZGVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRPcklkZW50Tm9ybWFsaXplZEZvclJlbGF0aXZlUkdCKTogRGVsZXRlZC4KKwogMjAyMS0wNC0y
OSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBF
bmFibGUgPHN1bW1hcnk+IHRvIGJlIGEgZmxleCBjb250YWluZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJ
KHJldmlzaW9uIDI3ODI2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTMgKzg3LDE3IEBAIENT
U1BhcnNlclRva2VuUmFuZ2UgY29uc3VtZUZ1bmN0aW9uKENTU1AKICAgICByZXR1cm4gY29udGVu
dHM7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlck9yUGVy
Y2VudERpdmlkZWRCeTEwMFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQoraW5saW5lIGJvb2wgc2hvdWxkQWNjZXB0
VW5pdGxlc3NWYWx1ZShkb3VibGUgdmFsdWUsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQog
ewotICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVS
YW5nZSkpCi0gICAgICAgIHJldHVybiAqcGVyY2VudCAvIDEwMC4wOwotICAgIGlmIChhdXRvIG51
bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAgICAgICByZXR1
cm4gKm51bWJlcjsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIEZJWE1FOiBQcmVz
ZW50YXRpb25hbCBIVE1MIGF0dHJpYnV0ZXMgc2hvdWxkbid0IHVzZSB0aGUgQ1NTIHBhcnNlciBm
b3IgbGVuZ3RocworCisgICAgaWYgKHZhbHVlID09IDAgJiYgdW5pdGxlc3NaZXJvID09IFVuaXRs
ZXNzWmVyb1F1aXJrOjpBbGxvdykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNV
bml0TGVzc1ZhbHVlUGFyc2luZ0VuYWJsZWRGb3JNb2RlKGNzc1BhcnNlck1vZGUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdzsKIH0KIAogLy8gRklY
TUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIuCkBAIC0yMTMsMTcgKzIxNywxMyBAQCBwcml2YXRlOgogICAgIENT
U1ZhbHVlUG9vbCYgbV92YWx1ZVBvb2w7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBl
PiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKLXsKLSAgICBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9
PSBOdW1iZXJUb2tlbikgewotICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09
IE51bWJlclZhbHVlVHlwZSB8fCB0b2tlbi5udW1lcmljVmFsdWUoKSA8IG1pbmltdW1WYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRv
PEludFR5cGU+KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCkpOwotICAgIH0KKy8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2Fs
bGVycyB0aGF0IGtub3cgdGhlIHRva2VuIHR5cGUuCiAKLSAgICBpZiAodG9rZW4udHlwZSgpICE9
IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisvLyBNQVJLOiBJ
bnRlZ2VyIChSYXcpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0ZDo6b3B0aW9uYWw8
SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCit7CisgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7CiAg
ICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9u
ICYmIGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
cikKQEAgLTIzMiw0MjAgKzIzMiwxMDYzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0
ZDo6b3B0aW9uYWwKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1zdGQ6Om9wdGlvbmFs
PGludD4gY29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJs
ZSBtaW5pbXVtVmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFs
PEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7Cisg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOworICAgIAorICAg
IGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlwZSB8
fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBtaW5pbXVtVmFsdWUpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGNsYW1wVG88SW50VHlwZT4ocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7CiB9CiAKLVJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCisvLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVW
YWx1ZSAtIG5vdCBtYWludGFpbmcgY2FsYykKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4g
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29s
KQogewotICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclJhdyhyYW5nZSwgbWlu
aW11bVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgIGlmIChhdXRvIGlu
dGVnZXIgPSBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbjxJ
bnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRp
dmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5h
bWUgSW50VHlwZT4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlclR5cGVD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2wmIGNz
c1ZhbHVlUG9vbCkKIHsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVk
PihyYW5nZSwgMSk7Ci19CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pOwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVn
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gaW50ZWdlciA9
IGNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcocmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIpOworICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclR5cGVSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXI8SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSkpCisg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4g
PSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewot
ICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB0b2tl
bi5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKTsKLSAgICB9CisvLyBNQVJLOiBOdW1iZXIgKFJhdykKIAotICAgIGlmICh0b2tlbi50
eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFs
aWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorewor
ICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwg
MCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAg
ICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KCk7CisgICAgcmV0dXJuIHZhbHVl
OwogfQogCi0vLyBGSVhNRTogV29yayBvdXQgaWYgdGhpcyBjYW4ganVzdCBjYWxsIGNvbnN1bWVO
dW1iZXJSYXcKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJz
ZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBG
dW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgcmV0dXJuIGNh
bGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIpOwotICAgIH0KKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKTsKIAotICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIHZh
bHVlUmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZSgqbnVtYmVyLCB0b2tlbi51bml0VHlwZSgpKTsKLQotICAgIHJldHVybiBudWxscHRy
OworICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIu
Y29uc3VtZU51bWJlclJhdygpOwogfQogCi0jaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1z
dGF0aWMgaW5saW5lIGJvb2wgZGl2aXNpYmxlQnkxMDAoZG91YmxlIHZhbHVlKQorc3RhdGljIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dmFsdWUgLyAxMDApICogMTAwID09IHZhbHVlOworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKKyAgICAKKyAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZE51bWJlclJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFu
Z2UpKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAg
ICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIH0KLSNlbmRpZgogCi1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHRO
dW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCitzdGF0aWMgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewotICAgIC8vIFZhbHVlcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBhcmUgcGFyc2UgZXJy
b3JzLgotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4gJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPj0gMSAmJiB0b2tlbi5u
dW1lcmljVmFsdWUoKSA8PSAxMDAwCi0jaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAg
ICAgICYmIHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSA9PSBJbnRlZ2VyVmFsdWVUeXBlICYmIGRp
dmlzaWJsZUJ5MTAwKHRva2VuLm51bWVyaWNWYWx1ZSgpKQotI2VuZGlmCi0gICAgKQotICAgICAg
ICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci0KLSAgICBpZiAodG9rZW4udHlwZSgp
ICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CiAKLSAgICAvLyAiW0ZvciBj
YWxjKCldLCB0aGUgdXNlZCB2YWx1ZSByZXN1bHRpbmcgZnJvbSBhbiBleHByZXNzaW9uIG11c3Qg
YmUgY2xhbXBlZCB0byB0aGUgcmFuZ2UgYWxsb3dlZCBpbiB0aGUgdGFyZ2V0IGNvbnRleHQuIgot
ICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyLCBWYWx1ZVJhbmdlOjpBbGwpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIu
Y29uc3VtZU51bWJlclJhdygpOyByZXN1bHQKLSNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykK
LSAgICAgICAgJiYgKnJlc3VsdCA+IDAgJiYgKnJlc3VsdCA8IDEwMDAgJiYgZGl2aXNpYmxlQnkx
MDAoKnJlc3VsdCkKLSNlbmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6
bWF4KCpyZXN1bHQsIHN0ZDo6bmV4dGFmdGVyKDAuLCAxLikpLCBzdGQ6Om5leHRhZnRlcigxMDAw
LiwgMC4pKTsKKyAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5w
ZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFs
aWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJh
bmdlKSkgeworICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCisvLyBNQVJLOiBOdW1iZXIgKENTU1ByaW1pdGl2ZVZhbHVlIC0g
bWFpbnRhaW5nIGNhbGMpCisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1
ZVBvb2wpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShy
YW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CisKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIo
cmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOwogfQogCi1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9u
dFdlaWdodE51bWJlclJhdyhyYW5nZSkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAKKyAgICBhdXRvIHRva2Vu
ID0gcmFuZ2UucGVlaygpOworICAgIAorICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFs
aWRhdGVkTnVtYmVyUmF3KHRva2VuLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAg
ICAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKKyAgICAgICAgcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIHVuaXRUeXBlKTsKKyAgICB9CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWlubGluZSBib29sIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUoZG91
YmxlIHZhbHVlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICAvLyBGSVhNRTog
UHJlc2VudGF0aW9uYWwgSFRNTCBhdHRyaWJ1dGVzIHNob3VsZG4ndCB1c2UgdGhlIENTUyBwYXJz
ZXIgZm9yIGxlbmd0aHMKLQotICAgIGlmICh2YWx1ZSA9PSAwICYmIHVuaXRsZXNzWmVybyA9PSBV
bml0bGVzc1plcm9RdWlyazo6QWxsb3cpCi0gICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYg
KGlzVW5pdExlc3NWYWx1ZVBhcnNpbmdFbmFibGVkRm9yTW9kZShjc3NQYXJzZXJNb2RlKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGNzc1BhcnNlck1vZGUgPT0gSFRN
TFF1aXJrc01vZGUgJiYgdW5pdGxlc3MgPT0gVW5pdGxlc3NRdWlyazo6QWxsb3c7Ci19CisvLyBN
QVJLOiBQZXJjZW50IChyYXcpCiAKLXN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVu
Z3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkUGVyY2VudFJhdyhkb3VibGUgdmFs
dWUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25U
b2tlbikgewotICAgICAgICBzd2l0Y2ggKHRva2VuLnVuaXRUeXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgICAgICBpZiAoY3NzUGFyc2Vy
TW9kZSAhPSBVQVNoZWV0TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19FTVM6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgotICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxI
UzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0VYUzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19NTToKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgotICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoK
LSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVkg6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgotICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1E6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkg
fHwgc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4geyB7IHRva2VuLnVuaXRUeXBlKCksIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgIH0K
LSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7Ci0gICAgICAgIGlmICghc2hv
dWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAgIHx8ICh2
YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1
ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBpZiAo
c3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgIH0K
LQotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAgICBpZiAodmFsdWVS
YW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZUxlbmd0aFJhdygpOworICAgIGlmIChzdGQ6OmlzaW5mKHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0g
ICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZh
bHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotICAgIH0KLQotICAg
IGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUs
IHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1ZSwgcmVzdWx0LT50eXBlKTsKKyAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIHJldHVy
biBudWxscHRyOworICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUpOworICAgIHJldHVybiBj
YWxjUGFyc2VyLmNvbnN1bWVQZXJjZW50UmF3KCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2Vu
dFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsK
LSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKLSAgICAgICAgaWYgKHN0ZDo6aXNp
bmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpIHx8ICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5v
bk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4udHlwZSgp
ICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKTsKIAotICAgIENhbGNQ
YXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFs
dWVSYW5nZSk7Ci0gICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcoKTsKKyAg
ICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVl
aygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNl
bnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQogewotICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotfQorICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKLXsKLSAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNl
cihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgeyB9LCBj
c3NWYWx1ZVBvb2wpOwotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWVJZkNh
dGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIGlmIChhdXRvIHZhcmlh
YmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgeworICAgICAgICBzd2l0
Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJD
RU5UQUdFOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQ
ZXJjZW50UmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAg
ICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0K
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQogCi0gICAgaWYgKGF1dG8gcGVyY2VudCA9IGNv
bnN1bWVQZXJjZW50UmF3KHJhbmdlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVWYWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdF
KTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQorLy8gTUFSSzogUGVyY2VudCAoQ1NTUHJpbWl0
aXZlVmFsdWUgLSBtYWludGFpbmcgY2FsYykKIAotc3RhdGljIGJvb2wgY2FuQ29uc3VtZUNhbGNW
YWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKIHsK
LSAgICBpZiAoY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoIHx8IGNhdGVn
b3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQgfHwgY2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBpZiAo
Y3NzUGFyc2VyTW9kZSAhPSBTVkdBdHRyaWJ1dGVNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgY3NzVmFsdWVQb29sKTsKKyAgICByZXR1
cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnQpOworfQogCi0gICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVy
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBv
b2wpCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFnZVRva2Vu
KTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZh
bGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdl
KSkgeworICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCp2YWxpZGF0ZWRWYWx1ZSwgQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKKy8vIE1B
Uks6IExlbmd0aCAocmF3KQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlkYXRl
ZExlbmd0aFJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4p
IHsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3Nz
UGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQotICAgICAgICAgICAgcmV0dXJuIHsg
KnJlc3VsdCB9OworICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZl
ICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKLSAgICAgICAgaWYgKGF1dG8g
cmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChzdGQ6OmlzaW5mKHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQogCi0g
ICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0Oworc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3Ro
UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaykKK3sKKyAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKLSAg
ICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKTsgY2FsY3VsYXRpb24g
JiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2Vy
TW9kZSkpCi0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhPclBlcmNlbnRS
YXcoKTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIENhbGNQYXJzZXIgY2FsY1BhcnNl
cihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZUxlbmd0aFJhdygpOwogfQogCi1S
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaykKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENh
bGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2
YWx1ZVJhbmdlKTsKLSAgICAgICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZh
bHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNh
dGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIu
Y29uc3VtZVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKKworICAgIGF1dG8mIHRva2VuID0g
cmFuZ2UucGVlaygpOworCisgICAgYXV0byB1bml0VHlwZSA9IHRva2VuLnVuaXRUeXBlKCk7Cisg
ICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lf
RU1TOgorICAgICAgICBpZiAoY3NzUGFyc2VyTW9kZSAhPSBVQVNoZWV0TW9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UkxIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19DTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZX
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVk1JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1ZVJhbmdlLCB1bml0
bGVzcykpIHsKLSAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtdIChMZW5ndGhSYXcg
bGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShsZW5ndGgudmFsdWUsIGxlbmd0aC50eXBlKTsKLSAgICAgICAgfSwgW10gKGRv
dWJsZSBwZXJjZW50YWdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0UpOwotICAgICAgICB9KTsKKyAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRl
ZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAg
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHsgeyB1
bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4g
Y29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
IGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJr
IHVuaXRsZXNzWmVybykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7Ci0gICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tl
bi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKLSAgICAgICAgYXV0byB1bml0VHlwZSA9IHRv
a2VuLnVuaXRUeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JB
RDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgcmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICB9
Ci0gICAgfQorICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsK
IAotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gJiYgc2hvdWxkQWNjZXB0VW5p
dGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybykpCi0gICAgICAgIHJldHVybiB7IHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcs
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9Owor
ICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCi0gICAgaWYgKHRva2VuLnR5cGUoKSAh
PSBGdW5jdGlvblRva2VuKQorICAgIGlmICghc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tl
bi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrOjpBbGxvdykpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBDYWxjUGFy
c2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJh
bmdlOjpBbGwpOwotICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVBbmdsZVJhdygpOworICAg
IGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTGVuZ3RoUmF3KHRva2VuLm51bWVy
aWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsICp2
YWxpZGF0ZWRWYWx1ZSB9IH07CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKKy8vIE1BUks6IExlbmd0aCAo
Q1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmcgY2FsYykKKworc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkK
IHsKLSAgICByZXR1cm4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShyYW5nZSwgY3NzUGFyc2VyTW9k
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cisg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CisKKyAgICBD
YWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwg
dmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgp
OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRs
ZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBj
c3NWYWx1ZVBvb2wpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewotICAgICAg
ICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
LCBWYWx1ZVJhbmdlOjpBbGwsIHsgfSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgcmV0dXJuIGNh
bGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmds
ZSk7Ci0gICAgfQorICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRv
a2VuKTsKIAotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQ
YXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVWYWx1ZShhbmdsZS0+dmFsdWUsIGFuZ2xlLT50eXBlKTsKKyAgICBpZiAo
YXV0byBsZW5ndGhSYXcgPSBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5z
aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxl
c3MpKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+
dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCisgICAgaWYgKGF1dG8gbGVuZ3RoUmF3ID0g
Y29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgc3ltYm9sVGFi
bGUsIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShsZW5ndGhSYXctPnZhbHVlLCBsZW5ndGhSYXctPnR5
cGUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lQW5nbGVPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCisvLyBN
QVJLOiBBbmdsZSAocmF3KQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3Vt
ZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVp
cmspCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwot
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAg
ICAgICAgc3dpdGNoICh0b2tlbi51bml0VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ERUc6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVFVSTjoKLSAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCksIHRva2VuLnVuaXRUeXBlKCkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tl
bjoKLSAgICAgICAgaWYgKHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1Zh
bHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNT
U19ERUcpOwotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICBy
ZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVlUmFuZ2UpOworICAgIENhbGNQYXJzZXIg
Y2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2Us
IHN5bWJvbFRhYmxlKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lQW5nbGVSYXcoKTsK
K30KIAotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBDYWxjUGFyc2VyIGFuZ2xl
Q2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2Up
OwotICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGFuZ2xlQ2Fs
Y1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsY3VsYXRpb24tPmNhdGVnb3J5
KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGFuZ2xlQ2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKLSAgICAgICAgfQorc3RhdGljIHN0ZDo6
b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVu
c2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJv
UXVpcmspCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4pOwogCi0gICAgICAgIENhbGNQYXJzZXIgcGVyY2VudENhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwotICAgICAgICBpZiAoY29uc3Qg
Q1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IHBlcmNlbnRDYWxjUGFyc2VyLnZhbHVlKCkpIHsK
LSAgICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBwZXJjZW50Q2FsY1BhcnNl
ci5jb25zdW1lVmFsdWUoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgCisgICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOworICAg
IHN3aXRjaCAodW5pdFR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dS
QUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgICAgIHJldHVybiB7IHsg
dW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCkgfSB9OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1
aXJrIHVuaXRsZXNzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmds
ZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8pCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVl
aygpOwotICAgIENTU1VuaXRUeXBlIHVuaXQgPSB0b2tlbi51bml0VHlwZSgpOwotICAgIGJvb2wg
YWNjZXB0VW5pdGxlc3MgPSB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gJiYgdW5pdGxlc3Mg
PT0gVW5pdGxlc3NRdWlyazo6QWxsb3cgJiYgc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tl
bi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrOjpBbGxvdyk7Ci0gICAgaWYgKGFjY2VwdFVuaXRsZXNzKQotICAgICAgICB1bml0ID0gQ1NT
VW5pdFR5cGU6OkNTU19NUzsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2Vu
IHx8IGFjY2VwdFVuaXRsZXNzKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFu
Z2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAodW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX01T
IHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQotICAgICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVt
YmVyVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlKTsKLSAgICByZXR1cm4gY2FsY1BhcnNlci5jb25z
dW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUpOworICAgIGlmIChz
aG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgY3Nz
UGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgIHJldHVybiB7IHsg
Q1NTVW5pdFR5cGU6OkNTU19ERUcsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
bnVtZXJpY1ZhbHVlKCkgfSB9OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIEFsbG93WFJlc29sdXRpb25Vbml0IGFsbG93WCkKKy8vIE1BUks6IEFuZ2xlIChD
U1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluZyBjYWxjKQorCitzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9v
bCYgY3NzVmFsdWVQb29sKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKLSAgICAvLyBVbmxpa2UgdGhlIG90aGVyIHR5cGVzLCBjYWxjKCkgZG9lcyBu
b3Qgd29yayB3aXRoIDxyZXNvbHV0aW9uPi4KLSAgICBpZiAodG9rZW4udHlwZSgpICE9IERpbWVu
c2lvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDU1NVbml0VHlwZSB1bml0
ID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBpZiAodW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQ
UFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBl
OjpDU1NfRFBDTSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUo
KSwgdW5pdCk7Ci0gICAgaWYgKGFsbG93WCA9PSBBbGxvd1hSZXNvbHV0aW9uVW5pdDo6QWxsb3cg
JiYgdG9rZW4udmFsdWUoKSA9PSAieCIpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
bnVtZXJpY1ZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfRFBQWCk7CisgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgY3NzVmFsdWVQb29sKTsKKyAgICByZXR1cm4g
Y2FsY1BhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlKTsKIH0KIAotc3RkOjpvcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsg
dW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKIHsKLSAgICBpZiAocmFu
Z2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7
Ci19CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwog
Ci1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZShyYW5nZSwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25z
dW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJvbFRhYmxl
LCB2YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShhbmdsZVJhdy0+dmFsdWUsIGFu
Z2xlUmF3LT50eXBlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9R
dWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQogewotICAgIGlm
IChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCi0gICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKworICAgIGlmIChhdXRvIGFuZ2xl
UmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1i
b2xUYWJsZSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVy
bykpCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZh
bHVlLCBhbmdsZVJhdy0+dHlwZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKworLy8gTUFS
SzogVGltZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmcgY2FsYykKKworc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBjc3NWYWx1
ZVBvb2wpCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CisKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBjc3NWYWx1ZVBvb2wpOworICAgIHJl
dHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29y
eTo6VGltZSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBEaW1lbnNpb25Ub2tlbik7CisKKyAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpO
b25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAwKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5
cGUoKTsgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6
OkNTU19TKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXQpOworCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKworICAgIGlmICh1bml0
bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyAmJiBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVl
KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFs
dWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworLy8gTUFSSzogUmVzb2x1dGlvbiAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBubyBjYWxjKQor
CitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlvbkNTU1By
aW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBBbGxvd1hSZXNvbHV0aW9uVW5pdCBhbGxvd1gsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lv
blRva2VuKTsKKworICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsg
dW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkKKyAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
Lm51bWVyaWNWYWx1ZSgpLCB1bml0KTsKKyAgICBpZiAoYWxsb3dYID09IEFsbG93WFJlc29sdXRp
b25Vbml0OjpBbGxvdyAmJiByYW5nZS5wZWVrKCkudmFsdWUoKSA9PSAieCIpCisgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19EUFBYKTsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorCisKKy8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVy
cyBmb3IgY2FsbGVycyB0aGF0IGRvIE5PVCBrbm93IHRoZSB0b2tlbiB0eXBlLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkK
K3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2Us
IG1pbmltdW1WYWx1ZSk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4g
Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+KHJh
bmdlLCBtaW5pbXVtVmFsdWUpOworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEludFR5cGU+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlLCBDU1NWYWx1ZVBv
b2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKwor
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAg
ICAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIGNz
c1ZhbHVlUG9vbCk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29u
c3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBjc3NWYWx1ZVBvb2wpOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZUludGVnZXJUeXBlUmF3PGludD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7Cit9CisKK1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlw
ZTxpbnQ+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwor
fQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5
cGVSYXc8dW5zaWduZWQ+KHJhbmdlLCAxKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorewor
ICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8dW5zaWduZWQ+KHJhbmdlLCAxLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KKworc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVO
dW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29u
c3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UpOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAg
ICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZU51bWJl
ckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNh
c2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6Om9wdGlvbmFs
PExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cisg
ICAgCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
CisgICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MpOworCisg
ICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdW5pdGxlc3MpOworICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAg
IHJldHVybiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKTsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisg
ICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKyAgICAKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4g
Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVO
dW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlKQoreworICAgIGNvbnN0IGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwor
CisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Cisg
ICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Cisg
ICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRh
Z2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2Vy
U2FmZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9v
bCYgY3NzVmFsdWVQb29sKQoreworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworCisg
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAg
ICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NWYWx1ZVBvb2wp
OworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUGVy
Y2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdl
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1ZhbHVlUG9vbCk7CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGlj
IGJvb2wgY2FuQ29uc3VtZUNhbGNWYWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAgaWYgKGNhdGVnb3J5ID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50IHx8IGNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNzc1BhcnNlck1vZGUgIT0gU1ZH
QXR0cmlidXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhdGVnb3J5
ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykK
K3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5n
ZTo6QWxsLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKworICAgIGNh
c2UgRGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBjc3NQYXJz
ZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKworICAgIGNhc2UgTnVtYmVyVG9rZW46
CisgICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
cmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVz
c1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVdvcmtl
clNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIHVu
aXRsZXNzLCB1bml0bGVzc1plcm8pOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3sKKyAgICBh
dXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7
IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVy
bywgY3NzVmFsdWVQb29sKTsKKworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAgICAgIHJl
dHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybywgY3NzVmFsdWVQb29sKTsKKworICAgIGNhc2UgTnVtYmVy
VG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwg
Y3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgY3NzVmFsdWVQb29sKTsKKyAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOworCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSk7CisKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJl
dHVybiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBBbGxvd1hSZXNvbHV0aW9uVW5pdCBhbGxvd1gpCit7CisgICAgLy8gTk9URTogVW5saWtlIHRo
ZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCisK
KyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7CisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVS
ZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFu
Z2UsIGFsbG93WCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8v
IE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJzICh0b2tlbiB0eXBlIHVua25vd24gYnkgY2Fs
bGVyKS4KKworc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlT3JQ
ZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5p
dGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5w
ZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25U
b2tlbjogeworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBjc3NWYWx1ZVBv
b2wpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICByZXR1cm4gY29uc3VtZVBl
cmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
cmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICB9CisKKyAgICBjYXNl
IERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBjc3NWYWx1ZVBv
b2wpOworICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1pl
cm8sIGNzc1ZhbHVlUG9vbCk7CisKKyAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAg
cmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsK
KyAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVu
aXRsZXNzKQoreworICAgIGF1dG8gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3ID0gW10oYXV0
byByZXN1bHQpIC0+IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB7CisgICAgICAg
IGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfTsKKworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVl
aygpOworCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9r
ZW46IHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHVzaW5nIHRyeWluZyB0byBn
ZW5lcmF0ZSB0aGUgY2FsYyB3aXRoIGJvdGggTGVuZ3RoIGFuZCBQZXJjZW50IGRlc3RpbmF0aW9u
IGNhdGVnb3J5IHR5cGVzPworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChhdXRv
IGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25z
dW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkKKyAg
ICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lTGVuZ3RoUmF3V2l0
aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNl
ck1vZGUsIHVuaXRsZXNzKSk7CisgICAgCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lTGVuZ3RoUmF3V2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUs
IHVuaXRsZXNzKSk7CisKKyAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRv
a2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
KworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBhdXRvJiB0
b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAg
Y2FzZSBGdW5jdGlvblRva2VuOiB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1
c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0aCBhbmQgUGVy
Y2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KKyAgICAgICAgQ2FsY1BhcnNlciBjYWxj
UGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOwor
ICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKTsgY2FsY3Vs
YXRpb24gJiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3Nz
UGFyc2VyTW9kZSkpCisgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAg
ICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1v
ZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICAKKyAgICBjYXNl
IE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwor
CisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2Vu
dENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKKy8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJzIHRoYXQgYWxsb3cgbG9va3VwIGlu
IHRoZSBzeW1ib2wgdGFibGUgZm9yIElkZW50VG9rZW5zIChieSBkZWZhdWx0LCBvdGhlciBjb25z
dW1lcnMgb25seSBsb29rdXAgaW4gdGhlIHN5bWJvbCB0YWJsZSBmb3IgY2FsYygpKS4KKworc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJs
ZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwp
Cit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2Vu
LnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1
bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UpOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNv
bnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxl
LCB2YWx1ZVJhbmdlKTsKKworICAgIGNhc2UgSWRlbnRUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNv
bnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQoreworICAgIGF1dG8mIHRva2VuID0g
cmFuZ2UucGVlaygpOworCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1
bmN0aW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7CisKKyAgICBj
YXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2Up
OworCisgICAgY2FzZSBJZGVudFRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2Up
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lQW5n
bGVSYXdPck51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFu
Z2xlUmF3KSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geworICAgICAgICBpZiAoYW5nbGVSYXcp
CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFu
Z2xlUmF3LT50eXBlLCBhbmdsZVJhdy0+dmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH07CisKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3
aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICBp
ZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKKyAgICAgICAgICAgIHJl
dHVybiBjb21wdXRlRGVncmVlcyhhbmdsZVJhdyk7CisKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdl
OjpBbGwpOworICAgIAorICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBj
b21wdXRlRGVncmVlcyhjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24o
cmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKTsKKyAgICAKKyAgICBjYXNlIE51
bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpOworCisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0Fs
bG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFuZ2xlUmF3KSAtPiBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4geworICAgICAgICBpZiAoYW5nbGVSYXcpCisgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3LT50eXBl
LCBhbmdsZVJhdy0+dmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH07
CisKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICBpZiAoYXV0byBhbmds
ZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3KTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2U6OkFsbCk7CisgICAgCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lv
bihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpOworICAgIAorICAgIGNhc2Ug
TnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisKKyAgICBjYXNlIElk
ZW50VG9rZW46CisgICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHRv
a2VuLmlkKCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAgICAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFE
OgorICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgICAgICAgICAg
ICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKHZhcmlhYmxlLT50eXBlLCB2
YXJpYWJsZS0+dmFsdWUpOworCisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgorICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsKKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIE1BUks6IC0gQ29tYmluYXRpb24g
Y29uc3VtZXJzIHdpdGggdHJhbnNmb3JtYXRpb25zIGJhc2VkIG9uIHJlc3VsdCB0eXBlLgorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUcmFuc2Zvcm1lciwgdHlwZW5hbWUgUGVyY2VudFRyYW5z
Zm9ybWVyPgorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRyYW5zZm9y
bWVyJiYgcGVyY2VudFRyYW5mb3JtZXIpCit7CisgICAgY29uc3QgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gbnVtYmVyVHJhbmZvcm1lcigqbnVtYmVyKTsKKyAgICAgICAgaWYgKGF1dG8g
cGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5mb3Jt
ZXIoKnBlcmNlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBlcmNlbnRh
Z2VUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKKyAgICAg
ICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigqcGVyY2VudCk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpudW1iZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQorewor
ICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdlLCB2YWx1ZVJhbmdl
LCBbXShkb3VibGUgbnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50
KSB7IHJldHVybiBwZXJjZW50IC8gMTAwLjA7IH0pOworfQorCisvLyBNQVJLOiAtIENvbWJpbmF0
aW9uIGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUg
Zm9yIElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gcmVzdWx0IHR5cGUu
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50
VHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51
bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRyYW5zZm9ybWVyJiYg
cGVyY2VudFRyYW5mb3JtZXIpIC0+IHN0ZDo6b3B0aW9uYWw8ZGVjbHR5cGUobnVtYmVyVHJhbmZv
cm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Cit7CisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkK
KyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpudW1iZXIpOworICAgICAgICBp
ZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJu
IHBlcmNlbnRUcmFuZm9ybWVyKCpwZXJjZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25z
dW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHN5bWJvbFRh
YmxlLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigq
cGVyY2VudCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAg
ICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51
bWJlcihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJu
IG51bWJlclRyYW5mb3JtZXIoKm51bWJlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
ZGVudFRva2VuOgorICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChy
YW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAg
ICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2
YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwZXJjZW50VHJhbmZvcm1lcigqdmFsaWRhdGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZh
bGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCp2YWxpZGF0ZWRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVyKSB7IHJldHVy
biBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50IC8gMTAwLjA7
IH0pOworfQorCisjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitzdGF0aWMgaW5saW5lIGJv
b2wgZGl2aXNpYmxlQnkxMDAoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHZhbHVlIC8gMTAwKSAqIDEwMCA9PSB2YWx1ZTsKK30KKyNlbmRpZgorCitzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCit7CisgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9y
IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMuCisgICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKKyAgICAgICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVz
ZWQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8g
dGhlIHJhbmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2Us
IHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICBicmVhazsKKyNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAgaWYgKCpyZXN1
bHQgPD0gMCB8fCAqcmVzdWx0ID49IDEwMDAgfHwgIWRpdmlzaWJsZUJ5MTAwKCpyZXN1bHQpKQor
ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKnJl
c3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5leHRhZnRlcigxMDAwLjAsIDAu
MCkpOworICAgIH0KKworICAgIGNhc2UgTnVtYmVyVG9rZW46IHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSB0b2tlbi5udW1lcmljVmFsdWUoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDEgfHwgcmVz
dWx0ID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQorICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpICE9IEludGVnZXJWYWx1
ZVR5cGUgfHwgIWRpdmlzaWJsZUJ5MTAwKHJlc3VsdCkpCisgICAgICAgICAgICBicmVhazsKKyNl
bmRpZgorICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcldvcmtlclNhZmUo
cmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxDU1NWYWx1
ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAg
aWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KS5pZCgpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2Vy
U2FmZShyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnJlc3VsdCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKQEAgLTcwMCw3ICsxMzQzLDcgQEAgU3RyaW5nVmlldyBjb25zdW1lVXJsQXNTdHJpbmdWaWV3
KENTU1BhcgogICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVy
biBTdHJpbmdWaWV3KCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lVXJsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNzM3LDEz
MiArMTM4MCwyMCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVPcHRpCiAg
ICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkKICAgICAgICAg
cmV0dXJuIDEuMDsKIAotICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJl
ck9yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhyYW5nZSkpCisgICAgaWYgKGF1dG8gYWxwaGFQYXJh
bWV0ZXIgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlKSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKmFscGhhUGFyYW1ldGVyLCAwLjAsIDEuMCk7CiAK
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IGNvbnN1bWVPcHRpb25hbEFscGhhT3JJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUpCiB7CiAgICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNl
KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGF1dG8gbm9ybWFsaXplUGVyY2Vu
dCA9IFtdKGRvdWJsZSBwZXJjZW50KSB7Ci0gICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHBlcmNl
bnQgLyAxMDAuMCwgMC4wLCAxLjApOwotICAgIH07Ci0KLSAgICBhdXRvIG5vcm1hbGl6ZU51bWJl
ciA9IFtdKGRvdWJsZSBhbHBoYSkgewotICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChhbHBoYSwg
MC4wLCAxLjApOwotICAgIH07Ci0KLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7Ci0KLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVu
Y3Rpb25Ub2tlbjogewotICAgICAgICBDYWxjUGFyc2VyIHBlcmNlbnRhZ2VDYWxjUGFyc2VyKHJh
bmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCBWYWx1ZVJhbmdlOjpBbGwsIHN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IHBlcmNlbnRhZ2VDYWxjUGFyc2Vy
LmNvbnN1bWVQZXJjZW50UmF3KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplUGVyY2Vu
dCgqcGVyY2VudCk7Ci0gICAgICAgIAotICAgICAgICBDYWxjUGFyc2VyIG51bWJlckNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZTo6QWxsLCBz
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IG51bWJlckNhbGNQYXJzZXIu
Y29uc3VtZU51bWJlclJhdygpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU51bWJlcigq
bnVtYmVyKTsKLQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGNh
c2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmlj
VmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1
cm4gbm9ybWFsaXplUGVyY2VudChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpKTsKLQotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBu
b3JtYWxpemVOdW1iZXIocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSk7Ci0KLSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlh
YmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
aWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgICAgIHJl
dHVybiBub3JtYWxpemVQZXJjZW50KHZhcmlhYmxlLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1h
bGl6ZU51bWJlcih2YXJpYWJsZS0+dmFsdWUpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lSHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xl
UmF3KHJhbmdlLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0KLSAgICByZXR1cm4gY29u
c3VtZU51bWJlclJhdyhyYW5nZSk7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZUh1ZU9ySWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1BhcnNlciBhbmdsZUNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJhbmdlOjpBbGwsIHN5
bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBhbmdsZUNhbGNQYXJzZXIuY29u
c3VtZUFuZ2xlUmF3KCkpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAgICAgICAKLSAgICAg
ICAgQ2FsY1BhcnNlciBudW1iZXJDYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAgICAgICByZXR1cm4g
bnVtYmVyQ2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KCk7Ci0gICAgfQotICAgIAotICAgIGNh
c2UgRGltZW5zaW9uVG9rZW46IHsKLSAgICAgICAgYXV0byB1bml0VHlwZSA9IHRva2VuLnVuaXRU
eXBlKCk7Ci0gICAgICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19UVVJOOgotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
RGVncmVlcyh1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1l
cmljVmFsdWUoKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0g
ICAgICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpOwotCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJs
ZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlk
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1JBRDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAg
ICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyh2YXJpYWJsZS0+dHlwZSwgdmFy
aWFibGUtPnZhbHVlKTsKLQotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
UjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVlOwotCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQorICAgIGlmIChhdXRv
IGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6
OkFsbCkpCisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCphbHBoYVBhcmFtZXRlciwgMC4wLCAx
LjApOwogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIH0KIApAQCAtODcxLDEzOCArMTQwMiwzMyBAQCBzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZUh1
ZShkb3VibGUgaHVlKQogICAgIHJldHVybiBzdGQ6OmZtb2Qoc3RkOjpmbW9kKGh1ZSwgMzYwLjAp
ICsgMzYwLjAsIDM2MC4wKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lTnVtYmVyT3JJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3N0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNv
bXBvbmVudE51bWJlcihkb3VibGUgdmFsdWUpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJh
bmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9s
VGFibGUpOwotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KCk7Ci0g
ICAgfQotCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCk7Ci0KLSAgICBjYXNlIElkZW50
VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsKLQotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCi1zdGF0
aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50T3JJZGVudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkK
K3N0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoZG91YmxlIHZh
bHVlKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsK
LQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7
Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCwgVmFsdWVSYW5nZTo6QWxsLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAgIHJldHVy
biBjYWxjUGFyc2VyLmNvbnN1bWVQZXJjZW50UmF3KCk7Ci0gICAgfQotCi0gICAgY2FzZSBQZXJj
ZW50YWdlVG9rZW46Ci0gICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpOwotCi0gICAgY2Fz
ZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdl
dChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVl
OwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSAv
IDEwMC4wICogMjU1LjApOwogfQogCi1lbnVtIGNsYXNzIFJHQkNvbXBvbmVudFR5cGUgeyBOdW1i
ZXIsIFBlcmNlbnRhZ2UgfTsKLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gY29uc3Vt
ZU51bWJlck9yUGVyY2VudE9ySWRlbnROb3JtYWxpemVkRm9yUmVsYXRpdmVSR0IoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUp
CitzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50OF90PiBjb25zdW1lUmVsYXRpdmVSR0JDb21wb25l
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUpCiB7Ci0gICAgYXV0byBub3JtYWxpemVQZXJjZW50ID0gW10oZG91YmxlIHBl
cmNlbnQpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdC
QUJ5dGUocGVyY2VudCAvIDEwMC4wICogMjU1LjApOwotICAgIH07Ci0KLSAgICBhdXRvIG5vcm1h
bGl6ZU51bWJlciA9IFtdKGRvdWJsZSBudW1iZXIpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUobnVtYmVyKTsKLSAgICB9OwotCi0gICAgY29u
c3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1Bh
cnNlciBwZXJjZW50YWdlQ2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCwgVmFsdWVSYW5nZTo6QWxsLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmIChhdXRvIHBl
cmNlbnQgPSBwZXJjZW50YWdlQ2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJhdygpKQotICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBlcmNlbnQoKnBlcmNlbnQpOwotICAgICAgICAKLSAgICAg
ICAgQ2FsY1BhcnNlciBudW1iZXJDYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoYXV0
byBudW1iZXIgPSBudW1iZXJDYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcoKSkKLSAgICAgICAg
ICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIoKm51bWJlcik7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgot
ICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gbm9ybWFsaXplUGVyY2VudChy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKLQotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIocmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7Ci0KLSAgICBjYXNl
IElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0
KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSkpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVQZXJjZW50
KHZhcmlhYmxlLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU51bWJlcih2YXJpYWJsZS0+
dmFsdWUpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgbm9ybWFs
aXplUkdCQ29tcG9uZW50TnVtYmVyLCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKTsK
IH0KIAorZW51bSBjbGFzcyBSR0JDb21wb25lbnRUeXBlIHsgTnVtYmVyLCBQZXJjZW50YWdlIH07
CiBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFsdWUsIFJHQkNvbXBv
bmVudFR5cGUgY29tcG9uZW50VHlwZSkKIHsKLSAgICBpZiAoY29tcG9uZW50VHlwZSA9PSBSR0JD
b21wb25lbnRUeXBlOjpQZXJjZW50YWdlKQotICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAg
KiAyNTUuMDsKLQotICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFC
eXRlKHZhbHVlKTsKKyAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHsKKyAgICBjYXNlIFJHQkNv
bXBvbmVudFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVu
dE51bWJlcih2YWx1ZSk7CisgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlOgor
ICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSh2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQog
CiBlbnVtIGNsYXNzIFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4IHsgQ29tbWFzLCBXaGl0ZXNwYWNl
U2xhc2ggfTsKQEAgLTEwMjYsNDQgKzE0NTIsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IGNvbnN1bWVSR0JPCiAgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihh
cmdzLCBzeW50YXgpKQogICAgICAgICByZXR1cm4gMS4wOwogCi0gICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7Ci19Ci0KLXN0cnVjdCBSZWxhdGl2
ZVJHQkNvbXBvbmVudCB7Ci0gICAgVmFyaWFudDxkb3VibGUsIENTU1ZhbHVlSUQ+IHZhbHVlOwot
ICAgIHN0ZDo6b3B0aW9uYWw8UkdCQ29tcG9uZW50VHlwZT4gdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PENTU1ZhbHVlSUQgQz4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVsYXRpdmVSR0JDb21wb25lbnQ+
IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBz
dGQ6Om9wdGlvbmFsPFJHQkNvbXBvbmVudFR5cGU+IGNvbXBvbmVudFR5cGUpCi17Ci0gICAgaWYg
KCFjb21wb25lbnRUeXBlKSB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncykpCi0gICAgICAgICAgICByZXR1cm4gUmVsYXRpdmVSR0JDb21wb25lbnQgeyAq
bnVtYmVyLCBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfTsKLSAgICAgICAgaWYgKGF1dG8gcGVy
Y2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0
aXZlUkdCQ29tcG9uZW50IHsgKnBlcmNlbnQsIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2Ug
fTsKLSAgICAgICAgaWYgKGF1dG8gY2hhbm5lbCA9IGNvbnN1bWVJZGVudFJhdzxDPihhcmdzKSkK
LSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpjaGFubmVsLCBzdGQ6
Om51bGxvcHQgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBz
d2l0Y2ggKCpjb21wb25lbnRUeXBlKSB7Ci0gICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1i
ZXI6IHsKLSAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkK
LSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpudW1iZXIsIFJHQkNv
bXBvbmVudFR5cGU6Ok51bWJlciB9OwotICAgICAgICBpZiAoYXV0byBjaGFubmVsID0gY29uc3Vt
ZUlkZW50UmF3PEM+KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0aXZlUkdCQ29tcG9u
ZW50IHsgKmNoYW5uZWwsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9OwotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLSAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNl
bnRhZ2U6IHsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFy
Z3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0aXZlUkdCQ29tcG9uZW50IHsgKnBlcmNlbnQs
IFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UgfTsKLSAgICAgICAgaWYgKGF1dG8gY2hhbm5l
bCA9IGNvbnN1bWVJZGVudFJhdzxDPihhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2
ZVJHQkNvbXBvbmVudCB7ICpjaGFubmVsLCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH07
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotICAgIH0KLQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBl
cmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0
aXZlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTA4NCwxOSArMTQ3MywxOSBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzU1JHQi5hbHBoYSAqIDEwMC4w
IH0KICAgICB9OwogCi0gICAgYXV0byByZWQgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50T3JJZGVu
dE5vcm1hbGl6ZWRGb3JSZWxhdGl2ZVJHQihhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBy
ZWQgPSBjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAg
IGlmICghcmVkKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBncmVlbiA9IGNvbnN1
bWVOdW1iZXJPclBlcmNlbnRPcklkZW50Tm9ybWFsaXplZEZvclJlbGF0aXZlUkdCKGFyZ3MsIHN5
bWJvbFRhYmxlKTsKKyAgICBhdXRvIGdyZWVuID0gY29uc3VtZVJlbGF0aXZlUkdCQ29tcG9uZW50
KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWdyZWVuKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBibHVlID0gY29uc3VtZU51bWJlck9yUGVyY2VudE9ySWRlbnROb3JtYWxp
emVkRm9yUmVsYXRpdmVSR0IoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gYmx1ZSA9IGNv
bnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFi
bHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRp
b25hbEFscGhhT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBhbHBoYSA9IGNv
bnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xMTk2LDE5
ICsxNTg1LDE5IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVycygKICAg
ICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdp
bkNvbG9yQXNIU0wuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8gaHVlID0gY29u
c3VtZUh1ZU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gaHVlID0gY29uc3Vt
ZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9s
VGFibGUsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBhdXRvIHNhdHVyYXRpb24gPSBjb25zdW1lUGVyY2VudE9ySWRlbnQoYXJncywgc3lt
Ym9sVGFibGUpOworICAgIGF1dG8gc2F0dXJhdGlvbiA9IGNvbnN1bWVQZXJjZW50QWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIXNhdHVyYXRpb24p
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJj
ZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25z
dW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAg
ICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhh
ID0gY29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBh
dXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
YXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07
CiAKQEAgLTEyMzUsNyArMTYyNCw3IEBAIHRlbXBsYXRlPEhTTEZ1bmN0aW9uTW9kZSBNb2RlPiBz
dGF0aWMgQ28KICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVycyhh
cmdzLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIGh1ZSA9IGNvbnN1bWVIdWUoYXJncywg
Y29udGV4dCk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhdyhhcmdz
LCBjb250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4geyB9OwogCkBA
IC0xMzEwLDE5ICsxNjk5LDE5IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1l
dGVycygKICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0UsIG9yaWdpbkNvbG9yQXNIV0IuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8g
aHVlID0gY29uc3VtZUh1ZU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gaHVl
ID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJn
cywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50T3JJZGVudChh
cmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudEFs
bG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCF3aGl0
ZW5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGJsYWNrbmVzcyA9IGNvbnN1
bWVQZXJjZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBibGFja25lc3Mg
PSBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJs
ZSk7CiAgICAgaWYgKCFibGFja25lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsK
KyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVy
biB7IH07CiAKQEAgLTEzNDcsNyArMTczNiw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFt
ZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoY29udGV4dC5yZWxhdGl2ZUNvbG9yU3ludGF4RW5hYmxl
ZCAmJiBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJvbSkKICAgICAgICAgcmV0dXJuIHBh
cnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKGFyZ3MsIGNvbnRleHQpOwogCi0gICAgYXV0byBodWUg
PSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xl
UmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIApAQCAtMTM5MCwxOSArMTc3OSwxOSBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmFscGhhICogMTAwLjAgfQog
ICAgIH07CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50T3JJZGVudChhcmdz
LCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudEFsbG93
aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFsaWdodG5l
c3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1i
ZXJPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVO
dW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlm
ICghYVZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBiVmFsdWUgPSBjb25z
dW1lTnVtYmVyT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBiVmFsdWUgPSBj
b25zdW1lTnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsK
ICAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEg
PSBjb25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1
dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChh
cmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IApAQCAtMTQ2OCwxOSArMTg1NywxOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxDSFBh
cmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJD
RU5UQUdFLCBvcmlnaW5Db2xvckFzTENILmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBh
dXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7
CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIGNocm9tYSA9IGNvbnN1bWVOdW1iZXJPcklkZW50KGFyZ3Ms
IHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGNocm9tYSA9IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghY2hyb21hKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBodWUgPSBjb25zdW1lSHVlT3JJZGVudChhcmdz
LCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVSYXdPck51bWJlclJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2Rl
KTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEg
PSBjb25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1
dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChh
cmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IApAQCAtMTUxNCw3ICsxOTAzLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhD
U1NQYXJzZQogICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGF1dG8gaHVlID0gY29uc3Vt
ZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTU0NCw3ICsxOTMzLDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgQ29sbwogCiAgICAgZG91YmxlIGNoYW5uZWxzWzNdID0g
eyAwLCAwLCAwIH07CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
YXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNoYW5uZWxzW2ldID0gKnZhbHVlOwpAQCAtMjM1Niw3ICsyNzQ1LDcgQEAgc3RhdGlj
IGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgICAgICBwb3NpdGlvbiA9IChp
ZCA9PSBDU1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGlkID09IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVO
dW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAgIGF1dG8gdmFsdWUg
PSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwogICAgICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwb3NpdGlv
biA9ICp2YWx1ZTsKQEAgLTI3MDUsNyArMzA5NCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVDcm9zc0ZhZGUKICAgICBpZiAoIXRvSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
KGFyZ3MpOworICAgIGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXcoYXJncyk7CiAgICAgaWYgKCFwZXJjZW50YWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50YWdlLCAwLCAxKSwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430211</attachid>
            <date>2021-05-31 13:50:18 -0700</date>
            <delta_ts>2021-06-01 08:24:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226473-20210531135017.patch</filename>
            <type>text/plain</type>
            <size>88559</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAyMS0wNS0zMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCB0b2tlbi10eXBl
IGRlcGVuZGVudCBDU1MgcHJvcGVydHkgcGFyc2luZyBmdW5jdGlvbnMgdG8gYWxsb3cgbW9yZSBj
b2RlIHNoYXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFzIGEgc3RlcCB0b3dhcmQgcmVkdWNpbmcgZHVwbGljYXRlIGNvZGUgYW5kIG1ha2luZyBD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgYSBiaXQKKyAgICAgICAgZWFzaWVyIHRvIGZvbGxvdywg
dGhpcyBjaGFuZ2UgZXh0cmFjdHMgdGhlIHRva2VuIHR5cGUgc3BlY2lmaWMgcGFydHMgb2YgdGhl
IHByaW1pdGl2ZQorICAgICAgICBjb25zdW1lIGZ1bmN0aW9ucyAoZS5nLiB0aGUgcGFydCBvZiBj
b25zdW1lTnVtYmVyUmF3IHdoZXJlIHRoZSB0b2tlbiBpcyBrbm93biB0byBiZQorICAgICAgICBh
IEZ1bmN0aW9uVG9rZW4pIGludG8gdGhlaXIgb3duIGZ1bmN0aW9ucy4gVGhpcyBhbGxvdyBzaGFy
aW5nIGJldHdlZW4gZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgYm90aCBuZWVkIHRoYXQgbG9naWMg
KGUuZy4gY29uc3VtZU51bWJlclJhdyBhbmQgY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhdyBj
YW4gc2hhcmUpCisgICAgICAgIHdpdGhvdXQgZXh0cmEgYnJhbmNoZXMsIHJlY2hlY2tpbmcgdGhl
IHRva2VuIHR5cGUsIG9yIGR1cGxpY2F0aW9uLiBJdCBhbHNvIGhhcyB0aGUKKyAgICAgICAgYmVu
ZWZpdCBvZiBjcmVhdGluZyBhIHN0cmljdCBwYXR0ZXJuIGZvciBwcmltaXRpdmUgY29uc3VtZXJz
IGdvaW5nIGZvcndhcmQuCisKKyAgICAgICAgVGhlIG5ldyBuYW1lcyBhcmUgcmF0aGVyIGxvbmcg
dG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHdoYXQgdGhleSBkbywgYnV0IHRoZXkgYXJlIHVubGlrZWx5
CisgICAgICAgIHRvIHN0YXkgZm9yIHZlcnkgbG9uZy4gRnV0dXJlIGNoYW5nZXMgd2lsbCB0cnkg
dG8gZ2VuZXJhbGl6ZSB0aHJvdWdoIHRlbXBsYXRlcyB0byBhbGxvdworICAgICAgICBwcm9ncmFt
YXRpYyBjb21iaW5hdGlvbnMgb2YgdGhlIGNvbnN1bWVycyB3aXRob3V0IGFsd2F5cyBoYXZlaW5n
IHRvIHdyaXRlIHRoZSBib2lsZXJwbGF0ZS4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6c2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVn
ZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUlu
dGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnZhbGlkYXRl
ZE51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVy
Y2VudGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRMZW5ndGhSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVUaW1lQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRp
dmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRl
Z2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aXZlSW50ZWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y2FuQ29uc3VtZUNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVdv
cmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUFuZ2xlT3JQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
QW5nbGVSYXdPck51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZU51bWJlclJhd09yUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVy
UmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudERp
dmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmRpdmlzaWJsZUJ5MTAwKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1iZXJS
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
Rm9udFdlaWdodE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFdvcmtl
clNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lVXJsQXNTdHJpbmdWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
bGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVI
U0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhXQlBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFy
YW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBh
cnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6cGFyc2VMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVj
YXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUh1ZU9ySWRlbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JJZGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50T3JJZGVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRPcklkZW50Tm9ybWFsaXplZEZvclJlbGF0aXZlUkdCKTogRGVsZXRlZC4KKwogMjAyMS0wNC0y
OSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBF
bmFibGUgPHN1bW1hcnk+IHRvIGJlIGEgZmxleCBjb250YWluZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJ
KHJldmlzaW9uIDI3ODI2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTMgKzg3LDE3IEBAIENT
U1BhcnNlclRva2VuUmFuZ2UgY29uc3VtZUZ1bmN0aW9uKENTU1AKICAgICByZXR1cm4gY29udGVu
dHM7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlck9yUGVy
Y2VudERpdmlkZWRCeTEwMFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQoraW5saW5lIGJvb2wgc2hvdWxkQWNjZXB0
VW5pdGxlc3NWYWx1ZShkb3VibGUgdmFsdWUsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQog
ewotICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVS
YW5nZSkpCi0gICAgICAgIHJldHVybiAqcGVyY2VudCAvIDEwMC4wOwotICAgIGlmIChhdXRvIG51
bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAgICAgICByZXR1
cm4gKm51bWJlcjsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIEZJWE1FOiBQcmVz
ZW50YXRpb25hbCBIVE1MIGF0dHJpYnV0ZXMgc2hvdWxkbid0IHVzZSB0aGUgQ1NTIHBhcnNlciBm
b3IgbGVuZ3RocworCisgICAgaWYgKHZhbHVlID09IDAgJiYgdW5pdGxlc3NaZXJvID09IFVuaXRs
ZXNzWmVyb1F1aXJrOjpBbGxvdykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNV
bml0TGVzc1ZhbHVlUGFyc2luZ0VuYWJsZWRGb3JNb2RlKGNzc1BhcnNlck1vZGUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdzsKIH0KIAogLy8gRklY
TUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIuCkBAIC0yMTMsMTcgKzIxNywxMyBAQCBwcml2YXRlOgogICAgIENT
U1ZhbHVlUG9vbCYgbV92YWx1ZVBvb2w7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBl
PiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKLXsKLSAgICBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9
PSBOdW1iZXJUb2tlbikgewotICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09
IE51bWJlclZhbHVlVHlwZSB8fCB0b2tlbi5udW1lcmljVmFsdWUoKSA8IG1pbmltdW1WYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRv
PEludFR5cGU+KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCkpOwotICAgIH0KKy8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2Fs
bGVycyB0aGF0IGtub3cgdGhlIHRva2VuIHR5cGUuCiAKLSAgICBpZiAodG9rZW4udHlwZSgpICE9
IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisvLyBNQVJLOiBJ
bnRlZ2VyIChSYXcpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQor
eworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCiAg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIpOwogICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpOyBjYWxj
dWxhdGlvbiAmJiBjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIpCkBAIC0yMzIsNDIwICsyMzIsMTA2MSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRU
eXBlPiBzdGQ6Om9wdGlvbmFsCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RkOjpv
cHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBkb3VibGUgbWluaW11bVZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZh
bHVlKQogewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXc8aW50PihyYW5nZSwgbWlu
aW11bVZhbHVlKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tl
bik7CisgICAgCisgICAgaWYgKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWVUeXBlKCkgPT0gTnVt
YmVyVmFsdWVUeXBlIHx8IHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IG1pbmltdW1WYWx1
ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gY2xhbXBUbzxJbnRU
eXBlPihyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsK
IH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKKy8vIE1BUks6IEludGVnZXIg
KENTU1ByaW1pdGl2ZVZhbHVlIC0gbm90IG1haW50YWluZyBjYWxjKQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJbnRUeXBlPiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50
ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUsIENTU1Zh
bHVlUG9vbCYgY3NzVmFsdWVQb29sKQogewotICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1l
SW50ZWdlclJhdyhyYW5nZSwgbWluaW11bVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2Vu
KTsKKworICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1p
bmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7Ci0gICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyVHlwZVJhdzx1bnNpZ25lZD4ocmFuZ2UsIDEpOwotfQorICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQotewotICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KHJh
bmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICBpZiAoYXV0byBpbnRl
Z2VyID0gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5
cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tl
bi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFs
dWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCk7Ci0gICAgfQorLy8gTUFSSzogTnVt
YmVyIChSYXcpCiAKLSAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlkYXRlZE51bWJlclJhdyhkb3VibGUgdmFsdWUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJh
bmdlOjpOb25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZU51
bWJlclJhdygpOworICAgIHJldHVybiB2YWx1ZTsKIH0KIAotLy8gRklYTUU6IFdvcmsgb3V0IGlm
IHRoaXMgY2FuIGp1c3QgY2FsbCBjb25zdW1lTnVtYmVyUmF3Ci1SZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJl
clJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygp
OwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFs
dWVSYW5nZSk7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdv
cnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLSAgICB9CisgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KHJhbmdlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKm51bWJlciwgdG9rZW4udW5pdFR5
cGUoKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIo
cmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUpOworICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcoKTsKIH0KIAotI2lm
ICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotc3RhdGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5
MTAwKGRvdWJsZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51
bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gMTAwKSAqIDEwMCA9PSB2YWx1ZTsK
KyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgCisg
ICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcocmFuZ2UucGVl
aygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9Ci0jZW5kaWYKIAotc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsK
LSAgICAvLyBWYWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIDEwMDAgYXJlIHBhcnNlIGVycm9ycy4KLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuICYmIHRva2VuLm51
bWVyaWNWYWx1ZSgpID49IDEgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPD0gMTAwMAotI2lmICFF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBl
KCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZpc2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFs
dWUoKSkKLSNlbmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcocmFu
Z2UpOwotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IElk
ZW50VG9rZW4pOwogCi0gICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0
aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93
ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICBp
ZiAoYXV0byByZXN1bHQgPSBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcoKTsgcmVzdWx0Ci0j
aWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgICAgICYmICpyZXN1bHQgPiAwICYmICpy
ZXN1bHQgPCAxMDAwICYmIGRpdmlzaWJsZUJ5MTAwKCpyZXN1bHQpCi0jZW5kaWYKLSAgICApCi0g
ICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCgqcmVzdWx0LCBzdGQ6Om5leHRhZnRlcigw
LiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4sIDAuKSk7CisgICAgaWYgKGF1dG8gdmFyaWFi
bGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAgIHN3aXRj
aCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
UjoKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVy
UmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB2
YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorLy8gTUFSSzog
TnVtYmVyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluZyBjYWxjKQorCitzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQogewotICAgIHJldHVybiBjb25zdW1l
Rm9udFdlaWdodE51bWJlcldvcmtlclNhZmUocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwor
CisgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBjc3NWYWx1ZVBvb2wpOworICAgIHJldHVy
biBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyKTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dE51bWJlcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9v
bCYgY3NzVmFsdWVQb29sKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7Ci0gICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2UpKQotICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJU
b2tlbik7CisgICAgCisgICAgYXV0byB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAKKyAgICBp
ZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh0b2tlbi5udW1lcmlj
VmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHRva2VuLnVu
aXRUeXBlKCk7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Cisg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoKnZhbGlkYXRlZFZhbHVlLCB1
bml0VHlwZSk7CisgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgYm9vbCBz
aG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8pCi17Ci0gICAgLy8gRklYTUU6IFByZXNlbnRhdGlvbmFsIEhUTUwgYXR0cmlidXRl
cyBzaG91bGRuJ3QgdXNlIHRoZSBDU1MgcGFyc2VyIGZvciBsZW5ndGhzCi0KLSAgICBpZiAodmFs
dWUgPT0gMCAmJiB1bml0bGVzc1plcm8gPT0gVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpc1VuaXRMZXNzVmFsdWVQYXJzaW5nRW5hYmxl
ZEZvck1vZGUoY3NzUGFyc2VyTW9kZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IHJldHVybiBjc3NQYXJzZXJNb2RlID09IEhUTUxRdWlya3NNb2RlICYmIHVuaXRsZXNzID09IFVu
aXRsZXNzUXVpcms6OkFsbG93OwotfQorLy8gTUFSSzogUGVyY2VudCAocmF3KQogCi1zdGQ6Om9w
dGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZh
bGlkYXRlZFBlcmNlbnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7
Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKLSAgICAgICAgc3dpdGNoICh0b2tl
bi51bml0VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1T
OgotICAgICAgICAgICAgaWYgKGNzc1BhcnNlck1vZGUgIT0gVUFTaGVldE1vZGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIEZBTExUSFJPVUdIOwot
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgotICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkVNUzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DSFM6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NN
OgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19JTjoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WVzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVk1JTjoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6
Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICB9Ci0gICAgICAgIGlmICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAm
JiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApIHx8IHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1Zh
bHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJu
IHsgeyB0b2tlbi51bml0VHlwZSgpLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
Lm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICB9Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1i
ZXJUb2tlbikgewotICAgICAgICBpZiAoIXNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4u
bnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
azo6QWxsb3cpCi0gICAgICAgICAgICB8fCAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25O
ZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgaWYgKHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVl
KCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsg
eyBDU1NVbml0VHlwZTo6Q1NTX1BYLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
Lm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1
bmN0aW9uVG9rZW4pCisgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRp
dmUgJiYgdmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgQ2Fs
Y1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZh
bHVlUmFuZ2UpOwotICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhSYXcoKTsKKyAg
ICBpZiAoc3RkOjppc2luZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHZhbHVlOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgY29u
c3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50
eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIo
cmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgICAg
IHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lTGVu
Z3RoUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1ZVJhbmdlLCB1bml0bGVzcykpCi0gICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJlc3VsdC0+
dmFsdWUsIHJlc3VsdC0+dHlwZSk7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbik7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2Us
IHN5bWJvbFRhYmxlKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJhdygp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50
YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRv
a2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRv
a2VuKSB7Ci0gICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSB8fCAo
dmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFs
dWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0
dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCk7Ci0g
ICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IFBl
cmNlbnRhZ2VUb2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwotICAgIHJldHVybiBjYWxjUGFy
c2VyLmNvbnN1bWVQZXJjZW50UmF3KCk7CisgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2
YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5n
ZSkpIHsKKyAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICByZXR1cm4gY29uc3VtZVBl
cmNlbnRXb3JrZXJTYWZlKHJhbmdlLCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKTsKLX0KKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsK
IAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQ
b29sJiBjc3NWYWx1ZVBvb2wpCi17Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0g
cmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewot
ICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHsgfSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgcmV0dXJu
IGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50KTsKKyAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5w
ZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAgICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZh
bHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
IAotICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVS
YW5nZSkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoKnBlcmNlbnQs
IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
Ky8vIE1BUks6IFBlcmNlbnQgKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5nIGNhbGMpCiAK
LXN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRl
Z29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
VmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7Ci0gICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50IHx8IGNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgaWYgKGNzc1BhcnNlck1vZGUgIT0gU1ZHQXR0cmlidXRl
TW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKK30KIAotICAgIGlmIChjYXRl
Z29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgY2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKLSAgICAgICAgcmV0dXJuIHRydWU7CitzdGF0
aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWso
KS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAg
fQorICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2Vu
dFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MpCisvLyBNQVJLOiBMZW5ndGggKHJhdykKKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91YmxlIHZhbHVlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0g
cmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwg
dG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRs
ZXNzKSkKLSAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICBpZiAodmFsdWVSYW5n
ZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFn
ZVRva2VuKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVQZXJjZW50UmF3KHJh
bmdlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICBp
ZiAoc3RkOjppc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
fQorICAgIHJldHVybiB2YWx1ZTsKK30KIAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rp
b25Ub2tlbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmspCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBjYWxj
UGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3Vs
YXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAgICByZXR1cm4gY2FsY1Bh
cnNlci5jb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Okxlbmd0aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUpOworICAgIHJldHVybiBjYWxjUGFyc2Vy
LmNvbnN1bWVMZW5ndGhSYXcoKTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJh
d1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmspCiB7Ci0gICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgICAgIGlmIChhdXRv
IGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25z
dW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkKLSAg
ICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25U
b2tlbik7CisKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIGF1dG8gdW5p
dFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgaWYgKGNzc1BhcnNlck1v
ZGUgIT0gVUFTaGVldE1vZGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vkg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1ZNQVg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCi0g
ICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3Nz
UGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKSB7Ci0gICAgICAgIHJldHVybiBzd2l0
Y2hPbigqcmVzdWx0LCBbXSAoTGVuZ3RoUmF3IGxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5n
dGgudHlwZSk7Ci0gICAgICAgIH0sIFtdIChkb3VibGUgcGVyY2VudGFnZSkgewotICAgICAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudGFn
ZSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgfSk7CisgICAgaWYgKGF1
dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVl
KCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CisgICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUsICp2YWxpZGF0ZWRWYWx1ZSB9IH07
CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9
CiAKLXN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCitzdGF0aWMgc3RkOjpv
cHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9
IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7
Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICBzd2l0
Y2ggKHVuaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19HUkFEOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAg
ICAgIHJldHVybiB7IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51
bWJlclRva2VuICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVl
KCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAgICByZXR1
cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKIAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAgICBpZiAoIXNo
b3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1v
ZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICByZXR1cm4gY2FsY1Bh
cnNlci5jb25zdW1lQW5nbGVSYXcoKTsKKyAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZh
bGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAg
ICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJu
IHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8pCisvLyBNQVJLOiBMZW5ndGggKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5n
IGNhbGMpCisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVBbmdsZVdv
cmtlclNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCks
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8pOworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgp
ID09IEZ1bmN0aW9uVG9rZW4pOworCisgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBjc3NW
YWx1ZVBvb2wpOworICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnko
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCitz
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQogewotICAgIGNvbnN0IENT
U1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgp
ID09IEZ1bmN0aW9uVG9rZW4pIHsKLSAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVSYW5nZTo6QWxsLCB7IH0sIGNzc1Zh
bHVlUG9vbCk7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdv
cnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpOwotICAgIH0KKyAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBpZiAoYXV0byBhbmdsZSA9
IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNz
WmVybykpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGUtPnZh
bHVlLCBhbmdsZS0+dHlwZSk7CisgICAgaWYgKGF1dG8gbGVuZ3RoUmF3ID0gY29uc3VtZUxlbmd0
aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShsZW5ndGhSYXctPnZhbHVlLCBsZW5ndGhSYXctPnR5cGUpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQ
b29sKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsK
IAorICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tl
blR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCB1bml0bGVzcykpCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUobGVu
Z3RoUmF3LT52YWx1ZSwgbGVuZ3RoUmF3LT50eXBlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlT3JQZXJjZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQorLy8gTUFSSzogQW5nbGUgKHJhdykKKworc3RhdGljIHN0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQogewotICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewot
ICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHN3aXRjaCAodG9rZW4udW5pdFR5cGUo
KSkgewotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUkFEOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoK
LSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChzaG91bGRBY2NlcHRV
bml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVz
cywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVt
ZXJpY1ZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfREVHKTsKLSAgICAgICAgYnJlYWs7CisgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBjYXNl
IFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50KHJhbmdlLCB2
YWx1ZVJhbmdlKTsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSk7CisgICAgcmV0dXJuIGNh
bGNQYXJzZXIuY29uc3VtZUFuZ2xlUmF3KCk7Cit9CiAKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
IHsKLSAgICAgICAgQ2FsY1BhcnNlciBhbmdsZUNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNW
YWx1ZSogY2FsY3VsYXRpb24gPSBhbmdsZUNhbGNQYXJzZXIudmFsdWUoKSkgewotICAgICAgICAg
ICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlKQotICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZUNhbGNQYXJzZXIuY29uc3VtZVZhbHVl
KCk7Ci0gICAgICAgIH0KK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQoreworICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgICAgICBDYWxjUGFyc2VyIHBl
cmNlbnRDYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCB2YWx1
ZVJhbmdlKTsKLSAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBw
ZXJjZW50Q2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsY3VsYXRpb24t
PmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcGVyY2VudENhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7Ci0gICAgICAgIH0K
LSAgICAKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIGF1dG8gdW5pdFR5cGUgPSBy
YW5nZS5wZWVrKCkudW5pdFR5cGUoKTsKKyAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19UVVJOOgorICAgICAgICByZXR1cm4geyB7IHVuaXRUeXBlLCByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQogewotICAgIGNvbnN0IENTU1Bh
cnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICBDU1NVbml0VHlwZSB1bml0ID0g
dG9rZW4udW5pdFR5cGUoKTsKLSAgICBib29sIGFjY2VwdFVuaXRsZXNzID0gdG9rZW4udHlwZSgp
ID09IE51bWJlclRva2VuICYmIHVuaXRsZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNo
b3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1v
ZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOwotICAgIGlmIChhY2NlcHRV
bml0bGVzcykKLSAgICAgICAgdW5pdCA9IENTU1VuaXRUeXBlOjpDU1NfTVM7Ci0gICAgaWYgKHRv
a2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCBhY2NlcHRVbml0bGVzcykgewotICAgICAg
ICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1l
cmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYg
KHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1Nf
UykKLSAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVu
aXQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4udHlw
ZSgpICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotICAgIENhbGNQYXJzZXIg
Y2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwgdmFsdWVSYW5nZSk7
Ci0gICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lKTsKKyAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5n
ZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVz
c1plcm8pKQorICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVS
ZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBBbGxvd1hSZXNvbHV0aW9uVW5p
dCBhbGxvd1gpCisvLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmcg
Y2FsYykKKworc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVu
aXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKIHsKLSAgICBjb25z
dCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgLy8gVW5saWtlIHRo
ZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCi0g
ICAgaWYgKHRva2VuLnR5cGUoKSAhPSBEaW1lbnNpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgQ1NTVW5pdFR5cGUgdW5pdCA9IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgaWYg
KHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUFBYIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNT
U19EUEkgfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXQpOwotICAgIGlmIChhbGxvd1ggPT0g
QWxsb3dYUmVzb2x1dGlvblVuaXQ6OkFsbG93ICYmIHRva2VuLnZhbHVlKCkgPT0gIngiKQotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6
Q1NTX0RQUFgpOworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9r
ZW4pOwogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJh
bmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IGNzc1ZhbHVlUG9vbCk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRl
Z29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q1NT
VmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBj
c3NWYWx1ZVBvb2wpCiB7Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tl
bikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOwotfQorICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNv
bnN1bWVJZGVudFdvcmtlclNhZmUocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwor
ICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBl
RGltZW5zaW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBhbmdsZVJhdy0+dHlwZSk7CisgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50V29ya2Vy
U2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBv
b2wpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBv
b2wmIGNzc1ZhbHVlUG9vbCkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lSWRlbnRS
YXcocmFuZ2UpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSgqcmVzdWx0KTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJU
b2tlbik7CisKKyAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIGNzc1BhcnNl
ck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1ZSwgYW5nbGVSYXctPnR5cGUpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCisKKy8vIE1BUks6IFRpbWUgKENTU1ByaW1pdGl2ZVZhbHVlIC0g
bWFpbnRhaW5nIGNhbGMpCisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworCisgICAgQ2FsY1BhcnNlciBjYWxjUGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgY3NzVmFsdWVQb29sKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWVJ
ZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUpOworfQorCitzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworCisgICAgaWYg
KHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51
bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYXV0
byB1bml0ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNT
U19NUyB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfUykKKyAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCB1bml0KTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBDU1NWYWx1ZVBv
b2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBO
dW1iZXJUb2tlbik7CisKKyAgICBpZiAodW5pdGxlc3MgPT0gVW5pdGxlc3NRdWlyazo6QWxsb3cg
JiYgc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCks
IGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpKSB7Cisg
ICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdl
LnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5j
bHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX01TKTsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8vIE1BUks6IFJlc29sdXRpb24gKENT
U1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykKKworc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlw
ZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQWxsb3dYUmVzb2x1dGlvblVu
aXQgYWxsb3dYLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CisKKyAgICBpZiAoYXV0byB1bml0
ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUFBY
IHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUEkgfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6
Q1NTX0RQQ00pCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUocmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisgICAg
aWYgKGFsbG93WCA9PSBBbGxvd1hSZXNvbHV0aW9uVW5pdDo6QWxsb3cgJiYgcmFuZ2UucGVlaygp
LnZhbHVlKCkgPT0gIngiKQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIENTU1Vu
aXRUeXBlOjpDU1NfRFBQWCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworCisvLyBNQVJL
OiAtIFByaW1pdGl2ZSB2YWx1ZSBjb25zdW1lcnMgZm9yIGNhbGxlcnMgdGhhdCBkbyBOT1Qga25v
dyB0aGUgdG9rZW4gdHlwZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RkOjpvcHRp
b25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5w
ZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25U
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOworCisgICAgY2FzZSBO
dW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKTsKKyAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91
YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewor
ICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlw
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbjxJbnRU
eXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBjc3NWYWx1ZVBvb2wpOworCisgICAgY2FzZSBOdW1i
ZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXI8SW50VHlwZT4ocmFuZ2UsIG1pbmlt
dW1WYWx1ZSwgY3NzVmFsdWVQb29sKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6Om9wdGlvbmFsPGludD4gY29u
c3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVt
VmFsdWUpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhdzxpbnQ+KHJhbmdlLCBt
aW5pbXVtVmFsdWUpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRl
Z2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQorewor
ICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50PihyYW5nZSwgbWluaW11bVZhbHVlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
Y29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVkPihyYW5nZSwgMSk7Cit9
CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBl
PHVuc2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKworICAgIGNhc2UgTnVtYmVyVG9r
ZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7
CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKSk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1
cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGF1
dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIAorICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0
aFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNz
c1BhcnNlck1vZGUsIHVuaXRsZXNzKTsKKworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAg
ICAgIHJldHVybiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKTsKKyAgICAKKyAg
ICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aFJhd1dpdGhL
bm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCB1bml0bGVzcyk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
KQoreworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworCisgICAgc3dpdGNoICh0b2tl
bi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAg
ICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgCisgICAgY2FzZSBO
dW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2Us
IGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAgICBjb25zdCBh
dXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKwor
ICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAg
IHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVlUmFuZ2UsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVQZXJjZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Cisg
ICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsKKworICAgIGNhc2UgUGVyY2VudGFnZVRva2Vu
OgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NW
YWx1ZVBvb2wpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQor
eworICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGggfHwgY2F0
ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCB8fCBjYXRlZ29yeSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFNWR0F0dHJpYnV0ZU1vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIgfHwgY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5w
ZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25U
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2VyTW9kZSwgdW5pdGxl
c3MsIHVuaXRsZXNzWmVybyk7CisKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICBy
ZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7
IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVy
byk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xl
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwg
Y3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7CisgICAgICAgIGJyZWFrOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQorewor
ICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KKwor
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU1ZhbHVl
UG9vbCYgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9R
dWlyayB1bml0bGVzc1plcm8pCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisK
KyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAg
ICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1BhcnNl
ck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIGNzc1ZhbHVlUG9vbCk7CisKKyAgICBjYXNl
IERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1
ZVJhbmdlOjpBbGwsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIGNzc1Zh
bHVlUG9vbCk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihy
YW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0
bGVzc1plcm8sIGNzc1ZhbHVlUG9vbCk7CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAg
IHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAg
ICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5p
dGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAgY2FzZSBEaW1lbnNpb25U
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NQ
YXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisKKyAgICBj
YXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
KworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQWxsb3dYUmVzb2x1dGlvblVuaXQgYWxsb3dY
KQoreworICAgIC8vIE5PVEU6IFVubGlrZSB0aGUgb3RoZXIgdHlwZXMsIGNhbGMoKSBkb2VzIG5v
dCB3b3JrIHdpdGggPHJlc29sdXRpb24+LgorCisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRGltZW5zaW9uVG9r
ZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2ZVZhbHVlV2l0
aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCBhbGxvd1gsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpOworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVy
cyAodG9rZW4gdHlwZSB1bmtub3duIGJ5IGNhbGxlcikuCisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQor
eworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworCisgICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAgICAgIGlmIChhdXRvIHZhbHVl
ID0gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NWYWx1
ZVBvb2wpOworCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1
bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNp
b24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRs
ZXNzWmVybywgY3NzVmFsdWVQb29sKTsKKyAgICAKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAg
ICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvLCBjc3NWYWx1ZVBvb2wpOworCisgICAgY2FzZSBQZXJjZW50
YWdlVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIGNzc1ZhbHVlUG9vbCk7CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQ
ZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBhdXRvIGNvbnZlcnRUb0xlbmd0aE9y
UGVyY2VudFJhdyA9IFtdKGF1dG8gcmVzdWx0KSAtPiBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVy
Y2VudFJhdz4geworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHsgKnJl
c3VsdCB9OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH07CisKKyAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Cisg
ICAgY2FzZSBGdW5jdGlvblRva2VuOiB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBi
ZSB1c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0aCBhbmQg
UGVyY2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KKyAgICAgICAgQ2FsY1BhcnNlciBj
YWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2Up
OworICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKTsgY2Fs
Y3VsYXRpb24gJiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwg
Y3NzUGFyc2VyTW9kZSkpCisgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVu
Z3RoT3JQZXJjZW50UmF3KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRGlt
ZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXco
Y29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcykpOworICAgIAorICAgIGNhc2UgTnVt
YmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29u
c3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcykpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9r
ZW46CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZVBl
cmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICAvLyBGSVhN
RTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdpdGgg
Ym90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/CisgICAg
ICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBjYWxjUGFy
c2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRp
b24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
RGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSk7CisgICAgCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVM
ZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICBy
ZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCisvLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0
aGF0IGFsbG93IGxvb2t1cCBpbiB0aGUgc3ltYm9sIHRhYmxlIGZvciBJZGVudFRva2VucyAoYnkg
ZGVmYXVsdCwgb3RoZXIgY29uc3VtZXJzIG9ubHkgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUg
Zm9yIGNhbGMoKSkuCisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJl
ckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
ID0gVmFsdWVSYW5nZTo6QWxsKQoreworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwor
CisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Cisg
ICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGNhc2UgTnVtYmVyVG9rZW46
CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7CisKKyAgICBjYXNlIElkZW50VG9rZW46
CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3sK
KyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBl
cmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZh
bHVlUmFuZ2UpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJldHVybiBj
b25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGNhc2UgSWRlbnRUb2tlbjoKKyAgICAgICAgcmV0
dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBhdXRvIGNvbXB1dGVE
ZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKKyAg
ICAgICAgaWYgKGFuZ2xlUmF3KQorICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlRGVncmVlcyhhbmdsZVJhdy0+dHlwZSwgYW5nbGVSYXctPnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworCisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjoKKyAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCkpCisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcpOworICAgICAg
ICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdl
LCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisgICAgCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoK
KyAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpOwor
ICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVy
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVBbmds
ZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBDU1NQYXJz
ZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAgYXV0byBjb21wdXRlRGVncmVlcyA9IFtdKGF1
dG8gYW5nbGVSYXcpIC0+IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB7CisgICAgICAgIGlmIChhbmds
ZVJhdykKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3Jl
ZXMoYW5nbGVSYXctPnR5cGUsIGFuZ2xlUmF3LT52YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfTsKKworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworCisg
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAg
ICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwsIGNzc1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCisg
ICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcpOworICAgICAgICByZXR1
cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsKKyAgICAKKyAgICBjYXNlIERpbWVuc2lvblRva2Vu
OgorICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29uc3VtZUFuZ2xlUmF3V2l0aEtub3du
VG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgY3NzUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSk7
CisgICAgCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1i
ZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxs
KTsKKworICAgIGNhc2UgSWRlbnRUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBz
eW1ib2xUYWJsZS5nZXQodG9rZW4uaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAg
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAgICAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVS
TjoKKyAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMo
dmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSk7CisKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVl
OworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gTUFS
SzogLSBDb21iaW5hdGlvbiBjb25zdW1lcnMgd2l0aCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24g
cmVzdWx0IHR5cGUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBl
bmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRyYW5zZm9y
bWVyJiYgcGVyY2VudFRyYW5mb3JtZXIpIC0+IHN0ZDo6b3B0aW9uYWw8ZGVjbHR5cGUobnVtYmVy
VHJhbmZvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Cit7CisgICAgY29uc3QgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbmZvcm1lcigqbnVtYmVyKTsKKyAgICAg
ICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5mb3JtZXIoKnBlcmNlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigqcGVyY2VudCk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwg
eyB9LCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpu
dW1iZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZTo6QWxsKQoreworICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdl
LCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRv
dWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50IC8gMTAwLjA7IH0pOworfQorCisvLyBNQVJL
OiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBz
eW1ib2wgdGFibGUgZm9yIElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24g
cmVzdWx0IHR5cGUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBl
bmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRy
YW5zZm9ybWVyJiYgcGVyY2VudFRyYW5mb3JtZXIpIC0+IHN0ZDo6b3B0aW9uYWw8ZGVjbHR5cGUo
bnVtYmVyVHJhbmZvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Cit7CisgICAgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2
YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpudW1iZXIp
OworICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuZm9ybWVyKCpwZXJjZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIGlmIChhdXRvIHBl
cmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBwZXJjZW50
VHJhbmZvcm1lcigqcGVyY2VudCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOdW1iZXJU
b2tlbjoKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bWJlclRyYW5mb3JtZXIoKm51bWJlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJZGVudFRva2VuOgorICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJv
bFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFy
aWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5U
QUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVk
UGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigqdmFsaWRhdGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCp2YWxpZGF0
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Cit7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVt
YmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJj
ZW50IC8gMTAwLjA7IH0pOworfQorCisjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitzdGF0
aWMgaW5saW5lIGJvb2wgZGl2aXNpYmxlQnkxMDAoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gMTAwKSAqIDEwMCA9PSB2YWx1ZTsKK30KKyNlbmRp
ZgorCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBl
cXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJv
cnMuCisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKKyAgICAgICAgLy8gIltGb3IgY2Fs
YygpXSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJl
IGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVu
Y3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICBicmVhazsKKyNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAg
ICAgaWYgKCpyZXN1bHQgPD0gMCB8fCAqcmVzdWx0ID49IDEwMDAgfHwgIWRpdmlzaWJsZUJ5MTAw
KCpyZXN1bHQpKQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0
ZDo6Y2xhbXAoKnJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5leHRhZnRl
cigxMDAwLjAsIDAuMCkpOworICAgIH0KKworICAgIGNhc2UgTnVtYmVyVG9rZW46IHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSB0b2tlbi5udW1lcmljVmFsdWUoKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCA8IDEgfHwgcmVzdWx0ID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworI2lmICFFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQorICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpICE9
IEludGVnZXJWYWx1ZVR5cGUgfHwgIWRpdmlzaWJsZUJ5MTAwKHJlc3VsdCkpCisgICAgICAgICAg
ICBicmVhazsKKyNlbmRpZgorICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJl
cldvcmtlclNhZmUocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2Up
KQorICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjpvcHRp
b25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbikKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKS5pZCgpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZUlkZW50V29ya2VyU2FmZShyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnJlc3VsdCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKQEAgLTcwMCw3ICsxMzQxLDcgQEAgU3RyaW5nVmlldyBjb25zdW1lVXJs
QXNTdHJpbmdWaWV3KENTU1BhcgogICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSgpOwogICAgIH0K
IAotICAgIHJldHVybiBTdHJpbmdWaWV3KCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQpAQCAtNzM3LDEzMiArMTM3OCwyMCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVPcHRpCiAgICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdl
KSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0g
Y29uc3VtZU51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhyYW5nZSkpCisgICAgaWYgKGF1
dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAw
UmF3KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKmFscGhhUGFyYW1ldGVyLCAw
LjAsIDEuMCk7CiAKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1zdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVPcHRpb25hbEFscGhhT3JJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCiB7CiAgICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGF1dG8gbm9y
bWFsaXplUGVyY2VudCA9IFtdKGRvdWJsZSBwZXJjZW50KSB7Ci0gICAgICAgIHJldHVybiBzdGQ6
OmNsYW1wKHBlcmNlbnQgLyAxMDAuMCwgMC4wLCAxLjApOwotICAgIH07Ci0KLSAgICBhdXRvIG5v
cm1hbGl6ZU51bWJlciA9IFtdKGRvdWJsZSBhbHBoYSkgewotICAgICAgICByZXR1cm4gc3RkOjpj
bGFtcChhbHBoYSwgMC4wLCAxLjApOwotICAgIH07Ci0KLSAgICBjb25zdCBDU1NQYXJzZXJUb2tl
biYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0KLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewot
ICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBDYWxjUGFyc2VyIHBlcmNlbnRhZ2VD
YWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCBWYWx1ZVJhbmdl
OjpBbGwsIHN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IHBlcmNlbnRh
Z2VDYWxjUGFyc2VyLmNvbnN1bWVQZXJjZW50UmF3KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9y
bWFsaXplUGVyY2VudCgqcGVyY2VudCk7Ci0gICAgICAgIAotICAgICAgICBDYWxjUGFyc2VyIG51
bWJlckNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVS
YW5nZTo6QWxsLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IG51bWJl
ckNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdygpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1h
bGl6ZU51bWJlcigqbnVtYmVyKTsKLQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICBpZiAoc3RkOjppc2luZih0
b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICByZXR1cm4gbm9ybWFsaXplUGVyY2VudChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKLQotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAg
ICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5udW1lcmljVmFsdWUoKSk7Ci0KLSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlm
IChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkuaWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemVQZXJjZW50KHZhcmlhYmxlLT52YWx1ZSk7Ci0KLSAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5vcm1hbGl6ZU51bWJlcih2YXJpYWJsZS0+dmFsdWUpOwotCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lSHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChhdXRvIGFuZ2xlID0g
Y29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0KLSAg
ICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gY29uc3VtZUh1ZU9ySWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgY29uc3QgQ1NT
UGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1BhcnNlciBh
bmdsZUNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJh
bmdlOjpBbGwsIHN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBhbmdsZUNh
bGNQYXJzZXIuY29uc3VtZUFuZ2xlUmF3KCkpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAg
ICAgICAKLSAgICAgICAgQ2FsY1BhcnNlciBudW1iZXJDYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAg
ICAgICByZXR1cm4gbnVtYmVyQ2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KCk7Ci0gICAgfQot
ICAgIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46IHsKLSAgICAgICAgYXV0byB1bml0VHlwZSA9
IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JBRDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlRGVncmVlcyh1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGNhc2UgTnVt
YmVyVG9rZW46Ci0gICAgICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpOwotCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAo
YXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLmlkKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgICAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19HUkFEOgotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyh2YXJpYWJs
ZS0+dHlwZSwgdmFyaWFibGUtPnZhbHVlKTsKLQotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX05VTUJFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVlOwot
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQor
ICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERp
dmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2U6OkFsbCkpCisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCphbHBoYVBhcmFt
ZXRlciwgMC4wLCAxLjApOwogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIH0KIApAQCAtODcxLDEzOCArMTQwMCwzMyBAQCBzdGF0aWMgZG91Ymxl
IG5vcm1hbGl6ZUh1ZShkb3VibGUgaHVlKQogICAgIHJldHVybiBzdGQ6OmZtb2Qoc3RkOjpmbW9k
KGh1ZSwgMzYwLjApICsgMzYwLjAsIDM2MC4wKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lTnVtYmVyT3JJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3N0YXRpYyB1aW50OF90IG5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcihkb3VibGUgdmFsdWUpCiB7Ci0gICAgY29uc3QgQ1NT
UGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1BhcnNlciBj
YWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2U6
OkFsbCwgc3ltYm9sVGFibGUpOwotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTnVt
YmVyUmF3KCk7Ci0gICAgfQotCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJu
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCk7Ci0KLSAg
ICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFi
bGUuZ2V0KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1
ZTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUp
OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50T3JJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSkKK3N0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRh
Z2UoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5j
dGlvblRva2VuOiB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudCwgVmFsdWVSYW5nZTo6QWxsLCBzeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVQZXJjZW50UmF3KCk7Ci0gICAgfQotCi0g
ICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51
bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
IHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgp
OwotCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5
bWJvbFRhYmxlLmdldChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFy
aWFibGUtPnZhbHVlOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JB
Qnl0ZSh2YWx1ZSAvIDEwMC4wICogMjU1LjApOwogfQogCi1lbnVtIGNsYXNzIFJHQkNvbXBvbmVu
dFR5cGUgeyBOdW1iZXIsIFBlcmNlbnRhZ2UgfTsKLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWlu
dDhfdD4gY29uc3VtZU51bWJlck9yUGVyY2VudE9ySWRlbnROb3JtYWxpemVkRm9yUmVsYXRpdmVS
R0IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUpCitzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50OF90PiBjb25zdW1lUmVsYXRp
dmVSR0JDb21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCiB7Ci0gICAgYXV0byBub3JtYWxpemVQZXJjZW50ID0g
W10oZG91YmxlIHBlcmNlbnQpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdC
QUZsb2F0VG9TUkdCQUJ5dGUocGVyY2VudCAvIDEwMC4wICogMjU1LjApOwotICAgIH07Ci0KLSAg
ICBhdXRvIG5vcm1hbGl6ZU51bWJlciA9IFtdKGRvdWJsZSBudW1iZXIpIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUobnVtYmVyKTsKLSAgICB9
OwotCi0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0g
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAg
ICAgICAgQ2FsY1BhcnNlciBwZXJjZW50YWdlQ2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudCwgVmFsdWVSYW5nZTo6QWxsLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAg
IGlmIChhdXRvIHBlcmNlbnQgPSBwZXJjZW50YWdlQ2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJh
dygpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBlcmNlbnQoKnBlcmNlbnQpOwotICAg
ICAgICAKLSAgICAgICAgQ2FsY1BhcnNlciBudW1iZXJDYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAg
ICAgICBpZiAoYXV0byBudW1iZXIgPSBudW1iZXJDYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXco
KSkKLSAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIoKm51bWJlcik7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGNhc2UgUGVyY2Vu
dGFnZVRva2VuOgotICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gbm9ybWFs
aXplUGVyY2VudChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1
ZSgpKTsKLQotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVO
dW1iZXIocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7
Ci0KLSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3lt
Ym9sVGFibGUuZ2V0KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSkpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgICAgIHJldHVybiBub3Jt
YWxpemVQZXJjZW50KHZhcmlhYmxlLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU51bWJl
cih2YXJpYWJsZS0+dmFsdWUpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6
OkFsbCwgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyLCBub3JtYWxpemVSR0JDb21wb25lbnRQ
ZXJjZW50YWdlKTsKIH0KIAorZW51bSBjbGFzcyBSR0JDb21wb25lbnRUeXBlIHsgTnVtYmVyLCBQ
ZXJjZW50YWdlIH07CiBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFs
dWUsIFJHQkNvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKIHsKLSAgICBpZiAoY29tcG9uZW50
VHlwZSA9PSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlKQotICAgICAgICB2YWx1ZSA9IHZh
bHVlIC8gMTAwLjAgKiAyNTUuMDsKLQotICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFG
bG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKKyAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHsKKyAg
ICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZVJHQkNvbXBvbmVudE51bWJlcih2YWx1ZSk7CisgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQ
ZXJjZW50YWdlOgorICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFn
ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOwogfQogCiBlbnVtIGNsYXNzIFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4IHsgQ29tbWFz
LCBXaGl0ZXNwYWNlU2xhc2ggfTsKQEAgLTEwMjYsNDQgKzE0NTAsNyBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVSR0JPCiAgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBo
YVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICByZXR1cm4gMS4wOwogCi0gICAgcmV0
dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7Ci19Ci0KLXN0
cnVjdCBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7Ci0gICAgVmFyaWFudDxkb3VibGUsIENTU1ZhbHVl
SUQ+IHZhbHVlOwotICAgIHN0ZDo6b3B0aW9uYWw8UkdCQ29tcG9uZW50VHlwZT4gdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPENTU1ZhbHVlSUQgQz4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVsYXRpdmVS
R0JDb21wb25lbnQ+IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiBhcmdzLCBzdGQ6Om9wdGlvbmFsPFJHQkNvbXBvbmVudFR5cGU+IGNvbXBvbmVudFR5cGUp
Ci17Ci0gICAgaWYgKCFjb21wb25lbnRUeXBlKSB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0gICAgICAgICAgICByZXR1cm4gUmVsYXRpdmVSR0JD
b21wb25lbnQgeyAqbnVtYmVyLCBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfTsKLSAgICAgICAg
aWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQotICAgICAgICAgICAg
cmV0dXJuIFJlbGF0aXZlUkdCQ29tcG9uZW50IHsgKnBlcmNlbnQsIFJHQkNvbXBvbmVudFR5cGU6
OlBlcmNlbnRhZ2UgfTsKLSAgICAgICAgaWYgKGF1dG8gY2hhbm5lbCA9IGNvbnN1bWVJZGVudFJh
dzxDPihhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpj
aGFubmVsLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKCpjb21wb25lbnRUeXBlKSB7Ci0gICAgY2FzZSBSR0JDb21wb25l
bnRUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJl
clJhdyhhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpu
dW1iZXIsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9OwotICAgICAgICBpZiAoYXV0byBjaGFu
bmVsID0gY29uc3VtZUlkZW50UmF3PEM+KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0
aXZlUkdCQ29tcG9uZW50IHsgKmNoYW5uZWwsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9Owot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLSAgICBjYXNlIFJHQkNvbXBvbmVu
dFR5cGU6OlBlcmNlbnRhZ2U6IHsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0aXZlUkdCQ29tcG9uZW50
IHsgKnBlcmNlbnQsIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UgfTsKLSAgICAgICAgaWYg
KGF1dG8gY2hhbm5lbCA9IGNvbnN1bWVJZGVudFJhdzxDPihhcmdzKSkKLSAgICAgICAgICAgIHJl
dHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpjaGFubmVsLCBSR0JDb21wb25lbnRUeXBlOjpQ
ZXJjZW50YWdlIH07Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotICAgIH0K
LQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CiB9CiAKIHN0YXRpYyBDb2xv
ciBwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTA4NCwxOSArMTQ3MSwxOSBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFs
dWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzU1JHQi5h
bHBoYSAqIDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0byByZWQgPSBjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50T3JJZGVudE5vcm1hbGl6ZWRGb3JSZWxhdGl2ZVJHQihhcmdzLCBzeW1ib2xUYWJsZSk7
CisgICAgYXV0byByZWQgPSBjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQoYXJncywgc3ltYm9s
VGFibGUpOwogICAgIGlmICghcmVkKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBn
cmVlbiA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRPcklkZW50Tm9ybWFsaXplZEZvclJlbGF0aXZl
UkdCKGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGdyZWVuID0gY29uc3VtZVJlbGF0aXZl
UkdCQ29tcG9uZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWdyZWVuKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byBibHVlID0gY29uc3VtZU51bWJlck9yUGVyY2VudE9y
SWRlbnROb3JtYWxpemVkRm9yUmVsYXRpdmVSR0IoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1
dG8gYmx1ZSA9IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChhcmdzLCBzeW1ib2xUYWJsZSk7
CiAgICAgaWYgKCFibHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9
IGNvbnN1bWVPcHRpb25hbEFscGhhT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0
byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFy
Z3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9Owog
CkBAIC0xMTk2LDE5ICsxNTgzLDE5IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFy
YW1ldGVycygKICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNF
TlRBR0UsIG9yaWdpbkNvbG9yQXNIU0wuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1
dG8gaHVlID0gY29uc3VtZUh1ZU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8g
aHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
YXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIHNhdHVyYXRpb24gPSBjb25zdW1lUGVyY2VudE9ySWRl
bnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gc2F0dXJhdGlvbiA9IGNvbnN1bWVQZXJj
ZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAo
IXNhdHVyYXRpb24pCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9
IGNvbnN1bWVQZXJjZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBsaWdo
dG5lc3MgPSBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1i
b2xUYWJsZSk7CiAgICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAg
IHJldHVybiB7IH07CiAKQEAgLTEyMzUsNyArMTYyMiw3IEBAIHRlbXBsYXRlPEhTTEZ1bmN0aW9u
TW9kZSBNb2RlPiBzdGF0aWMgQ28KICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlbGF0aXZlSFNM
UGFyYW1ldGVycyhhcmdzLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIGh1ZSA9IGNvbnN1
bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVSYXdPck51
bWJlclJhdyhhcmdzLCBjb250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1
cm4geyB9OwogCkBAIC0xMzEwLDE5ICsxNjk3LDE5IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0
aXZlSFdCUGFyYW1ldGVycygKICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6
Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNIV0IuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsK
IAotICAgIGF1dG8gaHVlID0gY29uc3VtZUh1ZU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwor
ICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJj
ZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBjb25z
dW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAg
ICAgaWYgKCF3aGl0ZW5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGJsYWNr
bmVzcyA9IGNvbnN1bWVQZXJjZW50T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0
byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdz
LCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFibGFja25lc3MpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5
bWJvbFRhYmxlKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2lu
Z1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKQEAgLTEzNDcsNyArMTczNCw3IEBAIHN0YXRpYyBDb2xvciBw
YXJzZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoY29udGV4dC5yZWxhdGl2ZUNvbG9y
U3ludGF4RW5hYmxlZCAmJiBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJvbSkKICAgICAg
ICAgcmV0dXJuIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKGFyZ3MsIGNvbnRleHQpOwogCi0g
ICAgYXV0byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGF1dG8gaHVlID0g
Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsKICAgICBpZiAo
IWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTM5MCwxOSArMTc3NywxOSBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFsdWVB
bHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmFscGhh
ICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50
T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1l
UGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAg
aWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFWYWx1ZSA9
IGNvbnN1bWVOdW1iZXJPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGFWYWx1
ZSA9IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFi
bGUpOwogICAgIGlmICghYVZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBi
VmFsdWUgPSBjb25zdW1lTnVtYmVyT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0
byBiVmFsdWUgPSBjb25zdW1lTnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5
bWJvbFRhYmxlKTsKICAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQoYXJncywgc3ltYm9sVGFi
bGUpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9s
VGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIApAQCAtMTQ2OCwxOSArMTg1NSwxOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VS
ZWxhdGl2ZUxDSFBhcmFtZXRlcnMoCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTENILmFscGhhICogMTAwLjAgfQogICAg
IH07CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50T3JJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudEFsbG93aW5n
U3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFsaWdodG5lc3Mp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGNocm9tYSA9IGNvbnN1bWVOdW1iZXJP
cklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGNocm9tYSA9IGNvbnN1bWVOdW1i
ZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICgh
Y2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBodWUgPSBjb25zdW1lSHVl
T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVS
YXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwg
Y29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQoYXJncywgc3ltYm9sVGFi
bGUpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9s
VGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIApAQCAtMTUxNCw3ICsxOTAxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlTENI
UGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGF1dG8g
aHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsKICAg
ICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTU0NCw3ICsxOTMxLDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgQ29sbwogCiAgICAgZG91YmxlIGNo
YW5uZWxzWzNdID0geyAwLCAwLCAwIH07CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkx
MDBSYXcoYXJncyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJj
ZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNoYW5uZWxzW2ldID0gKnZhbHVlOwpAQCAtMjM1Niw3ICsyNzQz
LDcgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgICAgICBw
b3NpdGlvbiA9IChpZCA9PSBDU1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKGlkID09IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFy
Z3MpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBwb3NpdGlvbiA9ICp2YWx1ZTsKQEAgLTI3MDUsNyArMzA5Miw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUKICAgICBpZiAoIXRvSW1hZ2VWYWx1ZSB8fCAh
Y29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KGFyZ3MpOworICAgIGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJS
YXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CiAgICAgaWYgKCFwZXJjZW50YWdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50
YWdlLCAwLCAxKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430264</attachid>
            <date>2021-06-01 08:24:38 -0700</date>
            <delta_ts>2021-06-01 09:49:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226473-20210601082438.patch</filename>
            <type>text/plain</type>
            <size>101837</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAyMS0wNi0wMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCB0b2tlbi10eXBl
IGRlcGVuZGVudCBDU1MgcHJvcGVydHkgcGFyc2luZyBmdW5jdGlvbnMgdG8gYWxsb3cgbW9yZSBj
b2RlIHNoYXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEFzIGEgc3RlcCB0b3dhcmQgcmVkdWNpbmcgZHVwbGljYXRlIGNvZGUgYW5kIG1ha2luZyBDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMgYSBiaXQKKyAgICAgICAgZWFzaWVyIHRvIGZvbGxvdywgdGhp
cyBjaGFuZ2UgZXh0cmFjdHMgdGhlIHRva2VuIHR5cGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHBy
aW1pdGl2ZQorICAgICAgICBjb25zdW1lIGZ1bmN0aW9ucyAoZS5nLiB0aGUgcGFydCBvZiBjb25z
dW1lTnVtYmVyUmF3IHdoZXJlIHRoZSB0b2tlbiBpcyBrbm93biB0byBiZQorICAgICAgICBhIEZ1
bmN0aW9uVG9rZW4pIGludG8gdGhlaXIgb3duIGZ1bmN0aW9ucy4gVGhpcyBhbGxvd3Mgc2hhcmlu
ZyBiZXR3ZWVuIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIGJvdGggbmVlZCB0aGF0IGxvZ2ljIChl
LmcuIGNvbnN1bWVOdW1iZXJSYXcgYW5kIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcgY2Fu
IHNoYXJlKQorICAgICAgICB3aXRob3V0IGV4dHJhIGJyYW5jaGVzLCByZWNoZWNraW5nIHRoZSB0
b2tlbiB0eXBlLCBvciBkdXBsaWNhdGlvbi4gSXQgYWxzbyBoYXMgdGhlCisgICAgICAgIGJlbmVm
aXQgb2YgY3JlYXRpbmcgYSBzdHJpY3QgcGF0dGVybiBmb3IgcHJpbWl0aXZlIGNvbnN1bWVycyBn
b2luZyBmb3J3YXJkLgorCisgICAgICAgIFRoZSBuZXcgbmFtZXMgYXJlIHJhdGhlciBsb25nIHRv
IG1ha2UgaXQgdmVyeSBjbGVhciB3aGF0IHRoZXkgZG8sIGJ1dCB0aGV5IGFyZSB1bmxpa2VseQor
ICAgICAgICB0byBzdGF5IGZvciB2ZXJ5IGxvbmcuIEZ1dHVyZSBjaGFuZ2VzIHdpbGwgdHJ5IHRv
IGdlbmVyYWxpemUgdGhyb3VnaCB0ZW1wbGF0ZXMgdG8gYWxsb3cKKyAgICAgICAgcHJvZ3JhbWF0
aWMgY29tYmluYXRpb25zIG9mIHRoZSBjb25zdW1lcnMgd2l0aG91dCBhbHdheXMgaGF2ZWluZyB0
byB3cml0ZSB0aGUgYm9pbGVycGxhdGUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2Vy
VHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRl
Z2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRO
dW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3V2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6dmFsaWRhdGVkUGVyY2VudFJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNl
bnRhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6dmFsaWRhdGVkTGVuZ3RoUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5n
dGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xl
UmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmds
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVUaW1lQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSZXNvbHV0aW9uQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclR5cGVSYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdl
clJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVQZXJjZW50V29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNhbkNvbnN1bWVDYWxjVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51
bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFu
Z2xlUmF3T3JOdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVO
dW1iZXJSYXdPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJh
d09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZp
ZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpkaXZpc2libGVCeTEwMCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZv
bnRXZWlnaHROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcldvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRSYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRXb3JrZXJT
YWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVVybEFzU3RyaW5nVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVPcHRpb25hbEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpub3Jt
YWxpemVSR0JDb21wb25lbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVJlbGF0aXZlUkdCQ29t
cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y2xh
bXBSR0JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lUkdCT3JIU0xPcHRpb25hbEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlSFNM
UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OnBhcnNlSFNMUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VIV0JQYXJhbWV0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUxhYlBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZVJlbGF0aXZlTENIUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0
ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUh1ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWVPcklkZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZU51bWJlck9ySWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudE9ySWRlbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyT3JQZXJjZW50
T3JJZGVudE5vcm1hbGl6ZWRGb3JSZWxhdGl2ZVJHQik6IERlbGV0ZWQuCisKIDIwMjEtMDYtMDEg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhyZWFkIHNh
ZmV0eSBpc3N1ZXMgaW4gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUuaAkocmV2aXNpb24gMjc4MzA2KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgaW5saW5lIGJvb2wgaXNVQVNoZWV0QmVoYXZpb3IoQ1NTUGFyc2Vy
TQogICAgIHJldHVybiBtb2RlID09IFVBU2hlZXRNb2RlOwogfQogCi1pbmxpbmUgYm9vbCBpc1Vu
aXRMZXNzVmFsdWVQYXJzaW5nRW5hYmxlZEZvck1vZGUoQ1NTUGFyc2VyTW9kZSBtb2RlKQoraW5s
aW5lIGJvb2wgaXNVbml0bGVzc1ZhbHVlUGFyc2luZ0VuYWJsZWRGb3JNb2RlKENTU1BhcnNlck1v
ZGUgbW9kZSkKIHsKICAgICByZXR1cm4gbW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjc4MzA2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwy
MiArODgsNDAgQEAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBjb25zdW1lRnVuY3Rpb24oQ1NTUAogICAg
IHJldHVybiBjb250ZW50czsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCitpbmxpbmUgYm9v
bCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8pCiB7Ci0gICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KHJh
bmdlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgcmV0dXJuICpwZXJjZW50IC8gMTAwLjA7Ci0gICAg
aWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCi0g
ICAgICAgIHJldHVybiAqbnVtYmVyOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8g
RklYTUU6IFByZXNlbnRhdGlvbmFsIEhUTUwgYXR0cmlidXRlcyBzaG91bGRuJ3QgdXNlIHRoZSBD
U1MgcGFyc2VyIGZvciBsZW5ndGhzLgorCisgICAgaWYgKHZhbHVlID09IDAgJiYgdW5pdGxlc3Na
ZXJvID09IFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoaXNVbml0bGVzc1ZhbHVlUGFyc2luZ0VuYWJsZWRGb3JNb2RlKHBhcnNlck1vZGUp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gcGFyc2VyTW9kZSA9PSBI
VE1MUXVpcmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdzsKK30KKwor
c3RhdGljIGJvb2wgY2FuQ29uc3VtZUNhbGNWYWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVn
b3J5LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCit7CisgICAgaWYgKGNhdGVnb3J5ID09IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50IHx8IGNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRM
ZW5ndGgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHBhcnNlck1vZGUgIT0gU1ZH
QXR0cmlidXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhdGVnb3J5
ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNp
bmcgbG9naWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBDYWxjUGFy
c2VyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wgPSBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKQorICAgIGV4cGxpY2l0IENhbGNQYXJzZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29y
eSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0geyB9LCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAg
ICAgICAgICwgbV9yYW5nZShyYW5nZSkKLSAgICAgICAgLCBtX3ZhbHVlUG9vbChjc3NWYWx1ZVBv
b2wpCisgICAgICAgICwgbV9wb29sKHBvb2wpCiAgICAgewogICAgICAgICBjb25zdCBDU1NQYXJz
ZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgICAgIGF1dG8gZnVuY3Rpb25JZCA9
IHRva2VuLmZ1bmN0aW9uSWQoKTsKQEAgLTExOCw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmICghbV9jYWxjVmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
bV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX3Bvb2wuY3Jl
YXRlVmFsdWUoV1RGTW92ZShtX2NhbGNWYWx1ZSkpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KQpAQCAtMTI2LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2Nh
bGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBjYXRlZ29yeSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAg
ICAgICAgcmV0dXJuIG1fdmFsdWVQb29sLmNyZWF0ZVZhbHVlKFdURk1vdmUobV9jYWxjVmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIG1fcG9vbC5jcmVhdGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVl
KSk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdl
cihkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTM0LDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCks
IG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJldHVy
biBtX3Bvb2wuY3JlYXRlVmFsdWUoc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91
YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5
cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTUwLDcg
KzE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWVQb29sLmNyZWF0ZVZhbHVlKG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJldHVybiBtX3Bvb2wuY3Jl
YXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKICAgICB9CiAKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJh
dygpCkBAIC0yMTEsNDcxICsyMjksMTA5NyBAQCBwcml2YXRlOgogICAgIENTU1BhcnNlclRva2Vu
UmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBtX3JhbmdlOwog
ICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1fY2FsY1ZhbHVlOwotICAgIENTU1ZhbHVlUG9vbCYg
bV92YWx1ZVBvb2w7CisgICAgQ1NTVmFsdWVQb29sJiBtX3Bvb2w7CiB9OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlw
ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKLXsK
LSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewotICAgICAgICBpZiAodG9rZW4ubnVtZXJp
Y1ZhbHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlwZSB8fCB0b2tlbi5udW1lcmljVmFsdWUoKSA8
IG1pbmltdW1WYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
IHJldHVybiBjbGFtcFRvPEludFR5cGU+KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkubnVtZXJpY1ZhbHVlKCkpOwotICAgIH0KKy8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNv
bnN1bWVycyBmb3IgY2FsbGVycyB0aGF0IGtub3cgdGhlIHRva2VuIHR5cGUuCiAKLSAgICBpZiAo
dG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisvLyBNQVJLOiBJbnRlZ2VyIChSYXcpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUg
bWluaW11bVZhbHVlKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0
aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpOdW1iZXIpOwotICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNl
ci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1
bWVJbnRlZ2VyVHlwZVJhdzxJbnRUeXBlPihtaW5pbXVtVmFsdWUpOworICAgIENhbGNQYXJzZXIg
cGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOworICAgIGlmIChhdXRv
IGNhbGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbGN1bGF0aW9u
LT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgcmV0
dXJuIHBhcnNlci5jb25zdW1lSW50ZWdlclR5cGVSYXc8SW50VHlwZT4obWluaW11bVZhbHVlKTsK
IAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8aW50PiBjb25z
dW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1W
YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPElu
dFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKIHsKLSAgICByZXR1
cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7CisgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOworICAgIAorICAgIGlm
IChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlwZSB8fCBy
YW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBtaW5pbXVtVmFsdWUpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGNsYW1wVG88SW50VHlwZT4ocmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7CiB9CiAKLVJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGRvdWJsZSBtaW5pbXVtVmFsdWUpCisvLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVWYWx1
ZSAtIG5vdCBtYWludGFpbmcgY2FsYykKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCiB7
Ci0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyUmF3KHJhbmdlLCBtaW5pbXVt
VmFsdWUpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworCisgICAgaWYgKGF1dG8gaW50ZWdl
ciA9IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5
cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQorICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1
ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4g
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQog
ewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXc8dW5zaWduZWQ+KHJhbmdlLCAxKTsK
LX0KKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZVBvc2l0
aXZlSW50ZWdlclJhdyhyYW5nZSkpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Cisg
ICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHBvb2wuY3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1i
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkK
LXsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewotICAgICAgICBpZiAodmFsdWVSYW5n
ZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKTsKLSAgICB9CisvLyBN
QVJLOiBOdW1iZXIgKFJhdykKIAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tl
bikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJs
ZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIGlmICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAgICByZXR1cm4gY2FsY1BhcnNlci5j
b25zdW1lTnVtYmVyUmF3KCk7CisgICAgcmV0dXJuIHZhbHVlOwogfQogCi0vLyBGSVhNRTogV29y
ayBvdXQgaWYgdGhpcyBjYW4ganVzdCBjYWxsIGNvbnN1bWVOdW1iZXJSYXcKLVJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAg
ICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVl
SWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOwotICAgIH0KLQotICAgIGlm
IChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgqbnVtYmVy
LCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBG
dW5jdGlvblRva2VuKTsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIENhbGNQYXJzZXIgcGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFuZ2UsIHN5bWJv
bFRhYmxlKTsKKyAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcoKTsKIH0KIAotI2lm
ICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotc3RhdGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5
MTAwKGRvdWJsZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51
bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gMTAwKSAqIDEwMCA9PSB2YWx1ZTsK
KyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgCisg
ICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcocmFuZ2UucGVl
aygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9Ci0jZW5kaWYKIAotc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsK
LSAgICAvLyBWYWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIDEwMDAgYXJlIHBhcnNlIGVycm9ycy4KLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuICYmIHRva2VuLm51
bWVyaWNWYWx1ZSgpID49IDEgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPD0gMTAwMAotI2lmICFF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBl
KCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZpc2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFs
dWUoKSkKLSNlbmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcocmFu
Z2UpOwotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IElk
ZW50VG9rZW4pOwogCi0gICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0
aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93
ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICBp
ZiAoYXV0byByZXN1bHQgPSBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcoKTsgcmVzdWx0Ci0j
aWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgICAgICYmICpyZXN1bHQgPiAwICYmICpy
ZXN1bHQgPCAxMDAwICYmIGRpdmlzaWJsZUJ5MTAwKCpyZXN1bHQpCi0jZW5kaWYKLSAgICApCi0g
ICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCgqcmVzdWx0LCBzdGQ6Om5leHRhZnRlcigw
LiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4sIDAuKSk7CisgICAgaWYgKGF1dG8gdmFyaWFi
bGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAgIHN3aXRj
aCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
UjoKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVy
UmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB2
YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorLy8gTUFSSzog
TnVtYmVyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluZyBjYWxjKQorCitzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKIHsKLSAgICByZXR1cm4gY29uc3VtZUZvbnRXZWln
aHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgIENh
bGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVl
UmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1
ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKIH0KIAotUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcldvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQorc3RhdGlj
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQogewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2Vp
Z2h0TnVtYmVyUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZSgqcmVzdWx0LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOworICAgIAorICAgIGF1dG8gdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CisgICAgCisgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWROdW1iZXJSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
IGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgq
dmFsaWRhdGVkVmFsdWUsIHVuaXRUeXBlKTsKKyAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLWlubGluZSBib29sIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUoZG91YmxlIHZhbHVlLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRs
ZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICAvLyBGSVhNRTogUHJlc2VudGF0aW9u
YWwgSFRNTCBhdHRyaWJ1dGVzIHNob3VsZG4ndCB1c2UgdGhlIENTUyBwYXJzZXIgZm9yIGxlbmd0
aHMKLQotICAgIGlmICh2YWx1ZSA9PSAwICYmIHVuaXRsZXNzWmVybyA9PSBVbml0bGVzc1plcm9R
dWlyazo6QWxsb3cpCi0gICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzVW5pdExlc3NW
YWx1ZVBhcnNpbmdFbmFibGVkRm9yTW9kZShjc3NQYXJzZXJNb2RlKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGNzc1BhcnNlck1vZGUgPT0gSFRNTFF1aXJrc01vZGUg
JiYgdW5pdGxlc3MgPT0gVW5pdGxlc3NRdWlyazo6QWxsb3c7Ci19CisvLyBNQVJLOiBQZXJjZW50
IChyYXcpCiAKLXN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkUGVyY2VudFJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewotICAg
ICAgICBzd2l0Y2ggKHRva2VuLnVuaXRUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgICAgICBpZiAoY3NzUGFyc2VyTW9kZSAhPSBVQVNo
ZWV0TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAg
ICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6Ci0gICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfTEhTOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VYUzoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfQ006Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKLSAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUFQ6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKLSAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6
Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgotICAgICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfVk1BWDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh2YWx1ZVJhbmdlID09IFZhbHVlUmFu
Z2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkgfHwgc3RkOjppc2lu
Zih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgICAgICByZXR1cm4geyB7IHRva2VuLnVuaXRUeXBlKCksIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgIH0KLSAgICBpZiAodG9r
ZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7Ci0gICAgICAgIGlmICghc2hvdWxkQWNjZXB0VW5p
dGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBpZiAoc3RkOjppc2luZih0
b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgIH0KLQotICAgIGlmICh0
b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1
ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3Vt
ZUxlbmd0aFJhdygpOworICAgIGlmIChzdGQ6OmlzaW5mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50
UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7
Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQ
YXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1
ZVJhbmdlKTsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29y
eShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2Us
IHVuaXRsZXNzKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT52YWx1ZSwgcmVzdWx0LT50eXBlKTsKKyAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSk7CisgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lUGVy
Y2VudFJhdygpOwogfQogCi1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3N0YXRp
YyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5
cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVy
Y2VudGFnZVRva2VuKSB7Ci0gICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1
ZSgpKSB8fCAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB0b2tlbi5u
dW1lcmljVmFsdWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwotICAgIHJldHVy
biBjYWxjUGFyc2VyLmNvbnN1bWVQZXJjZW50UmF3KCk7CisgICAgaWYgKGF1dG8gdmFsaWRhdGVk
VmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwg
dmFsdWVSYW5nZSkpIHsKKyAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KTsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgIH0KKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5U
eXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKHJhbmdlLCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKLX0KKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVu
dFRva2VuKTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtl
clNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCi17Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25U
b2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHsgfSwgY3NzVmFsdWVQb29sKTsKLSAgICAg
ICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50KTsKKyAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdl
dChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkg
eworICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAgICAg
IGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+
dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KIAotICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5n
ZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
KnBlcmNlbnQsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KKy8vIE1BUks6IFBlcmNlbnQgKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5n
IGNhbGMpCiAKLXN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRl
Z29yeSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQogewotICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpMZW5ndGggfHwgY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudCB8fCBjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKIAotICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFNWR0F0dHJpYnV0
ZU1vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IHBvb2wpOworICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKK30KIAotICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlcikKLSAgICAgICAgcmV0dXJuIHRydWU7CitzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9v
bCYgcG9vbCkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdl
VG9rZW4pOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVl
ID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHZhbHVl
UmFuZ2UpKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Cisg
ICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKCp2YWxpZGF0ZWRWYWx1ZSwgQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKKy8vIE1BUks6
IExlbmd0aCAocmF3KQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlkYXRlZExl
bmd0aFJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKLSAgICBjb25z
dCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5
cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsK
LSAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQotICAgICAgICAgICAgcmV0dXJuIHsgKnJl
c3VsdCB9OworICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYm
IHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKLSAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAg
cmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChzdGQ6OmlzaW5mKHZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQogCi0gICAg
aWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0Oworc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaykKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNl
cihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKLSAgICBp
ZiAoYXV0byBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKTsgY2FsY3VsYXRpb24gJiYg
Y2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9k
ZSkpCi0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXco
KTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlKTsK
KyAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVMZW5ndGhSYXcoKTsKIH0KIAotUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aFJh
dz4gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmspCiB7Ci0g
ICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0
b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQ
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0g
ICAgICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpOyBjYWxjdWxh
dGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQ
YXJzZXJNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBEaW1lbnNpb25Ub2tlbik7CisKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsK
KworICAgIGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgIHN3aXRjaCAodW5p
dFR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAg
aWYgKHBhcnNlck1vZGUgIT0gVUFTaGVldE1vZGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKSB7Ci0gICAgICAg
IHJldHVybiBzd2l0Y2hPbigqcmVzdWx0LCBbXSAoTGVuZ3RoUmF3IGxlbmd0aCkgewotICAgICAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3Ro
LnZhbHVlLCBsZW5ndGgudHlwZSk7Ci0gICAgICAgIH0sIFtdIChkb3VibGUgcGVyY2VudGFnZSkg
ewotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUocGVyY2VudGFnZSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgfSk7
CisgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhSYXcodG9rZW4u
bnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUsICp2YWxpZGF0
ZWRWYWx1ZSB9IH07CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2Vu
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lv
blRva2VuKSB7Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOwotICAg
ICAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19E
RUc6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19HUkFEOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoK
LSAgICAgICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAodG9rZW4udHlw
ZSgpID09IE51bWJlclRva2VuICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVt
ZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAg
ICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKIAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAg
ICBpZiAoIXNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpKQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICByZXR1cm4g
Y2FsY1BhcnNlci5jb25zdW1lQW5nbGVSYXcoKTsKKyAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkp
IHsKKyAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAg
cmV0dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAg
IH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
ayB1bml0bGVzc1plcm8pCisvLyBNQVJLOiBMZW5ndGggKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFp
bnRhaW5nIGNhbGMpCisKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQogewotICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3Jr
ZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKKworICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAg
ICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoKTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCitzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVl
UG9vbCYgcG9vbCkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5w
ZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAg
IENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IFZhbHVlUmFuZ2U6OkFsbCwgeyB9LCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICByZXR1cm4gY2Fs
Y1BhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
KTsKLSAgICB9CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4pOworCisgICAgaWYgKGF1dG8gbGVuZ3RoUmF3ID0gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUobGVuZ3Ro
UmF3LT52YWx1ZSwgbGVuZ3RoUmF3LT50eXBlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAot
ICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShhbmdsZS0+dmFsdWUsIGFuZ2xlLT50eXBlKTsKK3N0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQ
b29sJiBwb29sKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRv
a2VuKTsKIAorICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcykpCisgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJh
dy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrIHVuaXRsZXNzWmVybykKKy8vIE1BUks6IEFuZ2xlIChyYXcpCisKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBj
YXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICBzd2l0Y2ggKHRva2VuLnVuaXRUeXBlKCkpIHsK
LSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1JBRDoKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUoKSk7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxl
c3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybykpCi0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX0RFRyk7Ci0gICAgICAgIGJyZWFrOworICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgY2FzZSBQZXJj
ZW50YWdlVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudChyYW5nZSwgdmFsdWVS
YW5nZSk7CisgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSk7CisgICAgcmV0dXJuIHBhcnNlci5jb25z
dW1lQW5nbGVSYXcoKTsKK30KIAotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBD
YWxjUGFyc2VyIGFuZ2xlQ2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5n
bGUsIHZhbHVlUmFuZ2UpOwotICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxh
dGlvbiA9IGFuZ2xlQ2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsY3Vs
YXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGFuZ2xlQ2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKLSAgICAgICAg
fQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
Q2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
aywgVW5pdGxlc3NaZXJvUXVpcmspCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgICAgIENhbGNQYXJzZXIgcGVyY2VudENhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwotICAg
ICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IHBlcmNlbnRDYWxjUGFy
c2VyLnZhbHVlKCkpIHsKLSAgICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBw
ZXJjZW50Q2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKLSAgICAgICAgfQotICAgIAotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCisgICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51
bml0VHlwZSgpOworICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfREVHOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAg
ICAgIHJldHVybiB7IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkubnVtZXJpY1ZhbHVlKCkgfSB9OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVS
YXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1pl
cm9RdWlyayB1bml0bGVzc1plcm8pCiB7Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwotICAgIENTU1VuaXRUeXBlIHVuaXQgPSB0b2tlbi51bml0VHlwZSgp
OwotICAgIGJvb2wgYWNjZXB0VW5pdGxlc3MgPSB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4g
JiYgdW5pdGxlc3MgPT0gVW5pdGxlc3NRdWlyazo6QWxsb3cgJiYgc2hvdWxkQWNjZXB0VW5pdGxl
c3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7Ci0gICAgaWYgKGFjY2VwdFVuaXRsZXNzKQotICAgICAg
ICB1bml0ID0gQ1NTVW5pdFR5cGU6OkNTU19NUzsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IERp
bWVuc2lvblRva2VuIHx8IGFjY2VwdFVuaXRsZXNzKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAodW5pdCA9PSBDU1NVbml0
VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQotICAgICAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50
eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlKTsKLSAgICByZXR1cm4gY2Fs
Y1BhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUp
OworICAgIGlmIChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmlj
VmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgIHJl
dHVybiB7IHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9
CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJlc29sdXRpb25Vbml0IGFsbG93WCkKKy8vIE1BUks6
IEFuZ2xlIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluZyBjYWxjKQorCitzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENT
U1ZhbHVlUG9vbCYgcG9vbCkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7Ci0gICAgLy8gVW5saWtlIHRoZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMg
bm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBEaW1l
bnNpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NTVW5pdFR5cGUgdW5p
dCA9IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgaWYgKHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19E
UFBYIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUEkgfHwgdW5pdCA9PSBDU1NVbml0VHlw
ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCksIHVuaXQpOwotICAgIGlmIChhbGxvd1ggPT0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkFsbG93
ICYmIHRva2VuLnZhbHVlKCkgPT0gIngiKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
Lm51bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX0RQUFgpOworICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgcmV0dXJuIHBhcnNlci5jb25z
dW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKIH0KIAotc3Rk
OjpvcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NW
YWx1ZVBvb2wmIHBvb2wpCiB7Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRU
b2tlbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOwotfQorICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJu
IGNvbnN1bWVJZGVudFdvcmtlclNhZmUocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OworICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVl
KGFuZ2xlUmF3LT52YWx1ZSwgYW5nbGVSYXctPnR5cGUpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFdvcmtlclNhZmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQorc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQog
ewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCi0gICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKworICAgIGlmIChh
dXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRs
ZXNzWmVybykpCisgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1
ZSwgYW5nbGVSYXctPnR5cGUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKQorCisvLyBNQVJLOiBU
aW1lIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluZyBjYWxjKQorCitzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCiB7Ci0g
ICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkgPiB1
cHBlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gY29uc3VtZUlk
ZW50UmF3KHJhbmdlKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlv
blRva2VuKTsKKworICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgcmV0dXJuIHBh
cnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUpOwog
fQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKQor
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKIHsK
LSAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPCBsb3dlciB8fCByYW5nZS5wZWVrKCkuaWQoKSA+
IHVwcGVyKQorICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2Vu
KTsKKworICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJh
bmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOworCisgICAgaWYgKGF1dG8gdW5pdCA9IHJh
bmdlLnBlZWsoKS51bml0VHlwZSgpOyB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfTVMgfHwgdW5p
dCA9PSBDU1NVbml0VHlwZTo6Q1NTX1MpCisgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVl
KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXQp
OworCisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLS8vIEZJWE1FLU5FV1BBUlNFUjogRXZlbnR1
YWxseSB3ZSdkIGxpa2UgdGhpcyB0byB1c2UgQ1NTQ3VzdG9tSWRlbnRWYWx1ZSwgYnV0IHdlIG5l
ZWQKLS8vIHRvIGRvIG90aGVyIHBsdW1iaW5nIHdvcmsgZmlyc3QgKGxpa2UgY2hhbmdpbmcgUGFp
ciB0byBDU1NWYWx1ZVBhaXIgYW5kIG1ha2UgaXQgbm90Ci0vLyB1c2Ugb25seSBwcmltaXRpdmUg
dmFsdWVzKS4KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBib29sIHNob3VsZExvd2VyY2FzZSkKK3N0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbCYg
cG9vbCkKIHsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuIHx8IGlz
Q1NTV2lkZUtleXdvcmQocmFuZ2UucGVlaygpLmlkKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhdXRvIGlkZW50aWZpZXIgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoc2hvdWxkTG93ZXJjYXNlID8gaWRlbnRpZmllci5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpIDogaWRlbnRpZmllci50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6Q1NTX1NUUklORyk7Cisg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOworCisgICAgaWYg
KHVuaXRsZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNz
VmFsdWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywg
VW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBW
YWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBwb29sLmNyZWF0
ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCks
IENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lU3RyaW5nKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQorLy8gTUFSSzogUmVzb2x1dGlvbiAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBubyBj
YWxjKQorCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlv
bkNTU1ByaW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBBbGxvd1hSZXNvbHV0aW9uVW5pdCBhbGxvd1gsIENTU1ZhbHVlUG9v
bCYgcG9vbCkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25U
b2tlbik7CisKKyAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVu
aXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUFBYIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19E
UEkgfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQQ00pCisgICAgICAgIHJldHVybiBwb29s
LmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCksIHVuaXQpOworICAgIGlmIChhbGxvd1ggPT0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkFs
bG93ICYmIHJhbmdlLnBlZWsoKS52YWx1ZSgpID09ICJ4IikKKyAgICAgICAgcmV0dXJuIHBvb2wu
Y3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFs
dWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19EUFBYKTsKKworICAgIHJldHVybiBudWxscHRyOworfQor
CisKKy8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2FsbGVycyB0aGF0
IGRvIE5PVCBrbm93IHRoZSB0b2tlbiB0eXBlLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBl
PiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKK3sKKyAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2Fz
ZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7CisK
KyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBl
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUp
OworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAg
YXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkg
eworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2Vy
VHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbjxJ
bnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKKworICAgIGNhc2UgTnVtYmVyVG9r
ZW46CisgICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFs
dWUsIHBvb2wpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7
Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyVHlwZTxpbnQ+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRp
dmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBj
b25zdW1lSW50ZWdlclR5cGVSYXc8dW5zaWduZWQ+KHJhbmdlLCAxKTsKK30KKworUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8dW5zaWduZWQ+KHJh
bmdlLCAxLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KKworc3RkOjpvcHRpb25hbDxk
b3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKwor
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAg
ICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UpOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSkKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRj
aCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1
cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKTsKKworICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVt
YmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisgICAgCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1
bmN0aW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MpOworCisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVM
ZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46Cisg
ICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKTsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAg
Y2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0s
IHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKTsKKyAgICAKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
cmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQoreworICAgIGNvbnN0IGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworCisgICAgc3dp
dGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46CisgICAgICAgIHJl
dHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJl
dHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5n
ZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkK
K3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3Vt
ZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7CisKKyAgICBjYXNlIFBlcmNlbnRhZ2VU
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cG9vbCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3sK
KyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZUFu
Z2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKworICAgIGNhc2UgRGlt
ZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tl
blR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKworICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAg
IHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsg
fSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVdvcmtlclNhZmUocmFuZ2UsIHBh
cnNlck1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIHVuaXRsZXNzLCB1bml0bGVzc1pl
cm8pOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNh
ZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
Q1NTVmFsdWVQb29sJiBwb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9R
dWlyayB1bml0bGVzc1plcm8pCit7CisgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisK
KyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAg
ICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1v
ZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworCisgICAgY2FzZSBEaW1lbnNpb25U
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxs
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKKworICAgIGNhc2Ug
TnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CisgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxs
cHRyOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBhdXRvJiB0b2tlbiA9
IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBG
dW5jdGlvblRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisg
ICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVUaW1lQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9
LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSk7CisKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVRp
bWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUmVzb2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQWxsb3dYUmVzb2x1dGlv
blVuaXQgYWxsb3dYKQoreworICAgIC8vIE5PVEU6IFVubGlrZSB0aGUgb3RoZXIgdHlwZXMsIGNh
bGMoKSBkb2VzIG5vdCB3b3JrIHdpdGggPHJlc29sdXRpb24+LgorCisgICAgYXV0byYgdG9rZW4g
PSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIGNhc2Ug
RGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1p
dGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCBhbGxvd1gsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpOworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBNQVJLOiAtIENvbWJpbmF0
aW9uIGNvbnN1bWVycyAodG9rZW4gdHlwZSB1bmtub3duIGJ5IGNhbGxlcikuCisKK3N0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRs
ZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkK
K3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAgICBpZiAoYXV0byB2YWx1
ZSA9IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywg
dW5pdGxlc3NaZXJvLCBwb29sKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOworCisgICAgY2Fz
ZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CisgICAg
CisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CisK
KyAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBhdXRvIGNvbnZlcnRUb0xl
bmd0aE9yUGVyY2VudFJhdyA9IFtdKGF1dG8gcmVzdWx0KSAtPiBzdGQ6Om9wdGlvbmFsPExlbmd0
aE9yUGVyY2VudFJhdz4geworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJu
IHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH07CisKKyAg
ICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOiB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBiZSB1c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0
aCBhbmQgUGVyY2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1
bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIHBh
cnNlck1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lTGVuZ3RoT3JQZXJj
ZW50UmF3KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRGltZW5zaW9uVG9r
ZW46CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcykpOworICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZUxlbmd0aFJh
d1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcykpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZVBlcmNlbnRSYXdXaXRoS25v
d25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUg
dXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBl
cmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/CisgICAgICAgIENhbGNQYXJzZXIgcGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAg
ICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAm
JiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBwYXJzZXJNb2Rl
KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBj
b25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURp
bWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAg
ICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNhc2UgUGVyY2VudGFn
ZVRva2VuOgorICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBNQVJLOiAtIENvbWJp
bmF0aW9uIGNvbnN1bWVycyB0aGF0IGFsbG93IGxvb2t1cCBpbiB0aGUgc3ltYm9sIHRhYmxlIGZv
ciBJZGVudFRva2VucyAoYnkgZGVmYXVsdCwgb3RoZXIgY29uc3VtZXJzIG9ubHkgbG9va3VwIGlu
IHRoZSBzeW1ib2wgdGFibGUgZm9yIGNhbGMoKSkuCisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQoreworICAgIGF1dG8mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOworCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNl
IEZ1bmN0aW9uVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAg
IGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7CisKKyAg
ICBjYXNlIElkZW50VG9rZW46CisgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtu
b3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZh
bHVlUmFuZ2U6OkFsbCkKK3sKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKworICAg
IHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvblRva2VuOgorICAgICAg
ICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46
CisgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNl
bnRhZ2UocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGNhc2UgSWRlbnRU
b2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBl
SWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKK3sKKyAg
ICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykgLT4gc3RkOjpvcHRpb25h
bDxkb3VibGU+IHsKKyAgICAgICAgaWYgKGFuZ2xlUmF3KQorICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZVJhdy0+dHlwZSwgYW5nbGVSYXct
PnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworCisgICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewor
ICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKKyAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25z
dW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJh
bmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJv
UXVpcms6OkZvcmJpZCkpCisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVS
YXcpOworICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisgICAgCisgICAgY2FzZSBEaW1l
bnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJh
d1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGws
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZv
cmJpZCkpOworICAgIAorICAgIGNhc2UgTnVtYmVyVG9rZW46CisgICAgICAgIHJldHVybiBjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFu
Z2U6OkFsbCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCit7CisgICAgYXV0byBjb21wdXRlRGVncmVlcyA9
IFtdKGF1dG8gYW5nbGVSYXcpIC0+IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB7CisgICAgICAgIGlm
IChhbmdsZVJhdykKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZURlZ3JlZXMoYW5nbGVSYXctPnR5cGUsIGFuZ2xlUmF3LT52YWx1ZSk7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfTsKKworICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OworCisgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
CisgICAgICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNl
ck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkp
CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcpOworICAgICAgICBy
ZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsKKyAgICAKKyAgICBjYXNlIERpbWVuc2lvblRv
a2VuOgorICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29uc3VtZUFuZ2xlUmF3V2l0aEtu
b3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSk7
CisgICAgCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1i
ZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxs
KTsKKworICAgIGNhc2UgSWRlbnRUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBz
eW1ib2xUYWJsZS5nZXQodG9rZW4uaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFi
bGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAg
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAgICAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVS
TjoKKyAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMo
dmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSk7CisKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVl
OworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gTUFS
SzogLSBDb21iaW5hdGlvbiBjb25zdW1lcnMgd2l0aCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24g
cmVzdWx0IHR5cGUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBl
bmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRyYW5zZm9y
bWVyJiYgcGVyY2VudFRyYW5mb3JtZXIpIC0+IHN0ZDo6b3B0aW9uYWw8ZGVjbHR5cGUobnVtYmVy
VHJhbmZvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Cit7CisgICAgY29uc3QgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbmZvcm1lcigqbnVtYmVyKTsKKyAgICAg
ICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5mb3JtZXIoKnBlcmNlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIFBlcmNlbnRhZ2VUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigqcGVyY2VudCk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwg
eyB9LCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpu
dW1iZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZTo6QWxsKQoreworICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdl
LCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRv
dWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50IC8gMTAwLjA7IH0pOworfQorCisvLyBNQVJL
OiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBz
eW1ib2wgdGFibGUgZm9yIElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24g
cmVzdWx0IHR5cGUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBl
bmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbmZvcm1lciwgUGVyY2VudFRy
YW5zZm9ybWVyJiYgcGVyY2VudFRyYW5mb3JtZXIpIC0+IHN0ZDo6b3B0aW9uYWw8ZGVjbHR5cGUo
bnVtYmVyVHJhbmZvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Cit7CisgICAgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CisKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2
YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCpudW1iZXIp
OworICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuZm9ybWVyKCpwZXJjZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIGlmIChhdXRvIHBl
cmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBwZXJjZW50
VHJhbmZvcm1lcigqcGVyY2VudCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOdW1iZXJU
b2tlbjoKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bWJlclRyYW5mb3JtZXIoKm51bWJlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJZGVudFRva2VuOgorICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJv
bFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFy
aWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5U
QUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVk
UGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwZXJjZW50VHJhbmZvcm1lcigqdmFsaWRhdGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuZm9ybWVyKCp2YWxpZGF0
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Cit7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVt
YmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJj
ZW50IC8gMTAwLjA7IH0pOworfQorCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgLy8gVmFs
dWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAx
MDAwIGFyZSBwYXJzZSBlcnJvcnMuCisKKyNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAg
ICBhdXRvIGlzSW50ZWdlckFuZERpdmlzaWJsZUJ5MTAwID0gW10oZG91YmxlIHZhbHVlKSB7Cisg
ICAgICAgIEFTU0VSVCh2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwMCk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gMTAwKSAqIDEwMCA9PSB2YWx1ZTsKKyAgICB9Owor
I2VuZGlmCisKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogeworICAgICAgICAvLyAiW0Zv
ciBjYWxjKCldLCB0aGUgdXNlZCB2YWx1ZSByZXN1bHRpbmcgZnJvbSBhbiBleHByZXNzaW9uIG11
c3QgYmUgY2xhbXBlZCB0byB0aGUgcmFuZ2UgYWxsb3dlZCBpbiB0aGUgdGFyZ2V0IGNvbnRleHQu
IgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpOworICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgIGJyZWFrOworI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQor
ICAgICAgICBpZiAoISgqcmVzdWx0ID4gMCAmJiAqcmVzdWx0IDwgMTAwMCkgfHwgIWlzSW50ZWdl
ckFuZERpdmlzaWJsZUJ5MTAwKCpyZXN1bHQpKQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKnJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAx
LjApLCBzdGQ6Om5leHRhZnRlcigxMDAwLjAsIDAuMCkpOworICAgIH0KKworICAgIGNhc2UgTnVt
YmVyVG9rZW46IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0b2tlbi5udW1lcmljVmFsdWUoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyB2YWx1ZSBvZiAxMDAwLCB1
bmxpa2UgdGhlIGNvbW1lbnQgYWJvdmUgYW5kIHRoZSBiZWhhdmlvciBvZiB0aGUgRnVuY3Rpb25U
b2tlbiBwYXJzaW5nIHBhdGguCisgICAgICAgIGlmICghKHJlc3VsdCA+PSAxICYmIHJlc3VsdCA8
PSAxMDAwKSkKKyAgICAgICAgICAgIGJyZWFrOworI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRT
KQorICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpICE9IEludGVnZXJWYWx1ZVR5
cGUgfHwgIWlzSW50ZWdlckFuZERpdmlzaWJsZUJ5MTAwKHJlc3VsdCkpCisgICAgICAgICAgICBi
cmVhazsKKyNlbmRpZgorICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcldv
cmtlclNhZmUocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQoreworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAg
cmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6Om9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNv
bnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFu
Z2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7
Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKHJh
bmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlk
ZW50UmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KCpyZXN1bHQpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6Om9wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKQoreworICAgIGlmIChyYW5nZS5wZWVr
KCkuaWQoKSA8IGxvd2VyIHx8IHJhbmdlLnBlZWsoKS5pZCgpID4gdXBwZXIpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdyhyYW5nZSk7Cit9
CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCit7
CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkg
PiB1cHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVu
dChyYW5nZSk7Cit9CisKKy8vIEZJWE1FLU5FV1BBUlNFUjogRXZlbnR1YWxseSB3ZSdkIGxpa2Ug
dGhpcyB0byB1c2UgQ1NTQ3VzdG9tSWRlbnRWYWx1ZSwgYnV0IHdlIG5lZWQKKy8vIHRvIGRvIG90
aGVyIHBsdW1iaW5nIHdvcmsgZmlyc3QgKGxpa2UgY2hhbmdpbmcgUGFpciB0byBDU1NWYWx1ZVBh
aXIgYW5kIG1ha2UgaXQgbm90CisvLyB1c2Ugb25seSBwcmltaXRpdmUgdmFsdWVzKS4KK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBib29sIHNob3VsZExvd2VyY2FzZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygp
LnR5cGUoKSAhPSBJZGVudFRva2VuIHx8IGlzQ1NTV2lkZUtleXdvcmQocmFuZ2UucGVlaygpLmlk
KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGlkZW50aWZpZXIgPSByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCk7CisgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc2hvdWxkTG93ZXJjYXNlID8gaWRlbnRp
Zmllci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIDogaWRlbnRpZmllci50b1N0cmluZygpLCBD
U1NVbml0VHlwZTo6Q1NTX1NUUklORyk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVN0cmluZyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAocmFu
Z2UucGVlaygpLnR5cGUoKSAhPSBTdHJpbmdUb2tlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC03MDEsNyArMTM0NSw3IEBAIFN0cmluZ1ZpZXcgY29uc3VtZVVybEFzU3RyaW5nVmlldyhD
U1NQYXIKICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4g
U3RyaW5nVmlldygpOworICAgIHJldHVybiB7IH07CiB9CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVVybChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTczOCwxMzIg
KzEzODIsMjAgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0aQogICAg
IGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCiAgICAgICAgIHJl
dHVybiAxLjA7CiAKLSAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJP
clBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgIGlmIChhdXRvIGFscGhhUGFyYW1l
dGVyID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhyYW5nZSkpCiAg
ICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOwogCiAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lT3B0aW9uYWxBbHBoYU9ySWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitzdGF0aWMgc3RkOjpvcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKQogewogICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShy
YW5nZSkpCiAgICAgICAgIHJldHVybiAxLjA7CiAKLSAgICBhdXRvIG5vcm1hbGl6ZVBlcmNlbnQg
PSBbXShkb3VibGUgcGVyY2VudCkgewotICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChwZXJjZW50
IC8gMTAwLjAsIDAuMCwgMS4wKTsKLSAgICB9OwotCi0gICAgYXV0byBub3JtYWxpemVOdW1iZXIg
PSBbXShkb3VibGUgYWxwaGEpIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoYWxwaGEsIDAu
MCwgMS4wKTsKLSAgICB9OwotCi0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFu
Z2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0
aW9uVG9rZW46IHsKLSAgICAgICAgQ2FsY1BhcnNlciBwZXJjZW50YWdlQ2FsY1BhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgVmFsdWVSYW5nZTo6QWxsLCBzeW1ib2xU
YWJsZSk7Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBwZXJjZW50YWdlQ2FsY1BhcnNlci5j
b25zdW1lUGVyY2VudFJhdygpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBlcmNlbnQo
KnBlcmNlbnQpOwotICAgICAgICAKLSAgICAgICAgQ2FsY1BhcnNlciBudW1iZXJDYWxjUGFyc2Vy
KHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2U6OkFsbCwgc3lt
Ym9sVGFibGUpOwotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBudW1iZXJDYWxjUGFyc2VyLmNv
bnN1bWVOdW1iZXJSYXcoKSkKLSAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIoKm51
bWJlcik7Ci0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBjYXNl
IFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgaWYgKHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1Zh
bHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJu
IG5vcm1hbGl6ZVBlcmNlbnQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1l
cmljVmFsdWUoKSk7Ci0KLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gbm9y
bWFsaXplTnVtYmVyKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCkpOwotCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJs
ZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlk
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplUGVyY2VudCh2YXJpYWJsZS0+dmFsdWUpOwotCi0gICAgICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxp
emVOdW1iZXIodmFyaWFibGUtPnZhbHVlKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZUh1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJh
dyhyYW5nZSwgY29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotCi0gICAgcmV0dXJuIGNvbnN1
bWVOdW1iZXJSYXcocmFuZ2UpOwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVIdWVPcklkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0
b2tlbiA9IHJhbmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIENhbGNQYXJzZXIgYW5nbGVDYWxjUGFyc2Vy
KHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVSYW5nZTo6QWxsLCBzeW1i
b2xUYWJsZSk7Ci0gICAgICAgIGlmIChhdXRvIGFuZ2xlID0gYW5nbGVDYWxjUGFyc2VyLmNvbnN1
bWVBbmdsZVJhdygpKQotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKLSAgICAgICAgCi0gICAgICAg
IENhbGNQYXJzZXIgbnVtYmVyQ2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyLCBWYWx1ZVJhbmdlOjpBbGwsIHN5bWJvbFRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG51
bWJlckNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdygpOwotICAgIH0KLSAgICAKLSAgICBjYXNl
IERpbWVuc2lvblRva2VuOiB7Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlw
ZSgpOwotICAgICAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ERUc6Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVFVSTjoKLSAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURl
Z3JlZXModW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJp
Y1ZhbHVlKCkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAg
ICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFs
dWUoKTsKLQotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUg
PSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgp
KSkgewotICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19SQUQ6Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXModmFyaWFibGUtPnR5cGUsIHZhcmlh
YmxlLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsKLQotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KKyAgICBpZiAoYXV0byBh
bHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpB
bGwpKQorICAgICAgICByZXR1cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4w
KTsKIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiB9CiAKQEAgLTg3MiwxMzggKzE0MDQsMzMgQEAgc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUo
ZG91YmxlIGh1ZSkKICAgICByZXR1cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSAr
IDM2MC4wLCAzNjAuMCk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZU51bWJlck9ySWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitzdGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21w
b25lbnROdW1iZXIoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0
b2tlbiA9IHJhbmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBWYWx1ZVJhbmdlOjpBbGwsIHN5bWJvbFRh
YmxlKTsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdygpOwotICAg
IH0KLQotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpOwotCi0gICAgY2FzZSBJZGVudFRv
a2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgotICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS0+dmFsdWU7Ci0KLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBj
b252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudE9ySWRlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitz
dGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKGRvdWJsZSB2YWx1
ZSkKIHsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0K
LSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewot
ICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnQsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAgICAgICByZXR1cm4g
Y2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJhdygpOwotICAgIH0KLQotICAgIGNhc2UgUGVyY2Vu
dGFnZVRva2VuOgotICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKTsKLQotICAgIGNhc2Ug
SWRlbnRUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQo
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpKSkgewotICAgICAgICAgICAg
c3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgewotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsK
LQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUgLyAx
MDAuMCAqIDI1NS4wKTsKIH0KIAotZW51bSBjbGFzcyBSR0JDb21wb25lbnRUeXBlIHsgTnVtYmVy
LCBQZXJjZW50YWdlIH07Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+IGNvbnN1bWVO
dW1iZXJPclBlcmNlbnRPcklkZW50Tm9ybWFsaXplZEZvclJlbGF0aXZlUkdCKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gY29uc3VtZVJlbGF0aXZlUkdCQ29tcG9uZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKQogewotICAgIGF1dG8gbm9ybWFsaXplUGVyY2VudCA9IFtdKGRvdWJsZSBwZXJj
ZW50KSB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFC
eXRlKHBlcmNlbnQgLyAxMDAuMCAqIDI1NS4wKTsKLSAgICB9OwotCi0gICAgYXV0byBub3JtYWxp
emVOdW1iZXIgPSBbXShkb3VibGUgbnVtYmVyKSB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKG51bWJlcik7Ci0gICAgfTsKLQotICAgIGNvbnN0
IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIENhbGNQYXJz
ZXIgcGVyY2VudGFnZUNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnQsIFZhbHVlUmFuZ2U6OkFsbCwgc3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoYXV0byBwZXJj
ZW50ID0gcGVyY2VudGFnZUNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcoKSkKLSAgICAgICAg
ICAgIHJldHVybiBub3JtYWxpemVQZXJjZW50KCpwZXJjZW50KTsKLSAgICAgICAgCi0gICAgICAg
IENhbGNQYXJzZXIgbnVtYmVyQ2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyLCBWYWx1ZVJhbmdlOjpBbGwsIHN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gbnVtYmVyQ2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KCkpCi0gICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplTnVtYmVyKCpudW1iZXIpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAg
ICAgICAgaWYgKHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBlcmNlbnQocmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7Ci0KLSAgICBj
YXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gbm9ybWFsaXplTnVtYmVyKHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkpOwotCi0gICAgY2FzZSBJ
ZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplUGVyY2VudCh2
YXJpYWJsZS0+dmFsdWUpOwotCi0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgotICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVOdW1iZXIodmFyaWFibGUtPnZh
bHVlKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwsIG5vcm1hbGl6
ZVJHQkNvbXBvbmVudE51bWJlciwgbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSk7CiB9
CiAKK2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7IE51bWJlciwgUGVyY2VudGFnZSB9Owog
c3RhdGljIHVpbnQ4X3QgY2xhbXBSR0JDb21wb25lbnQoZG91YmxlIHZhbHVlLCBSR0JDb21wb25l
bnRUeXBlIGNvbXBvbmVudFR5cGUpCiB7Ci0gICAgaWYgKGNvbXBvbmVudFR5cGUgPT0gUkdCQ29t
cG9uZW50VHlwZTo6UGVyY2VudGFnZSkKLSAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIDEwMC4wICog
MjU1LjA7Ci0KLSAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0
ZSh2YWx1ZSk7CisgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CisgICAgY2FzZSBSR0JDb21w
b25lbnRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnRO
dW1iZXIodmFsdWUpOworICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKKyAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UodmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAog
ZW51bSBjbGFzcyBSR0JPckhTTFNlcGFyYXRvclN5bnRheCB7IENvbW1hcywgV2hpdGVzcGFjZVNs
YXNoIH07CkBAIC0xMDI3LDQ0ICsxNDU0LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUkdCTwogICAgIGlmICghY29uc3VtZVJHQk9ySFNMQWxwaGFTZXBhcmF0b3IoYXJn
cywgc3ludGF4KSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIHJldHVybiBjb25zdW1lTnVt
YmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwotfQotCi1zdHJ1Y3QgUmVsYXRpdmVS
R0JDb21wb25lbnQgewotICAgIFZhcmlhbnQ8ZG91YmxlLCBDU1NWYWx1ZUlEPiB2YWx1ZTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFJHQkNvbXBvbmVudFR5cGU+IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxD
U1NWYWx1ZUlEIEM+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbGF0aXZlUkdCQ29tcG9uZW50PiBj
b25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgc3Rk
OjpvcHRpb25hbDxSR0JDb21wb25lbnRUeXBlPiBjb21wb25lbnRUeXBlKQotewotICAgIGlmICgh
Y29tcG9uZW50VHlwZSkgewotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIFJlbGF0aXZlUkdCQ29tcG9uZW50IHsgKm51
bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH07Ci0gICAgICAgIGlmIChhdXRvIHBlcmNl
bnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2
ZVJHQkNvbXBvbmVudCB7ICpwZXJjZW50LCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH07
Ci0gICAgICAgIGlmIChhdXRvIGNoYW5uZWwgPSBjb25zdW1lSWRlbnRSYXc8Qz4oYXJncykpCi0g
ICAgICAgICAgICByZXR1cm4gUmVsYXRpdmVSR0JDb21wb25lbnQgeyAqY2hhbm5lbCwgc3RkOjpu
dWxsb3B0IH07Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgc3dp
dGNoICgqY29tcG9uZW50VHlwZSkgewotICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVy
OiB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0g
ICAgICAgICAgICByZXR1cm4gUmVsYXRpdmVSR0JDb21wb25lbnQgeyAqbnVtYmVyLCBSR0JDb21w
b25lbnRUeXBlOjpOdW1iZXIgfTsKLSAgICAgICAgaWYgKGF1dG8gY2hhbm5lbCA9IGNvbnN1bWVJ
ZGVudFJhdzxDPihhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVu
dCB7ICpjaGFubmVsLCBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50
YWdlOiB7Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
KSkKLSAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZVJHQkNvbXBvbmVudCB7ICpwZXJjZW50LCBS
R0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH07Ci0gICAgICAgIGlmIChhdXRvIGNoYW5uZWwg
PSBjb25zdW1lSWRlbnRSYXc8Qz4oYXJncykpCi0gICAgICAgICAgICByZXR1cm4gUmVsYXRpdmVS
R0JDb21wb25lbnQgeyAqY2hhbm5lbCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9Owot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJj
ZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2
ZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKQEAgLTEwODUsMTkgKzE0NzUsMTkgQEAgc3RhdGljIENvbG9yIHBh
cnNlUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKAogICAgICAgICB7IENTU1ZhbHVlQWxwaGEsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc1NSR0IuYWxwaGEgKiAxMDAuMCB9
CiAgICAgfTsKIAotICAgIGF1dG8gcmVkID0gY29uc3VtZU51bWJlck9yUGVyY2VudE9ySWRlbnRO
b3JtYWxpemVkRm9yUmVsYXRpdmVSR0IoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gcmVk
ID0gY29uc3VtZVJlbGF0aXZlUkdCQ29tcG9uZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBp
ZiAoIXJlZCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZ3JlZW4gPSBjb25zdW1l
TnVtYmVyT3JQZXJjZW50T3JJZGVudE5vcm1hbGl6ZWRGb3JSZWxhdGl2ZVJHQihhcmdzLCBzeW1i
b2xUYWJsZSk7CisgICAgYXV0byBncmVlbiA9IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChh
cmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFncmVlbikKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGF1dG8gYmx1ZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRPcklkZW50Tm9ybWFsaXpl
ZEZvclJlbGF0aXZlUkdCKGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGJsdWUgPSBjb25z
dW1lUmVsYXRpdmVSR0JDb21wb25lbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYmx1
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9u
YWxBbHBoYU9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gYWxwaGEgPSBjb25z
dW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJs
ZSk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTE5NywxOSAr
MTU4NywxOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhTTFBhcmFtZXRlcnMoCiAgICAg
ICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5D
b2xvckFzSFNMLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1ZSA9IGNvbnN1
bWVIdWVPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVB
bmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlLCBjb250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgYXV0byBzYXR1cmF0aW9uID0gY29uc3VtZVBlcmNlbnRPcklkZW50KGFyZ3MsIHN5bWJv
bFRhYmxlKTsKKyAgICBhdXRvIHNhdHVyYXRpb24gPSBjb25zdW1lUGVyY2VudEFsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYgKCFzYXR1cmF0aW9uKQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2Vu
dE9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3Vt
ZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAg
IGlmICghbGlnaHRuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9
IGNvbnN1bWVPcHRpb25hbEFscGhhT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0
byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFy
Z3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9Owog
CkBAIC0xMjM2LDcgKzE2MjYsNyBAQCB0ZW1wbGF0ZTxIU0xGdW5jdGlvbk1vZGUgTW9kZT4gc3Rh
dGljIENvCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWxhdGl2ZUhTTFBhcmFtZXRlcnMoYXJn
cywgY29udGV4dCk7CiAgICAgfQogCi0gICAgYXV0byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNv
bnRleHQpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywg
Y29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAt
MTMxMSwxOSArMTcwMSwxOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRl
cnMoCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdF
LCBvcmlnaW5Db2xvckFzSFdCLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1
ZSA9IGNvbnN1bWVIdWVPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRvIGh1ZSA9
IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3Ms
IHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudE9ySWRlbnQoYXJn
cywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gd2hpdGVuZXNzID0gY29uc3VtZVBlcmNlbnRBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghd2hpdGVu
ZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBibGFja25lc3MgPSBjb25zdW1l
UGVyY2VudE9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gYmxhY2tuZXNzID0g
Y29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUp
OwogICAgIGlmICghYmxhY2tuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBh
bHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhT3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7Cisg
ICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xMzQ4LDcgKzE3MzgsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJhbWV0
ZXJzKENTU1BhcnNlCiAgICAgaWYgKGNvbnRleHQucmVsYXRpdmVDb2xvclN5bnRheEVuYWJsZWQg
JiYgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUZyb20pCiAgICAgICAgIHJldHVybiBwYXJz
ZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhhcmdzLCBjb250ZXh0KTsKIAotICAgIGF1dG8gaHVlID0g
Y29uc3VtZUh1ZShhcmdzLCBjb250ZXh0KTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZVJh
d09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKQEAgLTEzOTEsMTkgKzE3ODEsMTkgQEAgc3RhdGljIENvbG9yIHBhcnNl
UmVsYXRpdmVMYWJQYXJhbWV0ZXJzKAogICAgICAgICB7IENTU1ZhbHVlQWxwaGEsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xhYi5hbHBoYSAqIDEwMC4wIH0KICAg
ICB9OwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudE9ySWRlbnQoYXJncywg
c3ltYm9sVGFibGUpOworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRBbGxvd2lu
Z1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghbGlnaHRuZXNz
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVy
T3JJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CisgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVt
YmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAo
IWFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYlZhbHVlID0gY29uc3Vt
ZU51bWJlck9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOworICAgIGF1dG8gYlZhbHVlID0gY29u
c3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7CiAg
ICAgaWYgKCFiVmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0g
Y29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRv
IGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJn
cywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAK
QEAgLTE0NjksMTkgKzE4NTksMTkgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJh
bWV0ZXJzKAogICAgICAgICB7IENTU1ZhbHVlQWxwaGEsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5hbHBoYSAqIDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0
byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudE9ySWRlbnQoYXJncywgc3ltYm9sVGFibGUpOwor
ICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQoYXJncywgc3ltYm9sVGFibGUpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVyT3JJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSk7CisgICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVyQWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKICAgICBpZiAoIWNocm9tYSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gaHVlID0gY29uc3VtZUh1ZU9ySWRlbnQoYXJncywg
c3ltYm9sVGFibGUpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7
CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0g
Y29uc3VtZU9wdGlvbmFsQWxwaGFPcklkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsKKyAgICBhdXRv
IGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJn
cywgc3ltYm9sVGFibGUpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAK
QEAgLTE1MTUsNyArMTkwNSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NT
UGFyc2UKICAgICBpZiAoIWNocm9tYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8g
aHVlID0gY29uc3VtZUh1ZShhcmdzLCBjb250ZXh0KTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVB
bmdsZVJhd09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE1NDUsNyArMTkzNSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RhdGljIENvbG8KIAogICAgIGRvdWJsZSBjaGFubmVsc1szXSA9IHsg
MCwgMCwgMCB9OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGF1
dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwor
ICAgICAgICBhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEw
MFJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjaGFubmVsc1tpXSA9ICp2YWx1ZTsKQEAgLTIwNzIsMTEgKzI0NjIsMTEgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQwogICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNvbG9yKTsKIH0KIAotc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRp
b25Db21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKICAgICBpZiAocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBJZGVudFRva2VuKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1Zh
bHVlTGVmdCwgQ1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tLCBDU1NWYWx1ZVJpZ2h0LCBDU1NW
YWx1ZUNlbnRlcj4ocmFuZ2UpOwotICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJh
bmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzKTsKKyAgICByZXR1
cm4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6
QWxsLCB1bml0bGVzcyk7CiB9CiAKIHN0YXRpYyBib29sIGlzSG9yaXpvbnRhbFBvc2l0aW9uS2V5
d29yZE9ubHkoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQpAQCAtMjIyNSwyMSArMjYx
NSwyMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzCiAKIC8vIEZJ
WE1FOiBUaGlzIG1heSBjb25zdW1lIGZyb20gdGhlIHJhbmdlIHVwb24gZmFpbHVyZS4gVGhlIGJh
Y2tncm91bmQKIC8vIHNob3J0aGFuZCB3b3JrcyBhcm91bmQgaXQsIGJ1dCB3ZSBzaG91bGQganVz
dCBmaXggaXQgaGVyZS4KLXN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3Vt
ZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50
YXggcG9zaXRpb25TeW50YXgpCitzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNv
bnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFBvc2l0aW9uU3lu
dGF4IHBvc2l0aW9uU3ludGF4KQogewotICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9u
Q29tcG9uZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1
ZTEgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
KTsKICAgICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
IGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBjc3NQYXJzZXJN
b2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25l
bnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKTsKICAgICBpZiAoIXZhbHVlMikKICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uRnJvbU9uZVZhbHVlKCp2YWx1ZTEpOwogCi0gICAgYXV0byB2YWx1
ZTMgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRs
ZXNzKTsKKyAgICBhdXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MpOwogICAgIGlmICghdmFsdWUzKQogICAgICAgICByZXR1cm4g
cG9zaXRpb25Gcm9tVHdvVmFsdWVzKCp2YWx1ZTEsICp2YWx1ZTIpOwogCi0gICAgYXV0byB2YWx1
ZTQgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHVuaXRs
ZXNzKTsKKyAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MpOwogICAgIAogICAgIHN0ZDo6YXJyYXk8Q1NTUHJpbWl0aXZl
VmFsdWUqLCA1PiB2YWx1ZXMgewogICAgICAgICB2YWx1ZTEuZ2V0KCksCkBAIC0yMjU4LDE5ICsy
NjQ4LDE5IEBAIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3UKICAgICBy
ZXR1cm4gYmFja2dyb3VuZFBvc2l0aW9uRnJvbVRocmVlVmFsdWVzKHZhbHVlcyk7CiB9CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4KQorUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50
YXggcG9zaXRpb25TeW50YXgpCiB7Ci0gICAgaWYgKGF1dG8gY29vcmRpbmF0ZXMgPSBjb25zdW1l
UG9zaXRpb25Db29yZGluYXRlcyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3MsIHBvc2l0
aW9uU3ludGF4KSkKKyAgICBpZiAoYXV0byBjb29yZGluYXRlcyA9IGNvbnN1bWVQb3NpdGlvbkNv
b3JkaW5hdGVzKHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgcG9zaXRpb25TeW50YXgpKQog
ICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzSW50ZXJuYWw6OmNyZWF0ZVBy
aW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKGNvb3JkaW5hdGVzLT54KSwgV1RGTW92ZShjb29yZGlu
YXRlcy0+eSkpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBvc2l0
aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRl
cz4gY29uc3VtZU9uZU9yVHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVu
aXRsZXNzKQogewotICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJh
bmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTEgPSBjb25zdW1l
UG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKTsKICAgICBpZiAo
IXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBhdXRvIHZhbHVlMiA9
IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdW5pdGxlc3Mp
OworICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcyk7CiAgICAgaWYgKCF2YWx1ZTIpCiAgICAgICAgIHJldHVybiBwb3Np
dGlvbkZyb21PbmVWYWx1ZSgqdmFsdWUxKTsKICAgICByZXR1cm4gcG9zaXRpb25Gcm9tVHdvVmFs
dWVzKCp2YWx1ZTEsICp2YWx1ZTIpOwpAQCAtMjMxNCw3ICsyNzA0LDcgQEAgc3RhdGljIGJvb2wg
Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgICAgICBwb3NpdGlvbiA9IChpZCA9PSBD
U1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGlkID09
IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJP
clBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBjb25z
dW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwogICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwb3NpdGlvbiA9ICp2
YWx1ZTsKQEAgLTI2NjMsNyArMzA1Myw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVDcm9zc0ZhZGUKICAgICBpZiAoIXRvSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVk
aW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IHBlcmNlbnRhZ2UgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3Mp
OworICAgIGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVk
QnkxMDBSYXcoYXJncyk7CiAgICAgaWYgKCFwZXJjZW50YWdlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50YWdlLCAwLCAxKSwgQ1NTVW5p
dFR5cGU6OkNTU19OVU1CRVIpOwpAQCAtMzEwNSw3ICszNDk1LDcgQEAgc3RkOjpvcHRpb25hbDxD
U1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0eQogICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NT
VmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlxdWU+KHJhbmdlKTsKIH0K
IAotc3RkOjpvcHRpb25hbDxGb250U3R5bGVSYXc+IGNvbnN1bWVGb250U3R5bGVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0ZDo6
b3B0aW9uYWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCiB7CiAgICAgYXV0byByZXN1
bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KHJhbmdlKTsKICAgICBpZiAoIXJl
c3VsdCkKQEAgLTMxMTgsMTQgKzM1MDgsMTQgQEAgc3RkOjpvcHRpb25hbDxGb250U3R5bGVSYXc+
IGNvbnN1bWVGb250UwogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCiAgICAgaWYgKCFyYW5n
ZS5hdEVuZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGFuZ2xlIGRvZXMgc3BlY2lmeSB0
aGF0IHVuaXRsZXNzIDAgaXMgYWxsb3dlZCAtIHNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcv
Y3NzLWZvbnRzLTQvI3ZhbGRlZi1mb250LXN0eWxlLW9ibGlxdWUtYW5nbGUKLSAgICAgICAgaWYg
KGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICBp
ZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpKSB7CiAgICAgICAgICAg
ICBpZiAoaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVE
ZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgV1RGTW92ZShhbmdsZSkgfSB9OwogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KICNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGNzc1BhcnNlck1vZGUpOworICAgIFVOVVNFRF9QQVJBTShwYXJzZXJNb2RlKTsKICNl
bmRpZgogICAgIHJldHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBzdGQ6Om51bGxvcHQgfSB9Owog
fQpAQCAtMzE3Nyw3ICszNTY3LDcgQEAgc3RkOjpvcHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFt
aWx5UmF3PgogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGQ6Om9wdGlvbmFsPEZvbnRTaXplUmF3
PiBjb25zdW1lRm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0ZDo6b3B0aW9u
YWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQog
ewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgcmFuZ2Uu
cGVlaygpLmlkKCkgPD0gQ1NTVmFsdWVMYXJnZXIpIHsKICAgICAgICAgaWYgKGF1dG8gaWRlbnQg
PSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQpAQCAtMzE4NSwxMyArMzU3NSwxMyBAQCBzdGQ6Om9w
dGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUsIHVu
aXRsZXNzKSkKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3
KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSwgdW5pdGxlc3MpKQog
ICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CiAKICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
fQogCi1zdGQ6Om9wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitz
dGQ6Om9wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCiB7CiAgICAgaWYg
KHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CiAgICAgICAgIGlmIChhdXRv
IGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKQEAgLTMyMDIsMTMgKzM1OTIsMTMgQEAg
c3RkOjpvcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZQogICAgIGlmIChhdXRvIG51
bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkK
ICAgICAgICAgcmV0dXJuIHsgKm51bWJlciB9OwogCi0gICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJj
ZW50ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFs
dWVSYW5nZTo6Tm9uTmVnYXRpdmUpKQorICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2VudCA9IGNv
bnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2U6Ok5v
bk5lZ2F0aXZlKSkKICAgICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OwogCiAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RkOjpvcHRpb25hbDxGb250UmF3PiBjb25zdW1l
Rm9udFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlKQorc3RkOjpvcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQogewogICAgIC8vIExl
dCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3IgaW5pdGlhbCBzb21ld2hlcmUgaW4g
dGhlIHNob3J0aGFuZC4KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlQ29weSA9IHJhbmdl
OwpAQCAtMzIyMyw3ICszNjEzLDcgQEAgc3RkOjpvcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9u
dFJhdyhDUwogICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBDU1NWYWx1ZUlE
IGlkID0gcmFuZ2UucGVlaygpLmlkKCk7CiAgICAgICAgIGlmICghcmVzdWx0LnN0eWxlKSB7Ci0g
ICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHlsZSA9IGNvbnN1bWVGb250U3R5bGVSYXcocmFuZ2Us
IGNzc1BhcnNlck1vZGUpKSkKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0eWxlID0gY29uc3Vt
ZUZvbnRTdHlsZVJhdyhyYW5nZSwgcGFyc2VyTW9kZSkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghcmVzdWx0LnZhcmlhbnRDYXBzICYmIChpZCA9
PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykpIHsKQEAgLTMyNDcs
NyArMzYzNyw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRSYXcoQ1MKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVz
dF8gY29tZS4KLSAgICBpZiAoYXV0byBzaXplID0gY29uc3VtZUZvbnRTaXplUmF3KHJhbmdlLCBj
c3NQYXJzZXJNb2RlKSkKKyAgICBpZiAoYXV0byBzaXplID0gY29uc3VtZUZvbnRTaXplUmF3KHJh
bmdlLCBwYXJzZXJNb2RlKSkKICAgICAgICAgcmVzdWx0LnNpemUgPSAqc2l6ZTsKICAgICBlbHNl
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0zMjU2LDcgKzM2NDYsNyBAQCBzdGQ6
Om9wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENTCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKICAgICBpZiAoY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpIHsKLSAgICAgICAgaWYgKCEocmVzdWx0LmxpbmVIZWlnaHQgPSBjb25zdW1lTGluZUhlaWdo
dFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpKQorICAgICAgICBpZiAoIShyZXN1bHQubGluZUhl
aWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KHJhbmdlLCBwYXJzZXJNb2RlKSkpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>