<?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>162316</bug_id>
          
          <creation_ts>2016-09-20 13:56:21 -0700</creation_ts>
          <short_desc>The write barrier should be down with TSO</short_desc>
          <delta_ts>2016-09-29 05:45:08 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162342</dependson>
    
    <dependson>162343</dependson>
    
    <dependson>162354</dependson>
    
    <dependson>162417</dependson>
    
    <dependson>162461</dependson>
    
    <dependson>162721</dependson>
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1231848</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-20 13:56:21 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231850</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-20 13:57:24 -0700</bug_when>
    <thetext>It needs an mfence/dmbish.  We can either make this unconditional, if it&apos;s fast enough, or we can do hacks.

I&apos;ll try unconditional first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231862</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-20 14:19:50 -0700</bug_when>
    <thetext>Looks like putting an mfence into the barrier is an enormous slowdown.  We can&apos;t do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232784</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-22 21:25:41 -0700</bug_when>
    <thetext>Here&apos;s what happens if we put the ortop store-load fence before every store barrier.

Biggest slow down on any benchmark: 2x slower on richards
Biggest suite slow down: 12% slower on Octane

It&apos;s awfully tempting to say that the barrier is ortop behind a branch.


Benchmark report for SunSpider, LongSpider, Octane, Kraken, and AsmBench on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r206274)
&quot;Things&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206274)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree                   Things                                      
SunSpider:
   3d-cube                                    4.8347+-0.2649     ?      4.8454+-0.2665        ?
   3d-morph                                   5.0168+-0.4898            4.8785+-0.3135          might be 1.0283x faster
   3d-raytrace                                4.8442+-0.1807     ?      4.9115+-0.2780        ? might be 1.0139x slower
   access-binary-trees                        1.9121+-0.1006     ?      2.0883+-0.0962        ? might be 1.0922x slower
   access-fannkuch                            4.8294+-0.2304            4.7858+-0.0596        
   access-nbody                               2.4893+-0.2680     !      3.4361+-0.0847        ! definitely 1.3804x slower
   access-nsieve                              3.3854+-0.3455            3.1194+-0.1590          might be 1.0853x faster
   bitops-3bit-bits-in-byte                   1.0935+-0.0915     ?      1.1083+-0.0736        ? might be 1.0135x slower
   bitops-bits-in-byte                        2.6328+-0.0724     ?      2.8829+-0.5376        ? might be 1.0950x slower
   bitops-bitwise-and                         2.0046+-0.1978            1.9007+-0.0246          might be 1.0546x faster
   bitops-nsieve-bits                         3.0671+-0.1410     ?      3.1798+-0.3074        ? might be 1.0367x slower
   controlflow-recursive                      2.2067+-0.0854     ?      2.4131+-0.2221        ? might be 1.0935x slower
   crypto-aes                                 4.2751+-0.2712            4.1564+-0.1486          might be 1.0286x faster
   crypto-md5                                 2.5822+-0.0850     ?      2.5839+-0.0848        ?
   crypto-sha1                                2.7965+-0.1831            2.7643+-0.2527          might be 1.0116x faster
   date-format-tofte                          6.7047+-0.4060     !      7.9941+-0.1243        ! definitely 1.1923x slower
   date-format-xparb                          4.5741+-0.2277            4.5505+-0.1035        
   math-cordic                                2.8048+-0.3212            2.7110+-0.0609          might be 1.0346x faster
   math-partial-sums                          3.9242+-0.3053     ?      4.2121+-0.0486        ? might be 1.0734x slower
   math-spectral-norm                         2.0118+-0.1842            1.9723+-0.0992          might be 1.0200x faster
   regexp-dna                                 6.0520+-0.1355     ?      6.3698+-0.2368        ? might be 1.0525x slower
   string-base64                              4.4180+-0.2117     ?      4.6267+-0.1075        ? might be 1.0472x slower
   string-fasta                               5.2382+-0.0949     !      5.6356+-0.1404        ! definitely 1.0759x slower
   string-tagcloud                            8.0541+-0.3432     ?      8.2793+-0.2468        ? might be 1.0280x slower
   string-unpack-code                        17.7172+-0.5782     ?     18.2439+-0.6110        ? might be 1.0297x slower
   string-validate-input                      4.2480+-0.3982     ?      4.4784+-0.0904        ? might be 1.0542x slower

   &lt;arithmetic&gt;                               4.3737+-0.0502     !      4.5434+-0.0438        ! definitely 1.0388x slower

                                                TipOfTree                   Things                                      
LongSpider:
   3d-cube                                  783.7228+-11.7323    !    855.6619+-10.6588       ! definitely 1.0918x slower
   3d-morph                                 568.6765+-11.3501         567.2830+-9.1173        
   3d-raytrace                              450.9052+-10.1626    ?    455.0590+-10.0853       ?
   access-binary-trees                      785.3363+-6.8210     ?    786.5133+-11.4327       ?
   access-fannkuch                          237.3588+-2.6353     ?    242.5754+-15.0498       ? might be 1.0220x slower
   access-nbody                             503.9350+-7.6098          503.7887+-5.6037        
   access-nsieve                            285.1292+-5.5067     ?    287.2666+-4.9013        ?
   bitops-3bit-bits-in-byte                  33.3164+-2.5575           31.4300+-0.5543          might be 1.0600x faster
   bitops-bits-in-byte                       93.4222+-3.6022     ?     95.9135+-5.4419        ? might be 1.0267x slower
   bitops-nsieve-bits                       379.5902+-7.2816          375.7859+-1.9959          might be 1.0101x faster
   controlflow-recursive                    441.9387+-8.8400          441.6835+-13.3431       
   crypto-aes                               528.3320+-9.1814     ?    531.1236+-7.3378        ?
   crypto-md5                               468.6188+-10.8985         466.1707+-7.9897        
   crypto-sha1                              624.2290+-5.5675     ?    638.6044+-10.4121       ? might be 1.0230x slower
   date-format-tofte                        334.0788+-6.0447     !    384.7257+-6.9758        ! definitely 1.1516x slower
   date-format-xparb                        617.1805+-9.4164     ?    653.0618+-32.5480       ? might be 1.0581x slower
   hash-map                                 139.1575+-3.9678     !    152.4310+-4.8154        ! definitely 1.0954x slower
   math-cordic                              452.1195+-9.9727     ?    455.3107+-7.3447        ?
   math-partial-sums                        285.9348+-7.1712     !    301.3704+-5.6017        ! definitely 1.0540x slower
   math-spectral-norm                       521.5851+-9.2105     ?    525.1613+-7.4278        ?
   string-base64                            442.5808+-3.0804          441.8303+-8.4247        
   string-fasta                             339.3115+-5.9100     !    369.7477+-11.3455       ! definitely 1.0897x slower
   string-tagcloud                          162.7723+-1.7795     !    170.8195+-4.0981        ! definitely 1.0494x slower

   &lt;geometric&gt;                              342.9567+-2.4812     !    351.8905+-1.5834        ! definitely 1.0260x slower

                                                TipOfTree                   Things                                      
Octane:
   encrypt                                   0.15084+-0.00551          0.14965+-0.00353       
   decrypt                                   2.72931+-0.03442          2.72685+-0.03630       
   deltablue                        x2       0.12096+-0.00304    !     0.15105+-0.00243       ! definitely 1.2488x slower
   earley                                    0.24457+-0.00166    !     0.26245+-0.00300       ! definitely 1.0731x slower
   boyer                                     4.37421+-0.11332    ?     4.45275+-0.12217       ? might be 1.0180x slower
   navier-stokes                    x2       4.65331+-0.03200    ?     4.68742+-0.08098       ?
   raytrace                         x2       0.67654+-0.00346    !     0.77305+-0.01442       ! definitely 1.1426x slower
   richards                         x2       0.07809+-0.00113    !     0.15307+-0.00258       ! definitely 1.9601x slower
   splay                            x2       0.31960+-0.00431    !     0.43687+-0.00644       ! definitely 1.3669x slower
   regexp                           x2      16.43119+-0.62910    !    18.14595+-0.55471       ! definitely 1.1044x slower
   pdfjs                            x2      39.15434+-0.63255    ?    39.90852+-0.85460       ? might be 1.0193x slower
   mandreel                         x2      40.01166+-0.75115    ?    40.23776+-0.38598       ?
   gbemu                            x2      29.55179+-0.39599    !    31.55389+-0.20267       ! definitely 1.0677x slower
   closure                                   0.47107+-0.00548    ?     0.47698+-0.00745       ? might be 1.0125x slower
   jquery                                    6.45894+-0.07439          6.42631+-0.05643       
   box2d                            x2       8.81335+-0.08313    !     9.69109+-0.06784       ! definitely 1.0996x slower
   zlib                             x2     343.59926+-3.70208        336.96984+-8.18467         might be 1.0197x faster
   typescript                       x2     610.15072+-15.15347   ?   627.17623+-9.47707       ? might be 1.0279x slower

   &lt;geometric&gt;                               4.77782+-0.01863    !     5.34574+-0.02589       ! definitely 1.1189x slower

                                                TipOfTree                   Things                                      
Kraken:
   ai-astar                                   90.767+-3.093      ?      90.862+-1.908         ?
   audio-beat-detection                       35.682+-0.328      ?      37.017+-1.870         ? might be 1.0374x slower
   audio-dft                                  95.836+-3.737             95.506+-3.921         
   audio-fft                                  30.314+-4.939             27.592+-0.170           might be 1.0986x faster
   audio-oscillator                           45.864+-2.911             44.036+-1.469           might be 1.0415x faster
   imaging-darkroom                           57.539+-1.431             57.318+-0.417         
   imaging-desaturate                         41.086+-0.372             40.929+-0.503         
   imaging-gaussian-blur                      57.484+-1.655             56.516+-2.836           might be 1.0171x faster
   json-parse-financial                       31.456+-0.733      ?      32.994+-1.105         ? might be 1.0489x slower
   json-stringify-tinderbox                   20.824+-0.872      ?      21.490+-1.169         ? might be 1.0320x slower
   stanford-crypto-aes                        34.984+-0.470      ?      36.128+-0.847         ? might be 1.0327x slower
   stanford-crypto-ccm                        35.019+-2.087             33.424+-2.722           might be 1.0477x faster
   stanford-crypto-pbkdf2                     89.472+-2.999      ?      90.649+-1.593         ? might be 1.0132x slower
   stanford-crypto-sha256-iterative           29.205+-0.226      ?      30.100+-1.818         ? might be 1.0306x slower

   &lt;arithmetic&gt;                               49.681+-0.293             49.612+-0.273           might be 1.0014x faster

                                                TipOfTree                   Things                                      
AsmBench:
   bigfib.cpp                               412.8313+-2.9297     ?    418.5986+-12.6721       ? might be 1.0140x slower
   cray.c                                   362.4455+-6.5672     ?    363.2441+-5.6846        ?
   dry.c                                    411.2849+-14.0614         400.3989+-12.6636         might be 1.0272x faster
   FloatMM.c                                701.0242+-32.9905         680.5246+-11.4577         might be 1.0301x faster
   gcc-loops.cpp                           3417.7974+-21.9542    ?   3420.8556+-46.6906       ?
   n-body.c                                 763.4065+-10.1276         760.3860+-12.8855       
   Quicksort.c                              376.6666+-6.1638          374.2165+-4.0621        
   stepanov_container.cpp                  3192.4034+-38.6218    ?   3253.7346+-132.5702      ? might be 1.0192x slower
   Towers.c                                 252.7060+-3.2718     ?    255.1564+-2.6056        ?

   &lt;geometric&gt;                              687.1447+-5.3013          685.5014+-3.4682          might be 1.0024x faster

                                                TipOfTree                   Things                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           47.6106+-0.1527     !     49.2801+-0.0711        ! definitely 1.0351x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232886</commentid>
    <comment_count>4</comment_count>
      <attachid>289686</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 09:59:59 -0700</bug_when>
    <thetext>Created attachment 289686
work in progress

I realized that I can be a lot more aggressive about removing barriers.  So I&apos;m wiring this through the compiler now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233040</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 16:38:43 -0700</bug_when>
    <thetext>I&apos;m getting some really interesting data.  Basically, just putting the barrier after the store, so that this:

    o.f = v

gets turned into this:

    o.f = v
    barrier

instead of this:

    barrier
    o.f = v

Right now, we put the barrier before the store.  Putting the barrier after the store appears to be a 10% slow-down on Octane/richards.  This causes a 0.7% slow-down on Octane.  This is an enormous slow-down from what seems like an innocent change, but it was very easy to narrow it down: putting the barriers before the stores and 

On top of this, there is a slow-down from putting in the fence.  Right now this means putting the fence behind a conditional.  So in the end we get:

    o.f = v
    if (marking) fence
    barrier

Putting this conditional fence everywhere causes another 0.9% slow-down.  Together it&apos;s a 1.6% slow-down on Octane.

So, do we really want to do it this way?  Probably not.  We probably want to find some way of doing this that does not result in any Octane slow-down.  One possible approach would be to leave the barrier before the store and force the fast path to fail when marking is enabled, for example by making it be this:

    if o-&gt;cellState &gt; blackThreshold

where blackThreshold is a global variable that the barrier loads from rather than an inline constant.  Then, the slow path would buffer the object.  When we pop objects off the buffer, we can run the full barrier.

But, I think I&apos;ll run some more tests.  It&apos;s worthwhile to get a complete performance picture, in case the other approach starts having problems, and we want to make trade-offs.  Also, I want to get a better understanding of why moving the barrier to after the store makes such a big difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233042</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 16:42:05 -0700</bug_when>
    <thetext>It looks like this performance pathology only shows up in the FTL JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233047</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 16:46:54 -0700</bug_when>
    <thetext>Looks like there are some suspicious issues with register allocation in schedule() in richards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233052</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 16:52:58 -0700</bug_when>
    <thetext>I think I see what is going on!  The store barrier slow path looks like it clobbers the world, so it blocks B3&apos;s load elimination from working right.

That&apos;s actually an easy fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233075</commentid>
    <comment_count>9</comment_count>
      <attachid>289728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-23 17:47:49 -0700</bug_when>
    <thetext>Created attachment 289728
TSO barrier

I fixed one of the perf problems.  Now I need to test all of the things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233129</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-24 10:52:40 -0700</bug_when>
    <thetext>Perf:

Benchmark report for SunSpider, LongSpider, Octane, Kraken, and AsmBench on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r206314)
&quot;Things&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206314)
    export JSC_useConcurrentBarriers=false
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOff&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206314)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOn&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206314)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=true

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation
for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
SunSpider:
   3d-cube                                    4.8855+-0.3437            4.7451+-0.2015     ?      4.7654+-0.0585     ?      5.0327+-0.2626        ? might be 1.0301x slower
   3d-morph                                   4.7341+-0.2022     ?      4.8443+-0.4272     ?      4.8904+-0.2973            4.6849+-0.0377          might be 1.0105x faster
   3d-raytrace                                4.8137+-0.3456     ?      4.9133+-0.3841            4.7564+-0.0779     ?      4.8594+-0.4431        ?
   access-binary-trees                        1.9301+-0.0335            1.9289+-0.0318     ?      2.1017+-0.2853            2.0540+-0.0671        ! definitely 1.0642x slower
   access-fannkuch                            4.7689+-0.0938     ?      5.0267+-0.3571            4.7893+-0.1429            4.7772+-0.0541        ?
   access-nbody                               2.3896+-0.2317     ?      2.5207+-0.5531            2.3719+-0.2189     ?      2.5851+-0.1483        ? might be 1.0818x slower
   access-nsieve                              3.1248+-0.2647     ?      3.2107+-0.1061            3.1423+-0.1661     ?      3.2327+-0.2379        ? might be 1.0345x slower
   bitops-3bit-bits-in-byte                   1.0614+-0.0761     ?      1.0975+-0.0420            1.0621+-0.0598     ?      1.0815+-0.0585        ? might be 1.0190x slower
   bitops-bits-in-byte                        2.6108+-0.0640     ?      2.6396+-0.0615     ?      2.7493+-0.0688            2.7318+-0.0443        ! definitely 1.0463x slower
   bitops-bitwise-and                         1.8669+-0.0144     ?      1.9815+-0.2187            1.9395+-0.0935     ?      1.9695+-0.1221        ? might be 1.0550x slower
   bitops-nsieve-bits                         3.0007+-0.0639     ?      3.0479+-0.1050            2.9696+-0.0364     ?      2.9954+-0.0258        
   controlflow-recursive                      2.2263+-0.0560            2.2260+-0.0224            2.2219+-0.0388     !      2.3564+-0.0475        ! definitely 1.0585x slower
   crypto-aes                                 4.2644+-0.1752            4.1656+-0.0653     ?      4.1970+-0.0317            4.1866+-0.0229          might be 1.0186x faster
   crypto-md5                                 2.6059+-0.0477            2.6038+-0.0802     ?      2.6512+-0.1150     ?      2.8451+-0.3306        ? might be 1.0918x slower
   crypto-sha1                                2.6635+-0.0809     ?      2.7002+-0.0838            2.6753+-0.0384     ?      2.7194+-0.0890        ? might be 1.0210x slower
   date-format-tofte                          6.5990+-0.1135            6.5070+-0.1606     ?      7.1180+-0.6053     !      7.9360+-0.0940        ! definitely 1.2026x slower
   date-format-xparb                          4.3823+-0.0682     ?      4.4602+-0.1820     ?      4.5015+-0.2546     ?      4.5329+-0.0812        ! definitely 1.0344x slower
   math-cordic                                2.6175+-0.0460     ?      2.7590+-0.2880            2.6494+-0.0492     ?      2.8150+-0.2690        ? might be 1.0755x slower
   math-partial-sums                          3.9207+-0.1780            3.7919+-0.0697     ?      3.8057+-0.0458            3.8049+-0.0539          might be 1.0304x faster
   math-spectral-norm                         1.9714+-0.0703            1.9311+-0.0218     ?      1.9405+-0.0335     ?      1.9581+-0.0354        
   regexp-dna                                 6.1188+-0.0952            6.0387+-0.1454     ?      6.5048+-0.6697            6.0741+-0.2002        
   string-base64                              4.3668+-0.0441     ?      4.4353+-0.1003     ?      4.6130+-0.4051     ?      4.6448+-0.0466        ! definitely 1.0637x slower
   string-fasta                               5.3062+-0.1170     ?      5.3205+-0.1398     ?      5.6424+-0.5966            5.6309+-0.0922        ! definitely 1.0612x slower
   string-tagcloud                            7.9797+-0.1514     ?      8.1622+-0.5594            7.9825+-0.1638     ?      8.7412+-0.8858        ? might be 1.0954x slower
   string-unpack-code                        19.2155+-0.8224           18.8134+-1.7017     ?     18.9829+-0.8186           18.5221+-0.5099          might be 1.0374x faster
   string-validate-input                      4.0581+-0.0559     !      4.1686+-0.0525     ?      4.1766+-0.0505     !      4.3840+-0.1073        ! definitely 1.0803x slower

   &lt;arithmetic&gt;                               4.3647+-0.0593     ?      4.3861+-0.1047     ?      4.4308+-0.0941     ?      4.5060+-0.0705        ! definitely 1.0324x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
LongSpider:
   3d-cube                                  790.3628+-14.4636    ?    793.4216+-9.2169          791.1963+-8.9537     !    819.6706+-9.1970        ! definitely 1.0371x slower
   3d-morph                                 560.1136+-2.6505          557.3622+-3.2403     ?    559.6033+-4.2366          556.9900+-2.2083        
   3d-raytrace                              443.4788+-5.0786     ?    445.9079+-3.1484          443.5669+-5.7357          441.3468+-1.9866        
   access-binary-trees                      776.8875+-4.6755          775.5487+-2.5747     ?    782.2760+-4.2171          777.6500+-8.6042        ?
   access-fannkuch                          241.7314+-9.6265     ^    226.0846+-3.6940     ?    233.5190+-12.2351    ?    234.5291+-10.8571         might be 1.0307x faster
   access-nbody                             497.8625+-7.9337          492.4945+-5.1109          491.0199+-1.6968     ?    491.6904+-2.4094          might be 1.0126x faster
   access-nsieve                            275.3899+-8.6057     ?    282.0843+-10.3947         279.8867+-9.4489     ?    280.7753+-7.8075        ? might be 1.0196x slower
   bitops-3bit-bits-in-byte                  31.5917+-0.5577     ?     32.1492+-1.3468           31.7826+-0.4859     ?     32.4253+-1.6604        ? might be 1.0264x slower
   bitops-bits-in-byte                       90.5475+-1.6808     ?     91.0194+-0.6494           90.2509+-0.5593     ?     90.5641+-2.5394        ?
   bitops-nsieve-bits                       373.0286+-7.8153          366.0847+-3.0362     ?    367.7728+-1.9961     ?    372.6866+-8.1861        
   controlflow-recursive                    432.2858+-4.7629     ?    436.5959+-4.9231          434.4041+-2.4137     ?    436.3765+-2.4653        ?
   crypto-aes                               527.0315+-3.5424          526.9155+-5.7155          525.7543+-3.7497     ?    526.3824+-2.8114        
   crypto-md5                               462.0101+-2.3680          461.5408+-3.2257          453.5203+-6.2378     ?    455.1294+-5.8330          might be 1.0151x faster
   crypto-sha1                              619.0815+-3.5727     ?    667.3594+-114.0927        617.0648+-6.5730          612.4217+-3.5069          might be 1.0109x faster
   date-format-tofte                        335.7357+-3.8220     ?    343.8285+-5.4068     ?    346.6802+-29.3892    ?    378.6551+-10.3137       ! definitely 1.1278x slower
   date-format-xparb                        604.3572+-3.2837     ?    615.7940+-15.3735    ?    618.9718+-38.0003    ?    625.1016+-2.5524        ! definitely 1.0343x slower
   hash-map                                 138.0494+-4.4299          134.0581+-3.8635     ?    136.2216+-2.9644     !    145.2815+-4.0119        ? might be 1.0524x slower
   math-cordic                              440.6676+-3.4782     ?    444.4087+-5.2941          442.6868+-5.2303     ?    443.8083+-3.1154        ?
   math-partial-sums                        282.3561+-4.5102     ?    282.8031+-4.0082     ?    283.3629+-3.1374     ?    283.7110+-2.5464        ?
   math-spectral-norm                       518.3130+-4.2663          514.2906+-2.3935     ?    514.5655+-2.4697     ?    514.8337+-2.1327        
   string-base64                            491.0991+-5.6191     ^    475.4124+-2.6904     ?    477.6324+-6.1856          476.0622+-3.8939        ^ definitely 1.0316x faster
   string-fasta                             332.5522+-2.8762          328.0060+-4.0587     ?    331.4103+-3.7413     !    363.7319+-2.8054        ! definitely 1.0938x slower
   string-tagcloud                          163.5163+-2.0491          163.0950+-2.3055     ?    163.6358+-2.4436     ?    167.2279+-2.8409        ? might be 1.0227x slower

   &lt;geometric&gt;                              340.1453+-0.6782          340.0635+-3.1573          339.4599+-1.2458     !    344.6359+-1.8147        ! definitely 1.0132x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Octane:
   encrypt                                   0.14871+-0.00281    ?     0.14898+-0.00394    ?     0.15280+-0.00594          0.14909+-0.00401       ?
   decrypt                                   2.65943+-0.02182          2.65544+-0.01654    ?     2.65951+-0.01500    ?     2.67283+-0.01927       ?
   deltablue                        x2       0.11945+-0.00161               ERROR                0.11842+-0.00251    !     0.13622+-0.00272       ! definitely 1.1404x slower
   earley                                    0.23897+-0.00092    ?     0.23939+-0.00386    ?     0.24030+-0.00175    !     0.26136+-0.00266       ! definitely 1.0937x slower
   boyer                                     4.42934+-0.09664          4.38369+-0.12234    ?     4.44571+-0.10589    ?     4.58476+-0.04672       ! definitely 1.0351x slower
   navier-stokes                    x2       4.62985+-0.04080          4.61322+-0.01365          4.60662+-0.00561    ?     4.60704+-0.05048       
   raytrace                         x2       0.66588+-0.00658    ?     0.66680+-0.00711    ?     0.66809+-0.00307    !     0.69510+-0.00904       ! definitely 1.0439x slower
   richards                         x2       0.07768+-0.00056          0.07736+-0.00135    !     0.08119+-0.00088    !     0.15372+-0.00039       ! definitely 1.9790x slower
   splay                            x2       0.31131+-0.00229          0.30998+-0.00279    ?     0.31254+-0.00342    !     0.39484+-0.00156       ! definitely 1.2683x slower
   regexp                           x2      16.56341+-0.81563    ?    17.68462+-0.36190         17.40606+-0.84950    ?    18.28816+-0.43341       ! definitely 1.1041x slower
   pdfjs                            x2      39.17220+-0.27277         38.63765+-0.46641    ?    38.79572+-0.44520    !    39.94609+-0.26545       ! definitely 1.0198x slower
   mandreel                         x2      39.32074+-0.28400    ?    39.66557+-0.32521         39.48684+-0.28639         39.37410+-0.21706       ?
   gbemu                            x2      28.85909+-0.08143         28.69655+-0.25908    ?    29.16622+-0.30302    ?    32.14633+-2.92521       ! definitely 1.1139x slower
   closure                                   0.46391+-0.00424          0.46188+-0.00404    ?     0.46291+-0.00433    ?     0.46500+-0.00235       ?
   jquery                                    6.33970+-0.04624    ?     6.36350+-0.08610          6.32101+-0.04921    ?     6.35837+-0.04818       ?
   box2d                            x2       8.66160+-0.05203          8.61802+-0.05914    !     8.72656+-0.03259    !     8.96710+-0.03578       ! definitely 1.0353x slower
   zlib                             x2     336.62914+-2.38209    ?   338.11414+-4.19177        335.33173+-11.15128   ?   339.51557+-3.51460       ?
   typescript                       x2     610.39062+-13.85539       608.59302+-9.70143        608.05721+-13.77993   !   635.74292+-10.20850      ! definitely 1.0415x slower

   &lt;geometric&gt;                               4.72171+-0.01352               ERROR                4.75560+-0.01561    !     5.20716+-0.03504       ! definitely 1.1028x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Kraken:
   ai-astar                                   88.745+-0.755             88.128+-1.606      ?      90.754+-4.183             88.752+-1.947         ?
   audio-beat-detection                       35.425+-0.221      ?      35.951+-1.556             35.536+-0.544      ?      35.848+-0.265         ? might be 1.0119x slower
   audio-dft                                  93.684+-1.430      ?      95.182+-2.398             95.145+-1.866             93.880+-1.503         ?
   audio-fft                                  27.499+-0.495      ?      27.692+-1.012             27.321+-0.080             27.295+-0.052         
   audio-oscillator                           43.931+-1.493             43.106+-0.156      ?      43.232+-0.398      ?      43.987+-1.585         ?
   imaging-darkroom                           57.659+-2.017      ?      57.733+-2.253      ?      57.922+-1.756             56.847+-0.177           might be 1.0143x faster
   imaging-desaturate                         41.764+-2.569             40.709+-0.322      ?      40.842+-0.481      ?      41.341+-0.765           might be 1.0102x faster
   imaging-gaussian-blur                      56.245+-1.997      ?      56.403+-1.431      ?      56.644+-3.055      ?      57.091+-2.905         ? might be 1.0150x slower
   json-parse-financial                       31.026+-0.461             30.641+-0.354      ?      31.265+-1.270      ?      34.503+-3.230         ? might be 1.1120x slower
   json-stringify-tinderbox                   20.692+-0.805      ?      21.898+-1.977             21.545+-1.670             21.280+-0.950         ? might be 1.0284x slower
   stanford-crypto-aes                        35.303+-1.064             34.637+-0.380      ?      35.438+-1.000      ?      35.551+-0.240         ?
   stanford-crypto-ccm                        32.985+-0.406      ?      33.687+-1.508             33.332+-2.713      ?      34.518+-4.394         ? might be 1.0465x slower
   stanford-crypto-pbkdf2                     89.313+-1.343      ?      89.358+-2.444      ?      89.626+-3.292             89.037+-1.876         
   stanford-crypto-sha256-iterative           28.878+-0.245      ?      30.131+-2.089             29.116+-0.280      ?      29.451+-0.801         ? might be 1.0198x slower

   &lt;arithmetic&gt;                               48.796+-0.401      ?      48.947+-0.607      ?      49.123+-0.338      ?      49.242+-0.401         ? might be 1.0091x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
AsmBench:
   bigfib.cpp                               407.1147+-5.3258          401.8814+-2.2765     ?    404.9376+-4.0144     ?    407.4121+-4.7777        ?
   cray.c                                   361.7572+-3.7513          359.6945+-3.0764     ?    361.8408+-2.4479          357.4190+-2.2745          might be 1.0121x faster
   dry.c                                    456.1795+-93.4875         404.4752+-11.0078    ?    431.2439+-84.5160         427.5564+-73.1661         might be 1.0669x faster
   FloatMM.c                                702.1463+-40.4966         672.1162+-6.5733     ?    684.6254+-31.0437         684.0195+-32.2109         might be 1.0265x faster
   gcc-loops.cpp                           3350.7568+-10.4230    ?   3369.8304+-17.8820        3346.1816+-10.2480    ?   3353.3887+-12.6830       ?
   n-body.c                                 748.5625+-6.1192     ?    750.1156+-3.8622          746.0982+-4.0725     ?    749.2850+-1.9416        ?
   Quicksort.c                              368.8832+-4.4032     ?    369.6404+-5.3791     ?    372.3699+-3.4186          369.6694+-6.2943        ?
   stepanov_container.cpp                  3122.4003+-27.4178    ?   3150.5615+-50.5682        3142.3111+-26.2512    ?   3150.6047+-29.8139       ?
   Towers.c                                 250.4936+-3.4886     ?    251.6215+-4.0640          248.2078+-1.4313     ?    249.3890+-2.4550        

   &lt;geometric&gt;                              685.9817+-14.9669         675.0062+-3.2894     ?    679.7620+-12.0832         679.2585+-11.6418         might be 1.0099x faster

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                           47.2131+-0.1939                ERROR                47.3805+-0.2497     !     48.5743+-0.2830        ! definitely 1.0288x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233130</commentid>
    <comment_count>11</comment_count>
      <attachid>289747</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-24 10:54:06 -0700</bug_when>
    <thetext>Created attachment 289747
a different approach

I&apos;m trying a different approach, where instead of emitting:

    if (needsFence)
        fence
    if (o-&gt;cellState &lt;= threshold)
        slowPath()

I just do:

    if (o-&gt;cellState &lt;= sneakyThreshold)
        slowPath()

Where sneakyThreshold is a global variable, not a constant.  We can raise it to a tautological level when we need fences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233262</commentid>
    <comment_count>12</comment_count>
      <attachid>289785</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 15:36:50 -0700</bug_when>
    <thetext>Created attachment 289785
possibly cheaper and less wrong TSO barrier

Still testing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233265</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 16:58:01 -0700</bug_when>
    <thetext>OK, got some perf.  I&apos;m testing these configurations:

TipOfTree = tip of tree
Things = all of the changes in this patch, but the JIT uses a store barrier without any TSO fence
FenceBarrierOff = the fence is dynamically turned off but can be turned on in O(1) time.  this is the configuration that code would run in when the concurrent GC is not running.
FenceBarrierOn = the fence is dynamically turned on.  this is the configuration that code would run in when the concurrent GC is running.

Summary of results:

SunSpider: FenceBarrierOff is neutral, FenceBarrierOn is 10.6% slower.
LongSpider: FenceBarrierOff is neutral, FenceBarrierOn is 3.5% slower.
Octane: FenceBarrierOff is maybe 0.43% slower, FenceBarrierOn is 14.7% slower.
Kraken: FenceBarrierOff is maybe 0.7% slower, FenceBarrierOn is 3.1% slower.
AsmBench: FenceBarrierOff is maybe 2% slower, FenceBarrierOn is neutral.

Note that I reran SunSpider separately after at first seeing really strange results.  Here&apos;s all the data.

Benchmark report for SunSpider, LongSpider, Octane, Kraken, and AsmBench on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r206363)
&quot;Things&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=false
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOff&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOn&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=true

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation
for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
SunSpider:
   3d-cube                                    4.6873+-0.2464            4.6723+-0.2168     ?      4.8192+-0.1976     ?      5.1078+-0.1400        ! definitely 1.0897x slower
   3d-morph                                   4.7399+-0.1793            4.7051+-0.1343     ?      4.7362+-0.2140            4.6970+-0.0654        
   3d-raytrace                                4.7384+-0.2259     ?      4.7537+-0.1927     ?      4.7561+-0.1646     ?      4.8793+-0.1036        ? might be 1.0297x slower
   access-binary-trees                        1.9175+-0.0589     ?      1.9902+-0.0583            1.9586+-0.0890     !      2.2765+-0.0678        ! definitely 1.1872x slower
   access-fannkuch                            4.8763+-0.2529            4.8594+-0.3502     ?      4.8758+-0.1839            4.8537+-0.2047        
   access-nbody                               2.3629+-0.0772     ?      2.4242+-0.1369            2.3947+-0.0988     !      3.8912+-0.0881        ! definitely 1.6468x slower
   access-nsieve                              3.3562+-0.3997            3.2106+-0.0809            3.1377+-0.1225     ?      3.1865+-0.1666          might be 1.0532x faster
   bitops-3bit-bits-in-byte                   1.0755+-0.0372            1.0734+-0.0248            1.0601+-0.0196     !      1.1551+-0.0520        ? might be 1.0740x slower
   bitops-bits-in-byte                        2.6095+-0.0462     !      2.7709+-0.0739            2.7496+-0.0328     ?      2.7807+-0.0526        ! definitely 1.0656x slower
   bitops-bitwise-and                         1.8820+-0.0450     ?      2.0783+-0.3709            1.9802+-0.1080     ?      2.0349+-0.1611        ? might be 1.0813x slower
   bitops-nsieve-bits                         2.9371+-0.0603     ?      3.0051+-0.0388     ?      3.2958+-0.4755            3.0335+-0.0485        ? might be 1.0328x slower
   controlflow-recursive                      2.2253+-0.0141     ?      2.2607+-0.0217     ?      2.3227+-0.1296     ?      2.5735+-0.1562        ! definitely 1.1565x slower
   crypto-aes                                 4.1389+-0.0501     ?      4.1825+-0.1189            4.1487+-0.1162     ?      4.3077+-0.0710        ! definitely 1.0408x slower
   crypto-md5                                 2.5885+-0.0409            2.5629+-0.0412     ?      2.8102+-0.4482     ?      2.8254+-0.0653        ! definitely 1.0915x slower
   crypto-sha1                                2.6435+-0.0945     ?      2.7382+-0.2091            2.6968+-0.1981     ?      2.7872+-0.0651        ? might be 1.0544x slower
   date-format-tofte                          6.4510+-0.3090     ?      7.0450+-0.7715            6.8742+-0.5163     !      9.1250+-0.1661        ! definitely 1.4145x slower
   date-format-xparb                          4.3540+-0.1031     ?      4.4781+-0.0952            4.3957+-0.0597     !      4.8894+-0.3077        ! definitely 1.1229x slower
   math-cordic                                2.6507+-0.0538            2.6259+-0.0568     ?      2.6843+-0.1424     ?      2.7441+-0.0910        ? might be 1.0353x slower
   math-partial-sums                          3.9649+-0.2047            3.9623+-0.3220            3.8153+-0.0521     !      4.4985+-0.1553        ! definitely 1.1346x slower
   math-spectral-norm                         1.9359+-0.0580     ?      2.0052+-0.1224            1.9846+-0.0432     ?      2.0085+-0.1015        ? might be 1.0375x slower
   regexp-dna                                 6.2087+-0.1649     ?      6.9290+-0.9818            6.2836+-0.2674     ?      6.3951+-0.5061        ? might be 1.0300x slower
   string-base64                              4.3678+-0.0718     ?      4.6694+-0.3538            4.4497+-0.0878     !      4.9917+-0.1363        ! definitely 1.1428x slower
   string-fasta                               5.2428+-0.0448            5.2300+-0.0742     ?      5.3259+-0.1634     !      5.7222+-0.0634        ! definitely 1.0914x slower
   string-tagcloud                            7.9255+-0.1528     ?      8.2115+-0.5876     ?      8.5007+-0.6124     ?      8.8456+-0.3920        ! definitely 1.1161x slower
   string-unpack-code                        18.2529+-0.5251     ?     18.7590+-0.3757           18.5401+-0.6173     !     20.4280+-0.8089        ! definitely 1.1192x slower
   string-validate-input                      4.1118+-0.1167     ?      4.2775+-0.2347            4.1448+-0.0659     !      4.8023+-0.1121        ! definitely 1.1679x slower

   &lt;arithmetic&gt;                               4.3171+-0.0202     !      4.4415+-0.0572            4.4131+-0.0433     !      4.8016+-0.0313        ! definitely 1.1122x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
LongSpider:
   3d-cube                                  790.8875+-11.1969    ^    772.9956+-5.9998     ?    788.2658+-10.4984    !    853.4161+-12.1295       ! definitely 1.0791x slower
   3d-morph                                 563.8531+-14.6256         556.9321+-4.7208          556.1187+-3.2730          555.9510+-4.1080          might be 1.0142x faster
   3d-raytrace                              443.4629+-4.5655     ?    444.7491+-3.3469          443.6145+-3.6014     !    453.6922+-5.2530        ! definitely 1.0231x slower
   access-binary-trees                      780.3031+-4.2928     ?    783.7270+-15.1960         779.8463+-5.3910     ?    786.0037+-6.8504        ?
   access-fannkuch                          233.6416+-9.2029     ?    239.8330+-14.0239         228.8607+-8.1681     ?    230.9484+-10.9864         might be 1.0117x faster
   access-nbody                             496.3149+-9.3575          496.1256+-7.7534          491.3464+-3.2813     ?    495.5094+-3.6910        
   access-nsieve                            277.9156+-8.0497     ?    289.3253+-9.1517          283.2106+-7.9060          275.9535+-4.6446        
   bitops-3bit-bits-in-byte                  31.2857+-0.7790     ?     31.9063+-1.1519     ?     32.7069+-1.5389           31.7387+-0.6159        ? might be 1.0145x slower
   bitops-bits-in-byte                       90.3698+-1.5036     ?     90.8577+-2.0864     ?     91.5820+-2.8605           90.2810+-1.5695        
   bitops-nsieve-bits                       369.9926+-6.0209          366.3011+-4.9484     ?    371.0743+-3.2820          370.2164+-5.3564        ?
   controlflow-recursive                    433.7122+-3.5714     ?    434.0434+-1.9258     ?    435.1054+-2.1277     ?    435.8985+-2.8466        ?
   crypto-aes                               526.2620+-4.3421          524.7892+-10.0911    ?    526.5247+-2.5579     ?    530.3883+-3.2583        ?
   crypto-md5                               464.9832+-5.9635          458.1338+-6.0737     ?    458.4068+-7.5515     ?    465.0562+-12.3124       ?
   crypto-sha1                              620.5447+-8.6803     ?    621.0418+-12.7585         617.4234+-13.8790         614.0472+-3.1212          might be 1.0106x faster
   date-format-tofte                        325.0318+-3.8549     !    342.0714+-11.5045    ?    342.5265+-9.7111     !    401.3534+-3.3674        ! definitely 1.2348x slower
   date-format-xparb                        602.9838+-6.1904     ?    613.9401+-11.7384         607.4906+-2.4960     !    670.5593+-24.0152       ! definitely 1.1121x slower
   hash-map                                 140.2442+-6.7184          135.1236+-3.7929          134.2746+-3.0869     !    154.9412+-4.6041        ! definitely 1.1048x slower
   math-cordic                              446.4979+-8.5427          438.1545+-2.8312     ?    442.4903+-3.4614     ?    442.9231+-5.5418        
   math-partial-sums                        281.4023+-2.4358     ?    282.8702+-2.4484     ?    283.3649+-2.0861     !    303.6508+-2.9016        ! definitely 1.0791x slower
   math-spectral-norm                       515.4920+-4.0498     ?    519.0566+-6.6786          514.0352+-1.9308     ?    515.4438+-2.4737        
   string-base64                            489.9944+-4.9233     ^    477.8973+-3.2024          474.4139+-2.3064     ?    484.0563+-12.3825         might be 1.0123x faster
   string-fasta                             329.9166+-4.8052     ?    330.5812+-4.9300     ?    332.0518+-3.0716     !    372.3283+-7.4094        ! definitely 1.1286x slower
   string-tagcloud                          162.3110+-3.1199     ?    163.8420+-1.6578          163.6790+-2.7616     !    181.6792+-10.0646       ! definitely 1.1193x slower

   &lt;geometric&gt;                              339.2783+-1.1574     ?    339.9833+-1.1491          339.4282+-1.2724     !    351.1887+-0.7784        ! definitely 1.0351x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Octane:
   encrypt                                   0.15209+-0.00578          0.14743+-0.00282    ?     0.14815+-0.00272    ?     0.14910+-0.00369         might be 1.0200x faster
   decrypt                                   2.66624+-0.01183          2.65886+-0.01637    ?     2.66809+-0.01365    ?     2.68677+-0.01892       ?
   deltablue                        x2       0.11968+-0.00238          0.11904+-0.00267    ?     0.11941+-0.00167    !     0.14205+-0.00093       ! definitely 1.1869x slower
   earley                                    0.23867+-0.00097          0.23807+-0.00244    ?     0.24054+-0.00251    !     0.26432+-0.00188       ! definitely 1.1075x slower
   boyer                                     4.38041+-0.10067    ?     4.40628+-0.14514    ?     4.48629+-0.07904    ?     4.54969+-0.07993       ? might be 1.0386x slower
   navier-stokes                    x2       4.60619+-0.01825    ?     4.61248+-0.03914    ?     4.61372+-0.02039          4.60672+-0.02478       ?
   raytrace                         x2       0.66279+-0.00402          0.66272+-0.00781    ?     0.66651+-0.00862    !     0.70993+-0.00683       ! definitely 1.0711x slower
   richards                         x2       0.07788+-0.00155          0.07699+-0.00094    ?     0.07883+-0.00192    !     0.16022+-0.00095       ! definitely 2.0571x slower
   splay                            x2       0.31497+-0.00953    ?     0.31564+-0.00731          0.31335+-0.01110    !     0.40770+-0.00237       ! definitely 1.2944x slower
   regexp                           x2      16.44196+-0.84384    ?    16.84465+-0.81112         16.63412+-1.07471    !    22.06028+-0.20795       ! definitely 1.3417x slower
   pdfjs                            x2      38.99352+-0.45848         38.65428+-0.61341    ?    39.13356+-0.25845    !    40.73753+-0.33209       ! definitely 1.0447x slower
   mandreel                         x2      39.76992+-0.30873         39.57649+-0.49918         39.54078+-0.20670    ?    39.74957+-0.35685       
   gbemu                            x2      28.83507+-0.18851    ?    29.24355+-0.51371         28.96884+-0.13519    !    34.58463+-0.25396       ! definitely 1.1994x slower
   closure                                   0.46649+-0.00371    ?     0.46776+-0.00425          0.46674+-0.00259    !     0.47910+-0.00387       ! definitely 1.0270x slower
   jquery                                    6.39595+-0.03250          6.39522+-0.03984    ?     6.40099+-0.05028    ?     6.46304+-0.04862       ? might be 1.0105x slower
   box2d                            x2       8.82091+-0.30222          8.72143+-0.09720    ?     8.82028+-0.10147    !     9.90167+-0.05397       ! definitely 1.1225x slower
   zlib                             x2     335.06905+-9.72222    ?   335.59928+-11.71526   ?   340.75012+-3.20133        339.90800+-3.43031       ? might be 1.0144x slower
   typescript                       x2     598.06108+-18.86401   ?   606.66683+-4.50645    ?   609.35295+-9.43489    !   661.13749+-12.64584      ! definitely 1.1055x slower

   &lt;geometric&gt;                               4.72498+-0.03139    ?     4.72573+-0.03047    ?     4.74564+-0.02170    !     5.41825+-0.01486       ! definitely 1.1467x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Kraken:
   ai-astar                                   88.782+-2.703      ?      90.374+-4.480             89.317+-1.380             89.230+-1.301         ?
   audio-beat-detection                       35.735+-0.641      ?      36.148+-1.872             35.479+-0.298      !      35.973+-0.185         ?
   audio-dft                                  94.264+-1.122      ?      96.113+-3.379             93.799+-1.145      ?      96.438+-2.629         ? might be 1.0231x slower
   audio-fft                                  27.350+-0.079      ?      27.380+-0.078      ?      27.826+-1.384             27.361+-0.065         ?
   audio-oscillator                           44.081+-1.633             43.626+-0.269      ?      43.694+-0.863             43.495+-0.584           might be 1.0135x faster
   imaging-darkroom                           56.776+-0.209             56.742+-0.115      ?      57.027+-0.822      ?      58.320+-2.634         ? might be 1.0272x slower
   imaging-desaturate                         41.200+-0.607             40.952+-0.514      ?      44.124+-3.302             41.717+-1.615         ? might be 1.0126x slower
   imaging-gaussian-blur                      55.944+-1.432      ?      56.385+-2.696      ?      57.228+-2.885             57.151+-0.780         ? might be 1.0216x slower
   json-parse-financial                       31.049+-0.741      ?      32.910+-1.712             31.516+-0.293      !      38.881+-0.168         ! definitely 1.2522x slower
   json-stringify-tinderbox                   21.655+-1.634      ?      22.725+-2.107             21.565+-1.798      ?      22.370+-2.113         ? might be 1.0330x slower
   stanford-crypto-aes                        34.807+-0.334             34.550+-0.242      ?      35.120+-0.539      !      37.516+-0.371         ! definitely 1.0778x slower
   stanford-crypto-ccm                        32.937+-0.826             32.452+-1.573      ?      33.040+-2.156      ?      34.621+-2.412         ? might be 1.0512x slower
   stanford-crypto-pbkdf2                     88.481+-1.268      ?      89.278+-1.636             88.951+-1.689      ?      91.512+-1.811         ? might be 1.0343x slower
   stanford-crypto-sha256-iterative           29.815+-2.254             29.390+-0.443             29.191+-0.386      ?      29.367+-0.308           might be 1.0153x faster

   &lt;arithmetic&gt;                               48.777+-0.489      ?      49.216+-0.809             49.134+-0.225      !      50.282+-0.259         ! definitely 1.0309x slower

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
AsmBench:
   bigfib.cpp                               405.6804+-2.9668     ?    408.3448+-7.4028          408.0582+-7.0837          404.1593+-1.2290        
   cray.c                                   359.2984+-1.4593     ?    360.3912+-4.6435     ?    361.3141+-4.2090          360.1034+-2.2630        ?
   dry.c                                    429.1470+-73.7268         423.8395+-61.3341    ?    492.2854+-108.5908        399.6511+-8.6202          might be 1.0738x faster
   FloatMM.c                                666.9849+-26.2727    ?    706.7268+-46.6179         689.2771+-33.2839         686.3002+-30.3009       ? might be 1.0290x slower
   gcc-loops.cpp                           3356.6525+-9.4942     ?   3369.9730+-11.1756        3362.1044+-8.2965         3359.0931+-15.4549       ?
   n-body.c                                 748.1152+-5.8446     ?    749.5008+-4.2718     ?    749.9667+-7.4312     ?    750.1257+-1.8834        ?
   Quicksort.c                              370.8504+-4.4654     ?    373.2508+-3.5937     ?    375.8099+-5.5369          375.5684+-6.9777        ? might be 1.0127x slower
   stepanov_container.cpp                  3124.3299+-15.4316    ?   3131.8535+-16.2223    ?   3135.3221+-13.0599    ?   3163.1947+-26.3912       ? might be 1.0124x slower
   Towers.c                                 248.8219+-2.2847     ?    251.0608+-4.2427          250.3250+-3.9612     ?    250.6464+-2.3194        ?

   &lt;geometric&gt;                              677.1430+-13.1909    ?    683.2071+-14.3882    ?    692.3095+-15.5077         677.1201+-4.4223          might be 1.0000x faster

                                                TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                           46.9670+-0.1595     !     47.4242+-0.2858     ?     47.4981+-0.2041     !     49.9539+-0.1350        ! definitely 1.0636x slower

Benchmark report for SunSpider on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r206363)
&quot;Things&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=false
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOff&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=false
&quot;FenceBarrierOn&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r206363)
    export JSC_useConcurrentBarriers=true
    export JSC_forceFencedBarrier=true

Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration
per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95%
confidence intervals in milliseconds.

                                  TipOfTree                   Things               FenceBarrierOff            FenceBarrierOn        FenceBarrierOn v. TipOfTree

3d-cube                         4.7798+-0.0733            4.7731+-0.0776     ?      4.7969+-0.0682     !      5.1575+-0.0735        ! definitely 1.0790x slower
3d-morph                        4.9877+-0.1557            4.8620+-0.0797            4.8079+-0.0678     ?      4.8669+-0.0731          might be 1.0248x faster
3d-raytrace                     4.7818+-0.0820     ?      4.8683+-0.1002            4.7576+-0.0745     !      5.1002+-0.1022        ! definitely 1.0666x slower
access-binary-trees             2.0373+-0.0690            2.0250+-0.0641     ?      2.0319+-0.0647     !      2.3336+-0.0758        ! definitely 1.1454x slower
access-fannkuch                 5.0868+-0.0936            5.0123+-0.0779     ?      5.0268+-0.0929     ?      5.1237+-0.0872        ?
access-nbody                    2.4235+-0.0530            2.4070+-0.0554     ?      2.4074+-0.0393     !      4.0332+-0.0752        ! definitely 1.6642x slower
access-nsieve                   3.3544+-0.1123            3.2524+-0.0728     ?      3.2646+-0.0741     ?      3.2886+-0.0592          might be 1.0200x faster
bitops-3bit-bits-in-byte        1.1191+-0.0478            1.0958+-0.0320            1.0884+-0.0286     !      1.1667+-0.0302        ? might be 1.0426x slower
bitops-bits-in-byte             2.6866+-0.0639     !      2.8382+-0.0810            2.8290+-0.0718     ?      2.8594+-0.0656        ! definitely 1.0643x slower
bitops-bitwise-and              2.0123+-0.0615     ?      2.0130+-0.0460     ?      2.0272+-0.0553     ?      2.0289+-0.0352        ?
bitops-nsieve-bits              3.0680+-0.0560     ?      3.1273+-0.0764            3.0812+-0.0607     !      3.2384+-0.0794        ! definitely 1.0555x slower
controlflow-recursive           2.3504+-0.0681            2.3493+-0.0660            2.2999+-0.0489     !      2.5551+-0.0394        ! definitely 1.0871x slower
crypto-aes                      4.2491+-0.0804     ?      4.3124+-0.1037            4.3036+-0.0704     !      4.4892+-0.1032        ! definitely 1.0565x slower
crypto-md5                      2.6509+-0.0573     ?      2.6630+-0.0657     ?      2.6635+-0.0614     !      2.9365+-0.0844        ! definitely 1.1077x slower
crypto-sha1                     2.7601+-0.0670            2.6642+-0.0375     ?      2.7612+-0.0703     ?      2.8800+-0.0746        ? might be 1.0434x slower
date-format-tofte               6.5826+-0.1182     ?      6.7540+-0.1027            6.6871+-0.0935     !      9.3928+-0.1566        ! definitely 1.4269x slower
date-format-xparb               4.4663+-0.0830     ?      4.4911+-0.0612            4.4730+-0.0506     !      4.9996+-0.0873        ! definitely 1.1194x slower
math-cordic                     2.6905+-0.0409     ?      2.7427+-0.0657            2.7222+-0.0514     ?      2.7710+-0.0406        ? might be 1.0299x slower
math-partial-sums               4.0119+-0.0692            3.9269+-0.0461     ?      4.0258+-0.0746     !      4.6097+-0.0818        ! definitely 1.1490x slower
math-spectral-norm              1.9718+-0.0325     ?      2.0352+-0.0585     ?      2.0393+-0.0652            2.0289+-0.0404        ? might be 1.0289x slower
regexp-dna                      6.3970+-0.1175            6.3011+-0.0780     ?      6.3835+-0.1095     ?      6.4992+-0.1180        ? might be 1.0160x slower
string-base64                   4.4889+-0.0816     ?      4.5403+-0.0753     ?      4.5546+-0.0830     !      5.1134+-0.0853        ! definitely 1.1391x slower
string-fasta                    5.4806+-0.0922            5.4062+-0.1009     ?      5.4205+-0.0723     !      5.8931+-0.0713        ! definitely 1.0752x slower
string-tagcloud                 8.2230+-0.0988     ?      8.2351+-0.0956            8.2001+-0.0865     !      9.0668+-0.1247        ! definitely 1.1026x slower
string-unpack-code             18.1459+-0.1789     ?     18.2796+-0.2175           18.2104+-0.1930     !     19.8778+-0.2530        ! definitely 1.0954x slower
string-validate-input           4.2079+-0.0748     ?      4.2927+-0.0884            4.2476+-0.0599     !      4.8576+-0.0471        ! definitely 1.1544x slower

&lt;arithmetic&gt;                    4.4236+-0.0190     ?      4.4334+-0.0149            4.4273+-0.0162     !      4.8911+-0.0188        ! definitely 1.1057x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233267</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 17:00:32 -0700</bug_when>
    <thetext>*** Bug 162318 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233268</commentid>
    <comment_count>15</comment_count>
      <attachid>289786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 17:17:07 -0700</bug_when>
    <thetext>Created attachment 289786
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233269</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 17:19:49 -0700</bug_when>
    <thetext>Attachment 289786 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:128:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233270</commentid>
    <comment_count>17</comment_count>
      <attachid>289786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 17:20:50 -0700</bug_when>
    <thetext>Comment on attachment 289786
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:43
&gt; +        store-load fence on any kind before store barriers, because that causes enormous slow

*of any kind

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.h:87
&gt; +// FIXME: If we sink barriers, we need to make sure that we execute barriers upon OSR exit.

I fixed this with the mayExit thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233271</commentid>
    <comment_count>18</comment_count>
      <attachid>289787</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 17:22:23 -0700</bug_when>
    <thetext>Created attachment 289787
the patch

Fixes some build issues and small goofs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233272</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 17:25:05 -0700</bug_when>
    <thetext>Attachment 289787 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:128:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233274</commentid>
    <comment_count>20</comment_count>
      <attachid>289788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 17:31:26 -0700</bug_when>
    <thetext>Created attachment 289788
the patch

More build fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233276</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 17:34:13 -0700</bug_when>
    <thetext>Attachment 289788 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:128:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233287</commentid>
    <comment_count>22</comment_count>
      <attachid>289789</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 18:06:46 -0700</bug_when>
    <thetext>Created attachment 289789
the patch

Turns out that all of my ARM assembler changes were not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233288</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 18:08:03 -0700</bug_when>
    <thetext>Attachment 289789 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:128:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 46 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233289</commentid>
    <comment_count>24</comment_count>
      <attachid>289790</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 18:11:48 -0700</bug_when>
    <thetext>Created attachment 289790
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233290</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 18:13:06 -0700</bug_when>
    <thetext>Attachment 289790 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:128:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 46 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233295</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 19:13:57 -0700</bug_when>
    <thetext>This looks like a 0.7% slow-down on JetStream with 91% confidence. I think I know why, so I&apos;m going to try things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233313</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 22:30:48 -0700</bug_when>
    <thetext>It looks like a 0.68% slow-down on JetStream 90.4% confidence.  I analyzed the per-benchmark data and found that the following benchmarks are regressed:

- richards, by about 4%
- deltablue, by about 3%
- splay, by about 2%
- regexp-2010, by about 5%

Out of these, the regexp regression seems the most pronounced.  Also, it&apos;s the only one confirmed by run-jsc-benchmarks.

If the other benchmarks become bottlenecks them I&apos;m starting to think that maybe for super hot code, we should emit a patchable nop sled for a fence, and then blast over it with fences at the start of GC and then reset it back at the end.  This would lead to amazing perf, provided that we could zap those fences quickly enough.

So, how quickly can we modify such code?  I&apos;ll look into all of that after I fix regexp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233316</commentid>
    <comment_count>28</comment_count>
      <attachid>289799</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 22:54:28 -0700</bug_when>
    <thetext>Created attachment 289799
the patch

The JetStream regression is small, but I&apos;m making it smaller!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233317</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-25 22:57:21 -0700</bug_when>
    <thetext>Attachment 289799 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233319</commentid>
    <comment_count>30</comment_count>
      <attachid>289800</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-25 23:57:52 -0700</bug_when>
    <thetext>Created attachment 289800
trying to get around the regexp regression

I&apos;m still trying to figure out how best to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233521</commentid>
    <comment_count>31</comment_count>
      <attachid>289846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-26 12:37:55 -0700</bug_when>
    <thetext>Created attachment 289846
the patch

More performant version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233524</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-26 12:39:40 -0700</bug_when>
    <thetext>Attachment 289846 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 61 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233526</commentid>
    <comment_count>33</comment_count>
      <attachid>289847</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-26 12:49:56 -0700</bug_when>
    <thetext>Created attachment 289847
the patch

Fixing debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233527</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-26 12:51:15 -0700</bug_when>
    <thetext>Attachment 289847 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 61 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233577</commentid>
    <comment_count>35</comment_count>
      <attachid>289869</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-26 14:27:19 -0700</bug_when>
    <thetext>Created attachment 289869
the patch

Attempting to fix Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233578</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-26 14:28:43 -0700</bug_when>
    <thetext>Attachment 289869 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 61 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233590</commentid>
    <comment_count>37</comment_count>
      <attachid>289875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-26 14:45:30 -0700</bug_when>
    <thetext>Created attachment 289875
the patch

trying to get windows to work again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233593</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-26 14:48:39 -0700</bug_when>
    <thetext>Attachment 289875 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 61 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233601</commentid>
    <comment_count>39</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-26 14:59:36 -0700</bug_when>
    <thetext>r=me

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:8321
&gt; +            m_jit.sneakyJumpIfIsRememberedOrInEden(baseGPR, scratch1GPR));

I&apos;m not sure I like the trend of labeling concurrent algorithms &quot;sneaky&quot; or &quot;magic&quot;. Usually, algorithms do something explainable, and we should strive to explain them.

How about &quot;jumpIfIsRememberedOrInEdenOrMightNeedFence&quot;?

Or &quot;jumpIfBelowBlackThreshold&quot;. (That&apos;s what we call this concept in C++.)

Or &quot;jumpIfNotCollectingAndIsRememberedOrInEden&quot;.

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:96
&gt; +            // requirement by either (1) having a StoreBarrierHint that tells OSR exit to OSR that

to barrier that value?

&gt; Source/JavaScriptCore/heap/CellState.h:58
&gt; +inline bool isWithinThreshold(CellState cellState, unsigned threshold)

Maybe isBelowThreshold?

&gt; Source/JavaScriptCore/heap/DeferralContext.h:33
&gt; +class DeferralContext {

How about GCDeferralContext or DeferGCContext (to match DeferGC)?

&gt; Source/JavaScriptCore/heap/Heap.cpp:1555
&gt; +        // In this case, the sneakyBlackThreshold is tautological impossible threshold, so from

is a

I think you meant that the sneakyBlackThreshold *could be* the tautological threshold -- not that it is guaranteed to be.

&gt; Source/JavaScriptCore/heap/Heap.h:269
&gt; +    unsigned sneakyBlackThreshold() const { return m_sneakyBlackThreshold; }
&gt; +    const unsigned* addressOfSneakyBlackThreshold() const { return &amp;m_sneakyBlackThreshold; }

Let&apos;s just call this blackThreshold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233602</commentid>
    <comment_count>40</comment_count>
      <attachid>289875</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-26 14:59:49 -0700</bug_when>
    <thetext>Comment on attachment 289875
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233609</commentid>
    <comment_count>41</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-26 15:13:11 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:8321
&gt; &gt; +            m_jit.sneakyJumpIfIsRememberedOrInEden(baseGPR, scratch1GPR));
&gt; 
&gt; I&apos;m not sure I like the trend of labeling concurrent algorithms &quot;sneaky&quot; or
&gt; &quot;magic&quot;. Usually, algorithms do something explainable, and we should strive
&gt; to explain them.
&gt; 
&gt; How about &quot;jumpIfIsRememberedOrInEdenOrMightNeedFence&quot;?
&gt; 
&gt; Or &quot;jumpIfBelowBlackThreshold&quot;. (That&apos;s what we call this concept in C++.)
&gt; 
&gt; Or &quot;jumpIfNotCollectingAndIsRememberedOrInEden&quot;.

Those names have so many words!

How about I use these names:

sneakyJumpIfIsRememberedOrInEden -&gt; barrierJump
jumpIfIsRememberedOrInEden -&gt; barrierJumpWithFence
jumpIfIsRememberedOrInEdenWithoutFence -&gt; barrierJumpWithoutFence

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:96
&gt; &gt; +            // requirement by either (1) having a StoreBarrierHint that tells OSR exit to OSR that
&gt; 
&gt; to barrier that value?

Yes.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CellState.h:58
&gt; &gt; +inline bool isWithinThreshold(CellState cellState, unsigned threshold)
&gt; 
&gt; Maybe isBelowThreshold?

But it&apos;s not below threshold.  Below means &quot;&lt;&quot;.  It&apos;s below or equal to the threshold.  Rather than using BelowOrEqual, I thought &quot;Within&quot; was shorter.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/DeferralContext.h:33
&gt; &gt; +class DeferralContext {
&gt; 
&gt; How about GCDeferralContext or DeferGCContext (to match DeferGC)?

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:1555
&gt; &gt; +        // In this case, the sneakyBlackThreshold is tautological impossible threshold, so from
&gt; 
&gt; is a
&gt; 
&gt; I think you meant that the sneakyBlackThreshold *could be* the tautological
&gt; threshold -- not that it is guaranteed to be.

It is guaranteed to be if barrierShouldBeFenced() is true, which is the condition that guards this comment.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.h:269
&gt; &gt; +    unsigned sneakyBlackThreshold() const { return m_sneakyBlackThreshold; }
&gt; &gt; +    const unsigned* addressOfSneakyBlackThreshold() const { return &amp;m_sneakyBlackThreshold; }
&gt; 
&gt; Let&apos;s just call this blackThreshold.

I don&apos;t think that really captures it.  This threshold isn&apos;t really to do with being black, it&apos;s to do with taking the barrier slow path.  I&apos;ll call it barrierThreshold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233613</commentid>
    <comment_count>42</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-26 15:21:49 -0700</bug_when>
    <thetext>&gt; &gt; How about &quot;jumpIfIsRememberedOrInEdenOrMightNeedFence&quot;?
&gt; &gt; 
&gt; &gt; Or &quot;jumpIfBelowBlackThreshold&quot;. (That&apos;s what we call this concept in C++.)
&gt; &gt; 
&gt; &gt; Or &quot;jumpIfNotCollectingAndIsRememberedOrInEden&quot;.
&gt; 
&gt; Those names have so many words!
&gt; 
&gt; How about I use these names:
&gt; 
&gt; sneakyJumpIfIsRememberedOrInEden -&gt; barrierJump
&gt; jumpIfIsRememberedOrInEden -&gt; barrierJumpWithFence
&gt; jumpIfIsRememberedOrInEdenWithoutFence -&gt; barrierJumpWithoutFence

Yeah, that sounds pretty good.

&gt; &gt; &gt; Source/JavaScriptCore/heap/CellState.h:58
&gt; &gt; &gt; +inline bool isWithinThreshold(CellState cellState, unsigned threshold)
&gt; &gt; 
&gt; &gt; Maybe isBelowThreshold?
&gt; 
&gt; But it&apos;s not below threshold.  Below means &quot;&lt;&quot;.  It&apos;s below or equal to the
&gt; threshold.  Rather than using BelowOrEqual, I thought &quot;Within&quot; was shorter.

OK.

&gt; &gt; I think you meant that the sneakyBlackThreshold *could be* the tautological
&gt; &gt; threshold -- not that it is guaranteed to be.
&gt; 
&gt; It is guaranteed to be if barrierShouldBeFenced() is true, which is the
&gt; condition that guards this comment.

OK.

&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.h:269
&gt; &gt; &gt; +    unsigned sneakyBlackThreshold() const { return m_sneakyBlackThreshold; }
&gt; &gt; &gt; +    const unsigned* addressOfSneakyBlackThreshold() const { return &amp;m_sneakyBlackThreshold; }
&gt; &gt; 
&gt; &gt; Let&apos;s just call this blackThreshold.
&gt; 
&gt; I don&apos;t think that really captures it.  This threshold isn&apos;t really to do
&gt; with being black, it&apos;s to do with taking the barrier slow path.  I&apos;ll call
&gt; it barrierThreshold.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234018</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-27 12:33:36 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #39)
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:8321
&gt; &gt; &gt; +            m_jit.sneakyJumpIfIsRememberedOrInEden(baseGPR, scratch1GPR));
&gt; &gt; 
&gt; &gt; I&apos;m not sure I like the trend of labeling concurrent algorithms &quot;sneaky&quot; or
&gt; &gt; &quot;magic&quot;. Usually, algorithms do something explainable, and we should strive
&gt; &gt; to explain them.
&gt; &gt; 
&gt; &gt; How about &quot;jumpIfIsRememberedOrInEdenOrMightNeedFence&quot;?
&gt; &gt; 
&gt; &gt; Or &quot;jumpIfBelowBlackThreshold&quot;. (That&apos;s what we call this concept in C++.)
&gt; &gt; 
&gt; &gt; Or &quot;jumpIfNotCollectingAndIsRememberedOrInEden&quot;.
&gt; 
&gt; Those names have so many words!
&gt; 
&gt; How about I use these names:
&gt; 
&gt; sneakyJumpIfIsRememberedOrInEden -&gt; barrierJump
&gt; jumpIfIsRememberedOrInEden -&gt; barrierJumpWithFence
&gt; jumpIfIsRememberedOrInEdenWithoutFence -&gt; barrierJumpWithoutFence

I ended up removing barrierJumpWithFence.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:96
&gt; &gt; &gt; +            // requirement by either (1) having a StoreBarrierHint that tells OSR exit to OSR that
&gt; &gt; 
&gt; &gt; to barrier that value?
&gt; 
&gt; Yes.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/CellState.h:58
&gt; &gt; &gt; +inline bool isWithinThreshold(CellState cellState, unsigned threshold)
&gt; &gt; 
&gt; &gt; Maybe isBelowThreshold?
&gt; 
&gt; But it&apos;s not below threshold.  Below means &quot;&lt;&quot;.  It&apos;s below or equal to the
&gt; threshold.  Rather than using BelowOrEqual, I thought &quot;Within&quot; was shorter.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/DeferralContext.h:33
&gt; &gt; &gt; +class DeferralContext {
&gt; &gt; 
&gt; &gt; How about GCDeferralContext or DeferGCContext (to match DeferGC)?
&gt; 
&gt; OK.

Fixed.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:1555
&gt; &gt; &gt; +        // In this case, the sneakyBlackThreshold is tautological impossible threshold, so from
&gt; &gt; 
&gt; &gt; is a
&gt; &gt; 
&gt; &gt; I think you meant that the sneakyBlackThreshold *could be* the tautological
&gt; &gt; threshold -- not that it is guaranteed to be.
&gt; 
&gt; It is guaranteed to be if barrierShouldBeFenced() is true, which is the
&gt; condition that guards this comment.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.h:269
&gt; &gt; &gt; +    unsigned sneakyBlackThreshold() const { return m_sneakyBlackThreshold; }
&gt; &gt; &gt; +    const unsigned* addressOfSneakyBlackThreshold() const { return &amp;m_sneakyBlackThreshold; }
&gt; &gt; 
&gt; &gt; Let&apos;s just call this blackThreshold.
&gt; 
&gt; I don&apos;t think that really captures it.  This threshold isn&apos;t really to do
&gt; with being black, it&apos;s to do with taking the barrier slow path.  I&apos;ll call
&gt; it barrierThreshold.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234021</commentid>
    <comment_count>44</comment_count>
      <attachid>289998</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-27 12:39:01 -0700</bug_when>
    <thetext>Created attachment 289998
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234025</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-27 12:42:29 -0700</bug_when>
    <thetext>Attachment 289998 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 62 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234425</commentid>
    <comment_count>46</comment_count>
      <attachid>290096</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 09:51:02 -0700</bug_when>
    <thetext>Created attachment 290096
rebased patch

I just have to test on ARM and then I&apos;ll land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234426</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 09:52:31 -0700</bug_when>
    <thetext>Attachment 290096 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 62 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234523</commentid>
    <comment_count>48</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:33:57 -0700</bug_when>
    <thetext>Oh boy!  Now I just need to benchmark this on ARM and I&apos;m done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234524</commentid>
    <comment_count>49</comment_count>
      <attachid>290112</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:34:57 -0700</bug_when>
    <thetext>Created attachment 290112
rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234526</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 13:36:37 -0700</bug_when>
    <thetext>Attachment 290112 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierClusteringPhase.cpp:135:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 62 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234570</commentid>
    <comment_count>51</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 14:58:34 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/206555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234787</commentid>
    <comment_count>52</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-09-29 05:45:08 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; Landed in https://trac.webkit.org/changeset/206555

It made Dromaeo/jslib-style-jquery.html crash on performance bots,
see bug162721 for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289686</attachid>
            <date>2016-09-23 09:59:59 -0700</date>
            <delta_ts>2016-09-23 17:47:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30311</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwz
NiArMTMwOSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRo
ZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBi
YXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50
byB0aGUgb2JqZWN0LgotICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVt
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmll
ckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3Vy
cmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAg
ICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3
ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hH
UFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
V2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0
IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAotICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRv
bmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0
byBzbG93Ci0gICAgICAgICAgICAvLyBwYXRoLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBq
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAg
ICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1
Y3R1cmUoKS0+aWQoKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlQml0cyksCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDIwNjI3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDggKzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0
dGVyKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAotICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAorICAgIG1hY3JvKEpTQ2VsbF9jZWxsU3RhdGUpIFwKICAgICBtYWNy
byhKU0NlbGxfaW5kZXhpbmdUeXBlKSBcCisgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBc
CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwKICAgICBtYWNybyhKU0NlbGxfdHlw
ZUluZm9UeXBlKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
NDgsMTEgKzI4NDgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoK
ICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIEV4aXRP
SzoKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgVW5yZWFjaGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNSwxMSArNDA1LDIw
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIExv
b3BIaW50OgogICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZs
b3c6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgICAgICByZWFkKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICB3cml0
ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgorICAgICAgICByZWFkKEhlYXApOworICAgICAg
ICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJ
bnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6
eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
c0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjI3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QK
ICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6CiAgICAgICAgIC8v
IFRoZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUu
IEl0IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRo
b3NlIHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9u
J3QgZG8gdGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja1Rp
ZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CisgICAgY2FzZSBTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZToKICAgICBjYXNlIEludmFs
aWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91
bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDYgKzE0MDIsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAg
Y2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVu
Y2U6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNl
IFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNo
ZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHJldmlzaW9uIDIwNjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdElt
cGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBTdG9yZUJhcnJp
ZXJTdG9yZUxvYWRGZW5jZToKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0Q2xv
c3VyZVZhcjoKICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNjI3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc2LDggKzM3Niw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAg
ICAgLyogQ2hlY2tzIHRoZSB3YXRjaGRvZyB0aW1lci4gSWYgdGhlIHRpbWVyIGhhcyBmaXJlZCwg
d2UgY2FsbCBvcGVyYXRpb24gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciovIFwKICAgICBt
YWNybyhDaGVja1dhdGNoZG9nVGltZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAvKiBXcml0
ZSBiYXJyaWVycyAhICovXAorICAgIC8qIFdyaXRlIGJhcnJpZXJzICovXAogICAgIG1hY3JvKFN0
b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFN0b3JlQmFycmllclN0
b3JlTG9hZEZlbmNlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEZvci1pbiBl
bnVtZXJhdGlvbiBvcGNvZGVzICovXAogICAgIG1hY3JvKEdldEVudW1lcmFibGVMZW5ndGgsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2lu
Y2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGFja0xheW91dFBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5o
IgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7CiAKICAgICAg
ICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9y
bVN0b3JlQmFycmllckZlbmNpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1EQ0Uo
ZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29t
cGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2Vy
dGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRmVuY2luZyhkZmcpOwogICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92YWwoKSkKICAgICAgICAgICAgIHBlcmZv
cm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjI3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRTdGFj
azoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgICAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgogICAgICAgICBjYXNlIEdl
dFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAg
Y2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAg
IGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNl
IENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8gY29tcGlsaW5nIHRoaXMgbm9kZS4KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZToKKyAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkg
YXNzdW1lIHRoYXQgdGhlc2UgY2Fubm90IGJlIHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9yY2VzIHRo
ZSBjb21waWxlciB0bworICAgICAgICAvLyBrZWVwIHRoZW0gZXhhY3RseSB3aGVyZSB0aGV5IHdl
cmUuIFRoaXMgaXMgc29ydCBvZiBvdmVya2lsbCBzaW5jZSB0aGUgY2xvYmJlcml6ZSBlZmZlY3Rz
CisgICAgICAgIC8vIGFscmVhZHkgZm9yY2UgdGhlc2UgdGhpbmdzIHRvIGJlIG9yZGVyZWQgcHJl
Y2lzZWx5LiBJJ20ganVzdCBub3QgY29uZmlkZW50IGVub3VnaCBpbiBteQorICAgICAgICAvLyBl
ZmZlY3QgYmFzZWQgbWVtb3J5IG1vZGVsIHRvIHJlbHkgc29sZWx5IG9uIHRoYXQgcmlnaHQgbm93
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4LDE4ICsx
MjY4LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0K
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihF
ZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5v
dENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVF
ZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRh
Z0dQUigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0K
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBA
IC01MDEyLDYgKzUwMDAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlOiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZShu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CkBAIC01NDc0LDIwICs1NDY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1
ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgp
KSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAgIHN0b3Jl
VG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoIWlzS25v
d25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7
Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikKIHsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA2
Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVl
RWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsK
LQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdy
aXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5n
cHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA4Miw2ICs1MDcwLDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZVN0b3JlQmFy
cmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBH
ZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTU3NCwyMCArNTU2Nyw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBH
UFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAgICBpZiAoIWlz
S25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJy
YW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAgIEpJVENvbXBp
bGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihv
d25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgp
KSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgzMTMsNiArODMxMywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJy
aWVyCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZShOb2RlKiBub2RlKQoreworICAgIG1faml0Lm1l
bW9yeUZlbmNlKCk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7
CkBAIC04MzM5LDcgKzgzNDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVC
YXJyaWVyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZl
bmNlKG93bmVyR1BSKTsKICAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBz
Y3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygm
bV9qaXQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsOCArMzAwLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CiAKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykK
QEAgLTczOCw4ICs3MzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGls
ZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsK
LQogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hO
dWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1dCB0aGVuIHJ1
biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9k
ZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7
CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAsMTMgKzQzMCwx
NCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwotICAgICAgICBp
bnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0QmFycmllciht
X25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcih1
bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQorICAgIHZv
aWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkKICAgICB7Ci0g
ICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IG1heSBi
ZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAgIC8vIHRoZSBv
YmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9mIHNheWluZyB0
aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBhY2NvcmRpbmcK
KyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9uZSB0aW1lIHRo
YXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAgICAgLy8gc3Vy
ZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9jaChFcG9jaCgp
KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxkIG9ubHkg
aW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAtNDQ2LDE3ICs0
NDcsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3Rv
cmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAg
ICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAgICAvLyBJZiB0
aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBh
IGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJlIGNoZWNrcyBh
cmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBh
dCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVl
ZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhl
IGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KLSAgICAg
ICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7Ci0gICAgICAg
ICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOwogICAgICAgICAK
LSAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChl
eGl0T0spLCBiYXNlKTsKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBh
ZnRlciB0aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25v
dworICAgICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSht
X2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlk
RXhpdCgpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCShyZXZpc2lv
biAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5zZXJ0cyBzdG9y
ZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1bHRpbmcgdGhl
IGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFs
eXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlzIHBoYXNlIHJl
cXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNpbXBsZSBlcG9j
aC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24gbmV3bHkgYWxs
b2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2UgYXJlIG5vdCBp
biBTU0EuIFRoaXMgcGhhc2UgZG9lcyBub3QgaW5zZXJ0IHRoZSBmZW5jZXMgdGhhdCBhcmUgcmVx
dWlyZWQKKy8vIGZvciB0aGUgYmFycmllciB0byBiZSBjb3JyZWN0LCBhbmQgaXQgZG9lc24ndCBy
ZW1vdmUgcmVkdW50YW50IGJhcnJpZXJzLgogYm9vbCBwZXJmb3JtRmFzdFN0b3JlQmFycmllcklu
c2VydGlvbihHcmFwaCYpOwogCiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJzIHVzaW5nIGEgZ2xv
YmFsIGFuYWx5c2lzIGFuZCBjb25zdWx0cyB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIuIFVzZXMg
YQotLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1
bmRhbnQgYmFycmllcnMsIGJ1dCBvbmx5IHByb3BhZ2F0ZXMgInNhbWUKLS8vIGVwb2NoIGFzIGN1
cnJlbnQiIHByb3BlcnR5IGZyb20gb25lIGJsb2NrIHRvIHRoZSBuZXh0LiBUaGlzIHBoYXNlIHJl
cXVpcmVzIFNTQS4gVGhpcyBwaGFzZQotLy8gYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkg
YW5kIGxpdmVuZXNzLgorLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGlu
c2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBwaGFzZQor
Ly8gcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlIGFsc28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJ
IGFuZCBsaXZlbmVzcy4gVGhpcyBwaGFzZSBkb2VzIG5vdCBpbnNlcnQKKy8vIHRoZSBmZW5jZXMg
dGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBiYXJyaWVyIHRvIGJlIGNvcnJlY3QsIGFuZCBpdCBk
b2Vzbid0IHJlbW92ZSByZWR1bmRhbnQKKy8vIGJhcnJpZXJzLgogYm9vbCBwZXJmb3JtR2xvYmFs
U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDIwNjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlC
eXRlT2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6
CisgICAgY2FzZSBTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZToKICAgICBjYXNlIENhbGw6CiAg
ICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIwNjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ3LDYgKzk0Nyw5IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVu
Y2U6CisgICAgICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKICAgICAg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNjk5Nyw2ICs3MDAwLDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBlbWl0U3RvcmVC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgpCisgICAgeworICAgICAgICBtX291
dC5mZW5jZSgpOworICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgp
CiAgICAgewpAQCAtODEyNiw4ICs4MTM0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBw
cmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKLSAgICAgICAgCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJC
M0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUgIkIz
Q29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIz
TWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExW
YWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIu
aGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQoreworICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7
Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVy
IHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVlKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMDYy
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw2ICs2Miw3IEBAIHN0cnVjdCBOb2RlOwogfSAvLyBuYW1lc3BhY2UgREZHCiAK
IG5hbWVzcGFjZSBCMyB7CitjbGFzcyBGZW5jZVZhbHVlOwogY2xhc3MgU2xvdEJhc2VWYWx1ZTsK
IH0gLy8gbmFtZXNwYWNlIEIzCiAKQEAgLTE4OSw2ICsxOTAsNyBAQCBwdWJsaWM6CiAKICAgICBM
VmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlKTsKICAgICB2b2lkIHN0b3JlKExWYWx1ZSwg
VHlwZWRQb2ludGVyKTsKKyAgICBCMzo6RmVuY2VWYWx1ZSogZmVuY2UoKTsKIAogICAgIExWYWx1
ZSBsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50ZXIpOwogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQz
MihUeXBlZFBvaW50ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5s
aW5lcy5oCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDEwIEBAIGlubGluZSB2
b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVy
KCk7CiAjZW5kaWYKLSAgICBpZiAoIWZyb20gfHwgZnJvbS0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0
YXRlOjpPbGRCbGFjaykKKyAgICBpZiAoIWZyb20pCisgICAgICAgIHJldHVybjsKKyAgICBXVEY6
OnN0b3JlTG9hZEZlbmNlKCk7CisgICAgaWYgKGZyb20tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0
ZTo6T2xkQmxhY2spCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXRvIHx8IHRvLT5jZWxsU3Rh
dGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNjI3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMDYsMTcgKzEzMDYsMjkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBU
cnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAotICAgIEp1bXAganVt
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1Jl
bWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShHUFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAg
IHJldHVybiBicmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkpOwogICAgIH0KIAot
ICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1
bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoSlNDZWxsKiBjZWxsKQog
ICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzKGFkZHJlc3MpKTsKICAgICB9CiAgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7
CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShj
ZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2Vs
bCogY2VsbCkKKyAgICB7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7CisgICAgICAgIHJldHVybiBq
dW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShjZWxsKTsKKyAgICB9CisgICAg
CiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUg
ZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9y
IGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlw
ZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1p
dCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3RyaW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVn
aXN0ZXIgYW5kIHRoZW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjczLDggKzY3Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0
cnVjdGlvbioKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3Mg
JiBQdXRCeUlkSXNEaXJlY3Q7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1Qw
LCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjg3LDYgKzY4NSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJ
ZHMuYXBwZW5kKGdlbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjY2LDggKzY2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAg
ICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3Mg
JiBQdXRCeUlkSXNEaXJlY3Q7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1
ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCkBAIC02ODQsNiArNjgyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVy
QmFzZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShy
ZXZpc2lvbiAyMDYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw2ICs4ODcsNyBAQCBtYWNybyBh
cnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFjcm8gc2tpcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBjb250aW51YXRpb24p
CisgICAgbWVtZmVuY2UKICAgICBsb2FkYiBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBzY3Jh
dGNoMQogICAgIGNvbnRpbnVhdGlvbihzY3JhdGNoMSkKIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMjA2Mjc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI3LDcg
KzE1MjcsOCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAg
ICAgICAgJGFzbS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcmRlck9wZXJhbmRzKG9w
ZXJhbmRzWzBdLng4NkFkZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVyYW5kc1sxXS54ODZPcGVyYW5k
KDpwdHIpKX0iCiAgICAgICAgIHdoZW4gIm1lbWZlbmNlIgotICAgICAgICAgICAgJGFzbS5wdXRz
ICJtZmVuY2UiCisgICAgICAgICAgICBzcCA9IFJlZ2lzdGVySUQubmV3KG5pbCwgInNwIikKKyAg
ICAgICAgICAgICRhc20ucHV0cyAibG9jazsgb3JsICQwLCAoI3tzcC54ODZPcGVyYW5kKDpwdHIp
fSkiCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyMDYyNzQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMs
MjQgQEAgdm9pZCBGYXN0Qml0VmVjdG9yV29yZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1fd29y
ZHMgPSBuZXdBcnJheTsKIH0KIAordm9pZCBGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNpemVf
dCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgIGF0
KGkpID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGVu
ZEJlZ2luU2xvcCA9IChiZWdpbiArIDMxKSAmIH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRTbG9w
ID0gZW5kICYgfjMxOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZEJl
Z2luU2xvcDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkg
PSBiZWdpbkVuZFNsb3A7IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gZW5kQmVnaW5TbG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3AgLyAz
MjsgKytpKQorICAgICAgICBtX3dvcmRzLndvcmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMjA2Mjc0KQorKysg
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiAr
NDY4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3Ig
Y2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289728</attachid>
            <date>2016-09-23 17:47:49 -0700</date>
            <delta_ts>2016-09-25 15:36:50 -0700</delta_ts>
            <desc>TSO barrier</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52567</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNjMxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDYgKzM2MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAorICAgIGRm
Zy9ERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MDIsNiArNTAyLDggQEAKIAkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovOyB9OwogCQkwRjdDNUZC
ODFEODg4QTBDMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIg
LyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi87IH07CiAJCTBGN0M1RkJBMUQ4ODk1MDcwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlu
bGluZXMuaCAqLzsgfTsKKwkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckZlbmNpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyRmVu
Y2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckZlbmNpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmll
ckZlbmNpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlW
YWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzM1QjcxNjM5QzFFNjAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjc0MSw2ICsyNzQzLDggQEAKIAkJMEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcEluZm8uaDsg
cGF0aCA9IGRmZy9ERkdPcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4ODkxRDk1OTZDMzAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJp
ZXJGZW5jaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3Rv
cmVCYXJyaWVyRmVuY2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRmVuY2lu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI0MTYzOUMx
RTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTUz
LDYgKzY1NTcsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjRGMjlERTE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAq
LywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyRmVuY2lu
Z1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyRmVuY2luZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8q
IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjlFMzI2MjFCMDVB
QjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLywKIAkJCQkw
RkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAg
Ki8sCkBAIC03OTQ0LDYgKzc5NTAsNyBAQAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4
NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHcmFwaC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckZlbmNpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAw
NDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkwOTQsNiArOTEw
MSw3IEBACiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96
ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcg
LyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRG
MTJFIC8qIERGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlz
aW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksMjkgKzEzMDksNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAq
IHNpemVvZihKU1ZhbHVlKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBJZiB3
ZSBoYWQgYWxsb2NhdGVkIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGVuIHdlIHdvdWxkIGhhdmUgYWxy
ZWFkeSBleGVjdXRlZCB0aGUgc3RvcmUKLSAgICAgICAgLy8gYmFycmllciBhbmQgd2Ugd291bGQg
aGF2ZSBhbHJlYWR5IHN0b3JlZCB0aGUgYnV0dGVyZmx5IGludG8gdGhlIG9iamVjdC4KICAgICAg
ICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuKGJhc2VHUFIpOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJp
ZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAg
ICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwg
c2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAg
ICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3Jp
dGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgotICAgICAgICAgICAgaml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAg
IGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpT
Y2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7Ci0gICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRl
cmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRo
YXQKICAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQg
aXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAg
Ly8gcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkg
XAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0
ZXJfc2V0dGVyKSBcCi0gICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCisgICAgbWFjcm8o
SlNDZWxsX2NlbGxTdGF0ZSkgXAogICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUpIFwKKyAg
ICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9G
bGFncykgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUpIFwKICAgICBtYWNybyhKU09i
amVjdF9idXR0ZXJmbHkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjMx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0OCwxMSArMjg0OCwxMiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZpbHRlcihub2RlLT5jaGls
ZDEoKSwgU3BlY0NlbGwpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAg
Y2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2Fz
ZSBab21iaWVIaW50OgogICAgIGNhc2UgRXhpdE9LOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2U6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVbnJlYWNoYWJsZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAy
MDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlw
ZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoK
ICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlND
ZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6
CisgICAgICAgIHJlYWQoSGVhcCk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOwor
ICAgICAgICByZXR1cm47CisKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBv
aW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBMYXp5Tm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2
aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgYm9vbCBjbG9iYmVy
c0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBTdG9yZUJhcnJp
ZXJTdG9yZUxvYWRGZW5jZToKICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1
dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUg
dGhlCiAgICAgICAgIC8vIGhlYXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQg
dGhvc2UgdGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KICAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0
NDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9u
IDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBM
b29wSGludDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllclN0
b3JlTG9hZEZlbmNlOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3Rp
ZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAg
ICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZToKICAgICAgICAgY2FzZSBHZXRSZWdFeHBP
YmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4Ogog
ICAgICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcs
NiArODcsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqCiAgICAg
Y2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgogICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgIGNhc2UgUmVjb3JkUmVn
RXhwQ2FjaGVkUmVzdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsOCArMzc2LDkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICAvKiBDaGVja3MgdGhlIHdhdGNoZG9nIHRp
bWVyLiBJZiB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBjYWxsIG9wZXJhdGlvbiBvcGVyYXRpb25I
YW5kbGVXYXRjaGRvZ1RpbWVyKi8gXAogICAgIG1hY3JvKENoZWNrV2F0Y2hkb2dUaW1lciwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCisgICAgLyogV3Jp
dGUgYmFycmllcnMgKi9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAg
bWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRK
UykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAy
MDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmll
ckZlbmNpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVw
Q2hlY2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllcklu
c2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRmVuY2luZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1T
dG9yZUJhcnJpZXJGZW5jaW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZIaW50
UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2U6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgR2V0UmVn
RXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRl
eDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw2IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6
Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAg
ICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKQEAgLTM3MSw2ICsz
NzAsMTQgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAg
ICAvLyBjb21waWxpbmcgdGhpcyBub2RlLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgor
ICAgICAgICAvLyBXZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUg
cHV0IGFueXdoZXJlLCB3aGljaCBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtl
ZXAgdGhlbSBleGFjdGx5IHdoZXJlIHRoZXkgd2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxs
IHNpbmNlIHRoZSBjbG9iYmVyaXplIGVmZmVjdHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0
aGVzZSB0aGluZ3MgdG8gYmUgb3JkZXJlZCBwcmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRl
bnQgZW5vdWdoIGluIG15CisgICAgICAgIC8vIGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8g
cmVseSBzb2xlbHkgb24gdGhhdCByaWdodCBub3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgog
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjMxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNjgsMTggKzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVk
Z2UpCi17Ci0gICAgQVNTRVJUKCFpc0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0K
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMSh0aGlzKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0
ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUudGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEu
Z3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTUwMTIsNiArNTAwMCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6IHsKKyAgICAgICAgY29tcGls
ZVN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUkZs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKQEAgLTU0NzQsMjAgKzU0NjcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQ
Uiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAg
ICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEp
LCBncHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4
ICsxMzc1LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAg
IH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmll
cihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93
bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFs
dWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVl
LmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0K
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBA
IC01MDgyLDYgKzUwNzAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6IHsK
KyAgICAgICAgY29tcGlsZVN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC01NTc0LDIwICs1NTY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVz
ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkK
LSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAg
ICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIp
OwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygm
bV9qaXQpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIp
CiB7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMxMyw2ICs4MzEzLDE2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNl
KE5vZGUqIG5vZGUpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hU
ZXN0OCgKKyAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sCisgICAgICAgIEpJVENvbXBpbGVyOjpB
YnNvbHV0ZUFkZHJlc3MobV9qaXQudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLmFkZHJlc3NPZklz
TWFya2luZygpKSk7CisgICAgbV9qaXQubWVtb3J5RmVuY2UoKTsKKyAgICBvay5saW5rKCZtX2pp
dCk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnN0b3Jl
VG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKQogewogICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CkBAIC04MzM5
LDcgKzgzNDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRl
bihvd25lckdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKG93bmVy
R1BSKTsKICAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsOSArMzAwLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMik7CiAKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQ
UlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZShOb2RlKik7CiAKICAgICBzdGF0aWMgR1BS
UmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQ
UlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCiAgICAgewpAQCAtNzM4
LDggKzczNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVUcnlHZXRCeUlkKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVJbihOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmFzZVZh
bHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOwotCiAgICAg
dm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdl
IG9wZXJhbmQpOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVu
ZGVmaW5lZChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRmVu
Y2luZ1BoYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
U3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0RvZXNHQy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJGZW5j
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckZlbmNp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJy
aWVyIGZlbmNpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUg
PSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKQorICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJs
b2NrLT5zaXplKCkpOworICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOwor
ICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZG9CbG9jayhibG9jayk7CisgICAgICAg
ICAgICBtX2JhcnJpZXJQb2ludHMuY2xlYXJSYW5nZSgwLCBibG9jay0+c2l6ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIC8vIFRoaXMgc3VtbWFyaXplcyBldmVyeXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJv
dXQgYSBiYXJyaWVyLgorICAgIHN0cnVjdCBDaGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxk
QW5kT3JpZ2luKCkgeyB9CisgICAgICAgIAorICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBj
aGlsZCwgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hp
bGQpCisgICAgICAgICAgICAsIHNlbWFudGljT3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9
OworICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luOworICAgIH07CisgICAgCisgICAg
dm9pZCBkb0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
YmFycmllclBvaW50cy5pc0VtcHR5KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRl
bnRpZnkgdGhlIHBsYWNlcyB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUg
YmFycmllcnMgYmFzZWQgb24gYQorICAgICAgICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVz
ZSB0aGUgZnV0dXJlR0MgZmxhZyB0byB0ZWxsIHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNl
IHRoaXMKKyAgICAgICAgLy8gaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRv
IGEgbm9kZSwgZnV0dXJlR0MgdGVsbHMgdXMgaWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAv
LyBpbiB0aGUgZnV0dXJlIGFmdGVyIHRoYXQgbm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9
IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAoZG9lc0dDKG1fZ3JhcGgsIG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBT
dG9yZUJhcnJpZXIgJiYgZnV0dXJlR0MpIHsKKyAgICAgICAgICAgICAgICBtX2JhcnJpZXJQb2lu
dHNbbm9kZUluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgZnV0dXJlR0MgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIHJ1
biBmb3J3YXJkIGFuZCBjb2xsZWN0IHRoZSBiYXJyaWVycy4gV2hlbiB3ZSBoaXQgYSBiYXJyaWVy
IHBvaW50LCBpbnNlcnQgYWxsIG9mCisgICAgICAgIC8vIHRoZW0gd2l0aCBhIGZlbmNlLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTdG9yZUJhcnJpZXIpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgIW5vZGUtPm9yaWdpbi53YXNIb2lzdGVkKTsKKyAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3Jp
Z2luID0gbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5hcHBlbmQo
Q2hpbGRBbmRPcmlnaW4obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBvcmlnaW4uc2VtYW50aWMpKTsK
KyAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIW1fYmFycmllclBvaW50c1tub2RlSW5kZXhdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICAgICAg
bV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAg
ICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3Jp
Z2luJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY2hpbGQgPCBi
LmNoaWxkOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXV0byBlbmQgPSBzdGQ6
OnVuaXF1ZSgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCksIG1fbmVl
ZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBDaGlsZEFuZE9y
aWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2x7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhLmNoaWxkID09IGIuY2hpbGQ7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCisgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSwgb3JpZ2luKTsKKyAgICAgICAgICAgIGZvciAoYXV0
byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKKyAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47Cisg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4ud2l0aFNlbWFu
dGljKHNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZCwgS25v
d25DZWxsVXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJz
LnJlc2l6ZSgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRpb25TZXQu
ZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlv
blNldDsKKyAgICBGYXN0Qml0VmVjdG9yIG1fYmFycmllclBvaW50czsKKyAgICBWZWN0b3I8Q2hp
bGRBbmRPcmlnaW4+IG1fbmVlZGVkQmFycmllcnM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRmVuY2luZyhHcmFwaCYgZ3JhcGgpCit7
CisgICAgcmV0dXJuIHJ1blBoYXNlPFN0b3JlQmFycmllckZlbmNpbmdQaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJGZW5j
aW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckZlbmNpbmdQaGFzZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIEluc2VydHMgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VzIGJlZm9yZSBTdG9y
ZUJhcnJpZXJzLiBBbHNvIG1vdmVzIHRoZSBTdG9yZUJhcnJpZXJzIGFyb3VuZAorLy8gdG8gbWlu
aW1pemUgdGhlIG51bWJlciBvZiBTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZXMgdGhhdCBuZWVk
IHRvIGJlIGluc2VydGVkLiBUaGlzIGFsc28gaGFzCisvLyB0aGUgZWZmZWN0IG9mIHJlbW92aW5n
IHJlZHVuZGFudCBiYXJyaWVycy4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckZlbmNpbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
SW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRl
IGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRC
YXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25v
d25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCAr
IDEsIG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2go
RXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00
MzAsMTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIp
OwotICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5z
ZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5z
ZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0
cnVlKQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFz
ZSkKICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUg
b2JqZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAg
ICAgIC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5
IG9mIHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhl
ciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVk
IG9uZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAg
ICAgICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRF
cG9jaChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ug
c2hvdWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpA
QCAtNDQ2LDE3ICs0NDcsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9m
IGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAg
ICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxz
byBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdo
ZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0
IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0
IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkg
aG9pc3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0
IG5vdy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRP
Syk7Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkp
OwogICAgICAgICAKLSAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChleGl0T0spLCBiYXNlKTsKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5
cyBpbnNlcnRlZCBhZnRlciB0aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3
ZSBhbHdheXMga25vdworICAgICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93Lgor
ICAgICAgICBiYXNlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVy
c0V4aXRTdGF0ZShtX2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2lu
LndpdGhJbnZhbGlkRXhpdCgpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5oCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywx
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8g
SW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNv
bnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9j
aC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBU
aGlzIHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBh
IHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMg
b24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQg
d2UgYXJlIG5vdCBpbiBTU0EuIFRoaXMgcGhhc2UgZG9lcyBub3QgaW5zZXJ0IHRoZSBmZW5jZXMg
dGhhdCBhcmUgcmVxdWlyZWQKKy8vIGZvciB0aGUgYmFycmllciB0byBiZSBjb3JyZWN0LCBhbmQg
aXQgZG9lc24ndCByZW1vdmUgcmVkdW50YW50IGJhcnJpZXJzLgogYm9vbCBwZXJmb3JtRmFzdFN0
b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJz
IHVzaW5nIGEgZ2xvYmFsIGFuYWx5c2lzIGFuZCBjb25zdWx0cyB0aGUgYWJzdHJhY3QgaW50ZXJw
cmV0ZXIuIFVzZXMgYQotLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGlu
c2VydGluZyByZWR1bmRhbnQgYmFycmllcnMsIGJ1dCBvbmx5IHByb3BhZ2F0ZXMgInNhbWUKLS8v
IGVwb2NoIGFzIGN1cnJlbnQiIHByb3BlcnR5IGZyb20gb25lIGJsb2NrIHRvIHRoZSBuZXh0LiBU
aGlzIHBoYXNlIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZQotLy8gYWxzbyByZXF1aXJlcyBoYXZp
bmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgorLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lz
IHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cy4g
VGhpcyBwaGFzZQorLy8gcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlIGFsc28gcmVxdWlyZXMgaGF2
aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4gVGhpcyBwaGFzZSBkb2VzIG5vdCBpbnNlcnQKKy8v
IHRoZSBmZW5jZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBiYXJyaWVyIHRvIGJlIGNvcnJl
Y3QsIGFuZCBpdCBkb2Vzbid0IHJlbW92ZSByZWR1bmRhbnQKKy8vIGJhcnJpZXJzLgogYm9vbCBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTIgQEAg
cHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlBZGRyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAgICAKLSAgICBjb25z
dCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3QgQWJzdHJhY3RIZWFw
JiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5kZXhl
ZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwogICAgIH0KICAgICAK
LSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRkcmVzcykgeyByZXR1
cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10oY29u
c3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDIw
NjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRW
YWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYsNiArMTE3LDE2IEBA
IHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAgICBtX2hlYXBGb3JQ
YXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOwogfQogCit2
b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFkKGNvbnN0IEFic3Ry
YWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlUmVhZC5h
cHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwg
VmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBwZW5kKEhlYXBGb3JW
YWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNv
bXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAgcm9vdC5jb21wdXRl
KCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29t
cHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsV3Jp
dGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRl
cyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBt
X2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRy
eS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRzID0gZW50cnkuaGVh
cC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBhdGNo
cG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVj
dHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFz
PFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgp
OworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VSZWFkKQorICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVudHJ5LmhlYXAtPnJh
bmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVdyaXRl
KQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3JpdGUgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3QgQWJzdHJhY3RIZWFw
KiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRSZWFkKGNvbnN0IEFi
c3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQYXRjaHBvaW50V3Jp
dGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0ZUZl
bmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRlY29y
YXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKIAogICAgIHZv
aWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAKQEAgLTI0MSw2ICsy
NDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckNDYWxs
V3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2ludFJlYWQ7
CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2ludFdyaXRlOworICAg
IFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAgICBWZWN0b3I8SGVh
cEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFN0b3JlQmFy
cmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOgogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWly
R2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UuaCIKICNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFs
dWUuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJh
c2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCkBAIC05
NDcsNiArOTQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAg
ICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZToKKyAgICAgICAgICAgIGNvbXBpbGVT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02OTk3LDYgKzcwMDEsMjggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlKCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmFic29sdXRl
KHZtKCkuaGVhcC5vYmplY3RTcGFjZSgpLmFkZHJlc3NPZklzTWFya2luZygpKSksCisgICAgICAg
ICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IEZlbmNlVmFsdWUqIGZlbmNlID0gbV9vdXQuZmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIG1f
aGVhcHMuZGVjb3JhdGVGZW5jZVJlYWQoJm1faGVhcHMucm9vdCwgZmVuY2UpOworICAgICAgICBt
X2hlYXBzLmRlY29yYXRlRmVuY2VXcml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBmZW5j
ZSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9
CiAKICAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQogICAgIHsKQEAgLTgxMjYs
OCArODE1Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUs
IG5leHRTdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBlbWl0U3RvcmVC
YXJyaWVyKG9iamVjdCk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApAQCAtMTAwNTMsMTMgKzEwMDc3LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gcnVuIGFmdGVyIHRo
ZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBu
b3QgdXNlIGJ5LXJlZmVyZW5jZQogICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2Yg
dGhlc2UgbGFtYmRhcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4u
LiBBcmd1bWVudFR5cGVzPgotICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYg
ZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVl
KiBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBh
cmd1bWVudHMpCiAgICAgewogICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3IsIFZl
Y3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIFBhdGNocG9p
bnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3Rv
cjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcmln
aW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKICAgICAgICAgCkBAIC0xMTQzOSwxMSArMTE0
NjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8g
V2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBj
YXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMg
ZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBv
dXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXpp
bmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOwogCkBAIC0xMTQ5Myw2ICsxMTUxNywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgCisg
ICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxfY2Vs
bFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRX
cml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgCiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1dDo6
c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnko
cG9pbnRlci5oZWFwKCksIHN0b3JlKTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgp
Cit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9y
aWdpbigpKTsKK30KKwogdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBl
ZFBvaW50ZXIgcG9pbnRlcikKIHsKICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIu
dmFsdWUoKSk7CkBAIC03OTUsNyArODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2
YWx1ZSwgVHlwZWRQbwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVR5
cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50ZXIg
T3V0cHV0OjphYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBUeXBl
ZFBvaW50ZXIobV9oZWFwcy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3Mp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24g
MjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNlIERG
RwogCiBuYW1lc3BhY2UgQjMgeworY2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNlVmFs
dWU7CiB9IC8vIG5hbWVzcGFjZSBCMwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgogCiAg
ICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShMVmFs
dWUsIFR5cGVkUG9pbnRlcik7CisgICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAgICBM
VmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDhaZXJv
RXh0MzIoVHlwZWRQb2ludGVyKTsKQEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBoZWFwLmJhc2VJbmRleCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25zdGFu
dCwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCogYWRk
cmVzcyk7CisgICAgVHlwZWRQb2ludGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3MpOwog
CiAgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhl
YXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7
IH0KICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0
SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQp
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZp
c2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDExIEBAIGlubGluZSB2b2lkIEhlYXA6Ondy
aXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcp
CiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CiAjZW5kaWYK
LSAgICBpZiAoIWZyb20gfHwgIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICgh
ZnJvbSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChVTkxJS0VMWShvYmplY3RTcGFjZSgpLmlz
TWFya2luZygpKSkKKyAgICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgIGlmICghaXNC
bGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXRvIHx8
IHRvLT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9u
IDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gV2hl
biB0aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJr
IGJpdHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9pc01hcmtpbmc7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZJc01hcmtp
bmcoKSBjb25zdCB7IHJldHVybiAmbV9pc01hcmtpbmc7IH0KICAgICAKICAgICB2b2lkIGR1bXBC
aXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNjMxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMDYsMTcgKzEzMDYsMzEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQg
ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVz
dGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAotICAgIEp1bXAganVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShHUFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBicmFuY2g4KEFib3ZlLCBBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAKLSAgICBKdW1wIGp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICBKdW1wIGp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAg
ICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSAr
IEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBicmFuY2g4KEFib3Zl
LCBBYnNvbHV0ZUFkZHJlc3MoYWRkcmVzcyksIFRydXN0ZWRJbW0zMihibGFja1RocmVzaG9sZCkp
OwogICAgIH0KICAgICAKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJl
ZyBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVy
cygpKQorICAgICAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKworICAgIEp1bXAg
anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgbWVtb3J5
RmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91
dEZlbmNlKGNlbGwpOworICAgIH0KKyAgICAKICAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVj
dHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRo
cm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVy
ZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCiAg
ICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJp
bmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzMsOCArNjczLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKICAgICAKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIGVt
aXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIAog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02ODcsNiAr
Njg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjYsOCArNjY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAotICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAg
ICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5k
IHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0
IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90
UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0
cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhp
cy4KQEAgLTY4NCw2ICs2ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJl
ZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5k
KGdlbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtODkxLDYgKzg5MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBl
LCAKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0
aCkKKyAgICBtZW1mZW5jZQogICAgIGJiYSBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBCbGFj
a1RocmVzaG9sZCwgLmRvbmUKICAgICBzbG93UGF0aCgpCiAuZG9uZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTUy
Nyw3ICsxNTI3LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVhcCIKICAg
ICAgICAgICAgICRhc20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJPcGVyYW5k
cyhvcGVyYW5kc1swXS54ODZBZGRyZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0ueDg2T3Bl
cmFuZCg6cHRyKSl9IgogICAgICAgICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAgICRhc20u
cHV0cyAibWZlbmNlIgorICAgICAgICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWwsICJzcCIp
CisgICAgICAgICAgICAkYXNtLnB1dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3BlcmFuZCg6
cHRyKX0pIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAg
ZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAx
MDAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJ
KHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1MywyNCBAQCB2b2lkIEZhc3RCaXRWZWN0b3JXb3JkT3du
ZXI6OnJlc2l6ZVNsb3coCiAgICAgbV93b3JkcyA9IG5ld0FycmF5OwogfQogCit2b2lkIEZhc3RC
aXRWZWN0b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlm
IChlbmQgLSBiZWdpbiA8IDMyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8
IGVuZDsgKytpKQorICAgICAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBzaXplX3QgZW5kQmVnaW5TbG9wID0gKGJlZ2luICsgMzEpICYgfjMx
OworICAgIHNpemVfdCBiZWdpbkVuZFNsb3AgPSBlbmQgJiB+MzE7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kQmVnaW5TbG9wOyArK2kpCisgICAgICAgIGF0KGkpID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luRW5kU2xvcDsgaSA8IGVuZDsgKytpKQor
ICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBlbmRCZWdpblNsb3Ag
LyAzMjsgaSA8IGJlZ2luRW5kU2xvcCAvIDMyOyArK2kpCisgICAgICAgIG1fd29yZHMud29yZChp
KSA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9G
YXN0Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rv
ci5oCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJSYW5nZShz
aXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
b250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE90aGVyV29yZHM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289747</attachid>
            <date>2016-09-24 10:54:06 -0700</date>
            <delta_ts>2016-09-25 15:36:50 -0700</delta_ts>
            <desc>a different approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63790</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNjMxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDYgKzM2MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAorICAgIGRm
Zy9ERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MDIsNiArNTAyLDggQEAKIAkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovOyB9OwogCQkwRjdDNUZC
ODFEODg4QTBDMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIg
LyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi87IH07CiAJCTBGN0M1RkJBMUQ4ODk1MDcwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlu
bGluZXMuaCAqLzsgfTsKKwkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckZlbmNpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyRmVu
Y2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckZlbmNpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmll
ckZlbmNpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlW
YWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzM1QjcxNjM5QzFFNjAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjc0MSw2ICsyNzQzLDggQEAKIAkJMEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcEluZm8uaDsg
cGF0aCA9IGRmZy9ERkdPcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4ODkxRDk1OTZDMzAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJp
ZXJGZW5jaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3Rv
cmVCYXJyaWVyRmVuY2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRmVuY2lu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI0MTYzOUMx
RTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTUz
LDYgKzY1NTcsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjRGMjlERTE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAq
LywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyRmVuY2lu
Z1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyRmVuY2luZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8q
IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjlFMzI2MjFCMDVB
QjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLywKIAkJCQkw
RkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAg
Ki8sCkBAIC03OTQ0LDYgKzc5NTAsNyBAQAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4
NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHcmFwaC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckZlbmNpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAw
NDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkwOTQsNiArOTEw
MSw3IEBACiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96
ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcg
LyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRG
MTJFIC8qIERGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlz
aW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksMjkgKzEzMDksNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAq
IHNpemVvZihKU1ZhbHVlKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBJZiB3
ZSBoYWQgYWxsb2NhdGVkIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGVuIHdlIHdvdWxkIGhhdmUgYWxy
ZWFkeSBleGVjdXRlZCB0aGUgc3RvcmUKLSAgICAgICAgLy8gYmFycmllciBhbmQgd2Ugd291bGQg
aGF2ZSBhbHJlYWR5IHN0b3JlZCB0aGUgYnV0dGVyZmx5IGludG8gdGhlIG9iamVjdC4KICAgICAg
ICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuKGJhc2VHUFIpOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJp
ZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAg
ICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwg
c2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAg
ICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3Jp
dGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgotICAgICAgICAgICAgaml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAg
IGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpT
Y2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7Ci0gICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRl
cmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRo
YXQKICAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQg
aXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAg
Ly8gcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkg
XAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0
ZXJfc2V0dGVyKSBcCi0gICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCisgICAgbWFjcm8o
SlNDZWxsX2NlbGxTdGF0ZSkgXAogICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUpIFwKKyAg
ICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9G
bGFncykgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUpIFwKICAgICBtYWNybyhKU09i
amVjdF9idXR0ZXJmbHkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjMx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0NCwxMSArMjg0NCwxMiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2Fz
ZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBT
cGVjQ2VsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBjYXNlIENo
ZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFpvbWJp
ZUhpbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNSwxMSArNDA1LDIwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
UHJvZmlsZVR5cGU6CiAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6Ci0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAg
ICByZWFkKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRl
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjoKKyAgICAgICAgcmVhZChIZWFwKTsKKyAgICAgICAgd3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7
CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9u
UG9pbnRMb2MsIFdhdGNocG9pbnRfZmlyZSksIExhenlOb2RlKG5vZGUpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShy
ZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJz
RXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBib29sIGNsb2Ji
ZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoK
ICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0
b3JlQmFycmllcjoKICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3Ro
aW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCiAg
ICAgICAgIC8vIGhlYXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2Ug
dGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KICAgICAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNjMx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGlu
dDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAg
Y2FzZSBDaGVja0luQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDYgKzE0MDIs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBHZXRT
dGFjazoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAg
ICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2UgUmVjb3JkUmVn
RXhwQ2FjaGVkUmVzdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIEV4aXRNb2RlIG1h
eUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNl
IFB1dENsb3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMDYzMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0aW1lciBoYXMg
ZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIqLyBc
CiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
LyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAqL1wKICAgICBt
YWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGZW5jZWRT
dG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogRm9yLWluIGVu
dW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5j
bHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhh
c2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
IgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgi
CkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJ
blRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAg
ICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3Jt
U3RvcmVCYXJyaWVyRmVuY2luZyhkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwog
ICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShk
ZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0
aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJGZW5jaW5nKGRmZyk7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VNb3ZIaW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9y
bU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk5NSw2ICs5OTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNr
OgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6CiAgICAgICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBj
YXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzE1LDcgKzMxNSw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9T
UkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAg
Y2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2Ug
Q2hlY2tJbkJvdW5kczoKQEAgLTM3MSw2ICszNzAsMTQgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAvLyBjb21waWxpbmcgdGhpcyBub2RlLgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZl
bmNlZFN0b3JlQmFycmllcjoKKyAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRo
YXQgdGhlc2UgY2Fubm90IGJlIHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9yY2VzIHRoZSBjb21waWxl
ciB0bworICAgICAgICAvLyBrZWVwIHRoZW0gZXhhY3RseSB3aGVyZSB0aGV5IHdlcmUuIFRoaXMg
aXMgc29ydCBvZiBvdmVya2lsbCBzaW5jZSB0aGUgY2xvYmJlcml6ZSBlZmZlY3RzCisgICAgICAg
IC8vIGFscmVhZHkgZm9yY2UgdGhlc2UgdGhpbmdzIHRvIGJlIG9yZGVyZWQgcHJlY2lzZWx5LiBJ
J20ganVzdCBub3QgY29uZmlkZW50IGVub3VnaCBpbiBteQorICAgICAgICAvLyBlZmZlY3QgYmFz
ZWQgbWVtb3J5IG1vZGVsIHRvIHJlbHkgc29sZWx5IG9uIHRoYXQgcmlnaHQgbm93LgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4LDE4ICsxMjY4LDYgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNl
RWRnZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFs
dWVFZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBi
YXNlRWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gy
KHRoaXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCB2
YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDEyLDYg
KzUwMDAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNl
OiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZShub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NDc0
LDIwICs1NDY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1ZVVzZSwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAg
ICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1
ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0K
LSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gbV9qaXQu
anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAgIHN0b3JlVG9Xcml0ZUJh
cnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoIWlzS25vd25DZWxsKHZh
bHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci19Ci0KIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikKIHsKICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVC
YXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsK
LSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRo
aXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmll
cihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2Ny
YXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1
YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hhYmxlKG5vZGUpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJh
cnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0
b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcg
dmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gy
KQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAgICBpZiAoIWlzS25vd25D
ZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElm
Tm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQ
Uiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAg
ICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZh
bHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMDIs
NDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2RlKiBub2RlKQogewotICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsK
KyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJp
ZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgc2Ny
YXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVzdWx0KG5vZGUpOwotfQor
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIo
KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVha3lKdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAgICAgICAKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CisgICAg
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAgICAgbm9GZW5jZS5saW5r
KCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
YXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VH
UFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihH
UFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgQVNT
RVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRl
QmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZmZXI7Ci0g
ICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCks
IHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisgICAg
bV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNj
cmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CiAK
LSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKLSAgICBtX2ppdC5z
dG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
KTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICBt
X2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4
QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJC
dWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BSKTsKICAgICAvLyBXZSB1
c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAx
IHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0
YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAgIG1faml0LnN0b3JlUHRy
KGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXpl
b2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19Ci0KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25l
ckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsK
KworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVn
IGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQotICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
OwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVk
Z2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQogICAgIHZv
aWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVj
dFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywg
R1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03MzgsOCArNzMyLDYgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIo
RWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2b2lkIG5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCk7CiAgICAg
dm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3Bl
cmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
RmVuY2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJGZW5j
aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dD
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckZlbmNpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVuY2luZyIpCisg
ICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisg
ICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNpemUoKSk7Cisg
ICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBv
aW50cy5jbGVhclJhbmdlKDAsIGJsb2NrLT5zaXplKCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBzdW1t
YXJpemVzIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byByZW1lbWJlciBhYm91dCBhIGJhcnJpZXIuCisg
ICAgc3RydWN0IENoaWxkQW5kT3JpZ2luIHsKKyAgICAgICAgQ2hpbGRBbmRPcmlnaW4oKSB7IH0K
KyAgICAgICAgCisgICAgICAgIENoaWxkQW5kT3JpZ2luKE5vZGUqIGNoaWxkLCBDb2RlT3JpZ2lu
IHNlbWFudGljT3JpZ2luKQorICAgICAgICAgICAgOiBjaGlsZChjaGlsZCkKKyAgICAgICAgICAg
ICwgc2VtYW50aWNPcmlnaW4oc2VtYW50aWNPcmlnaW4pCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTm9kZSogY2hpbGQgeyBudWxscHRyIH07CisgICAgICAgIENvZGVP
cmlnaW4gc2VtYW50aWNPcmlnaW47CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGRvQmxvY2soQmFz
aWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQobV9iYXJyaWVyUG9pbnRzLmlz
RW1wdHkoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCBpZGVudGlmeSB0aGUgcGxhY2Vz
IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gcGxhY2UgYWxsIG9mIHRoZSBiYXJyaWVycyBiYXNlZCBv
biBhCisgICAgICAgIC8vIGJhY2t3YXJkcyBhbmFseXNpcy4gV2UgdXNlIHRoZSBmdXR1cmVHQyBm
bGFnIHRvIHRlbGwgdXMgaWYgd2UgaGFkIHNlZW4gYSBHQy4gU2luY2UgdGhpcworICAgICAgICAv
LyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpcywgd2hlbiB3ZSBnZXQgdG8gYSBub2RlLCBmdXR1cmVH
QyB0ZWxscyB1cyBpZiBhIEdDIHdpbGwgaGFwcGVuCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUg
YWZ0ZXIgdGhhdCBub2RlLgorICAgICAgICBib29sIGZ1dHVyZUdDID0gdHJ1ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChkb2VzR0MobV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAgICAgICBmdXR1cmVH
QyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFN0b3JlQmFycmllciAmJiBm
dXR1cmVHQykgeworICAgICAgICAgICAgICAgIG1fYmFycmllclBvaW50c1tub2RlSW5kZXhdID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgcnVuIGZvcndhcmQgYW5kIGNv
bGxlY3QgdGhlIGJhcnJpZXJzLiBXaGVuIHdlIGhpdCBhIGJhcnJpZXIgcG9pbnQsIGluc2VydCBh
bGwgb2YKKyAgICAgICAgLy8gdGhlbSB3aXRoIGEgZmVuY2UuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IFN0b3JlQmFycmllcikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCAhbm9kZS0+b3JpZ2luLndhc0hvaXN0ZWQpOworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmln
aW47CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmFwcGVuZChDaGlsZEFuZE9yaWdpbihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG9yaWdpbi5zZW1hbnRpYykpOworICAgICAgICAgICAgbm9k
ZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9iYXJyaWVyUG9p
bnRzW25vZGVJbmRleF0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJz
LmJlZ2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChj
b25zdCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA8IGIuY2hpbGQ7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IHN0ZDo6dW5pcXVlKAorICAgICAg
ICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQo
KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEu
Y2hpbGQgPT0gYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvciAo
YXV0byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKKyAgICAgICAg
ICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkgJiYgaXRlciA9
PSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIHR5cGUsIG9yaWdpbi53aXRoU2VtYW50aWMoc2VtYW50aWNPcmlnaW4p
LAorICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMucmVzaXplKDApOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEZhc3RCaXRW
ZWN0b3IgbV9iYXJyaWVyUG9pbnRzOworICAgIFZlY3RvcjxDaGlsZEFuZE9yaWdpbj4gbV9uZWVk
ZWRCYXJyaWVyczsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHBlcmZv
cm1TdG9yZUJhcnJpZXJGZW5jaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVuUGhh
c2U8U3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckZlbmNpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRmVuY2luZ1Bo
YXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJGZW5jaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZXMgYmVmb3JlIFN0b3JlQmFycmllcnMuIEFsc28gbW92
ZXMgdGhlIFN0b3JlQmFycmllcnMgYXJvdW5kCisvLyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9m
IFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlcyB0aGF0IG5lZWQgdG8gYmUgaW5zZXJ0ZWQuIFRo
aXMgYWxzbyBoYXMKKy8vIHRoZSBlZmZlY3Qgb2YgcmVtb3ZpbmcgcmVkdW5kYW50IGJhcnJpZXJz
LgorYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRmVuY2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4gcnVuIHRoZWly
IG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgbV9ub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQzMCwxMyArNDMwLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJh
cnJpZXIobV9ub2RlSW5kZXgsIGJhc2UpOworICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4ICsgMSwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVk
IG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRPSyA9IHRydWUpCisgICAgdm9pZCBpbnNl
cnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlKQogICAgIHsKLSAgICAgICAg
Ly8gSW5zZXJ0aW5nIGEgYmFycmllciBtZWFucyB0aGF0IHRoZSBvYmplY3QgbWF5IGJlY29tZSBt
YXJrZWQgYnkgdGhlIEdDLCB3aGljaCB3aWxsIG1ha2UKLSAgICAgICAgLy8gdGhlIG9iamVjdCBi
bGFjay4KKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IG91ciB3YXkgb2Ygc2F5aW5nIHRoYXQgYmFy
cmllcnMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aCBlYWNoIG90aGVyIGFjY29yZGluZworICAgICAg
ICAvLyB0byBmb3J3YXJkIGFuYWx5c2lzOiBpZiB3ZSBwcm92ZWQgb25lIHRpbWUgdGhhdCBhIGJh
cnJpZXIgd2FzIG5lY2Vzc2FyeSB0aGVuIGl0J2xsIGZvcgorICAgICAgICAvLyBzdXJlIGJlIG5l
Y2Vzc2FyeSBuZXh0IHRpbWUuCiAgICAgICAgIGJhc2UtPnNldEVwb2NoKEVwb2NoKCkpOwogCiAg
ICAgICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2RlLCB3ZSBzaG91bGQgb25seSBpbnNlcnQg
dGhlIGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJnZWQuCkBAIC00NDYsMTcgKzQ0NywxNiBA
QCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgc3VwcG9ydCBTdG9yZUJhcnJp
ZXIoVW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNvcnQgb2YgY29vbC4KICAgICAgICAgLy8g
QnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0LgogCi0gICAgICAgIC8vIElmIHRoZSBvcmln
aW5hbCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3VsZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2su
IFdlIG1heSBiZSBpbiBhIGNvbnRleHQKLSAgICAgICAgLy8gd2hlcmUgY2hlY2tzIGFyZSBub3Qg
YWxsb3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBpbnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4
aXRJbnZhbGlkCi0gICAgICAgIC8vIGNvbnRleHQgYW5kIHRoYXQgYmFycmllciBuZWVkZWQgYSBj
aGVjaywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29yayBieSBob2lzdGluZyB0aGUgY2hlY2su
Ci0gICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4gcmlnaHQgbm93LgotICAgICAgICBpZiAo
YmFzZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7Ci0gICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgIGJh
c2Uuc2V0VXNlS2luZChDZWxsVXNlKTsKLSAgICAgICAgfQorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgaXNDZWxsKGJhc2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGV4aXRPSyks
IGJhc2UpOworICAgICAgICAvLyBCYXJyaWVycyBhcmUgYWx3YXlzIGluc2VydGVkIGFmdGVyIHRo
ZSBub2RlIHRoYXQgdGhleSBzZXJ2aWNlLiBUaGVyZWZvcmUsIHdlIGFsd2F5cyBrbm93CisgICAg
ICAgIC8vIHRoYXQgdGhlIHRoaW5nIGlzIGEgY2VsbCBub3cuCisgICAgICAgIGJhc2Uuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4g
PSBtX25vZGUtPm9yaWdpbjsKKyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgs
IG1fbm9kZSkpCisgICAgICAgICAgICBvcmlnaW4gPSBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCk7
CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwg
U3RvcmVCYXJyaWVyLCBvcmlnaW4sIGJhc2UpOwogICAgIH0KICAgICAKICAgICBib29sIHJlYWxs
eUluc2VydEJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDIwNjMx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDE2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJp
ZXJzIGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgYWJzdHJh
Y3QgaW50ZXJwcmV0ZXIuCi0vLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRv
IGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMuIFRoaXMgcGhhc2UgcmVxdWlyZXMK
LS8vIHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCisvLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2Vk
IGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxvY2F0ZWQg
b2JqZWN0cy4gVGhpcworLy8gcGhhc2UgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgbm90IGluIFNTQS4g
VGhpcyBwaGFzZSBkb2VzIG5vdCBpbnNlcnQgdGhlIGZlbmNlcyB0aGF0IGFyZSByZXF1aXJlZAor
Ly8gZm9yIHRoZSBiYXJyaWVyIHRvIGJlIGNvcnJlY3QsIGFuZCBpdCBkb2Vzbid0IHJlbW92ZSBy
ZWR1bnRhbnQgYmFycmllcnMuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9u
KEdyYXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5h
bHlzaXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBz
aW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBi
YXJyaWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIg
cHJvcGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMg
U1NBLiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2
ZW5lc3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5n
IGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1
aXJlcyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxp
dmVuZXNzLiBUaGlzIHBoYXNlIGRvZXMgbm90IGluc2VydAorLy8gdGhlIGZlbmNlcyB0aGF0IGFy
ZSByZXF1aXJlZCBmb3IgdGhlIGJhcnJpZXIgdG8gYmUgY29ycmVjdCwgYW5kIGl0IGRvZXNuJ3Qg
cmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuCiBib29sIHBlcmZvcm1HbG9iYWxTdG9yZUJh
cnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCShyZXZpc2lv
biAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTIgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Y29uc3QgQWJzdHJhY3RIZWFwJiBhdEFueUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
ZWRIZWFwLmF0QW55SW5kZXgoKTsgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQo
dm9pZCogYWRkcmVzcykKKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KGNvbnN0IHZvaWQqIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmRleGVkSGVhcC5hdChiaXR3aXNlX2Nh
c3Q8cHRyZGlmZl90PihhZGRyZXNzKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0
SGVhcCYgb3BlcmF0b3JbXSh2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNzKTsgfQor
ICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXShjb25zdCB2b2lkKiBhZGRyZXNzKSB7
IHJldHVybiBhdChhZGRyZXNzKTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAi
QjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNN
ZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNWYWx1ZUlubGluZXMuaCIKQEAgLTExNiw2ICsxMTcsMTYgQEAgdm9pZCBBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdAogICAgIG1faGVhcEZvclBhdGNocG9pbnRXcml0ZS5hcHBl
bmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1
ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VSZWFkLmFwcGVuZChIZWFwRm9yVmFsdWUo
aGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0
ZUZlbmNlV3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7Cisg
ICAgbV9oZWFwRm9yRmVuY2VXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7
Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmdlc0FuZERlY29y
YXRlSW5zdHJ1Y3Rpb25zKCkKIHsKICAgICByb290LmNvbXB1dGUoKTsKQEAgLTEzMiw5ICsxNDMs
MTMgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZwogICAgIGZvciAo
SGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yQ0NhbGxXcml0ZSkKICAgICAgICAgZW50cnku
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFu
Z2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBhdGNocG9pbnRS
ZWFkKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFk
cyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogICAgIGZv
ciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFdyaXRlKQotICAgICAg
ICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9y
VmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVJlYWQpCisgICAgICAgIGVudHJ5LnZhbHVlLT5h
czxGZW5jZVZhbHVlPigpLT5yZWFkID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBmb3IgKEhl
YXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlV3JpdGUpCisgICAgICAgIGVudHJ5LnZh
bHVlLT5hczxGZW5jZVZhbHVlPigpLT53cml0ZSA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDYz
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKICAg
ICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZh
bHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhl
YXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VSZWFkKGNvbnN0IEFic3Ry
YWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0
IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogCiAgICAgdm9pZCBjb21wdXRlUmFuZ2VzQW5k
RGVjb3JhdGVJbnN0cnVjdGlvbnMoKTsKIApAQCAtMjQxLDYgKzI0Myw4IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yQ0NhbGxXcml0ZTsKICAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZDsKICAgICBWZWN0b3I8SGVhcEZv
clZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGU7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1
ZT4gbV9oZWFwRm9yRmVuY2VSZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZv
ckZlbmNlV3JpdGU7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
MDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAg
ICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2U6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgVGFpbENh
bGw6CiAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDYzMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUg
IkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIz
UGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKQEAgLTk0Nyw2ICs5NDgsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNvbXBpbGVTdG9y
ZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlQmFycmll
clN0b3JlTG9hZEZlbmNlOgorICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllclN0b3JlTG9h
ZEZlbmNlKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6CiAgICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTY5OTcsNiArNzAwMSwyOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKQorICAgIHsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NP
ZkJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgp
LCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZlbmNlVmFsdWUqIGZlbmNlID0g
bV9vdXQuZmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVGZW5jZVJl
YWQoJm1faGVhcHMucm9vdCwgZmVuY2UpOworICAgICAgICBtX2hlYXBzLmRlY29yYXRlRmVuY2VX
cml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBmZW5jZSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoKQogICAgIHsKQEAgLTgxMjYsOCArODE1Miw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7Ci0gICAg
ICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAwNTMsMTMgKzEwMDc3
LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gcnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0
ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVyZW5jZQog
ICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotICAg
IExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBl
cy4uLiBhcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xvd1BhdGgoY29uc3Qg
RnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiAgICAgewogICAg
ICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3IsIFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVu
dHMuLi4gfSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBM
VmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxM
VmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1l
bnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYzsKICAgICAgICAgCkBAIC0xMTQzOSwxMSArMTE0NjMsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8gV2UgZW1pdCB0aGUgc3RvcmUgYmFy
cmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywgdGhpcyB3aWxsIG5ldmVy
IGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwgaXQgbWFrZXMgc2Vuc2Ug
Zm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklUIHJhdGhlciB0aGFuCiAg
ICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQuCi0gICAgICAgIGxhenlT
bG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbGF6eVNsb3dQ
YXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogCkBAIC0xMTQ5Myw2ICsx
MTUxNywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIG1faGVhcHMuZGVjb3Jh
dGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsK
KyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxf
Y2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlz
aW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVl
LmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgi
CiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5o
IgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIHN0b3Jl
KTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgpCit7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKK30KKwogdm9pZCBP
dXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKIHsK
ICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CkBAIC03OTUsNyAr
ODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVR5cGVkUG9pbnRlciBPdXRwdXQ6OmFi
c29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZShjb25z
dCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBUeXBlZFBvaW50ZXIobV9oZWFwcy0+YWJz
b2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNlIERGRwogCiBuYW1lc3BhY2UgQjMgewor
Y2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNlVmFsdWU7CiB9IC8vIG5hbWVzcGFjZSBC
MwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgogCiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQ
b2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7Cisg
ICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIo
VHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsK
QEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBoZWFwLmJhc2VJbmRl
eCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25zdGFudCwgb2Zmc2V0KTsKICAgICB9CiAK
LSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCogYWRkcmVzcyk7CisgICAgVHlwZWRQb2lu
dGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3MpOwogCiAgICAgTFZhbHVlIGxvYWQ4U2ln
bkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBs
b2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KICAgICBMVmFsdWUgbG9hZDha
ZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJu
IGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCAr
NTMsMTYgQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKIH07CiAKIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDE7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQg
bWVhbnMgeCBpcyBibGFjay4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgPSAxMDA7IC8vIHggPD0gdGF1dG9sb2dpY2FsVGhyZXNob2xkIGlzIGFsd2F5cyB0cnVl
LgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRocmVzaG9sZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1
bnNpZ25lZCB0aHJlc2hvbGQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
ZWxsU3RhdGUpIDw9IHRocmVzaG9sZDsKK30KIAogaW5saW5lIGJvb2wgaXNCbGFjayhDZWxsU3Rh
dGUgY2VsbFN0YXRlKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0
YXRlKSA8PSBibGFja1RocmVzaG9sZDsKKyAgICByZXR1cm4gaXNXaXRoaW5UaHJlc2hvbGQoY2Vs
bFN0YXRlLCBibGFja1RocmVzaG9sZCk7CiB9CiAKIGlubGluZSBDZWxsU3RhdGUgYmxhY2tlbihD
ZWxsU3RhdGUgY2VsbFN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDQgKzE1NDksMzIgQEAgdm9pZCBIZWFwOjpmb3JFYWNo
Q29kZUJsb2NrSW1wbChjb25zdCBTYwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUo
ZnVuYyk7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSkK
K3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmllclNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAg
IC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFreUJsYWNrVGhyZXNob2xkIGlzIHRhdXRvbG9naWNh
bCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28gZnJvbQorICAgICAgICAvLyBjb3VsZCBzdGlsbCBi
ZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2Zm
IGEgZmVuY2UuCisgICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFp
c0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworfQorCit2b2lkIEhlYXA6OndyaXRl
QmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKK3sKKyAgICBp
ZiAoVU5MSUtFTFkoYmFycmllclNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRo
aXMgY2FzZSwgdGhlIHNuZWFreUJsYWNrVGhyZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3Np
YmxlIHRocmVzaG9sZCwgc28gZnJvbQorICAgICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxh
Y2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2Uu
CisgICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZy
b20tPmNlbGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDYz
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw5ICsxMDQsMTMgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2Vs
bFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
Kik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7Ci0gICAg
dm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CisgICAgdm9pZCB3cml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAgLy8gVGFrZSB0aGlzIGlmIHlv
dSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBzbmVha3lCbGFja1RocmVzaG9sZC4KKyAg
ICB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgdm9p
ZCB3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOwog
CiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBt
X3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIo
SlNDZWxsKik7CkBAIC0yNTQsNiArMjU4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQWxs
b2NhdGVCbG9jayhzaXplX3QgY2FwYWNpdHkpOwogICAgIHZvaWQgZGlkRnJlZUJsb2NrKHNpemVf
dCBjYXBhY2l0eSk7CisgICAgCisgICAgYm9vbCBiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSBjb25z
dCB7IHJldHVybiBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0IGJvb2wqIGFk
ZHJlc3NPZkJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZtX2JhcnJpZXJT
aG91bGRCZUZlbmNlZDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNuZWFreUJsYWNrVGhyZXNob2xk
KCkgY29uc3QgeyByZXR1cm4gbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQorICAgIGNvbnN0IHVu
c2lnbmVkKiBhZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZt
X3NuZWFreUJsYWNrVGhyZXNob2xkOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFs
bG9jYXRpb25TY29wZTsKQEAgLTQxMSw2ICs0MjEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c1NhZmVUb0NvbGxlY3Q7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0ZUJhcnJpZXJC
dWZmZXI7CisgICAgYm9vbCBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNl
RmVuY2VkQmFycmllcigpIH07CisgICAgdW5zaWduZWQgbV9zbmVha3lCbGFja1RocmVzaG9sZCB7
IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDog
YmxhY2tUaHJlc2hvbGQgfTsKIAogICAgIFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxs
R0NMZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwNjMxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxOSArMTI1LDE5IEBAIGlubGluZSB2b2lkIEhl
YXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CiAj
ZW5kaWYKLSAgICBpZiAoIWZyb20gfHwgIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAg
IGlmICghZnJvbSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0
ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hpdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBhZGRUb1Jl
bWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZy
b20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRl
QmFycmllclNsb3coZnJvbSwgdG8pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFM
SUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNr
KGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAg
ICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhy
ZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAg
ICAgIHdyaXRlQmFycmllclNsb3coZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzA2LDE3ICsxMzA2LDU2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRTdG9y
ZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0
ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW5XaXRob3V0RmVuY2UoR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gYnJh
bmNoOChBYm92ZSwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZJc1Jl
bWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbldpdGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICB1aW50
OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6
OmNlbGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1
dGVBZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9
CiAgICAgCisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihHUFJSZWcg
Y2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBsb2FkOChBZGRyZXNzKGNl
bGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVh
cC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAgfQorCisgICAgSnVtcCBz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwsIEdQUlJlZyBzY3Jh
dGNoR1BSKQorICAgIHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKKyAgICAgICAg
bG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92
ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mU25lYWt5
QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
V2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKworICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3RvcmVM
b2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGNlbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEJh
cnJpZXJzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBtZW1vcnlGZW5j
ZSgpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJ
ZlN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNz
T2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAgIH0KKyAgICAKICAgICAvLyBFbWl0cyB0
aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMg
ZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRo
b3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVz
ZSB0aGlzIGlzIHRvCiAgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1
dCB0aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc3LDE0ICsyMTc3LDExIEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKICAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2Vs
bCk7CiB9CiAKLS8vIE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1ZSBhcyBwYXJ0IG9mIHRo
ZSBiYXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lvbgotLy8gcGhhc2UgaW4g
dGhlIERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVpbmcgc3RvcmVkIHRvIGhh
cyBiZWVuIGJhcnJpZXJlZC4gSXQgCi0vLyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxpY2F0ZWQg
dG8gdHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMgd2VsbC4KLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwotICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKKyAgICB2bS0+aGVhcC53cml0
ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA2MzE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxMiw4ICs0MTIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RG
X0lOVEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwg
SlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NS
V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNp
b24gMjA2MzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjczLDggKzY3Myw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAgICAgCi0gICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjg3LDYgKzY4NSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDggKzY2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgLy8g
SW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUg
b2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRl
ciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhC
ZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1
cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCkBA
IC02ODQsNiArNjgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9u
KgogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZh
bHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4p
OwogfQogCkBAIC0xMTgwLDggKzExODAsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
cmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBAIC0xMjE4LDggKzEyMTgs
OCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDEpOworICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsxMjQ2LDkgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIGlmICghb3duZXItPmNlbGxDb250YWluZXIo
KS5pc01hcmtlZChvd25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyKTsKLSAgICAg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93
bmVyKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihvd25lciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVy
Q2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2Fz
ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2
ICs4OTEsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQK
IAogbWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAg
bWVtZmVuY2UKICAgICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hv
bGQsIC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUy
Nyw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAgICAg
ICAkYXNtLnB1dHMgImxlYSN7eDg2U3VmZml4KDpwdHIpfSAje29yZGVyT3BlcmFuZHMob3BlcmFu
ZHNbMF0ueDg2QWRkcmVzc09wZXJhbmQoOnB0ciksIG9wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0
cikpfSIKICAgICAgICAgd2hlbiAibWVtZmVuY2UiCi0gICAgICAgICAgICAkYXNtLnB1dHMgIm1m
ZW5jZSIKKyAgICAgICAgICAgIHNwID0gUmVnaXN0ZXJJRC5uZXcobmlsLCAic3AiKQorICAgICAg
ICAgICAgJGFzbS5wdXRzICJsb2NrOyBvcmwgJDAsICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA2MzE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODIsNiArMTgyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAs
IE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHJldmlz
aW9uIDIwNjMxNCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw1ICs1MywyNCBAQCB2b2lkIEZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OnJl
c2l6ZVNsb3coCiAgICAgbV93b3JkcyA9IG5ld0FycmF5OwogfQogCit2b2lkIEZhc3RCaXRWZWN0
b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChlbmQg
LSBiZWdpbiA8IDMyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsg
KytpKQorICAgICAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBzaXplX3QgZW5kQmVnaW5TbG9wID0gKGJlZ2luICsgMzEpICYgfjMxOworICAg
IHNpemVfdCBiZWdpbkVuZFNsb3AgPSBlbmQgJiB+MzE7CisgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IGJlZ2luOyBpIDwgZW5kQmVnaW5TbG9wOyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7
CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luRW5kU2xvcDsgaSA8IGVuZDsgKytpKQorICAgICAg
ICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBlbmRCZWdpblNsb3AgLyAzMjsg
aSA8IGJlZ2luRW5kU2xvcCAvIDMyOyArK2kpCisgICAgICAgIG1fd29yZHMud29yZChpKSA9IDA7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCShy
ZXZpc2lvbiAyMDYzMTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dv
cmRzLmNsZWFyQWxsKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJSYW5nZShzaXplX3Qg
YmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50
cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVy
V29yZHM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289785</attachid>
            <date>2016-09-25 15:36:50 -0700</date>
            <delta_ts>2016-09-25 17:17:07 -0700</delta_ts>
            <desc>possibly cheaper and less wrong TSO barrier</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72268</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDYgKzM2MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAorICAgIGRm
Zy9ERkdTdG9yZUJhcnJpZXJGZW5jaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MDMsNiArNTAzLDggQEAKIAkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovOyB9OwogCQkwRjdDNUZC
ODFEODg4QTBDMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIg
LyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi87IH07CiAJCTBGN0M1RkJBMUQ4ODk1MDcwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlu
bGluZXMuaCAqLzsgfTsKKwkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8q
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBB
MEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzM1QjcxNjM5
QzFFNjAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2MzlDMUVB
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjc0Myw2ICsyNzQ1LDggQEAKIAkJMEY3QzM5RkUxQzkwQzU1QjAw
NDgwMTUxIC8qIERGR09wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdPcEluZm8uaDsgcGF0aCA9IGRmZy9ERkdPcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja0lubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8q
IE1hcmtlZFNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXJrZWRTcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4
ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0
RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5
QWxsb2NhdGlvblByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgz
MzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTU1LDYgKzY1NTksOCBAQAogCQkJCTBGOUZCNEYz
MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5
REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBG
NEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdG
OTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgg
Ki8sCiAJCQkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5
NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NTQs
NyBAQAogCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFE
MzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3
Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFC
ODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkwOTgsNiArOTEwNSw3IEBACiAJCQkJQTdEODlD
RjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYw
MDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3NCw2ICszNzQsMTEgQEAgcHVibGljOgogICAgICAgICBicmFuY2hQdHIoY29uZCwgb3Ax
LCBpbW0pLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoMzIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFic29sdXRlQWRkcmVz
cyByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2gzMihmbGlwKGNvbmQpLCByaWdo
dCwgbGVmdCk7CisgICAgfQorCiAgICAgdm9pZCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgTGFiZWwgdGFyZ2V0KQogICAg
IHsKICAgICAgICAgYnJhbmNoMzIoY29uZCwgb3AxLCBvcDIpLmxpbmtUbyh0YXJnZXQsIHRoaXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzE2LDYgKzIzMTYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
bWVtb3J5VGVtcFJlZ2lzdGVyLCByaWdodCk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklE
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIGdldENhY2hlZE1lbW9yeVRlbXBS
ZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQs
IG1lbW9yeVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoMzIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdo
dCkKICAgICB7CiAgICAgICAgIGxvYWQzMihsZWZ0LCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0
ZXJJREFuZEludmFsaWRhdGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NDksNyArMTQ0OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7CiAgICAgfQogCi0g
ICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwg
VHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBs
b2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihj
b25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBUcnVzdGVk
SW1tMzIgcmlnaHQpCiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBp
bmNhc2UgdGhlIGJyYW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KICAg
ICAgICAgbG9hZDMyKGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1
YmxpYzoKIAogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YW5kMzI7CisgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OmJyYW5jaDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjpicmFuY2hBZGQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6b3Iz
MjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3ViMzI7CkBAIC04MjgsNiAr
ODI5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ybShyaWdodCwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkp
KTsKICAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGxlZnQubV9wdHIsIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIHNjcmF0Y2hSZWdpc3RlcigpLCByaWdodCk7CisgICAgfQogCiAgICAg
SnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwg
UmVnaXN0ZXJJRCByaWdodCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMDksMjkgKzEzMDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBoYWQgYWxsb2Nh
dGVkIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGVuIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBleGVjdXRl
ZCB0aGUgc3RvcmUKLSAgICAgICAgLy8gYmFycmllciBhbmQgd2Ugd291bGQgaGF2ZSBhbHJlYWR5
IHN0b3JlZCB0aGUgYnV0dGVyZmx5IGludG8gdGhlIG9iamVjdC4KICAgICAgICAgaWYgKGFsbG9j
YXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIp
OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBq
aXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
MzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFu
Y2gzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHNj
cmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
Mik7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVm
ZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVm
ZmVyKCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9m
IC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIy
LgotICAgICAgICAgICAgaml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIzLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7
Ci0gICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhl
IHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQKICAgICAgICAg
ICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQgaXMgZm9yZ290dGVu
IGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAgLy8gcGF0aC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkgXAogICAgIG1hY3Jv
KEdldHRlclNldHRlcl9nZXR0ZXIpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCisgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSkgXAogICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUpIFwKKyAgICBtYWNybyhKU0Nl
bGxfc3RydWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9GbGFncykgXAogICAg
IG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUpIFwKICAgICBtYWNybyhKU09iamVjdF9idXR0ZXJm
bHkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjg0NCwxMSArMjg0NCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9y
ZUJhcnJpZXI6IHsKICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBjYXNlIENoZWNrVGllclVwQW5k
T1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwNSwxMSArNDA1LDIwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgUHJvZmlsZVR5cGU6
CiAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAg
ICAgY2FzZSBQdXRIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICByZWFkKEpTQ2Vs
bF9jZWxsU3RhdGUpOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKKyAgICAgICAg
cmVhZChIZWFwKTsKKyAgICAgICAgd3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHJl
dHVybjsKKwogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVT
dGF0ZSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdh
dGNocG9pbnRfZmlyZSksIExhenlOb2RlKG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRl
KEdyYXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMg
b2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCiAgICAgICAgIC8vIGhl
YXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3Qs
IGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KICAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2
LDYgKzE5Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNl
IFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIElu
dmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBDaGVja0lu
Qm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDYgKzE0MDIsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2UgUmVjb3JkUmVnRXhwQ2FjaGVkUmVz
dWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZp
c2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdy
YXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAg
IGNhc2UgUmVjb3JkUmVnRXhwQ2FjaGVkUmVzdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsNyArODk3LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc1N0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9
PSBTdG9yZUJhcnJpZXI7CisgICAgICAgIHJldHVybiBvcCgpID09IFN0b3JlQmFycmllciB8fCBv
cCgpID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICB9CiAKICAgICBib29sIGhhc0lkZW50aWZp
ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzYsOCArMzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIFwKICAgICAvKiBDaGVja3MgdGhlIHdhdGNoZG9nIHRpbWVyLiBJZiB0aGUg
dGltZXIgaGFzIGZpcmVkLCB3ZSBjYWxsIG9wZXJhdGlvbiBvcGVyYXRpb25IYW5kbGVXYXRjaGRv
Z1RpbWVyKi8gXAogICAgIG1hY3JvKENoZWNrV2F0Y2hkb2dUaW1lciwgTm9kZU11c3RHZW5lcmF0
ZSkgXAotICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCisgICAgLyogV3JpdGUgYmFycmllcnMg
Ki9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAogICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
NyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGFj
a0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0
aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRm
Zyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsKKyAg
ICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAgcGVyZm9y
bUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUdsb2JhbFN0
b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92YWwoKSkK
ICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3Jt
Q2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgIGNh
c2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAg
ICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0b3JlQmFy
cmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6
CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGluZyB0aGlz
IG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2YXRpdmVs
eSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBmb3JjZXMg
dGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJlIHRoZXkg
d2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXplIGVmZmVj
dHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3JkZXJlZCBw
cmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAgICAgIC8v
IGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCByaWdodCBu
b3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjgsMTgg
KzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVy
KEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFpc0tub3du
Tm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1
ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUu
dGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLX0K
LQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTUwMTIsNiArNTAwMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2U6IHsKKyAgICAgICAgY29tcGlsZVN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNl
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKQEAgLTU0NzQsMjAgKzU0NjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZh
bHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2Rl
KCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90
RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3Rv
cmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNL
bm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0
KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewog
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFs
dWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkp
OwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAg
d3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gx
LmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2LDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdW5yZWFjaGFibGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAg
ICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAg
ICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIwICs1NTYzLDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlm
ICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9q
aXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0gICAgCi0gICAgSklU
Q29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5u
b2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQotCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNo
ZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyKTsKKyAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9y
ZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5vcCgpID09IEZlbmNl
ZFN0b3JlQmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0gICAgbm9SZXN1bHQo
bm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBz
Y3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNj
cmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgeworICAgICAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1faml0LnNuZWFreUp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7CisgICAgICAg
IAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmU3RvcmVC
YXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9qaXQubWVtb3J5RmVu
Y2UoKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVt
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAgICAgICBu
b0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0
RmVuY2UoYmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikK
LXsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdyaXRlQmFycmllckJ1
ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmll
ckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRl
eEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNo
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5
KCkpKTsKKyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNo
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDJH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFj
aXR5KCkpKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwot
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJH
UFIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdy
aXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDFHUFIpOwog
ICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJl
YWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIoY2VsbCwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisgICAgbV9q
aXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQ
Uiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKIAogICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwogICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsK
LX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BS
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
aygmbV9qaXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1cnJlbnROb2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dyaXRlQmFycmllckJ1
ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwotCi0g
ICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJl
ZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
OwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAogICAgIHN0YXRpYyBH
UFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywg
R1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZh
bGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKQEAgLTczOCw4ICs3
MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsKLQogICAgIHZvaWQg
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVy
YW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVuY2luZyIpCisgICAg
ICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29s
IHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAg
ICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNpemUoKSk7CisgICAg
ICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUoKTsKKyAgICAgICAg
ICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9pbnRzLmNsZWFyUmFu
Z2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXplcyBldmVyeXRoaW5n
IHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0cnVjdCBDaGlsZEFu
ZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAgICAgIAorICAgICAg
ICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbikK
KyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNlbWFudGljT3JpZ2lu
KHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3Jp
Z2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5KCkpOworICAgICAg
ICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVyZSB3ZSB3b3VsZCB3
YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQorICAgICAgICAvLyBi
YWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0byB0ZWxsIHVzIGlm
IHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMgYSBiYWNrd2FyZHMg
YW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVsbHMgdXMgaWYgYSBH
QyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVyIHRoYXQgbm9kZS4K
KyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoZG9lc0dDKG1f
Z3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpIHsK
KyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5p
c1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJyaWVy
UG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3
ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEgYmFy
cmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5jZS4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2luIG9y
aWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBwZW5k
KENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGljKSk7
CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgICAg
IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAgICAg
ICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFuZE9y
aWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxkIDwg
Yi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gc3Rk
Ojp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25l
ZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRP
cmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0ZXIt
PmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBpdGVy
LT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
VHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50QmFy
cmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1hbnRp
YyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtub3du
Q2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5y
ZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENoaWxk
QW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBoKQor
eworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdyYXBo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhhdCBj
b3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIg
YW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFrZXMg
b25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIgd2hp
bGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBhbHNv
IHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVyIG1h
eSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2JqZWN0
LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8gb25l
IG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAiZWFy
bGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHByb3Bl
cnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxsKCkK
Ky8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0b3Jl
QmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGU6
IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6
KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNl
dChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVycyBp
cyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28gZG9l
c0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJlIGFy
ZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8KKy8v
IHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2VlbiBA
IGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJhcnJp
ZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdoZXJl
IHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNpbmNl
IHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVzZSB0
aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUgYmFy
cmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAgIGE6
IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDogUHV0
QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6KQor
Ly8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9yZUJh
cnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdl
dEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9lcyBt
b3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZlbmNl
cyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2lsbCBv
dXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZzZXQo
QG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGY6
IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVyKEBv
KQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChAcSkK
Ky8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBib3Ro
IG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1cnJl
bnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWluZyBp
bnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgorLy8g
dGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZpcnN0
IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cgcGF0
aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93IHBh
dGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmllcnMg
d2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1iZXIg
dGhlIG9iamVjdC4KKy8vCisvLyBGSVhNRTogSWYgd2Ugc2luayBiYXJyaWVycywgd2UgbmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB3ZSBleGVjdXRlIGJhcnJpZXJzIHVwb24gT1NSIGV4aXQuCitib29s
IHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw3ICszMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3du
IGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IEVkZ2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAg
ICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDMwLDEzICs0MzAsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgSW5zZXJ0aW5nIGJhcnJpZXIuXG4iKTsKLSAgICAgICAgaW5zZXJ0QmFycmll
cihtX25vZGVJbmRleCwgYmFzZSk7CisgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQgbm9k
ZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wgZXhpdE9LID0gdHJ1ZSkKKyAgICB2b2lkIGluc2VydEJh
cnJpZXIodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCiAgICAgewotICAgICAgICAvLyBJ
bnNlcnRpbmcgYSBiYXJyaWVyIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBtYXkgYmVjb21lIG1hcmtl
ZCBieSB0aGUgR0MsIHdoaWNoIHdpbGwgbWFrZQotICAgICAgICAvLyB0aGUgb2JqZWN0IGJsYWNr
LgorICAgICAgICAvLyBUaGlzIGlzIGp1c3Qgb3VyIHdheSBvZiBzYXlpbmcgdGhhdCBiYXJyaWVy
cyBhcmUgbm90IHJlZHVuZGFudCB3aXRoIGVhY2ggb3RoZXIgYWNjb3JkaW5nCisgICAgICAgIC8v
IHRvIGZvcndhcmQgYW5hbHlzaXM6IGlmIHdlIHByb3ZlZCBvbmUgdGltZSB0aGF0IGEgYmFycmll
ciB3YXMgbmVjZXNzYXJ5IHRoZW4gaXQnbGwgZm9yCisgICAgICAgIC8vIHN1cmUgYmUgbmVjZXNz
YXJ5IG5leHQgdGltZS4KICAgICAgICAgYmFzZS0+c2V0RXBvY2goRXBvY2goKSk7CiAKICAgICAg
ICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUg
YmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KQEAgLTQ0NiwxNyArNDQ3LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdXBwb3J0IFN0b3JlQmFycmllcihV
bnR5cGVkVXNlOikuIFRoYXQgd291bGQgYmUgc29ydCBvZiBjb29sLgogICAgICAgICAvLyBCdXQg
cmlnaHQgbm93IHdlIGRvbid0IG5lZWQgaXQuCiAKLSAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFs
IGVkZ2Ugd2FzIHVuY2hlY2tlZCwgd2Ugc2hvdWxkIGFsc28gbm90IGhhdmUgYSBjaGVjay4gV2Ug
bWF5IGJlIGluIGEgY29udGV4dAotICAgICAgICAvLyB3aGVyZSBjaGVja3MgYXJlIG5vdCBhbGxv
d2VkLiBJZiB3ZSBldmVyIGRpZCBoYXZlIHRvIGluc2VydCBhIGJhcnJpZXIgYXQgYW4gRXhpdElu
dmFsaWQKLSAgICAgICAgLy8gY29udGV4dCBhbmQgdGhhdCBiYXJyaWVyIG5lZWRlZCBhIGNoZWNr
LCB0aGVuIHdlIGNvdWxkIG1ha2UgdGhhdCB3b3JrIGJ5IGhvaXN0aW5nIHRoZSBjaGVjay4KLSAg
ICAgICAgLy8gVGhhdCBkb2Vzbid0IGhhcHBlbiByaWdodCBub3cuCi0gICAgICAgIGlmIChiYXNl
LnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpIHsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBtX25vZGUtPm9yaWdpbi5leGl0T0spOwotICAgICAgICAgICAgYmFzZS5z
ZXRVc2VLaW5kKENlbGxVc2UpOwotICAgICAgICB9CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBpc0NlbGwoYmFzZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEJhcnJpZXJzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIG5vZGUgdGhhdCB0aGV5IHNl
cnZpY2UuIFRoZXJlZm9yZSwgd2UgYWx3YXlzIGtub3cKKyAgICAgICAgLy8gdGhhdCB0aGUgdGhp
bmcgaXMgYSBjZWxsIG5vdy4KKyAgICAgICAgYmFzZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgIAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOwor
ICAgICAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbV9ub2RlKSkKKyAgICAgICAg
ICAgIG9yaWdpbiA9IG9yaWdpbi53aXRoSW52YWxpZEV4aXQoKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGVUeXBlIHR5cGU7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmll
cnMoKSkKKyAgICAgICAgICAgIHR5cGUgPSBGZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CiAgICAgICAgIAotICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGV4aXRPSyksIGJh
c2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIHR5cGUsIG9yaWdpbiwgYmFzZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgcmVhbGx5SW5z
ZXJ0QmFycmllcnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogY2xhc3MgR3JhcGg7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMg
aW4gYSBibG9jay1sb2NhbCBtYW5uZXIgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBhYnN0cmFjdCBp
bnRlcnByZXRlci4KLS8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZv
aWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVycy4gVGhpcyBwaGFzZSByZXF1aXJlcwotLy8g
dGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KKy8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5h
bHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmpl
Y3RzLiBUaGlzCisvLyBwaGFzZSByZXF1aXJlcyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgogYm9v
bCBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiAvLyBJbnNlcnRz
IHN0b3JlIGJhcnJpZXJzIHVzaW5nIGEgZ2xvYmFsIGFuYWx5c2lzIGFuZCBjb25zdWx0cyB0aGUg
YWJzdHJhY3QgaW50ZXJwcmV0ZXIuIFVzZXMgYQotLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5
c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMsIGJ1dCBvbmx5IHByb3Bh
Z2F0ZXMgInNhbWUKLS8vIGVwb2NoIGFzIGN1cnJlbnQiIHByb3BlcnR5IGZyb20gb25lIGJsb2Nr
IHRvIHRoZSBuZXh0LiBUaGlzIHBoYXNlIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZQotLy8gYWxz
byByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgorLy8gc2ltcGxlIGVwb2No
LWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxv
Y2F0ZWQgb2JqZWN0cy4gVGhpcyBwaGFzZQorLy8gcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlIGFs
c28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KIGJvb2wgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMiArMTk2LDEyIEBAIHB1YmxpYzoK
ICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55QWRkcmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJh
Y3RIZWFwJiBhdCh2b2lkKiBhZGRyZXNzKQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQoY29u
c3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2luZGV4ZWRIZWFwLmF0
KGJpdHdpc2VfY2FzdDxwdHJkaWZmX3Q+KGFkZHJlc3MpKTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKHZvaWQqIGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFk
ZHJlc3MpOyB9CisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFkZHJlc3MpOyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAK
ICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMTE2LDYgKzExNywxNiBAQCB2b2lkIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlUGF0CiAgICAgbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKIH0KIAordm9pZCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAq
IGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVJlYWQuYXBwZW5kKEhl
YXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OmRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVh
cCwgdmFsdWUpKTsKK30KKwogdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFu
Z2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMoKQogewogICAgIHJvb3QuY29tcHV0ZSgpOwpAQCAt
MTMyLDkgKzE0MywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5n
CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2FsbFdyaXRlKQogICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRy
eS5oZWFwLT5yYW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9y
UGF0Y2hwb2ludFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUt
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdl
KCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50V3Jp
dGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRl
cyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBm
b3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlUmVhZCkKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJlYWQgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVhcC0+cmFu
Z2UoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVjb3JhdGVDQ2FsbFdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpW
YWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQYXRjaHBvaW50UmVhZChjb25zdCBBYnN0cmFjdEhl
YXAqLCBCMzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFdyaXRlKGNvbnN0
IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVJlYWQo
Y29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0ZUZlbmNl
V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAKICAgICB2b2lkIGNvbXB1
dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpOwogCkBAIC0yNDEsNiArMjQzLDggQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JDQ2FsbFdyaXRlOwog
ICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRSZWFkOwogICAgIFZl
Y3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZTsKKyAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVJlYWQ7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1
ZT4gbV9oZWFwRm9yRmVuY2VXcml0ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRl
T2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgVGFp
bENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1
ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKQEAgLTk0NSw2ICs5NDYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY29tcGlsZUNvdW50RXhlY3V0aW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgpAQCAtNjk5NSw5
ICs2OTk3LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIo
KQogICAgIHsKLSAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKICAgICB9Ci0KKyAgICAKICAg
ICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtODEyNiw4ICs4MTI4LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsK
LSAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDA1MywxMyAr
MTAwNTMsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBydW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQg
Y3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNlLCB5b3Ugc2hvdWxkIG5vdCB1c2UgYnktcmVmZXJl
bmNlCiAgICAgLy8gY2FwdHVyZSAoaS5lLiBbJl0pIGluIGFueSBvZiB0aGVzZSBsYW1iZGFzLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKICAgICB7
CiAgICAgICAgIHJldHVybiBsYXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFy
Z3VtZW50cy4uLiB9KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVj
dG9yPExWYWx1ZT4mIHVzZXJBcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xv
d1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJB
cmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwogICAgICAgICAKQEAgLTExNDI5LDI2ICsxMTQyOSwzOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZDhaZXJvRXh0MzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVl
IGJhc2UpCisgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBib29sIGlzRmVu
Y2VkKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OwogCisgICAgICAgIExWYWx1ZSB0aHJlc2hvbGQ7CisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAg
ICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhl
YXAuYWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5jb25zdEludDMyKGJsYWNrVGhyZXNob2xkKTsKKyAg
ICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxv
YWRDZWxsU3RhdGUoYmFzZSksIG1fb3V0LmNvbnN0SW50MzIoYmxhY2tUaHJlc2hvbGQpKSwKKyAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGxvYWRDZWxsU3RhdGUoYmFzZSksIHRocmVzaG9sZCksCiAg
ICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwogCiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJh
cnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZl
ciBmaXJlLiBBbmQKICAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNl
IGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgog
ICAgICAgICAvLyB3YXN0aW5nIEIzJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBsYXp5
U2xvd1BhdGgoCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGxhenlTbG93
UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKIAogICAgICAgICAgICAg
ICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKICAgICAgICAgICAgICAg
ICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZlbmNlZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0ZlbmNlID0g
aml0Lmp1bXBJZlN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1lbW9yeUZlbmNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub0ZlbmNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CkBAIC0xMTQ5Myw2ICsxMTUw
NiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAg
ICAgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5yb290LCBw
YXRjaHBvaW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBh
dGNocG9pbnRSZWFkKCZtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOworICAg
ICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFdyaXRlKCZtX2hlYXBzLkpTQ2VsbF9jZWxs
U3RhdGUsIHBhdGNocG9pbnQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIK
KyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCkBA
IC00NDUsNiArNDQ2LDExIEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVk
UG8KICAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3RvcmUpOwog
fQogCitGZW5jZVZhbHVlKiBPdXRwdXQ6OmZlbmNlKCkKK3sKKyAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCkpOworfQorCiB2b2lkIE91dHB1
dDo6c3RvcmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQogewogICAg
IExWYWx1ZSBzdG9yZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZTgsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsKQEAgLTc5NSw3ICs4MDEs
NyBAQCB2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotVHlwZWRQb2ludGVyIE91dHB1dDo6YWJzb2x1
dGUodm9pZCogYWRkcmVzcykKK1R5cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCiB7CiAgICAgcmV0dXJuIFR5cGVkUG9pbnRlcihtX2hlYXBzLT5hYnNvbHV0
ZVthZGRyZXNzXSwgY29uc3RJbnRQdHIoYWRkcmVzcykpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBA
IHN0cnVjdCBOb2RlOwogfSAvLyBuYW1lc3BhY2UgREZHCiAKIG5hbWVzcGFjZSBCMyB7CitjbGFz
cyBGZW5jZVZhbHVlOwogY2xhc3MgU2xvdEJhc2VWYWx1ZTsKIH0gLy8gbmFtZXNwYWNlIEIzCiAK
QEAgLTE4OSw2ICsxOTAsNyBAQCBwdWJsaWM6CiAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50
ZXIsIExUeXBlKTsKICAgICB2b2lkIHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyKTsKKyAgICBC
Mzo6RmVuY2VWYWx1ZSogZmVuY2UoKTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihUeXBl
ZFBvaW50ZXIpOwogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIpOwpAQCAt
Mjg1LDcgKzI4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0
aGlzLCBiYXNlLCBpbmRleCwgaW5kZXhBc0NvbnN0YW50LCBvZmZzZXQpOwogICAgIH0KIAotICAg
IFR5cGVkUG9pbnRlciBhYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKTsKKyAgICBUeXBlZFBvaW50ZXIg
YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcyk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0
MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4
U2lnbkV4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQogICAgIExWYWx1ZSBsb2FkOFplcm9F
eHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9h
ZDhaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1Mywx
NiBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogfTsKIAogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMTsgLy8geCA8PSBibGFja1RocmVzaG9sZCBtZWFu
cyB4IGlzIGJsYWNrLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA9IDEwMDsgLy8geCA8PSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgaXMgYWx3YXlzIHRydWUuCisK
K2lubGluZSBib29sIGlzV2l0aGluVGhyZXNob2xkKENlbGxTdGF0ZSBjZWxsU3RhdGUsIHVuc2ln
bmVkIHRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxT
dGF0ZSkgPD0gdGhyZXNob2xkOworfQogCiBpbmxpbmUgYm9vbCBpc0JsYWNrKENlbGxTdGF0ZSBj
ZWxsU3RhdGUpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU3RhdGUp
IDw9IGJsYWNrVGhyZXNob2xkOworICAgIHJldHVybiBpc1dpdGhpblRocmVzaG9sZChjZWxsU3Rh
dGUsIGJsYWNrVGhyZXNob2xkKTsKIH0KIAogaW5saW5lIENlbGxTdGF0ZSBibGFja2VuKENlbGxT
dGF0ZSBjZWxsU3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NDksNCArMTU0OSwzMiBAQCB2b2lkIEhlYXA6OmZvckVhY2hDb2Rl
QmxvY2tJbXBsKGNvbnN0IFNjCiAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5j
KTsKIH0KIAordm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZy
b20pCit7CisgICAgaWYgKFVOTElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAg
ICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0YXV0b2xv
Z2ljYWwgaW1wb3NzaWJsZSB0aHJlc2hvbGQsIHNvIGZyb20KKyAgICAgICAgLy8gY291bGQgc3Rp
bGwgYmUgbm90IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRpbCB3ZSBmaXJl
IG9mZiBhIGZlbmNlLgorICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CisgICAgICAgIGlm
ICghaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCit7Cisg
ICAgaWYgKFVOTElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAgICAgICAvLyBJ
biB0aGlzIGNhc2UsIHRoZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0YXV0b2xvZ2ljYWwgaW1w
b3NzaWJsZSB0aHJlc2hvbGQsIHNvIGZyb20KKyAgICAgICAgLy8gY291bGQgc3RpbGwgYmUgbm90
IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRpbCB3ZSBmaXJlIG9mZiBhIGZl
bmNlLgorICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CisgICAgICAgIGlmICghaXNCbGFj
ayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hpdGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsOSArMTA0LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgc2l6ZV90
IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpT
Q2VsbCopOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwot
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOworICAgIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOworICAgIAorICAgIHZvaWQgd3JpdGVCYXJy
aWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgCisgICAgLy8gVGFrZSB0
aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBzbmVha3lCbGFja1RocmVz
aG9sZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNv
bnN0IEpTQ2VsbCogZnJvbSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJp
ZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOwogCiAgICAgV3JpdGVC
YXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmll
ckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CkBA
IC0yNTQsNiArMjYwLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQWxsb2NhdGVCbG9jayhz
aXplX3QgY2FwYWNpdHkpOwogICAgIHZvaWQgZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7
CisgICAgCisgICAgYm9vbCBiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSBjb25zdCB7IHJldHVybiBt
X2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0IGJvb2wqIGFkZHJlc3NPZkJhcnJp
ZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZtX2JhcnJpZXJTaG91bGRCZUZlbmNl
ZDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQorICAgIGNvbnN0IHVuc2lnbmVkKiBhZGRy
ZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZtX3NuZWFreUJsYWNr
VGhyZXNob2xkOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpb25TY29w
ZTsKQEAgLTQxMSw2ICs0MjMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxl
Y3Q7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0ZUJhcnJpZXJCdWZmZXI7CisgICAg
Ym9vbCBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmll
cigpIH07CisgICAgdW5zaWduZWQgbV9zbmVha3lCbGFja1RocmVzaG9sZCB7IE9wdGlvbnM6OmZv
cmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hv
bGQgfTsKIAogICAgIFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSwxOSArMTI1LDI4IEBAIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAg
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CiAjZW5kaWYKLSAgICBp
ZiAoIWZyb20gfHwgIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICghZnJvbSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxT
dGF0ZTo6TmV3V2hpdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQo
ZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0
ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQ
YXRoKGZyb20sIHRvKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5j
ZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1Ro
cmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOworfQorCitp
bmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBm
cm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0Nl
bGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9S
ZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChm
cm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQpKSkKKyAgICAgICAgYWRkVG9SZW1lbWJl
cmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZChzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwNiwxNyArMTMw
Niw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRo
VHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBS
ZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihH
UFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZl
bmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFk
ZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihibGFj
a1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRo
b3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhhZGRy
ZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogICAgIAorICAgIEp1
bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwsIEdQUlJlZyBz
Y3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNl
bGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihB
Ym92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mU25l
YWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICB7
CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihj
ZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3Ms
IHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIs
IEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xk
KCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihH
UFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCk7
CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShj
ZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2Vs
bCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCk7Cisg
ICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShjZWxs
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgpCisg
ICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAgICAg
b2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclNob3Vs
ZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1
Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0
aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hl
cmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bwog
ICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3Ry
aW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCi0vLyBO
QjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUgYmFycmllciBiZWNh
dXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRoZSBERkcgb25seSB0
cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMgYmVlbiBiYXJyaWVy
ZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRvIHRyeSB0byBtb2Rl
bCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+
aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xvd1Bh
dGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOCArNDEyLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmll
cihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2Vw
dGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJ
ZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgCisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJ
ZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJl
ZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50
cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2Ug
Z2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFy
ZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAtNjg0LDYgKzY4Miw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3Vs
ZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMTE4
MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQog
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QwKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDggQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93
bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdU
MSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAK
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCkuaXNNYXJrZWQob3du
ZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQpAQCAtMTM5MCw4
ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgaWYgKG5lZWRz
TGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8g
PT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRl
QmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5s
YXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgIH0KICAgICAK
ICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4OTEsNyBAQCBtYWNy
byBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFjcm8gc2tpcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVtZmVuY2UKICAgICBi
YmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQsIC5kb25lCiAgICAg
c2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20v
eDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNyw4IEBAIGNsYXNzIElu
c3RydWN0aW9uCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAgICAgICAkYXNtLnB1dHMgImxl
YSN7eDg2U3VmZml4KDpwdHIpfSAje29yZGVyT3BlcmFuZHMob3BlcmFuZHNbMF0ueDg2QWRkcmVz
c09wZXJhbmQoOnB0ciksIG9wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cikpfSIKICAgICAgICAg
d2hlbiAibWVtZmVuY2UiCi0gICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKKyAgICAgICAg
ICAgIHNwID0gUmVnaXN0ZXJJRC5uZXcobmlsLCAic3AiKQorICAgICAgICAgICAgJGFzbS5wdXRz
ICJsb2NrOyBvcmwgJDAsICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiAr
MTgyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0
ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2ZXJib3Nl
U2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNl
R2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNl
Q29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRv
dWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAsIE5vcm1hbCwgbnVsbHB0
cikgXApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1
ICs1MywyNCBAQCB2b2lkIEZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OnJlc2l6ZVNsb3coCiAgICAg
bV93b3JkcyA9IG5ld0FycmF5OwogfQogCit2b2lkIEZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2Uo
c2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKQorICAgICAgICAg
ICAgYXQoaSkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgZW5kQmVnaW5TbG9wID0gKGJlZ2luICsgMzEpICYgfjMxOworICAgIHNpemVfdCBiZWdpbkVu
ZFNsb3AgPSBlbmQgJiB+MzE7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwg
ZW5kQmVnaW5TbG9wOyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXpl
X3QgaSA9IGJlZ2luRW5kU2xvcDsgaSA8IGVuZDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSBlbmRCZWdpblNsb3AgLyAzMjsgaSA8IGJlZ2luRW5kU2xv
cCAvIDMyOyArK2kpCisgICAgICAgIG1fd29yZHMud29yZChpKSA9IDA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBl
bmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZl
Y3RvciBjaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyV29yZHM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289786</attachid>
            <date>2016-09-25 17:17:07 -0700</date>
            <delta_ts>2016-09-25 17:22:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvbiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
YnJhbmNoMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmJyYW5jaDMyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OmJyYW5jaDY0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJzRXhpdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdN
YXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmlzU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlND
OjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcpOgorICAgICAgICAq
IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICog
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RI
ZWFwLmg6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6OmF0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAg
ICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNB
bmREZWNvcmF0ZUluc3RydWN0aW9ucyk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3RvcmFnZUZvclRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsYXp5U2xvd1Bh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0U3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmZlbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFic29sdXRlKToKKyAg
ICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgICogaGVhcC9DZWxsU3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6aXNXaXRoaW5UaHJlc2hvbGQpOgorICAgICAgICAoSlNDOjppc0JsYWNrKToK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXJTbG93UGF0aCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmJhcnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZkJh
cnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnNuZWFreUJsYWNrVGhy
ZXNob2xkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hv
bGQpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZl
bmNlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVCYXJyaWVy
U3RvcmVMb2FkRmVuY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IG9mZmxpbmVhc20veDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2
LTA5LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjIwNjIyMSk6IFtVU0VSXSBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2ZWxv
cG1lbnQgYXQgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlOiB2bUVudHJ5VG9KYXZhU2NyaXB0ICsg
Mjk5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MSw2ICszNjEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKKyAg
ICBkZmcvREZHU3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBACiAJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAv
KiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLzsgfTsKIAkJMEY3
QzVGQjgxRDg4OEEwQzAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjcxRDg4OEEwMTAwNDRG
NUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovOyB9OwogCQkwRjdDNUZCQTFEODg5NTA3MDA0
NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3Bh
Y2VJbmxpbmVzLmggKi87IH07CisJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMzNUI3
MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5
QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NDMsNiArMjc0NSw4IEBACiAJCTBGN0MzOUZFMUM5MEM1
NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFya2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
N0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5n
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMz
MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU1NSw2ICs2NTU5LDggQEAKIAkJCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovLAogCQkJCTBG
NEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8sCisJCQkJMEY3Rjk4ODkxRDk1OTZD
MzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5oICovLAogCQkJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLApAQCAtNzk0OCw2ICs3
OTU0LDcgQEAKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyOERB
RTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
ODUxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDk4LDYgKzkxMDUsNyBAQAogCQkJCUE3
RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkx
OEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzQsNiArMzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgYnJhbmNoUHRyKGNvbmQs
IG9wMSwgaW1tKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBYnNvbHV0ZUFk
ZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoMzIoZmxpcChjb25kKSwg
cmlnaHQsIGxlZnQpOworICAgIH0KKwogICAgIHZvaWQgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIExhYmVsIHRhcmdldCkK
ICAgICB7CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIG9wMSwgb3AyKS5saW5rVG8odGFyZ2V0LCB0
aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMxNiw2ICsyMzE2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIG1lbW9yeVRlbXBSZWdpc3RlciwgcmlnaHQpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBnZXRDYWNoZWRNZW1vcnlU
ZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihj
b25kLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIg
cmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMzIobGVmdCwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ5LDcgKzE0NDksMTMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOwogICAgIH0K
IAotICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxl
ZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgVHJ1
c3RlZEltbTMyIHJpZ2h0KQogICAgIHsKICAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0
ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0v
CiAgICAgICAgIGxvYWQzMihsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
XzY0LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QCBwdWJsaWM6CiAKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YWRkMzI7CiAg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFuZDMyOworICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2gzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbjo6YnJhbmNoQWRkMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
Om9yMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN1YjMyOwpAQCAtODI4
LDYgKzgyOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcm0ocmlnaHQs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2Nh
bGUpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNv
bmQpKSk7CiAgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBzY3JhdGNoUmVnaXN0ZXIoKSwgcmlnaHQpOworICAgIH0KIAog
ICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA5LDI5ICsxMzA5LDcgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2Yo
SlNWYWx1ZSkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgaGFkIGFs
bG9jYXRlZCB1c2luZyBhbiBvcGVyYXRpb24gdGhlbiB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgZXhl
Y3V0ZWQgdGhlIHN0b3JlCi0gICAgICAgIC8vIGJhcnJpZXIgYW5kIHdlIHdvdWxkIGhhdmUgYWxy
ZWFkeSBzdG9yZWQgdGhlIGJ1dHRlcmZseSBpbnRvIHRoZSBvYmplY3QuCiAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNl
R1BSKTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVy
ID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgICAgICBqaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hH
UFIyKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBzY3JhdGNoR1BSMiwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUjIpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmll
ckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVy
LmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNl
dCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNo
R1BSMi4KLSAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICBiYXNlR1BS
LAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAotICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSMywgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIs
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCop
KSkpOwotICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOwot
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0ZXJmbHkgYW5k
IHRoZSBzdHJ1Y3R1cmUgbGFzdC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0CiAgICAg
ICAgICAgICAvLyB3aGF0ZXZlciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50IGlzIGZvcmdv
dHRlbiBpZiB3ZSBjaG9vc2UgdG8gYnJhbmNoIHRvIHNsb3cKICAgICAgICAgICAgIC8vIHBhdGgu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RI
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBt
YWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRl
cikgXAotICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAorICAgIG1hY3JvKEpTQ2VsbF9j
ZWxsU3RhdGUpIFwKICAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlKSBcCisgICAgbWFjcm8o
SlNDZWxsX3N0cnVjdHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwK
ICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0
dGVyZmx5KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4NDQsMTEgKzI4NDQsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNl
IFN0b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOiB7CiAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJV
cEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MDUsMTEgKzQwNSwyMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFByb2ZpbGVU
eXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgotICAgIGNhc2UgU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgcmVhZChK
U0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgd3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAg
ICAgIHJlYWQoSGVhcCk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgICAgICB3cml0ZShT
aWRlU3RhdGUpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50TG9j
LCBXYXRjaHBvaW50X2ZpcmUpLCBMYXp5Tm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgYm9vbCBjbG9iYmVyc0V4aXRT
dGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgICAgIC8vIFRoZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0
IGlzIG9ic2VydmFibGUuIEl0IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAv
LyBoZWFwcyBpbnRvIHRob3NlIHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJl
bid0LCBidXQgd2UgZG9uJ3QgZG8gdGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Niw2ICsxOTYsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAg
Y2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2Fz
ZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgQ2hl
Y2tJbkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw2ICsxNDAyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2Ug
U2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hl
ZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1w
bChHcmFwaCYgZ3JhcGgsIE5vZGUqCiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoK
ICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODk3LDcgKzg5Nyw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTdG9yZUJhcnJpZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gU3RvcmVCYXJyaWVyOworICAgICAgICByZXR1cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXIg
fHwgb3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgfQogCiAgICAgYm9vbCBoYXNJZGVu
dGlmaWVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDggKzM3Niw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBcCiAgICAgLyogQ2hlY2tzIHRoZSB3YXRjaGRvZyB0aW1lci4gSWYg
dGhlIHRpbWVyIGhhcyBmaXJlZCwgd2UgY2FsbCBvcGVyYXRpb24gb3BlcmF0aW9uSGFuZGxlV2F0
Y2hkb2dUaW1lciovIFwKICAgICBtYWNybyhDaGVja1dhdGNoZG9nVGltZXIsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKLSAgICAvKiBXcml0ZSBiYXJyaWVycyAhICovXAorICAgIC8qIFdyaXRlIGJhcnJp
ZXJzICovXAogICAgIG1hY3JvKFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKEZlbmNlZFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAg
ICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2RlcyAqL1wKICAgICBtYWNybyhHZXRFbnVtZXJh
YmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYg
KzY0LDcgQEAKICNpbmNsdWRlICJERkdTU0FMb3dlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZH
U3RhY2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaCIKQEAgLTM2Miw2ICszNjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlv
bihkZmcpOwogCiAgICAgICAgIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7
CisgICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1DbGVhblVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtRENFKGRmZyk7CkBAIC00NTEsNiArNDUzLDcgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFs
eXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIHBlcmZvcm1HbG9i
YWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmll
ckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1vdkhpbnRSZW1vdmFs
KCkpCiAgICAgICAgICAgICBwZXJmb3JtTW92SGludFJlbW92YWwoZGZnKTsKICAgICAgICAgcGVy
Zm9ybUNsZWFuVXAoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk1LDYgKzk5NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAg
ICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdElu
ZGV4OgogICAgICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBD
aGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdy
aXRlOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKQEAgLTM3MSw2ICszNzAsMTQgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICAvLyBjb21waWxpbmcg
dGhpcyBub2RlLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBjYXNlIFN0b3JlQmFycmll
cjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKKyAgICAgICAgLy8gV2UgY29uc2VydmF0
aXZlbHkgYXNzdW1lIHRoYXQgdGhlc2UgY2Fubm90IGJlIHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9y
Y2VzIHRoZSBjb21waWxlciB0bworICAgICAgICAvLyBrZWVwIHRoZW0gZXhhY3RseSB3aGVyZSB0
aGV5IHdlcmUuIFRoaXMgaXMgc29ydCBvZiBvdmVya2lsbCBzaW5jZSB0aGUgY2xvYmJlcml6ZSBl
ZmZlY3RzCisgICAgICAgIC8vIGFscmVhZHkgZm9yY2UgdGhlc2UgdGhpbmdzIHRvIGJlIG9yZGVy
ZWQgcHJlY2lzZWx5LiBJJ20ganVzdCBub3QgY29uZmlkZW50IGVub3VnaCBpbiBteQorICAgICAg
ICAvLyBlZmZlY3QgYmFzZWQgbWVtb3J5IG1vZGVsIHRvIHJlbHkgc29sZWx5IG9uIHRoYXQgcmln
aHQgbm93LgorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBjYXNlIEdldEJ5VmFsOgogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3Ro
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4
LDE4ICsxMjY4LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAog
ICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNL
bm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
dmFsdWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZh
bHVlLnRhZ0dQUigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7
Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBu
b2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CkBAIC01MDEyLDYgKzUwMDAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFN0b3JlQmFycmll
clN0b3JlTG9hZEZlbmNlOiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRG
ZW5jZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CkBAIC01NDc0LDIwICs1NDY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAg
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7
Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikK
IHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2Um
IHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hh
YmxlKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAg
ICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
CisgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMDIsNDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2Rl
KiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2Vk
U3RvcmVCYXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVz
dWx0KG5vZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9y
eUZlbmNlKCk7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAg
ICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJh
cnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5j
YXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gy
KTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BS
KTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAg
IG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJp
ZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsK
LQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKLQogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0
aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03Mzgs
OCArNzMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ug
b3BlcmFuZCk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5k
ZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOwor
ICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAg
ICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVh
clJhbmdlKDAsIGJsb2NrU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0
aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hp
bGRBbmRPcmlnaW4geworICAgICAgICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4pCisgICAgICAgICAgICA6IGNoaWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09y
aWdpbihzZW1hbnRpY09yaWdpbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjaGlsZCB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbjsKKyAgICB9OworICAgIAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAg
Ly8gYmFja3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1
cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlm
IGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5v
ZGUuCisgICAgICAgIGJvb2wgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKGRvZXNH
QyhtX2dyYXBoLCBub2RlKSB8fCBtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0
KSB7CisgICAgICAgICAgICAgICAgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9k
ZS0+aXNTdG9yZUJhcnJpZXIoKSAmJiBmdXR1cmVHQykgeworICAgICAgICAgICAgICAgIG1fYmFy
cmllclBvaW50c1tub2RlSW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBO
b3cgd2UgcnVuIGZvcndhcmQgYW5kIGNvbGxlY3QgdGhlIGJhcnJpZXJzLiBXaGVuIHdlIGhpdCBh
IGJhcnJpZXIgcG9pbnQsIGluc2VydCBhbGwgb2YKKyAgICAgICAgLy8gdGhlbSB3aXRoIGEgZmVu
Y2UuCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+aXNTdG9yZUJhcnJpZXIo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhbm9kZS0+b3JpZ2luLndhc0hvaXN0ZWQpOworICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmFw
cGVuZChDaGlsZEFuZE9yaWdpbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG9yaWdpbi5zZW1hbnRp
YykpOworICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghbV9iYXJyaWVyUG9pbnRzW25vZGVJbmRleF0pCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAg
ICAgICBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisg
ICAgICAgICAgICAgICAgWyZdIChjb25zdCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRB
bmRPcmlnaW4mIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGls
ZCA8IGIuY2hpbGQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9
IHN0ZDo6dW5pcXVlKAorICAgICAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwg
bV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxk
QW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGEuY2hpbGQgPT0gYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBp
dGVyLT5jaGlsZDsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0g
aXRlci0+c2VtYW50aWNPcmlnaW47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Tm9kZVR5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVu
dEJhcnJpZXJzKCkgJiYgaXRlciA9PSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCkpCisgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBGZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIHR5cGUsIG9yaWdpbi53aXRoU2Vt
YW50aWMoc2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkLCBL
bm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmll
cnMucmVzaXplKDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIEZhc3RCaXRWZWN0b3IgbV9iYXJyaWVyUG9pbnRzOworICAgIFZlY3RvcjxD
aGlsZEFuZE9yaWdpbj4gbV9uZWVkZWRCYXJyaWVyczsKK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitib29sIHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJiBncmFw
aCkKK3sKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gUGlja3MgdXAgZ3JvdXBzIG9mIGJhcnJpZXJzIHRo
YXQgY291bGQgYmUgZXhlY3V0ZWQgaW4gYW55IG9yZGVyIHdpdGggcmVzcGVjdCB0byBlYWNoIG90
aGVyIGFuZAorLy8gcGxhY2VzIHRoZW4gYXQgdGhlIGVhcmxpZXN0IHBvaW50IGluIHRoZSBwcm9n
cmFtIHdoZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlIGNvcnJlY3QuIFRoaXMgcGhhc2UKKy8vIG1h
a2VzIG9ubHkgdGhlIGZpcnN0IG9mIHRoZSBjbHVzdGVyIGJlIGEgRmVuY2VkU3RvcmVCYXJyaWVy
IHdoaWxlIHRoZSByZXN0IGFyZSBub3JtYWwKKy8vIFN0b3JlQmFycmllcnMuIFRoaXMgcGhhc2Ug
YWxzbyByZW1vdmVzIHJlZHVuZGFudCBiYXJyaWVycyAtIGZvciBleGFtcGxlLCB0aGUgY2x1c3Rl
ciBtYXkgZW5kIHVwCisvLyB3aXRoIHR3byBvciBtb3JlIGJhcnJpZXJzIG9uIHRoZSBzYW1lIG9i
amVjdCwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0b3RhbGx5IHNhZmUgZm9yIHVzIHRvIGRyb3AKKy8v
IG9uZSBvZiB0aGVtLiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIHNvdW5kIGhpbmdlcyBvbiB0aGUg
ImVhcmxpZXN0IHBvaW50IHdoZXJlIHRoZSBjbHVzdGVyIHdvdWxkCisvLyBiZSBjb3JyZWN0IiBw
cm9wZXJ0eS4gRm9yIGV4YW1wbGUsIHRha2UgdGhpcyBpbnB1dDoKKy8vCisvLyAgICAgYTogQ2Fs
bCgpCisvLyAgICAgYjogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBjOiBGZW5jZWRT
dG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAg
ICBlOiBGZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBw
LCBAeikKKy8vICAgICBnOiBGZW5jZWRTdG9yZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlP
ZmZzZXQoQHEpCisvLyAgICAgaTogQ2FsbCgpCisvLworLy8gVGhlIGNsdXN0ZXIgb2YgYmFycmll
cnMgaXMgQGMsIEBlLCBhbmQgQGcuIEFsbCBvZiB0aGUgYmFycmllcnMgYXJlIGJldHdlZW4gdHdv
IGRvZXNHQyBlZmZlY3RzOgorLy8gdGhlIGNhbGxzIGF0IEBhIGFuZCBAaS4gQmVjYXVzZSB0aGVy
ZSBhcmUgbm8gZG9lc0dDIGVmZmVjdHMgYmV0d2VlbiBAYSBhbmQgQGkgYW5kIHRoZXJlIGlzIG5v
CisvLyBwb3NzaWJsZSBjb250cm9sIGZsb3cgZW50cnkgaW50byB0aGlzIHNlcXVlbmNlIGJldHdl
ZW4gQCBhbmQgQGksIHdlIGNvdWxkIGNvdWxkIGp1c3QgZXhlY3V0ZSBhbGwKKy8vIG9mIHRoZSBi
YXJyaWVycyBqdXN0IGJlZm9yZSBAaSBpbiBhbnkgb3JkZXIuIFRoZSBlYXJsaWVzdCBwb2ludCB3
aGVyZSB0aGUgY2x1c3RlciB3b3VsZCBiZQorLy8gY29ycmVjdCBpcyBqdXN0IGFmdGVyIEBmLCBz
aW5jZSB0aGF0J3MgdGhlIGxhc3Qgb3BlcmF0aW9uIHRoYXQgbmVlZHMgYSBiYXJyaWVyLiBXZSB1
c2UgdGhlCisvLyBlYXJsaWVzdCB0byByZWR1Y2UgcmVnaXN0ZXIgcHJlc3N1cmUuIFdoZW4gdGhl
IGJhcnJpZXJzIGFyZSBjbHVzdGVyZWQganVzdCBhZnRlciBAZiwgd2UgZ2V0OgorLy8KKy8vICAg
ICBhOiBDYWxsKCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGQ6
IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkpCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBA
eikKKy8vICAgICBjOiBGZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZTogRmVuY2VkU3Rv
cmVCYXJyaWVyKEBvKQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBo
OiBHZXRCeU9mZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIHBoYXNlIGRv
ZXMgbW9yZS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBjbHVzdGVyaW5nIHRvIHJlbW92ZSBm
ZW5jZXMgYW5kIHJlbW92ZSByZWR1bmRhbnQKKy8vIGJhcnJpZXJzLiBTbyB0aGlzIHBoYXNlIHdp
bGwgb3V0cHV0IHRoaXM6CisvLworLy8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zm
c2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAg
ICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmll
cihAbykKKy8vICAgICBnOiBTdG9yZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQo
QHEpCisvLyAgICAgaTogQ2FsbCgpCisvLworLy8gVGhpcyBvcHRpbWl6YXRpb24gaW1wcm92ZXMg
Ym90aCBvdmVyYWxsIHRocm91Z2hwdXQgYW5kIHRoZSB0aHJvdWdocHV0IHdoaWxlIHRoZSBjb25j
dXJyZW50IEdDIGlzCisvLyBydW5uaW5nLiBJbiB0aGUgZm9ybWVyLCB3ZSBhcmUgc2ltcGxpZnlp
bmcgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGZvciBhbGwgYnV0IHRoZSBmaXJzdCBmZW5jZS4gSW4K
Ky8vIHRoZSBsYXR0ZXIsIHdlIGFyZSByZWR1Y2luZyB0aGUgY29zdCBvZiBhbGwgYnV0IHRoZSBm
aXJzdCBiYXJyaWVyLiBUaGUgZmlyc3QgYmFycmllciB3aWxsIGF3bGF5cworLy8gdGFrZSBzbG93
IHBhdGggd2hlbiB0aGVyZSBpcyBjb25jdXJyZW50IEdDIGFjdGl2aXR5LCBzaW5jZSB0aGUgc2xv
dyBwYXRoIGNvbnRhaW5zIHRoZSBmZW5jZS4gQnV0CisvLyBhbGwgb2YgdGhlIG90aGVyIGJhcnJp
ZXJzIHdpbGwgb25seSB0YWtlIHNsb3cgcGF0aCBpZiB0aGV5IHJlYWxseSBuZWVkIHRvIHJlbWVt
YmVyIHRoZSBvYmplY3QuCisvLworLy8gRklYTUU6IElmIHdlIHNpbmsgYmFycmllcnMsIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZXhlY3V0ZSBiYXJyaWVycyB1cG9uIE9TUiBleGl0Lgor
Ym9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4gcnVuIHRoZWly
IG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgbV9ub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQzMCwxMyArNDMwLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJh
cnJpZXIobV9ub2RlSW5kZXgsIGJhc2UpOworICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4ICsgMSwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVk
IG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRPSyA9IHRydWUpCisgICAgdm9pZCBpbnNl
cnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlKQogICAgIHsKLSAgICAgICAg
Ly8gSW5zZXJ0aW5nIGEgYmFycmllciBtZWFucyB0aGF0IHRoZSBvYmplY3QgbWF5IGJlY29tZSBt
YXJrZWQgYnkgdGhlIEdDLCB3aGljaCB3aWxsIG1ha2UKLSAgICAgICAgLy8gdGhlIG9iamVjdCBi
bGFjay4KKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IG91ciB3YXkgb2Ygc2F5aW5nIHRoYXQgYmFy
cmllcnMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aCBlYWNoIG90aGVyIGFjY29yZGluZworICAgICAg
ICAvLyB0byBmb3J3YXJkIGFuYWx5c2lzOiBpZiB3ZSBwcm92ZWQgb25lIHRpbWUgdGhhdCBhIGJh
cnJpZXIgd2FzIG5lY2Vzc2FyeSB0aGVuIGl0J2xsIGZvcgorICAgICAgICAvLyBzdXJlIGJlIG5l
Y2Vzc2FyeSBuZXh0IHRpbWUuCiAgICAgICAgIGJhc2UtPnNldEVwb2NoKEVwb2NoKCkpOwogCiAg
ICAgICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2RlLCB3ZSBzaG91bGQgb25seSBpbnNlcnQg
dGhlIGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJnZWQuCkBAIC00NDYsMTcgKzQ0NywyMyBA
QCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgc3VwcG9ydCBTdG9yZUJhcnJp
ZXIoVW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNvcnQgb2YgY29vbC4KICAgICAgICAgLy8g
QnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0LgogCi0gICAgICAgIC8vIElmIHRoZSBvcmln
aW5hbCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3VsZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2su
IFdlIG1heSBiZSBpbiBhIGNvbnRleHQKLSAgICAgICAgLy8gd2hlcmUgY2hlY2tzIGFyZSBub3Qg
YWxsb3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBpbnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4
aXRJbnZhbGlkCi0gICAgICAgIC8vIGNvbnRleHQgYW5kIHRoYXQgYmFycmllciBuZWVkZWQgYSBj
aGVjaywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29yayBieSBob2lzdGluZyB0aGUgY2hlY2su
Ci0gICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4gcmlnaHQgbm93LgotICAgICAgICBpZiAo
YmFzZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7Ci0gICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgIGJh
c2Uuc2V0VXNlS2luZChDZWxsVXNlKTsKLSAgICAgICAgfQorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgaXNDZWxsKGJhc2UudXNlS2luZCgpKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBCYXJyaWVycyBhcmUgYWx3YXlzIGluc2VydGVkIGFmdGVyIHRoZSBub2RlIHRoYXQgdGhl
eSBzZXJ2aWNlLiBUaGVyZWZvcmUsIHdlIGFsd2F5cyBrbm93CisgICAgICAgIC8vIHRoYXQgdGhl
IHRoaW5nIGlzIGEgY2VsbCBub3cuCisgICAgICAgIGJhc2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdp
bjsKKyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIG1fbm9kZSkpCisgICAg
ICAgICAgICBvcmlnaW4gPSBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCk7CisgICAgICAgIAorICAg
ICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJh
cnJpZXJzKCkpCisgICAgICAgICAgICB0eXBlID0gRmVuY2VkU3RvcmVCYXJyaWVyOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOwogICAgICAgICAKLSAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChleGl0T0sp
LCBiYXNlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCB0eXBlLCBvcmlnaW4sIGJhc2UpOwogICAgIH0KICAgICAKICAgICBib29sIHJlYWxs
eUluc2VydEJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJp
ZXJzIGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgYWJzdHJh
Y3QgaW50ZXJwcmV0ZXIuCi0vLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRv
IGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMuIFRoaXMgcGhhc2UgcmVxdWlyZXMK
LS8vIHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCisvLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2Vk
IGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxvY2F0ZWQg
b2JqZWN0cy4gVGhpcworLy8gcGhhc2UgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgbm90IGluIFNTQS4K
IGJvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKIAogLy8gSW5z
ZXJ0cyBzdG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2JhbCBhbmFseXNpcyBhbmQgY29uc3VsdHMg
dGhlIGFic3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEKLS8vIHNpbXBsZSBlcG9jaC1iYXNlZCBh
bmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLCBidXQgb25seSBw
cm9wYWdhdGVzICJzYW1lCi0vLyBlcG9jaCBhcyBjdXJyZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBi
bG9jayB0byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UKLS8v
IGFsc28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KKy8vIHNpbXBsZSBl
cG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24gbmV3bHkg
YWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgcGhhc2UKKy8vIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFz
ZSBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5lc3MuCiBib29sIHBlcmZv
cm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTIgKzE5NiwxMiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdEFueUFkZHJlc3MoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4ZWRIZWFwLmF0QW55SW5kZXgoKTsgfQogICAgIAotICAgIGNvbnN0IEFi
c3RyYWN0SGVhcCYgYXQodm9pZCogYWRkcmVzcykKKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0
KGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmRleGVkSGVh
cC5hdChiaXR3aXNlX2Nhc3Q8cHRyZGlmZl90PihhZGRyZXNzKSk7CiAgICAgfQogICAgIAotICAg
IGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXSh2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBh
dChhZGRyZXNzKTsgfQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXShjb25zdCB2
b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNzKTsgfQogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklU
KQogCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKQEAgLTExNiw2ICsxMTcsMTYgQEAgdm9p
ZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdAogICAgIG1faGVhcEZvclBhdGNo
cG9pbnRXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7CiB9CiAKK3ZvaWQg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVJlYWQoY29uc3QgQWJzdHJhY3RI
ZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VSZWFkLmFwcGVu
ZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1
ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVl
KGhlYXAsIHZhbHVlKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0
ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCkKIHsKICAgICByb290LmNvbXB1dGUoKTsK
QEAgLTEzMiw5ICsxNDMsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRl
UmFuZwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yQ0NhbGxXcml0ZSkK
ICAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0g
ZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvclBhdGNocG9pbnRSZWFkKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4o
KS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5y
YW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53
cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0
Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7Cisg
ICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVJlYWQpCisgICAgICAg
IGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5yZWFkID0gZW50cnkuaGVhcC0+cmFuZ2Uo
KTsKKyAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlV3JpdGUpCisg
ICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT53cml0ZSA9IGVudHJ5LmhlYXAt
PnJhbmdlKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBC
Mzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJh
Y3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShj
b25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VS
ZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVG
ZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogCiAgICAgdm9pZCBj
b21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMoKTsKIApAQCAtMjQxLDYgKzI0Myw4
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yQ0NhbGxXcml0
ZTsKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZDsKICAg
ICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGU7CisgICAgVmVj
dG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yRmVuY2VSZWFkOworICAgIFZlY3RvcjxIZWFwRm9y
VmFsdWU+IG1faGVhcEZvckZlbmNlV3JpdGU7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRUeXBlZEFycmF5
Qnl0ZU9mZnNldDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVy
OgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNl
IFRhaWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNp
bmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNs
dWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgog
I2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCkBAIC05NDUsNiArOTQ2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZl
bmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKQEAgLTY5
OTUsOSArNjk5Nyw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJy
aWVyKCkKICAgICB7Ci0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSk7CisgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQotCisgICAg
CiAgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTgxMjYsOCArODEyOCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1
cmUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKG9iamVj
dCk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAwNTMs
MTMgKzEwMDUzLDEzIEBAIHByaXZhdGU6CiAgICAgLy8gcnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0
aGF0IGNyZWF0ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBub3QgdXNlIGJ5LXJl
ZmVyZW5jZQogICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRh
cy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5
cGVzPgotICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJn
dW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xvd1Bh
dGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiAg
ICAgewogICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3IsIFZlY3RvcjxMVmFsdWU+
eyBhcmd1bWVudHMuLi4gfSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0
IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6
eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1
c2VyQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKICAgICAgICAgCkBAIC0xMTQyOSwyNiArMTE0MjksMzkgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMu
SlNDZWxsX2NlbGxTdGF0ZSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExW
YWx1ZSBiYXNlKQorICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSwgYm9vbCBp
c0ZlbmNlZCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3
QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKIAorICAgICAgICBMVmFsdWUgdGhyZXNob2xkOworICAgICAgICBpZiAoaXNGZW5jZWQp
CisgICAgICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUodm0o
KS5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKCkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQuY29uc3RJbnQzMihibGFja1RocmVzaG9sZCk7
CisgICAgICAgIAogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5hYm92
ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCBtX291dC5jb25zdEludDMyKGJsYWNrVGhyZXNob2xkKSks
CisgICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCB0aHJlc2hvbGQp
LAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsK
IAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOwotCisgICAgICAgIAogICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9y
ZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwg
bmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBz
ZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRo
YW4KICAgICAgICAgLy8gd2FzdGluZyBCMydzIHRpbWUgb3B0aW1pemluZyBpdC4KLSAgICAgICAg
bGF6eVNsb3dQYXRoKAorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBsYXp5
U2xvd1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CiAKICAgICAgICAg
ICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCiAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGZW5jZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5j
ZSA9IGppdC5qdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tZW1vcnlGZW5jZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShiYXNlR1BSKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9GZW5jZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwpAQCAtMTE0OTMsNiAr
MTE1MDYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgYmFzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNGZW5jZWQp
CisgICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMucm9v
dCwgcGF0Y2hwb2ludCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faGVhcHMuZGVjb3Jh
dGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsK
KyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxf
Y2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVl
LmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgi
CiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5o
IgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIHN0b3Jl
KTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgpCit7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKK30KKwogdm9pZCBP
dXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKIHsK
ICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CkBAIC03OTUsNyAr
ODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVR5cGVkUG9pbnRlciBPdXRwdXQ6OmFi
c29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZShjb25z
dCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBUeXBlZFBvaW50ZXIobV9oZWFwcy0+YWJz
b2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNlIERGRwogCiBuYW1lc3BhY2UgQjMgewor
Y2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNlVmFsdWU7CiB9IC8vIG5hbWVzcGFjZSBC
MwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgogCiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQ
b2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7Cisg
ICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIo
VHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsK
QEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBoZWFwLmJhc2VJbmRl
eCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25zdGFudCwgb2Zmc2V0KTsKICAgICB9CiAK
LSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCogYWRkcmVzcyk7CisgICAgVHlwZWRQb2lu
dGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3MpOwogCiAgICAgTFZhbHVlIGxvYWQ4U2ln
bkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBs
b2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KICAgICBMVmFsdWUgbG9hZDha
ZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJu
IGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCAr
NTMsMTYgQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKIH07CiAKIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDE7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQg
bWVhbnMgeCBpcyBibGFjay4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgPSAxMDA7IC8vIHggPD0gdGF1dG9sb2dpY2FsVGhyZXNob2xkIGlzIGFsd2F5cyB0cnVl
LgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRocmVzaG9sZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1
bnNpZ25lZCB0aHJlc2hvbGQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
ZWxsU3RhdGUpIDw9IHRocmVzaG9sZDsKK30KIAogaW5saW5lIGJvb2wgaXNCbGFjayhDZWxsU3Rh
dGUgY2VsbFN0YXRlKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0
YXRlKSA8PSBibGFja1RocmVzaG9sZDsKKyAgICByZXR1cm4gaXNXaXRoaW5UaHJlc2hvbGQoY2Vs
bFN0YXRlLCBibGFja1RocmVzaG9sZCk7CiB9CiAKIGlubGluZSBDZWxsU3RhdGUgYmxhY2tlbihD
ZWxsU3RhdGUgY2VsbFN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDQgKzE1NDksMzIgQEAgdm9pZCBIZWFwOjpmb3JFYWNo
Q29kZUJsb2NrSW1wbChjb25zdCBTYwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUo
ZnVuYyk7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxs
KiBmcm9tKQoreworICAgIGlmIChVTkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsK
KyAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgc25lYWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1
dG9sb2dpY2FsIGltcG9zc2libGUgdGhyZXNob2xkLCBzbyBmcm9tCisgICAgICAgIC8vIGNvdWxk
IHN0aWxsIGJlIG5vdCBibGFjay4gQnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2Ug
ZmlyZSBvZmYgYSBmZW5jZS4KKyAgICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgICAg
ICBpZiAoIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKK3ZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQor
eworICAgIGlmIChVTkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAg
Ly8gSW4gdGhpcyBjYXNlLCB0aGUgc25lYWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2Fs
IGltcG9zc2libGUgdGhyZXNob2xkLCBzbyBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJl
IG5vdCBibGFjay4gQnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYg
YSBmZW5jZS4KKyAgICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlz
QmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXRvIHx8IHRvLT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRl
KQorICAgICAgICByZXR1cm47CisgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDkgKzEwNCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHNp
emVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CiAKLSAgICB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVl
KTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKKyAgICB2
b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20pOworICAgIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0byk7CisgICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKTsKKyAgICAKKyAgICB2b2lkIHdyaXRl
QmFycmllcldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pOworICAgIAorICAgIC8vIFRh
a2UgdGhpcyBpZiB5b3Uga25vdyB0aGF0IGZyb20tPmNlbGxTdGF0ZSgpIDwgc25lYWt5QmxhY2tU
aHJlc2hvbGQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJTbG93UGF0
aChjb25zdCBKU0NlbGwqIGZyb20pOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVC
YXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKTsKIAogICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJh
cnJpZXJCdWZmZXI7IH0KICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCop
OwpAQCAtMjU0LDYgKzI2MCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlQmxv
Y2soc2l6ZV90IGNhcGFjaXR5KTsKICAgICB2b2lkIGRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNp
dHkpOworICAgIAorICAgIGJvb2wgYmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1
cm4gbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZC
YXJyaWVyU2hvdWxkQmVGZW5jZWQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyU2hvdWxkQmVG
ZW5jZWQ7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc25lYWt5QmxhY2tUaHJlc2hvbGQ7IH0KKyAgICBjb25zdCB1bnNpZ25lZCog
YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiAmbV9zbmVha3lC
bGFja1RocmVzaG9sZDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9u
U2NvcGU7CkBAIC00MTEsNiArNDIzLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTYWZlVG9D
b2xsZWN0OwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVyQnVmZmVyOwor
ICAgIGJvb2wgbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJh
cnJpZXIoKSB9OworICAgIHVuc2lnbmVkIG1fc25lYWt5QmxhY2tUaHJlc2hvbGQgeyBPcHRpb25z
Ojpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhy
ZXNob2xkIH07CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0RnVsbEdDTGVuZ3Ro
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjUsMTkgKzEyNSwyOCBAQCBpbmxpbmUgdm9pZCBIZWFwOjp3cml0
ZUJhcnJpZXIoY29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQog
ICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwogI2VuZGlmCi0g
ICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZy
b20pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRvIHx8IHRvLT5jZWxsU3RhdGUoKSAhPSBD
ZWxsU3RhdGU6Ok5ld1doaXRlKQotICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVk
U2V0KGZyb20pOworICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxs
U3RhdGUoKSwgc25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpKQorICAgICAgICB3cml0ZUJhcnJpZXJT
bG93UGF0aChmcm9tLCB0byk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChj
b25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20gfHwgIWlzQmxhY2soZnJv
bS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICghZnJvbSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3RhdGUoKSwgc25lYWt5Qmxh
Y2tUaHJlc2hvbGQoKSkpKQorICAgICAgICB3cml0ZUJhcnJpZXJTbG93UGF0aChmcm9tKTsKK30K
KworaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2Vs
bCogZnJvbSkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oZnJvbSkpOworICAgIGlmICghZnJvbSkKICAgICAgICAgcmV0dXJuOwotICAgIGFk
ZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hv
bGQoZnJvbS0+Y2VsbFN0YXRlKCksIGJsYWNrVGhyZXNob2xkKSkpCisgICAgICAgIGFkZFRvUmVt
ZW1iZXJlZFNldChmcm9tKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQoc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMDYsMTcg
KzEzMDYsNTYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJl
V2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0cnVjdHVy
ZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAotICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW4oR1BSUmVnIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhv
dXRGZW5jZShHUFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2g4KEFib3Zl
LCBBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
YmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
V2l0aG91dEZlbmNlKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHVpbnQ4X3QqIGFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRl
T2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBicmFuY2g4KEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Mo
YWRkcmVzcyksIFRydXN0ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KICAgICAKKyAg
ICBKdW1wIHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsLCBHUFJS
ZWcgc2NyYXRjaEdQUikKKyAgICB7CisgICAgICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxs
OjpjZWxsU3RhdGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoQWJvdmUsIHNjcmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NP
ZlNuZWFreUJsYWNrVGhyZXNob2xkKCkpKTsKKyAgICB9CisKKyAgICBKdW1wIHNuZWFreUp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisg
ICAgeworICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oY2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOworICAgICAgICBsb2FkOChhZGRy
ZXNzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNo
R1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVz
aG9sZCgpKSk7CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW4oR1BSUmVnIGNlbGwpCisgICAgeworICAgICAgICBzdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5j
ZSgpOworICAgICAgICByZXR1cm4ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVu
Y2UoY2VsbCk7CisgICAgfQorCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihK
U0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBzdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgp
OworICAgICAgICByZXR1cm4ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2Uo
Y2VsbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2Uo
KQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmllcnMoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZlN0b3JlQmFycmll
clN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7CisgICAg
ICAgIG9rLmxpbmsodGhpcyk7CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmU3RvcmVCYXJy
aWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJhcnJpZXJT
aG91bGRCZUZlbmNlZCgpKSk7CisgICAgfQorICAgIAogICAgIC8vIEVtaXRzIHRoZSBicmFuY2gg
c3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0IGZh
bGwgdGhyb3VnaC4gVGhlCiAgICAgLy8gZnVuY3RvciBpcyBjYWxsZWQgYXQgdGhvc2UgcG9pbnRz
IHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5cGUuIE9uZSB3YXkgdG8gdXNlIHRoaXMgaXMg
dG8KICAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVtaXQgdGhlIGNvZGUgdG8gcHV0IHRoZSB0eXBl
IHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGFuZCB0aGVuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNzcsMTQgKzIxNzcsMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9TUldyaXRlQmFycgogICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKIH0KIAot
Ly8gTkI6IFdlIGRvbid0IGluY2x1ZGUgdGhlIHZhbHVlIGFzIHBhcnQgb2YgdGhlIGJhcnJpZXIg
YmVjYXVzZSB0aGUgd3JpdGUgYmFycmllciBlbGlzaW9uCi0vLyBwaGFzZSBpbiB0aGUgREZHIG9u
bHkgdHJhY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBiZWluZyBzdG9yZWQgdG8gaGFzIGJlZW4gYmFy
cmllcmVkLiBJdCAKLS8vIHdvdWxkIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0byB0cnkgdG8g
bW9kZWwgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBhcyB3ZWxsLgotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGNlbGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
dm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOworICAgIHZtLT5oZWFwLndyaXRlQmFycmllclNs
b3dQYXRoKGNlbGwpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEyLDggKzQx
Miw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7
CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJh
cnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJp
ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25F
eGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NzMsOCArNjczLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51LnB1
dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02ODcsNiArNjg1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAor
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOworCiAg
ICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjYsOCArNjY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKElu
c3RydWN0aW9uKgogICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwogICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51LnB1
dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICAvLyBJbiBvcmRlciB0
byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zm
c2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1
bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5k
IHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNl
dCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KQEAgLTY4NCw2ICs2
ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBT
aG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKQEAg
LTExODAsOCArMTE4MCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93
bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hUZXN0NjQoTm9u
WmVybywgcmVnVDAsIHRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdUMCk7Cisg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJl
cmVkT3JJbkVkZW4ocmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoLCByZWdUMCk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKQEAgLTEyMTgsOCArMTIxOCw4IEBAIHZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAg
ICBvd25lck5vdENlbGwgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdUMSk7CisgICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4o
cmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSkKQEAgLTEyNDYsMTIgKzEyNDYsOSBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIpCiB7Ci0gICAgaWYgKCFvd25lci0+Y2VsbENvbnRhaW5lcigpLmlzTWFya2Vk
KG93bmVyKSkgewotICAgICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOwotICAgICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOworICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKG93bmVyLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIHNsb3dDYXNlcykKQEAgLTEz
OTAsOCArMTM4Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIGlmIChu
ZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbHMubGFzdCgp
LnRvID09IG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fY2FsbHMubGFzdCgpLmZyb20sIG9wZXJhdGlvblVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIpOworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2Fs
bHMubGFzdCgpLmZyb20sIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJl
bnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkxLDcgQEAg
bWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogZW5kCiAKIG1hY3JvIHNr
aXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQorICAgIG1lbWZlbmNlCiAg
ICAgYmJhIEpTQ2VsbDo6bV9jZWxsU3RhdGVbY2VsbF0sIEJsYWNrVGhyZXNob2xkLCAuZG9uZQog
ICAgIHNsb3dQYXRoKCkKIC5kb25lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxp
bmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL3g4Ni5yYgkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI3LDcgKzE1MjcsOCBAQCBjbGFz
cyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAgICAgICAgJGFzbS5wdXRz
ICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcmRlck9wZXJhbmRzKG9wZXJhbmRzWzBdLng4NkFk
ZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDpwdHIpKX0iCiAgICAg
ICAgIHdoZW4gIm1lbWZlbmNlIgotICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVuY2UiCisgICAg
ICAgICAgICBzcCA9IFJlZ2lzdGVySUQubmV3KG5pbCwgInNwIikKKyAgICAgICAgICAgICRhc20u
cHV0cyAibG9jazsgb3JsICQwLCAoI3tzcC54ODZPcGVyYW5kKDpwdHIpfSkiCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDYgKzE4Miw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9v
bCwgdGVzdFRoZUZUTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVy
Ym9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihi
b29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAwMDAwLCBOb3JtYWwsIG51
bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxk
IGJlIGRvd24gd2l0aCBUU08KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQWRkZWQgY2xlYXJSYW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFy
cyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMgdHVybmVkIG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAg
ICAgIGEgREZHIG9wdGltaXphdGlvbiBwYXNzLgorCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0
b3IuY3BwOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAg
ICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorCiAyMDE2LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTmVlZCBhIHN0b3JlLWxvYWQgZmVuY2UgYmV0d2Vl
biBzZXR0aW5nIGNlbGwgc3RhdGUgYW5kIHZpc2l0aW5nIHRoZSBvYmplY3QgaW4gU2xvdFZpc2l0
b3IKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSAr
NTMsMjQgQEAgdm9pZCBGYXN0Qml0VmVjdG9yV29yZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1f
d29yZHMgPSBuZXdBcnJheTsKIH0KIAordm9pZCBGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNp
emVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAg
IGF0KGkpID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IGVuZEJlZ2luU2xvcCA9IChiZWdpbiArIDMxKSAmIH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRT
bG9wID0gZW5kICYgfjMxOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVu
ZEJlZ2luU2xvcDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90
IGkgPSBiZWdpbkVuZFNsb3A7IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gZW5kQmVnaW5TbG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3Ag
LyAzMjsgKytpKQorICAgICAgICBtX3dvcmRzLndvcmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Njgs
NiArNDY4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5k
KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0
b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289787</attachid>
            <date>2016-09-25 17:22:23 -0700</date>
            <delta_ts>2016-09-25 17:31:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82294</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
YnJhbmNoMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmJyYW5jaDMyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OmJyYW5jaDY0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJzRXhpdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdN
YXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmlzU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlND
OjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcpOgorICAgICAgICAq
IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICog
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RI
ZWFwLmg6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6OmF0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAg
ICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNB
bmREZWNvcmF0ZUluc3RydWN0aW9ucyk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3RvcmFnZUZvclRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsYXp5U2xvd1Bh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0U3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmZlbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFic29sdXRlKToKKyAg
ICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgICogaGVhcC9DZWxsU3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6aXNXaXRoaW5UaHJlc2hvbGQpOgorICAgICAgICAoSlNDOjppc0JsYWNrKToK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXJTbG93UGF0aCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmJhcnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZkJh
cnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnNuZWFreUJsYWNrVGhy
ZXNob2xkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hv
bGQpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZl
bmNlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVCYXJyaWVy
U3RvcmVMb2FkRmVuY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IG9mZmxpbmVhc20veDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2
LTA5LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjIwNjIyMSk6IFtVU0VSXSBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2ZWxv
cG1lbnQgYXQgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlOiB2bUVudHJ5VG9KYXZhU2NyaXB0ICsg
Mjk5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MSw2ICszNjEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKKyAg
ICBkZmcvREZHU3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBACiAJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAv
KiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLzsgfTsKIAkJMEY3
QzVGQjgxRDg4OEEwQzAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjcxRDg4OEEwMTAwNDRG
NUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovOyB9OwogCQkwRjdDNUZCQTFEODg5NTA3MDA0
NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3Bh
Y2VJbmxpbmVzLmggKi87IH07CisJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMzNUI3
MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5
QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NDMsNiArMjc0NSw4IEBACiAJCTBGN0MzOUZFMUM5MEM1
NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFya2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
N0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5n
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMz
MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU1NSw2ICs2NTU5LDggQEAKIAkJCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovLAogCQkJCTBG
NEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8sCisJCQkJMEY3Rjk4ODkxRDk1OTZD
MzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5oICovLAogCQkJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLApAQCAtNzk0OCw2ICs3
OTU0LDcgQEAKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyOERB
RTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
ODUxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDk4LDYgKzkxMDUsNyBAQAogCQkJCUE3
RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkx
OEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzQsNiArMzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgYnJhbmNoUHRyKGNvbmQs
IG9wMSwgaW1tKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBYnNvbHV0ZUFk
ZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoMzIoZmxpcChjb25kKSwg
cmlnaHQsIGxlZnQpOworICAgIH0KKwogICAgIHZvaWQgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIExhYmVsIHRhcmdldCkK
ICAgICB7CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIG9wMSwgb3AyKS5saW5rVG8odGFyZ2V0LCB0
aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMxNiw2ICsyMzE2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIG1lbW9yeVRlbXBSZWdpc3RlciwgcmlnaHQpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBnZXRDYWNoZWRNZW1vcnlU
ZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihj
b25kLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIg
cmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMzIobGVmdCwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7CiAgICAgfQog
Ci0gICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVm
dCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQogICAg
IHsKICAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gz
MiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCiAgICAgICAgIGxvYWQzMihsZWZ0
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YWRkMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmFuZDMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpi
cmFuY2gzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzI7
CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yMzI7CiAgICAgdXNpbmcgTWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OnN1YjMyOwpAQCAtODI4LDYgKzgyOSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcm0ocmlnaHQsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQorICAgIAor
ICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1f
cHRyLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBz
Y3JhdGNoUmVnaXN0ZXIoKSwgcmlnaHQpOworICAgIH0KIAogICAgIEp1bXAgYnJhbmNoUHRyKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzA5LDI5ICsxMzA5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZQogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgaGFkIGFsbG9jYXRlZCB1c2luZyBhbiBvcGVy
YXRpb24gdGhlbiB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgdGhlIHN0b3JlCi0gICAg
ICAgIC8vIGJhcnJpZXIgYW5kIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBzdG9yZWQgdGhlIGJ1dHRl
cmZseSBpbnRvIHRoZSBvYmplY3QuCiAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3Jp
dGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1
ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAg
aml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhB
ZGRyZXNzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQ
UjMpOwotICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBi
ZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAgICAgICAgIGpp
dC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywg
c2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCi0gICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFzdC4g
RG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0CiAgICAgICAgICAgICAvLyB3aGF0ZXZlciB3
ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2UgdG8g
YnJhbmNoIHRvIHNsb3cKICAgICAgICAgICAgIC8vIHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDggKzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0
dGVyKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAotICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAorICAgIG1hY3JvKEpTQ2VsbF9jZWxsU3RhdGUpIFwKICAgICBtYWNy
byhKU0NlbGxfaW5kZXhpbmdUeXBlKSBcCisgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBc
CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwKICAgICBtYWNybyhKU0NlbGxfdHlw
ZUluZm9UeXBlKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
NDQsMTEgKzI4NDQsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOiB7CiAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNh
c2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDUs
MTEgKzQwNSwyMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgUHJvZmls
ZUNvbnRyb2xGbG93OgotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgUHV0SGludDoK
ICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgcmVhZChKU0NlbGxfY2VsbFN0YXRlKTsKKyAg
ICAgICAgd3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSGVhcCk7CisgICAg
ICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNl
IEludmFsaWRhdGlvblBvaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBM
YXp5Tm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDYgKzY3LDggQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5v
ZAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgIC8vIFRoZXNl
IGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUuIEl0IG1h
eSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRob3NlIHRo
YXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9uJ3QgZG8g
dGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBib29s
IGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja1RpZXJVcEFu
ZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoK
ICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQwMiw2ICsxNDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBL
aWxsU3RhY2s6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJy
aWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdElu
ZGV4OgogICAgICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNiArODcsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUq
CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNl
IFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICBjYXNlIFJlY29yZFJlZ0V4
cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtODk3LDcgKzg5Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdG9y
ZUJhcnJpZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyOwor
ICAgICAgICByZXR1cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgb3AoKSA9PSBGZW5jZWRTdG9y
ZUJhcnJpZXI7CiAgICAgfQogCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc2LDggKzM3Niw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAg
ICAgLyogQ2hlY2tzIHRoZSB3YXRjaGRvZyB0aW1lci4gSWYgdGhlIHRpbWVyIGhhcyBmaXJlZCwg
d2UgY2FsbCBvcGVyYXRpb24gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciovIFwKICAgICBt
YWNybyhDaGVja1dhdGNoZG9nVGltZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAvKiBXcml0
ZSBiYXJyaWVycyAhICovXAorICAgIC8qIFdyaXRlIGJhcnJpZXJzICovXAogICAgIG1hY3JvKFN0
b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZlbmNlZFN0b3JlQmFy
cmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBGb3ItaW4gZW51bWVyYXRp
b24gb3Bjb2RlcyAqL1wKICAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJE
RkdTU0FMb3dlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhY2tMYXlvdXRQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgiCisjaW5j
bHVkZSAiREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCIKQEAg
LTM2Miw2ICszNjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAgICAgICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihkZmcpOwogCiAgICAgICAgIHBl
cmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1TdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRm
Zyk7CkBAIC00NTEsNiArNDUzLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBw
ZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIHBlcmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRp
b24oZGZnKTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAg
ICAgICAgaWYgKE9wdGlvbnM6OnVzZU1vdkhpbnRSZW1vdmFsKCkpCiAgICAgICAgICAgICBwZXJm
b3JtTW92SGludFJlbW92YWwoZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTk1LDYgKzk5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3Rh
Y2s6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6
CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNl
dFJlZ0V4cE9iamVjdExhc3RJbmRleDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcg
KzMxNSw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJ
bnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgQ2hlY2tJ
bkJvdW5kczoKQEAgLTM3MSw2ICszNzAsMTQgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0
U3RhdGVUeXBlJiBzdAogICAgICAgICAvLyBjb21waWxpbmcgdGhpcyBub2RlLgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0
b3JlQmFycmllcjoKKyAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgdGhl
c2UgY2Fubm90IGJlIHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9yY2VzIHRoZSBjb21waWxlciB0bwor
ICAgICAgICAvLyBrZWVwIHRoZW0gZXhhY3RseSB3aGVyZSB0aGV5IHdlcmUuIFRoaXMgaXMgc29y
dCBvZiBvdmVya2lsbCBzaW5jZSB0aGUgY2xvYmJlcml6ZSBlZmZlY3RzCisgICAgICAgIC8vIGFs
cmVhZHkgZm9yY2UgdGhlc2UgdGhpbmdzIHRvIGJlIG9yZGVyZWQgcHJlY2lzZWx5LiBJJ20ganVz
dCBub3QgY29uZmlkZW50IGVub3VnaCBpbiBteQorICAgICAgICAvLyBlZmZlY3QgYmFzZWQgbWVt
b3J5IG1vZGVsIHRvIHJlbHkgc29sZWx5IG9uIHRoYXQgcmlnaHQgbm93LgorICAgICAgICByZXR1
cm4gZmFsc2U7CisKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4LDE4ICsxMjY4LDYgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwg
RWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdl
Lm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRn
ZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCB2YWx1ZUVk
Z2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDEyLDYgKzUwMDAs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjYXNlIFN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlOiB7Cisg
ICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZShub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NDc0LDIwICs1
NDY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQ
UiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0KLSAgICBK
SVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gbV9qaXQuanVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJC
dWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNl
Lm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci19Ci0KIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikKIHsKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBB
U1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIu
Z3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hhYmxlKG5vZGUpOwogICAgICAgICBi
cmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6
CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0b3JlQmFy
cmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVt
ZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1
bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVH
UFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewot
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAgICBpZiAoIWlzS25vd25DZWxsKHZh
bHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2Vs
bChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRl
bihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2Ny
YXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1f
aml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAg
aXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRy
dWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1
ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMDIsNDYgKzgz
MDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2RlKiBub2RlKQogewotICAgIEFTU0VS
VChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
U3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKKyAgICAK
KyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXI7CiAg
ICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgc2NyYXRjaDEu
Z3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVzdWx0KG5vZGUpOwotfQorICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAg
ICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsK
KyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAgICAgICAKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0b3JlQmFycmllclN0b3JlTG9hZEZl
bmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CisgICAgICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAgICAgbm9GZW5jZS5saW5rKCZtX2pp
dCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5k
KG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsK
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihHUFJSZWcg
Y2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgQVNTRVJUKHNj
cmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmll
ckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAgbV9q
aXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0
Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisgICAgbV9qaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gy
R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CiAKLSAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKLSAgICBtX2ppdC5zdG9yZTMy
KHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKKyAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICBtX2ppdC5z
dG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVz
cygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIu
YnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRl
QmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BSKTsKICAgICAvLyBXZSB1c2UgYW4g
b2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNj
cmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19j
YXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAgIG1faml0LnN0b3JlUHRyKGJhc2VH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9p
ZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAg
ICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3Jp
dGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19Ci0KLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7
Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKKworICAg
IG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QWNj
ZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niwx
MiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGws
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQotICAgIHZvaWQgd3JpdGVCYXJy
aWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwotCi0g
ICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFs
dWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQogICAgIHZvaWQgY29t
cGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0
Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03MzgsOCArNzMyLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUluKE5v
ZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYg
YmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCk7CiAgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwg
Tm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
RG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitjbGFzcyBT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhh
c2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAgICAgICAgbWF4U2l6ZSA9
IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOworICAgICAgICBtX2JhcnJpZXJQb2lu
dHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgc2l6
ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgICAgICBkb0Jsb2NrKGJsb2Nr
KTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVhclJhbmdlKDAsIGJsb2NrU2l6ZSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIHJlbWVt
YmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hpbGRBbmRPcmlnaW4geworICAgICAg
ICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAgICAgICAgQ2hpbGRBbmRPcmlnaW4o
Tm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4pCisgICAgICAgICAgICA6IGNo
aWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09yaWdpbihzZW1hbnRpY09yaWdpbikK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBjaGlsZCB7IG51
bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbjsKKyAgICB9OworICAg
IAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZp
cnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291bGQgd2FudCB0byBwbGFjZSBhbGwg
b2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAgLy8gYmFja3dhcmRzIGFuYWx5c2lz
LiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1cyBpZiB3ZSBoYWQgc2VlbiBhIEdD
LiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCB3aGVuIHdl
IGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlmIGEgR0Mgd2lsbCBoYXBwZW4KKyAg
ICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5vZGUuCisgICAgICAgIGJvb2wgZnV0
dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKGRvZXNHQyhtX2dyYXBoLCBub2RlKSB8fCBt
YXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KSB7CisgICAgICAgICAgICAgICAg
ZnV0dXJlR0MgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSAm
JiBmdXR1cmVHQykgeworICAgICAgICAgICAgICAgIG1fYmFycmllclBvaW50c1tub2RlSW5kZXhd
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgcnVuIGZvcndhcmQgYW5k
IGNvbGxlY3QgdGhlIGJhcnJpZXJzLiBXaGVuIHdlIGhpdCBhIGJhcnJpZXIgcG9pbnQsIGluc2Vy
dCBhbGwgb2YKKyAgICAgICAgLy8gdGhlbSB3aXRoIGEgZmVuY2UuCisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+aXNTdG9yZUJhcnJpZXIoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCAhbm9kZS0+b3JpZ2luLndhc0hvaXN0ZWQpOworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmln
aW47CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmFwcGVuZChDaGlsZEFuZE9yaWdpbihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG9yaWdpbi5zZW1hbnRpYykpOworICAgICAgICAgICAgbm9k
ZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9iYXJyaWVyUG9p
bnRzW25vZGVJbmRleF0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJz
LmJlZ2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChj
b25zdCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA8IGIuY2hpbGQ7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IHN0ZDo6dW5pcXVlKAorICAgICAg
ICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQo
KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEu
Y2hpbGQgPT0gYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvciAo
YXV0byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKKyAgICAgICAg
ICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkgJiYgaXRlciA9
PSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIHR5cGUsIG9yaWdpbi53aXRoU2VtYW50aWMoc2VtYW50aWNPcmlnaW4p
LAorICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMucmVzaXplKDApOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEZhc3RCaXRW
ZWN0b3IgbV9iYXJyaWVyUG9pbnRzOworICAgIFZlY3RvcjxDaGlsZEFuZE9yaWdpbj4gbV9uZWVk
ZWRCYXJyaWVyczsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHBlcmZv
cm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVu
UGhhc2U8U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gUGlja3MgdXAgZ3JvdXBzIG9mIGJhcnJpZXJzIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQg
aW4gYW55IG9yZGVyIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyIGFuZAorLy8gcGxhY2VzIHRo
ZW4gYXQgdGhlIGVhcmxpZXN0IHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHRoZSBjbHVzdGVy
IHdvdWxkIGJlIGNvcnJlY3QuIFRoaXMgcGhhc2UKKy8vIG1ha2VzIG9ubHkgdGhlIGZpcnN0IG9m
IHRoZSBjbHVzdGVyIGJlIGEgRmVuY2VkU3RvcmVCYXJyaWVyIHdoaWxlIHRoZSByZXN0IGFyZSBu
b3JtYWwKKy8vIFN0b3JlQmFycmllcnMuIFRoaXMgcGhhc2UgYWxzbyByZW1vdmVzIHJlZHVuZGFu
dCBiYXJyaWVycyAtIGZvciBleGFtcGxlLCB0aGUgY2x1c3RlciBtYXkgZW5kIHVwCisvLyB3aXRo
IHR3byBvciBtb3JlIGJhcnJpZXJzIG9uIHRoZSBzYW1lIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBp
dCBpcyB0b3RhbGx5IHNhZmUgZm9yIHVzIHRvIGRyb3AKKy8vIG9uZSBvZiB0aGVtLiBUaGUgcmVh
c29uIHdoeSB0aGlzIGlzIHNvdW5kIGhpbmdlcyBvbiB0aGUgImVhcmxpZXN0IHBvaW50IHdoZXJl
IHRoZSBjbHVzdGVyIHdvdWxkCisvLyBiZSBjb3JyZWN0IiBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUs
IHRha2UgdGhpcyBpbnB1dDoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlP
ZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBjOiBGZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBlOiBGZW5jZWRTdG9yZUJhcnJp
ZXIoQG8pCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBnOiBGZW5j
ZWRTdG9yZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTog
Q2FsbCgpCisvLworLy8gVGhlIGNsdXN0ZXIgb2YgYmFycmllcnMgaXMgQGMsIEBlLCBhbmQgQGcu
IEFsbCBvZiB0aGUgYmFycmllcnMgYXJlIGJldHdlZW4gdHdvIGRvZXNHQyBlZmZlY3RzOgorLy8g
dGhlIGNhbGxzIGF0IEBhIGFuZCBAaS4gQmVjYXVzZSB0aGVyZSBhcmUgbm8gZG9lc0dDIGVmZmVj
dHMgYmV0d2VlbiBAYSBhbmQgQGkgYW5kIHRoZXJlIGlzIG5vCisvLyBwb3NzaWJsZSBjb250cm9s
IGZsb3cgZW50cnkgaW50byB0aGlzIHNlcXVlbmNlIGJldHdlZW4gQCBhbmQgQGksIHdlIGNvdWxk
IGNvdWxkIGp1c3QgZXhlY3V0ZSBhbGwKKy8vIG9mIHRoZSBiYXJyaWVycyBqdXN0IGJlZm9yZSBA
aSBpbiBhbnkgb3JkZXIuIFRoZSBlYXJsaWVzdCBwb2ludCB3aGVyZSB0aGUgY2x1c3RlciB3b3Vs
ZCBiZQorLy8gY29ycmVjdCBpcyBqdXN0IGFmdGVyIEBmLCBzaW5jZSB0aGF0J3MgdGhlIGxhc3Qg
b3BlcmF0aW9uIHRoYXQgbmVlZHMgYSBiYXJyaWVyLiBXZSB1c2UgdGhlCisvLyBlYXJsaWVzdCB0
byByZWR1Y2UgcmVnaXN0ZXIgcHJlc3N1cmUuIFdoZW4gdGhlIGJhcnJpZXJzIGFyZSBjbHVzdGVy
ZWQganVzdCBhZnRlciBAZiwgd2UgZ2V0OgorLy8KKy8vICAgICBhOiBDYWxsKCkKKy8vICAgICBi
OiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywg
QHkpCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBjOiBGZW5jZWRT
dG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZTogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAg
IGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChAcSkKKy8v
ICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIHBoYXNlIGRvZXMgbW9yZS4gSXQgdGFrZXMgYWR2
YW50YWdlIG9mIHRoZSBjbHVzdGVyaW5nIHRvIHJlbW92ZSBmZW5jZXMgYW5kIHJlbW92ZSByZWR1
bmRhbnQKKy8vIGJhcnJpZXJzLiBTbyB0aGlzIHBoYXNlIHdpbGwgb3V0cHV0IHRoaXM6CisvLwor
Ly8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwg
QHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBnOiBTdG9y
ZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTogQ2FsbCgp
CisvLworLy8gVGhpcyBvcHRpbWl6YXRpb24gaW1wcm92ZXMgYm90aCBvdmVyYWxsIHRocm91Z2hw
dXQgYW5kIHRoZSB0aHJvdWdocHV0IHdoaWxlIHRoZSBjb25jdXJyZW50IEdDIGlzCisvLyBydW5u
aW5nLiBJbiB0aGUgZm9ybWVyLCB3ZSBhcmUgc2ltcGxpZnlpbmcgaW5zdHJ1Y3Rpb24gc2VsZWN0
aW9uIGZvciBhbGwgYnV0IHRoZSBmaXJzdCBmZW5jZS4gSW4KKy8vIHRoZSBsYXR0ZXIsIHdlIGFy
ZSByZWR1Y2luZyB0aGUgY29zdCBvZiBhbGwgYnV0IHRoZSBmaXJzdCBiYXJyaWVyLiBUaGUgZmly
c3QgYmFycmllciB3aWxsIGF3bGF5cworLy8gdGFrZSBzbG93IHBhdGggd2hlbiB0aGVyZSBpcyBj
b25jdXJyZW50IEdDIGFjdGl2aXR5LCBzaW5jZSB0aGUgc2xvdyBwYXRoIGNvbnRhaW5zIHRoZSBm
ZW5jZS4gQnV0CisvLyBhbGwgb2YgdGhlIG90aGVyIGJhcnJpZXJzIHdpbGwgb25seSB0YWtlIHNs
b3cgcGF0aCBpZiB0aGV5IHJlYWxseSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvYmplY3QuCitib29s
IHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw3ICszMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3du
IGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IEVkZ2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAg
ICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDMwLDEzICs0MzAsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgSW5zZXJ0aW5nIGJhcnJpZXIuXG4iKTsKLSAgICAgICAgaW5zZXJ0QmFycmll
cihtX25vZGVJbmRleCwgYmFzZSk7CisgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQgbm9k
ZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wgZXhpdE9LID0gdHJ1ZSkKKyAgICB2b2lkIGluc2VydEJh
cnJpZXIodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCiAgICAgewotICAgICAgICAvLyBJ
bnNlcnRpbmcgYSBiYXJyaWVyIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBtYXkgYmVjb21lIG1hcmtl
ZCBieSB0aGUgR0MsIHdoaWNoIHdpbGwgbWFrZQotICAgICAgICAvLyB0aGUgb2JqZWN0IGJsYWNr
LgorICAgICAgICAvLyBUaGlzIGlzIGp1c3Qgb3VyIHdheSBvZiBzYXlpbmcgdGhhdCBiYXJyaWVy
cyBhcmUgbm90IHJlZHVuZGFudCB3aXRoIGVhY2ggb3RoZXIgYWNjb3JkaW5nCisgICAgICAgIC8v
IHRvIGZvcndhcmQgYW5hbHlzaXM6IGlmIHdlIHByb3ZlZCBvbmUgdGltZSB0aGF0IGEgYmFycmll
ciB3YXMgbmVjZXNzYXJ5IHRoZW4gaXQnbGwgZm9yCisgICAgICAgIC8vIHN1cmUgYmUgbmVjZXNz
YXJ5IG5leHQgdGltZS4KICAgICAgICAgYmFzZS0+c2V0RXBvY2goRXBvY2goKSk7CiAKICAgICAg
ICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUg
YmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KQEAgLTQ0NiwxNyArNDQ3LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdXBwb3J0IFN0b3JlQmFycmllcihV
bnR5cGVkVXNlOikuIFRoYXQgd291bGQgYmUgc29ydCBvZiBjb29sLgogICAgICAgICAvLyBCdXQg
cmlnaHQgbm93IHdlIGRvbid0IG5lZWQgaXQuCiAKLSAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFs
IGVkZ2Ugd2FzIHVuY2hlY2tlZCwgd2Ugc2hvdWxkIGFsc28gbm90IGhhdmUgYSBjaGVjay4gV2Ug
bWF5IGJlIGluIGEgY29udGV4dAotICAgICAgICAvLyB3aGVyZSBjaGVja3MgYXJlIG5vdCBhbGxv
d2VkLiBJZiB3ZSBldmVyIGRpZCBoYXZlIHRvIGluc2VydCBhIGJhcnJpZXIgYXQgYW4gRXhpdElu
dmFsaWQKLSAgICAgICAgLy8gY29udGV4dCBhbmQgdGhhdCBiYXJyaWVyIG5lZWRlZCBhIGNoZWNr
LCB0aGVuIHdlIGNvdWxkIG1ha2UgdGhhdCB3b3JrIGJ5IGhvaXN0aW5nIHRoZSBjaGVjay4KLSAg
ICAgICAgLy8gVGhhdCBkb2Vzbid0IGhhcHBlbiByaWdodCBub3cuCi0gICAgICAgIGlmIChiYXNl
LnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpIHsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBtX25vZGUtPm9yaWdpbi5leGl0T0spOwotICAgICAgICAgICAgYmFzZS5z
ZXRVc2VLaW5kKENlbGxVc2UpOwotICAgICAgICB9CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBpc0NlbGwoYmFzZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEJhcnJpZXJzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIG5vZGUgdGhhdCB0aGV5IHNl
cnZpY2UuIFRoZXJlZm9yZSwgd2UgYWx3YXlzIGtub3cKKyAgICAgICAgLy8gdGhhdCB0aGUgdGhp
bmcgaXMgYSBjZWxsIG5vdy4KKyAgICAgICAgYmFzZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgIAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOwor
ICAgICAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbV9ub2RlKSkKKyAgICAgICAg
ICAgIG9yaWdpbiA9IG9yaWdpbi53aXRoSW52YWxpZEV4aXQoKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGVUeXBlIHR5cGU7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmll
cnMoKSkKKyAgICAgICAgICAgIHR5cGUgPSBGZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CiAgICAgICAgIAotICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGV4aXRPSyksIGJh
c2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIHR5cGUsIG9yaWdpbiwgYmFzZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgcmVhbGx5SW5z
ZXJ0QmFycmllcnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogY2xhc3MgR3JhcGg7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMg
aW4gYSBibG9jay1sb2NhbCBtYW5uZXIgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBhYnN0cmFjdCBp
bnRlcnByZXRlci4KLS8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZv
aWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVycy4gVGhpcyBwaGFzZSByZXF1aXJlcwotLy8g
dGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KKy8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5h
bHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmpl
Y3RzLiBUaGlzCisvLyBwaGFzZSByZXF1aXJlcyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgogYm9v
bCBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiAvLyBJbnNlcnRz
IHN0b3JlIGJhcnJpZXJzIHVzaW5nIGEgZ2xvYmFsIGFuYWx5c2lzIGFuZCBjb25zdWx0cyB0aGUg
YWJzdHJhY3QgaW50ZXJwcmV0ZXIuIFVzZXMgYQotLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5
c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMsIGJ1dCBvbmx5IHByb3Bh
Z2F0ZXMgInNhbWUKLS8vIGVwb2NoIGFzIGN1cnJlbnQiIHByb3BlcnR5IGZyb20gb25lIGJsb2Nr
IHRvIHRoZSBuZXh0LiBUaGlzIHBoYXNlIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZQotLy8gYWxz
byByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgorLy8gc2ltcGxlIGVwb2No
LWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxv
Y2F0ZWQgb2JqZWN0cy4gVGhpcyBwaGFzZQorLy8gcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlIGFs
c28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KIGJvb2wgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMiArMTk2LDEyIEBAIHB1YmxpYzoK
ICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55QWRkcmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJh
Y3RIZWFwJiBhdCh2b2lkKiBhZGRyZXNzKQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQoY29u
c3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2luZGV4ZWRIZWFwLmF0
KGJpdHdpc2VfY2FzdDxwdHJkaWZmX3Q+KGFkZHJlc3MpKTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKHZvaWQqIGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFk
ZHJlc3MpOyB9CisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFkZHJlc3MpOyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAK
ICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMTE2LDYgKzExNywxNiBAQCB2b2lkIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlUGF0CiAgICAgbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKIH0KIAordm9pZCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAq
IGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVJlYWQuYXBwZW5kKEhl
YXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OmRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVh
cCwgdmFsdWUpKTsKK30KKwogdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFu
Z2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMoKQogewogICAgIHJvb3QuY29tcHV0ZSgpOwpAQCAt
MTMyLDkgKzE0MywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5n
CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2FsbFdyaXRlKQogICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRy
eS5oZWFwLT5yYW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9y
UGF0Y2hwb2ludFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUt
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdl
KCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50V3Jp
dGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRl
cyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBm
b3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlUmVhZCkKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJlYWQgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVhcC0+cmFu
Z2UoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVjb3JhdGVDQ2FsbFdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpW
YWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQYXRjaHBvaW50UmVhZChjb25zdCBBYnN0cmFjdEhl
YXAqLCBCMzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFdyaXRlKGNvbnN0
IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVJlYWQo
Y29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0ZUZlbmNl
V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAKICAgICB2b2lkIGNvbXB1
dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpOwogCkBAIC0yNDEsNiArMjQzLDggQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JDQ2FsbFdyaXRlOwog
ICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRSZWFkOwogICAgIFZl
Y3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZTsKKyAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVJlYWQ7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1
ZT4gbV9oZWFwRm9yRmVuY2VXcml0ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRl
T2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgVGFp
bENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1
ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKQEAgLTk0NSw2ICs5NDYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY29tcGlsZUNvdW50RXhlY3V0aW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgpAQCAtNjk5NSw5
ICs2OTk3LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIo
KQogICAgIHsKLSAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKICAgICB9Ci0KKyAgICAKICAg
ICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtODEyNiw4ICs4MTI4LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsK
LSAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDA1MywxMyAr
MTAwNTMsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBydW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQg
Y3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNlLCB5b3Ugc2hvdWxkIG5vdCB1c2UgYnktcmVmZXJl
bmNlCiAgICAgLy8gY2FwdHVyZSAoaS5lLiBbJl0pIGluIGFueSBvZiB0aGVzZSBsYW1iZGFzLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKICAgICB7
CiAgICAgICAgIHJldHVybiBsYXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFy
Z3VtZW50cy4uLiB9KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVj
dG9yPExWYWx1ZT4mIHVzZXJBcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xv
d1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJB
cmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwogICAgICAgICAKQEAgLTExNDI5LDI2ICsxMTQyOSwzOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZDhaZXJvRXh0MzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVl
IGJhc2UpCisgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBib29sIGlzRmVu
Y2VkKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OwogCisgICAgICAgIExWYWx1ZSB0aHJlc2hvbGQ7CisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAg
ICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhl
YXAuYWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5jb25zdEludDMyKGJsYWNrVGhyZXNob2xkKTsKKyAg
ICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxv
YWRDZWxsU3RhdGUoYmFzZSksIG1fb3V0LmNvbnN0SW50MzIoYmxhY2tUaHJlc2hvbGQpKSwKKyAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGxvYWRDZWxsU3RhdGUoYmFzZSksIHRocmVzaG9sZCksCiAg
ICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwogCiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJh
cnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZl
ciBmaXJlLiBBbmQKICAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNl
IGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgog
ICAgICAgICAvLyB3YXN0aW5nIEIzJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBsYXp5
U2xvd1BhdGgoCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGxhenlTbG93
UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKIAogICAgICAgICAgICAg
ICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKICAgICAgICAgICAgICAg
ICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZlbmNlZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0ZlbmNlID0g
aml0Lmp1bXBJZlN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1lbW9yeUZlbmNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub0ZlbmNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CkBAIC0xMTQ5Myw2ICsxMTUw
NiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAg
ICAgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5yb290LCBw
YXRjaHBvaW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBh
dGNocG9pbnRSZWFkKCZtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOworICAg
ICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFdyaXRlKCZtX2hlYXBzLkpTQ2VsbF9jZWxs
U3RhdGUsIHBhdGNocG9pbnQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIK
KyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCkBA
IC00NDUsNiArNDQ2LDExIEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVk
UG8KICAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3RvcmUpOwog
fQogCitGZW5jZVZhbHVlKiBPdXRwdXQ6OmZlbmNlKCkKK3sKKyAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCkpOworfQorCiB2b2lkIE91dHB1
dDo6c3RvcmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQogewogICAg
IExWYWx1ZSBzdG9yZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZTgsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsKQEAgLTc5NSw3ICs4MDEs
NyBAQCB2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotVHlwZWRQb2ludGVyIE91dHB1dDo6YWJzb2x1
dGUodm9pZCogYWRkcmVzcykKK1R5cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCiB7CiAgICAgcmV0dXJuIFR5cGVkUG9pbnRlcihtX2hlYXBzLT5hYnNvbHV0
ZVthZGRyZXNzXSwgY29uc3RJbnRQdHIoYWRkcmVzcykpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBA
IHN0cnVjdCBOb2RlOwogfSAvLyBuYW1lc3BhY2UgREZHCiAKIG5hbWVzcGFjZSBCMyB7CitjbGFz
cyBGZW5jZVZhbHVlOwogY2xhc3MgU2xvdEJhc2VWYWx1ZTsKIH0gLy8gbmFtZXNwYWNlIEIzCiAK
QEAgLTE4OSw2ICsxOTAsNyBAQCBwdWJsaWM6CiAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50
ZXIsIExUeXBlKTsKICAgICB2b2lkIHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyKTsKKyAgICBC
Mzo6RmVuY2VWYWx1ZSogZmVuY2UoKTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihUeXBl
ZFBvaW50ZXIpOwogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIpOwpAQCAt
Mjg1LDcgKzI4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0
aGlzLCBiYXNlLCBpbmRleCwgaW5kZXhBc0NvbnN0YW50LCBvZmZzZXQpOwogICAgIH0KIAotICAg
IFR5cGVkUG9pbnRlciBhYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKTsKKyAgICBUeXBlZFBvaW50ZXIg
YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcyk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0
MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4
U2lnbkV4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQogICAgIExWYWx1ZSBsb2FkOFplcm9F
eHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9h
ZDhaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1Mywx
NiBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogfTsKIAogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMTsgLy8geCA8PSBibGFja1RocmVzaG9sZCBtZWFu
cyB4IGlzIGJsYWNrLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA9IDEwMDsgLy8geCA8PSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgaXMgYWx3YXlzIHRydWUuCisK
K2lubGluZSBib29sIGlzV2l0aGluVGhyZXNob2xkKENlbGxTdGF0ZSBjZWxsU3RhdGUsIHVuc2ln
bmVkIHRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxT
dGF0ZSkgPD0gdGhyZXNob2xkOworfQogCiBpbmxpbmUgYm9vbCBpc0JsYWNrKENlbGxTdGF0ZSBj
ZWxsU3RhdGUpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU3RhdGUp
IDw9IGJsYWNrVGhyZXNob2xkOworICAgIHJldHVybiBpc1dpdGhpblRocmVzaG9sZChjZWxsU3Rh
dGUsIGJsYWNrVGhyZXNob2xkKTsKIH0KIAogaW5saW5lIENlbGxTdGF0ZSBibGFja2VuKENlbGxT
dGF0ZSBjZWxsU3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NDksNCArMTU0OSwzMiBAQCB2b2lkIEhlYXA6OmZvckVhY2hDb2Rl
QmxvY2tJbXBsKGNvbnN0IFNjCiAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5j
KTsKIH0KIAordm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZy
b20pCit7CisgICAgaWYgKFVOTElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAg
ICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0YXV0b2xv
Z2ljYWwgaW1wb3NzaWJsZSB0aHJlc2hvbGQsIHNvIGZyb20KKyAgICAgICAgLy8gY291bGQgc3Rp
bGwgYmUgbm90IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRpbCB3ZSBmaXJl
IG9mZiBhIGZlbmNlLgorICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CisgICAgICAgIGlm
ICghaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwordm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCit7Cisg
ICAgaWYgKFVOTElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAgICAgICAvLyBJ
biB0aGlzIGNhc2UsIHRoZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0YXV0b2xvZ2ljYWwgaW1w
b3NzaWJsZSB0aHJlc2hvbGQsIHNvIGZyb20KKyAgICAgICAgLy8gY291bGQgc3RpbGwgYmUgbm90
IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRpbCB3ZSBmaXJlIG9mZiBhIGZl
bmNlLgorICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CisgICAgICAgIGlmICghaXNCbGFj
ayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hpdGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsOSArMTA0LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgc2l6ZV90
IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpT
Q2VsbCopOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwot
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOworICAgIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOworICAgIAorICAgIHZvaWQgd3JpdGVCYXJy
aWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgCisgICAgLy8gVGFrZSB0
aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBzbmVha3lCbGFja1RocmVz
aG9sZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNv
bnN0IEpTQ2VsbCogZnJvbSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJp
ZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOwogCiAgICAgV3JpdGVC
YXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmll
ckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CkBA
IC0yNTQsNiArMjYwLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQWxsb2NhdGVCbG9jayhz
aXplX3QgY2FwYWNpdHkpOwogICAgIHZvaWQgZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7
CisgICAgCisgICAgYm9vbCBiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSBjb25zdCB7IHJldHVybiBt
X2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0IGJvb2wqIGFkZHJlc3NPZkJhcnJp
ZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZtX2JhcnJpZXJTaG91bGRCZUZlbmNl
ZDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQorICAgIGNvbnN0IHVuc2lnbmVkKiBhZGRy
ZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZtX3NuZWFreUJsYWNr
VGhyZXNob2xkOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpb25TY29w
ZTsKQEAgLTQxMSw2ICs0MjMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxl
Y3Q7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0ZUJhcnJpZXJCdWZmZXI7CisgICAg
Ym9vbCBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmll
cigpIH07CisgICAgdW5zaWduZWQgbV9zbmVha3lCbGFja1RocmVzaG9sZCB7IE9wdGlvbnM6OmZv
cmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hv
bGQgfTsKIAogICAgIFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSwxOSArMTI1LDI4IEBAIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAg
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CiAjZW5kaWYKLSAgICBp
ZiAoIWZyb20gfHwgIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICghZnJvbSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxT
dGF0ZTo6TmV3V2hpdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQo
ZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0
ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQ
YXRoKGZyb20sIHRvKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5j
ZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1Ro
cmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOworfQorCitp
bmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBm
cm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0Nl
bGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9S
ZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChm
cm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQpKSkKKyAgICAgICAgYWRkVG9SZW1lbWJl
cmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZChzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwNiwxNyArMTMw
Niw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRo
VHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBS
ZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihH
UFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZl
bmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFk
ZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihibGFj
a1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRo
b3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhhZGRy
ZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogICAgIAorICAgIEp1
bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwsIEdQUlJlZyBz
Y3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNl
bGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihB
Ym92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mU25l
YWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICB7
CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihj
ZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3Ms
IHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIs
IEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xk
KCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihH
UFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCk7
CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShj
ZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2Vs
bCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCk7Cisg
ICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShjZWxs
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgpCisg
ICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3RvcmVCYXJyaWVyU3Rv
cmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAgICAg
b2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclNob3Vs
ZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1
Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0
aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hl
cmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bwog
ICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3Ry
aW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCi0vLyBO
QjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUgYmFycmllciBiZWNh
dXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRoZSBERkcgb25seSB0
cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMgYmVlbiBiYXJyaWVy
ZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRvIHRyeSB0byBtb2Rl
bCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+
aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xvd1Bh
dGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOCArNDEyLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmll
cihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2Vw
dGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJ
ZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgCisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJ
ZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJl
ZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50
cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2Ug
Z2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFy
ZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAtNjg0LDYgKzY4Miw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3Vs
ZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMTE4
MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQog
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QwKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDggQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93
bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdU
MSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAK
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCkuaXNNYXJrZWQob3du
ZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQpAQCAtMTM5MCw4
ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgaWYgKG5lZWRz
TGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8g
PT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRl
QmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5s
YXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgIH0KICAgICAK
ICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4OTEsNyBAQCBtYWNy
byBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFjcm8gc2tpcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVtZmVuY2UKICAgICBi
YmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQsIC5kb25lCiAgICAg
c2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20v
eDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNyw4IEBAIGNsYXNzIElu
c3RydWN0aW9uCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAgICAgICAkYXNtLnB1dHMgImxl
YSN7eDg2U3VmZml4KDpwdHIpfSAje29yZGVyT3BlcmFuZHMob3BlcmFuZHNbMF0ueDg2QWRkcmVz
c09wZXJhbmQoOnB0ciksIG9wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cikpfSIKICAgICAgICAg
d2hlbiAibWVtZmVuY2UiCi0gICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKKyAgICAgICAg
ICAgIHNwID0gUmVnaXN0ZXJJRC5uZXcobmlsLCAic3AiKQorICAgICAgICAgICAgJGFzbS5wdXRz
ICJsb2NrOyBvcmwgJDAsICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiAr
MTgyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0
ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2ZXJib3Nl
U2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNl
R2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNl
Q29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRv
dWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAsIE5vcm1hbCwgbnVsbHB0
cikgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDktMjUgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgd3JpdGUgYmFycmllciBzaG91bGQgYmUg
ZG93biB3aXRoIFRTTworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyMzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCBjbGVhclJhbmdlKCksIHdoaWNoIHF1aWNrbHkgY2xlYXJzIGEg
cmFuZ2Ugb2YgYml0cy4gVGhpcyB0dXJuZWQgb3V0IHRvIGJlIHVzZWZ1bCBmb3IKKyAgICAgICAg
YSBERkcgb3B0aW1pemF0aW9uIHBhc3MuCisKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5j
cHA6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2UpOgorICAgICAgICAq
IHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisKIDIwMTYtMDktMjMgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBOZWVkIGEgc3RvcmUtbG9hZCBmZW5jZSBiZXR3ZWVuIHNl
dHRpbmcgY2VsbCBzdGF0ZSBhbmQgdmlzaXRpbmcgdGhlIG9iamVjdCBpbiBTbG90VmlzaXRvcgpJ
bmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1Mywy
NCBAQCB2b2lkIEZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OnJlc2l6ZVNsb3coCiAgICAgbV93b3Jk
cyA9IG5ld0FycmF5OwogfQogCit2b2lkIEZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90
IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKQorICAgICAgICAgICAgYXQo
aSkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgZW5k
QmVnaW5TbG9wID0gKGJlZ2luICsgMzEpICYgfjMxOworICAgIHNpemVfdCBiZWdpbkVuZFNsb3Ag
PSBlbmQgJiB+MzE7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kQmVn
aW5TbG9wOyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9
IGJlZ2luRW5kU2xvcDsgaSA8IGVuZDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSBlbmRCZWdpblNsb3AgLyAzMjsgaSA8IGJlZ2luRW5kU2xvcCAvIDMy
OyArK2kpCisgICAgICAgIG1fd29yZHMud29yZChpKSA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0
NjgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAg
fQorICAgIAorICAgIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBj
aGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyV29yZHM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289788</attachid>
            <date>2016-09-25 17:31:26 -0700</date>
            <delta_ts>2016-09-25 18:06:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82305</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
YnJhbmNoMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmJyYW5jaDMyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OmJyYW5jaDY0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJzRXhpdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdN
YXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmlzU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlND
OjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcpOgorICAgICAgICAq
IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICog
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RI
ZWFwLmg6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6OmF0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAg
ICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNB
bmREZWNvcmF0ZUluc3RydWN0aW9ucyk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3RvcmFnZUZvclRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsYXp5U2xvd1Bh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0U3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmZlbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFic29sdXRlKToKKyAg
ICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgICogaGVhcC9DZWxsU3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6aXNXaXRoaW5UaHJlc2hvbGQpOgorICAgICAgICAoSlNDOjppc0JsYWNrKToK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXJTbG93UGF0aCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmJhcnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZkJh
cnJpZXJTaG91bGRCZUZlbmNlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnNuZWFreUJsYWNrVGhy
ZXNob2xkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hv
bGQpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZl
bmNlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVCYXJyaWVy
U3RvcmVMb2FkRmVuY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IG9mZmxpbmVhc20veDg2LnJiOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2
LTA5LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjIwNjIyMSk6IFtVU0VSXSBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2ZWxv
cG1lbnQgYXQgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlOiB2bUVudHJ5VG9KYXZhU2NyaXB0ICsg
Mjk5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MSw2ICszNjEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKKyAg
ICBkZmcvREZHU3RvcmVCYXJyaWVyRmVuY2luZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBACiAJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAv
KiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLzsgfTsKIAkJMEY3
QzVGQjgxRDg4OEEwQzAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjcxRDg4OEEwMTAwNDRG
NUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovOyB9OwogCQkwRjdDNUZCQTFEODg5NTA3MDA0
NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3Bh
Y2VJbmxpbmVzLmggKi87IH07CisJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMzNUI3
MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5
QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NDMsNiArMjc0NSw4IEBACiAJCTBGN0MzOUZFMUM5MEM1
NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVF
MiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFya2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
N0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5n
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMz
MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjU1NSw2ICs2NTU5LDggQEAKIAkJCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovLAogCQkJCTBG
NEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8sCisJCQkJMEY3Rjk4ODkxRDk1OTZD
MzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5oICovLAogCQkJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLApAQCAtNzk0OCw2ICs3
OTU0LDcgQEAKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyOERB
RTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
ODUxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDk4LDYgKzkxMDUsNyBAQAogCQkJCUE3
RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkx
OEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzQsNiArMzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgYnJhbmNoUHRyKGNvbmQs
IG9wMSwgaW1tKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBYnNvbHV0ZUFk
ZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoMzIoZmxpcChjb25kKSwg
cmlnaHQsIGxlZnQpOworICAgIH0KKwogICAgIHZvaWQgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIExhYmVsIHRhcmdldCkK
ICAgICB7CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIG9wMSwgb3AyKS5saW5rVG8odGFyZ2V0LCB0
aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMxNiw2ICsyMzE2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIG1lbW9yeVRlbXBSZWdpc3RlciwgcmlnaHQpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBnZXRDYWNoZWRN
ZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFu
Y2gzMihjb25kLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKICAgICBKdW1w
IGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVk
SW1tMzIgcmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMzIobGVmdCwgZ2V0Q2FjaGVkTWVtb3J5
VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ5LDEwICsxNDQ5LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsK
ICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRk
cmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmln
aHQpCiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhl
IGJyYW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KLSAgICAgICAgbG9h
ZDMyKGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBsb2FkMzIobGVmdC5tX3B0
ciwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGlj
OgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwog
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyOCw2ICs4Mjks
MTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwog
ICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
QWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBs
b2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBKdW1w
IGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBSZWdp
c3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUp
KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0ZWQg
dXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVkIHRo
ZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgc3Rv
cmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2NhdGlu
Z0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52
bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQzMih3
cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7Ci0g
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRj
aEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdy
aXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsK
LSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIu
Y3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIo
KSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNp
emVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0g
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLSAg
ICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3Ry
dWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAgICAg
Ly8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYg
d2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0
dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAg
ICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0YXRl
KSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2VsbF9z
dHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFj
cm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJh
cnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFy
cmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JF
bnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToKICAg
ICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBj
YXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxsX2Nl
bGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICByZWFk
KEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0dXJu
OworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRl
KTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hw
b2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3Jh
cGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgor
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAg
ICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNl
cnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVhcHMg
aW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0
IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiAr
MTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxp
ZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3Vu
ZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAg
ICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJlZ0V4
cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgm
IGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6
CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgY2Fz
ZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IFN0
b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9wKCkg
PT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmllcigp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0aW1l
ciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGlt
ZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBc
Ci0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAqL1wK
ICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhG
ZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogRm9y
LWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0
aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBA
CiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5
b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25Q
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVJlZ2lzdHJhdGlv
blBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsK
IAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAg
ICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhkZmcpOwogICAgICAgICBwZXJmb3JtQ2xl
YW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZn
KTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtR2xvYmFsU3RvcmVC
YXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVy
aW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZIaW50UmVtb3ZhbCgpKQogICAg
ICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVh
blVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBT
dG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgICAgICBj
YXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAg
ICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVy
VXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNhc2UgU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICBjYXNlIENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8gY29tcGlsaW5nIHRoaXMgbm9k
ZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAg
Y2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFz
c3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUsIHdoaWNoIGZvcmNlcyB0aGUg
Y29tcGlsZXIgdG8KKyAgICAgICAgLy8ga2VlcCB0aGVtIGV4YWN0bHkgd2hlcmUgdGhleSB3ZXJl
LiBUaGlzIGlzIHNvcnQgb2Ygb3ZlcmtpbGwgc2luY2UgdGhlIGNsb2JiZXJpemUgZWZmZWN0cwor
ICAgICAgICAvLyBhbHJlYWR5IGZvcmNlIHRoZXNlIHRoaW5ncyB0byBiZSBvcmRlcmVkIHByZWNp
c2VseS4gSSdtIGp1c3Qgbm90IGNvbmZpZGVudCBlbm91Z2ggaW4gbXkKKyAgICAgICAgLy8gZWZm
ZWN0IGJhc2VkIG1lbW9yeSBtb2RlbCB0byByZWx5IHNvbGVseSBvbiB0aGF0IHJpZ2h0IG5vdy4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2OCwxOCArMTI2
OCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRn
ZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RD
ZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRn
ZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS50YWdH
UFIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAt
NTAwNyw3ICs0OTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOiB7CiAgICAg
ICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTU0NzQsMjAgKzU0NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNl
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQot
ICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWws
IHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBt
X2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNl
bGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0K
LQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdl
KQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwotCi0g
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAgd3JpdGVC
YXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigp
LCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2LDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdW5yZWFjaGFibGUobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0
b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBjb21w
aWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAg
CiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIwICs1NTYzLDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNL
bm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0gICAgCi0gICAgSklUQ29tcGls
ZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93
bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkp
KQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNoZXMoKQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5vZGUpCiB7
Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyKTsKKyAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJp
ZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigp
LCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0gICAgbm9SZXN1bHQobm9kZSk7
Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNo
MUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gy
LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgeworICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1faml0LnNuZWFreUp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7CisgICAgICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmU3RvcmVCYXJyaWVy
U3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9qaXQubWVtb3J5RmVuY2UoKTsK
KyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAgICAgICBub0ZlbmNl
LmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2Uo
YmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAg
ICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZl
cjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJl
c3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsK
KyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3Mo
KSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDJHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkp
KTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwotICAgIG1f
aml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRy
ZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOwor
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFy
cmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDFHUFIpOwogICAgIC8v
IFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFk
ZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIoY2VsbCwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisgICAgbV9qaXQuc3Rv
cmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
LXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKIAogICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Rmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwogICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKLX0KLQot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
KG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3Jh
dGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9q
aXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihH
UFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9p
ZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3Jh
dGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyB2YWx1
ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwotCiAg
ICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAogICAgIHN0YXRpYyBHUFJSZWcg
c2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BS
UmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKQEAgLTczOCw4ICs3MzIsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsKLQogICAgIHZvaWQgbm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kKTsK
ICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQoRWRn
ZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7Citw
dWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVuY2luZyIpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAg
ICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNpemUoKSk7CisgICAgICAgIG1f
YmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUoKTsKKyAgICAgICAgICAgIGRv
QmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9pbnRzLmNsZWFyUmFuZ2UoMCwg
YmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXplcyBldmVyeXRoaW5nIHdlIG5l
ZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0cnVjdCBDaGlsZEFuZE9yaWdp
biB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAgICAgIAorICAgICAgICBDaGls
ZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbikKKyAgICAg
ICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNlbWFudGljT3JpZ2luKHNlbWFu
dGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUq
IGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luOwor
ICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5KCkpOworICAgICAgICAKKyAg
ICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVyZSB3ZSB3b3VsZCB3YW50IHRv
IHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQorICAgICAgICAvLyBiYWNrd2Fy
ZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0byB0ZWxsIHVzIGlmIHdlIGhh
ZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMgYSBiYWNrd2FyZHMgYW5hbHlz
aXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVsbHMgdXMgaWYgYSBHQyB3aWxs
IGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVyIHRoYXQgbm9kZS4KKyAgICAg
ICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoZG9lc0dDKG1fZ3JhcGgs
IG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpIHsKKyAgICAg
ICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5pc1N0b3Jl
QmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJyaWVyUG9pbnRz
W25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBydW4g
Zm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEgYmFycmllciBw
b2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5jZS4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9
IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBwZW5kKENoaWxk
QW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGljKSk7CisgICAg
ICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFt
X2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgICAgIG1fbmVl
ZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAgICAgICAgICAg
ICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFuZE9yaWdpbiYg
YikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxkIDwgYi5jaGls
ZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gc3RkOjp1bmlx
dWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25lZWRlZEJh
cnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4m
IGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0ZXItPmNoaWxk
OworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBpdGVyLT5zZW1h
bnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSB0
eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmllcnMo
KSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1hbnRpYyhzZW1h
bnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVz
ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5yZXNpemUo
MCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cisg
ICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENoaWxkQW5kT3Jp
Z2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBoKQoreworICAg
IHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhhdCBjb3VsZCBi
ZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIgYW5kCisv
LyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUg
dGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFrZXMgb25seSB0
aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIgd2hpbGUgdGhl
IHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBhbHNvIHJlbW92
ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVyIG1heSBlbmQg
dXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2JqZWN0LCBpbiB3
aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8gb25lIG9mIHRo
ZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAiZWFybGllc3Qg
cG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHByb3BlcnR5LiBG
b3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxsKCkKKy8vICAg
ICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmll
cihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGU6IEZlbmNl
ZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6KQorLy8g
ICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChAcSkK
Ky8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVycyBpcyBAYywg
QGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28gZG9lc0dDIGVm
ZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJlIGFyZSBubyBk
b2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8KKy8vIHBvc3Np
YmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2VlbiBAIGFuZCBA
aSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJhcnJpZXJzIGp1
c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdoZXJlIHRoZSBj
bHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNpbmNlIHRoYXQn
cyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVzZSB0aGUKKy8v
IGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUgYmFycmllcnMg
YXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAgIGE6IENhbGwo
KQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDogUHV0QnlPZmZz
ZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6KQorLy8gICAg
IGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9yZUJhcnJpZXIo
QG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdldEJ5T2Zm
c2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9lcyBtb3JlLiBJ
dCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZlbmNlcyBhbmQg
cmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2lsbCBvdXRwdXQg
dGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZzZXQoQG8sIEBv
LCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGY6IFB1dEJ5
T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8g
ICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChAcSkKKy8vICAg
ICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBib3RoIG92ZXJh
bGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1cnJlbnQgR0Mg
aXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWluZyBpbnN0cnVj
dGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgorLy8gdGhlIGxh
dHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZpcnN0IGJhcnJp
ZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cgcGF0aCB3aGVu
IHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93IHBhdGggY29u
dGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmllcnMgd2lsbCBv
bmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1iZXIgdGhlIG9i
amVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1dCB0aGVuIHJ1
biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9k
ZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7
CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAsMTMgKzQzMCwx
NCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwotICAgICAgICBp
bnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0QmFycmllciht
X25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcih1
bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQorICAgIHZv
aWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkKICAgICB7Ci0g
ICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IG1heSBi
ZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAgIC8vIHRoZSBv
YmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9mIHNheWluZyB0
aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBhY2NvcmRpbmcK
KyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9uZSB0aW1lIHRo
YXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAgICAgLy8gc3Vy
ZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9jaChFcG9jaCgp
KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxkIG9ubHkg
aW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAtNDQ2LDE3ICs0
NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3Rv
cmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAg
ICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAgICAvLyBJZiB0
aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBh
IGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJlIGNoZWNrcyBh
cmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBh
dCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVl
ZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhl
IGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KLSAgICAg
ICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7Ci0gICAgICAg
ICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOworICAgICAgICAK
KyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhZnRlciB0aGUgbm9kZSB0
aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25vdworICAgICAgICAvLyB0
aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9ub2Rl
LT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBoLCBtX25vZGUp
KQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpOworICAgICAg
ICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsKICAgICAgICAg
Ci0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQo
ZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUlu
ZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5zZXJ0cyBzdG9y
ZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1bHRpbmcgdGhl
IGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFs
eXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlzIHBoYXNlIHJl
cXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNpbXBsZSBlcG9j
aC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24gbmV3bHkgYWxs
b2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2UgYXJlIG5vdCBp
biBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAK
IC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlzaXMgYW5kIGNv
bnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBzaW1wbGUgZXBvY2gt
YmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVycywgYnV0
IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIgcHJvcGVydHkgZnJv
bSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NBLiBUaGlzIHBo
YXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5lc3MuCisvLyBz
aW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJhcnJpZXJzIG9u
IG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1aXJlcyBTU0EuIFRo
aXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgogYm9v
bCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTIg
QEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlBZGRyZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAgICAKLSAgICBj
b25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3QgQWJzdHJhY3RI
ZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5k
ZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwogICAgIH0KICAg
ICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRkcmVzcykgeyBy
ZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10o
Y29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VW
YWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BhdGNocG9p
bnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYsNiArMTE3LDE2
IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAgICBtX2hlYXBG
b3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOwogfQog
Cit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFkKGNvbnN0IEFi
c3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlUmVh
ZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCogaGVh
cCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBwZW5kKEhlYXBG
b3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6
OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAgcm9vdC5jb21w
dXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxs
V3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndy
aXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkg
OiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxs
VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBl
bnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRzID0gZW50cnku
aGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBh
dGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVm
ZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUt
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5n
ZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VSZWFkKQor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVudHJ5LmhlYXAt
PnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVdy
aXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3JpdGUgPSBlbnRy
eS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3QgQWJzdHJhY3RI
ZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRSZWFkKGNvbnN0
IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQYXRjaHBvaW50
V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0
ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRl
Y29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKIAogICAg
IHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAKQEAgLTI0MSw2
ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckND
YWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2ludFJl
YWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2ludFdyaXRlOwor
ICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0VHlw
ZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIENhbGw6CiAg
ICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFpckdlbmVy
YXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJCM1Nsb3RCYXNlVmFs
dWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpAQCAtOTQ1LDYg
Kzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291bnRFeGVjdXRpb24oKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVy
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZVN0
b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0K
LQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC04MTI2LDggKzgx
MjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0
U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW1pdFN0b3JlQmFycmll
cihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAg
LTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1biBhZnRlciB0aGUgZnVu
Y3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91bGQgbm90IHVz
ZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55IG9mIHRoZXNl
IGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6
eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1l
bnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9yLCBWZWN0b3I8
TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAgICBQYXRjaHBvaW50VmFs
dWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZh
bHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0MjksMjYgKzExNDI5LDM5
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQzMihiYXNlLCBt
X2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFN0b3JlQmFy
cmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2Us
IGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKKyAgICAgICAgaWYgKGlz
RmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1fb3V0LmFic29s
dXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIoYmxhY2tUaHJl
c2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9v
dXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihibGFja1RocmVz
aG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgdGhy
ZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQ
YXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8gV2UgZW1pdCB0
aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywgdGhp
cyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwgaXQg
bWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklUIHJh
dGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQuCi0g
ICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAogICAg
ICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6Okdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
RmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRSZWdp
c3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKQEAgLTEx
NDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGlz
RmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRSZWFkKCZtX2hl
YXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2hlYXBz
LmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hw
b2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUoJm1faGVhcHMu
SlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJCM0NDYWxs
VmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQ
dHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWF0aEV4
dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1Nsb3RCYXNl
VmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2
YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgp
LCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQoreworICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7Cit9CisK
IHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50
ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVlKCkpOwpAQCAt
Nzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG8K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1UeXBlZFBvaW50ZXIgT3V0
cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVyIE91dHB1dDo6YWJzb2x1
dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlwZWRQb2ludGVyKG1faGVh
cHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBERkcKIAogbmFtZXNwYWNl
IEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZhbHVlOwogfSAvLyBuYW1l
c3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExWYWx1ZSBsb2Fk
KFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50
ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAgTFZhbHVlIGxvYWQ4U2ln
bkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9p
bnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaGVhcC5i
YXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9mZnNldCk7CiAg
ICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3MpOworICAgIFR5
cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKIAogICAgIExWYWx1ZSBs
b2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyBy
ZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CiAgICAgTFZhbHVl
IGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7
IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiB9OwogCiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAvLyB4IDw9IGJsYWNrVGhy
ZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdGF1dG9sb2dp
Y2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRocmVzaG9sZCBpcyBhbHdh
eXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0YXRlIGNlbGxT
dGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGluZSBib29sIGlzQmxhY2so
Q2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJuIGlzV2l0aGluVGhyZXNo
b2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxpbmUgQ2VsbFN0YXRlIGJs
YWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSw0ICsxNTQ5LDMyIEBAIHZvaWQgSGVhcDo6
Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5p
dGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0
IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmllclNob3VsZEJlRmVuY2Vk
KCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFreUJsYWNrVGhyZXNob2xk
IGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28gZnJvbQorICAgICAgICAv
LyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVu
dGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsK
KyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworfQorCit2
b2lkIEhlYXA6OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxs
KiB0bykKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmllclNob3VsZEJlRmVuY2VkKCkpKSB7Cisg
ICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFreUJsYWNrVGhyZXNob2xkIGlzIHRhdXRv
bG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28gZnJvbQorICAgICAgICAvLyBjb3VsZCBz
dGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZp
cmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAg
aWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpO
ZXdXaGl0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsxMDQsMTUgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7
CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAgdm9p
ZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICAKKyAg
ICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IHNuZWFr
eUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
U2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CiAK
ICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1f
d3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihK
U0NlbGwqKTsKQEAgLTI1NCw2ICsyNjAsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBbGxv
Y2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVlQmxvY2soc2l6ZV90
IGNhcGFjaXR5KTsKKyAgICAKKyAgICBib29sIGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgY29uc3QgYm9vbCogYWRk
cmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gJm1fYmFycmllclNo
b3VsZEJlRmVuY2VkOyB9CisgICAgCisgICAgdW5zaWduZWQgc25lYWt5QmxhY2tUaHJlc2hvbGQo
KSBjb25zdCB7IHJldHVybiBtX3NuZWFreUJsYWNrVGhyZXNob2xkOyB9CisgICAgY29uc3QgdW5z
aWduZWQqIGFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gJm1f
c25lYWt5QmxhY2tUaHJlc2hvbGQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxs
b2NhdGlvblNjb3BlOwpAQCAtNDExLDYgKzQyMyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
U2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1
ZmZlcjsKKyAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VG
ZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1bnNpZ25lZCBtX3NuZWFreUJsYWNrVGhyZXNob2xkIHsg
T3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBi
bGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CiAgICAgZG91YmxlIG1fbGFzdEZ1bGxH
Q0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE5ICsxMjUsMjggQEAgaW5saW5lIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKICNl
bmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAg
aWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRl
KCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGFkZFRvUmVt
ZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJv
bS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVC
YXJyaWVyU2xvd1BhdGgoZnJvbSwgdG8pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1Nf
VkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYgKCFmcm9tIHx8ICFpc0Js
YWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNu
ZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJv
bSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25z
dCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25z
dF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsK
LSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGlu
VGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVzaG9sZCkpKQorICAgICAgICBh
ZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzA2LDE3ICsxMzA2LDU2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRTdG9yZVN0
cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBz
dHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW5XaXRob3V0RmVuY2UoR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNo
OChBYm92ZSwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbldpdGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICB1aW50OF90
KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNl
bGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVB
ZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAg
ICAgCisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihHUFJSZWcgY2Vs
bCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGws
IEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5h
ZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAgfQorCisgICAgSnVtcCBzbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwsIEdQUlJlZyBzY3JhdGNo
R1BSKQorICAgIHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKKyAgICAgICAgbG9h
ZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwg
c2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mU25lYWt5Qmxh
Y2tUaHJlc2hvbGQoKSkpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3RvcmVM
b2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGNlbGwpOworICAgIH0KKworICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3RvcmVMb2Fk
RmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91
dEZlbmNlKGNlbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlQmFycmllclN0b3JlTG9h
ZEZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJp
ZXJzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZTdG9y
ZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBtZW1vcnlGZW5jZSgp
OworICAgICAgICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZC
YXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAgIH0KKyAgICAKICAgICAvLyBFbWl0cyB0aGUg
YnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9l
c24ndCBmYWxsIHRocm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3Nl
IHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0
aGlzIGlzIHRvCiAgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0
aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTc3LDE0ICsyMTc3LDExIEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKICAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7
CiB9CiAKLS8vIE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1ZSBhcyBwYXJ0IG9mIHRoZSBi
YXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lvbgotLy8gcGhhc2UgaW4gdGhl
IERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVpbmcgc3RvcmVkIHRvIGhhcyBi
ZWVuIGJhcnJpZXJlZC4gSXQgCi0vLyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdG8g
dHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMgd2VsbC4KLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKKyAgICB2bS0+aGVhcC53cml0ZUJh
cnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
Miw4ICs0MTIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9w
ZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lO
VEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlND
ZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgo
RXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3Jp
dGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjczLDggKzY3Myw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
OF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAgICAgCi0gICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjg3LDYgKzY4NSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNl
KTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjY2LDggKzY2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
OF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgLy8gSW4g
b3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2Jq
ZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0
aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdp
bicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUg
JiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCkBAIC02
ODQsNiArNjgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVl
VlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwog
fQogCkBAIC0xMTgwLDggKzExODAsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNp
Z25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVn
VDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBAIC0xMjE4LDggKzEyMTgsOCBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkK
ICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDEpOworICAgIEp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsxMjQ2LDkgQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKQogewotICAgIGlmICghb3duZXItPmNlbGxDb250YWluZXIoKS5p
c01hcmtlZChvd25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyKTsKLSAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVy
KTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1Jl
bWVtYmVyZWRPckluRWRlbihvd25lciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hl
Y2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2FzZXMp
CkBAIC0xMzkwLDggKzEzODcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVs
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAg
ICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxz
Lmxhc3QoKS50byA9PSBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25VbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHMubGFzdCgpLnRvID09
IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtODkxLDYgKzg5
MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKIGVuZAogCiBt
YWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKKyAgICBtZW1m
ZW5jZQogICAgIGJiYSBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBCbGFja1RocmVzaG9sZCwg
LmRvbmUKICAgICBzbG93UGF0aCgpCiAuZG9uZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
b2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTUyNyw3ICsxNTI3LDgg
QEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVhcCIKICAgICAgICAgICAgICRh
c20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJPcGVyYW5kcyhvcGVyYW5kc1sw
XS54ODZBZGRyZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0ueDg2T3BlcmFuZCg6cHRyKSl9
IgogICAgICAgICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAgICRhc20ucHV0cyAibWZlbmNl
IgorICAgICAgICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWwsICJzcCIpCisgICAgICAgICAg
ICAkYXNtLnB1dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3BlcmFuZCg6cHRyKX0pIgogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4Miw2ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAg
dihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwgTm9y
bWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wOS0yNSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSB3cml0ZSBiYXJyaWVy
IHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGNsZWFyUmFuZ2UoKSwgd2hpY2ggcXVpY2ts
eSBjbGVhcnMgYSByYW5nZSBvZiBiaXRzLiBUaGlzIHR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGZv
cgorICAgICAgICBhIERGRyBvcHRpbWl6YXRpb24gcGFzcy4KKworICAgICAgICAqIHd0Zi9GYXN0
Qml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZSk6
CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKwogMjAxNi0wOS0yMyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQgYSBzdG9yZS1sb2FkIGZlbmNl
IGJldHdlZW4gc2V0dGluZyBjZWxsIHN0YXRlIGFuZCB2aXNpdGluZyB0aGUgb2JqZWN0IGluIFNs
b3RWaXNpdG9yCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDUgKzUzLDI0IEBAIHZvaWQgRmFzdEJpdFZlY3RvcldvcmRPd25lcjo6cmVzaXplU2xvdygK
ICAgICBtX3dvcmRzID0gbmV3QXJyYXk7CiB9CiAKK3ZvaWQgRmFzdEJpdFZlY3Rvcjo6Y2xlYXJS
YW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKGVuZCAtIGJlZ2luIDwg
MzIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpCisgICAg
ICAgICAgICBhdChpKSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IHNpemVfdCBlbmRCZWdpblNsb3AgPSAoYmVnaW4gKyAzMSkgJiB+MzE7CisgICAgc2l6ZV90IGJl
Z2luRW5kU2xvcCA9IGVuZCAmIH4zMTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47
IGkgPCBlbmRCZWdpblNsb3A7ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gYmVnaW5FbmRTbG9wOyBpIDwgZW5kOyArK2kpCisgICAgICAgIGF0KGkpID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGVuZEJlZ2luU2xvcCAvIDMyOyBpIDwgYmVnaW5F
bmRTbG9wIC8gMzI7ICsraSkKKyAgICAgICAgbV93b3Jkcy53b3JkKGkpID0gMDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDY4LDYgKzQ2OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJB
bGwoKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6
ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
Yml0dmVjdG9yIGNoYW5nZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJXb3Jkcz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289789</attachid>
            <date>2016-09-25 18:06:46 -0700</date>
            <delta_ts>2016-09-25 18:11:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80553</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2
NCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0
b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZElt
cGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJ
bnN0cnVjdGlvbnMpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6
CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5j
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRs
L0ZUTE91dHB1dC5oOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6
OmlzV2l0aGluVGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hv
dWxkQmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxk
QmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAg
ICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmll
cik6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4p
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZl
bmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNt
L3g4Ni5yYjoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYy
MjEpOiBbVVNFUl0gY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNv
bS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEs
NiArMzYxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0
b3JlQmFycmllckZlbmNpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUwMyw2ICs1MDMsOCBAQAogCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlG
RTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhB
MEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCAqLzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1h
cmtlZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
ICovOyB9OworCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuY3BwICovOyB9OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAv
KiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yNzQzLDYgKzI3NDUsOCBAQAogCQkwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wSW5m
by5oOyBwYXRoID0gZGZnL0RGR09wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2Vk
U3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZFNw
YWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4OTFEOTU5
NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8q
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NTUsNiArNjU1OSw4IEBACiAJCQkJMEY5RkI0RjMxN0ZDQjkx
NzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRGMjlERDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3Bw
ICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oICovLAorCQkJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovLAorCQkJCTBGN0Y5ODhBMUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuY3BwICovLAogCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBE
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTc5NDgsNiArNzk1NCw3IEBACiAJ
CQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQwMDUw
MDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdGOTg4QzFE
OTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTA5OCw2ICs5MTA1LDcgQEAKIAkJCQlBN0Q4OUNGNzE3QTBC
OENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFB
MjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2
MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0
LDYgKzM3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGltbSku
bGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBsZWZ0
KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAg
ICAgICBicmFuY2gzMihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDcgQEAgcHVibGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFk
ZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsK
QEAgLTgyOCw2ICs4MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3Jt
KHJpZ2h0LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRp
dGlvbihjb25kKSkpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAg
ICB9CiAKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJ
bmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdl
IGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJl
YWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBo
YXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAg
ICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmll
ckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAg
ICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3Zl
T3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSks
IHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0
ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmll
ckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBh
biBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8g
c2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAg
YmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNj
YWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9m
KHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygm
aml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVy
Zmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhh
dAogICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBp
cyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAv
LyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBc
CiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRl
cl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhK
U0NlbGxfY2VsbFN0YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAg
IG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0Zs
YWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2Jq
ZWN0X2J1dHRlcmZseSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNl
IEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNw
ZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmll
SGludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQ
cm9maWxlVHlwZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3Jl
QmFycmllcjoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAg
IHJlYWQoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVy
OgorICAgICAgICByZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsK
KyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAg
d3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Q
b2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJl
cnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgog
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOgogICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhp
bmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAg
ICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0
aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50
OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBj
YXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0
YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9y
ZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAg
ICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdF
eHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5
RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5j
ZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1
cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVC
YXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wg
aGFzSWRlbnRpZmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGlt
ZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhh
bmRsZVdhdGNoZG9nVGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0
ZSBiYXJyaWVycyAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0
RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJ
bmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlv
bihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhkZmcpOwogICAg
ICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmco
ZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBsYW46
OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxpdmVu
ZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJm
b3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1TdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZIaW50
UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVj
dExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAg
IGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNh
c2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBO
b3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8gY29t
cGlsaW5nIHRoaXMgbm9kZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIC8vIFdlIGNv
bnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUsIHdo
aWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAgLy8ga2VlcCB0aGVtIGV4YWN0bHkg
d2hlcmUgdGhleSB3ZXJlLiBUaGlzIGlzIHNvcnQgb2Ygb3ZlcmtpbGwgc2luY2UgdGhlIGNsb2Ji
ZXJpemUgZWZmZWN0cworICAgICAgICAvLyBhbHJlYWR5IGZvcmNlIHRoZXNlIHRoaW5ncyB0byBi
ZSBvcmRlcmVkIHByZWNpc2VseS4gSSdtIGp1c3Qgbm90IGNvbmZpZGVudCBlbm91Z2ggaW4gbXkK
KyAgICAgICAgLy8gZWZmZWN0IGJhc2VkIG1lbW9yeSBtb2RlbCB0byByZWx5IHNvbGVseSBvbiB0
aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBHZXRCeVZh
bDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI2OCwxOCArMTI2OCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVT
dG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBBU1NF
UlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNlLmdw
cigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIu
Z3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtNTAwNyw3ICs0OTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0b3Jl
QmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVC
YXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTU0NzQsMjAgKzU0NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFnR1BS
LCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1
ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7
Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAg
IGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcg
Z3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwg
RWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdl
Lm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRn
ZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVkZ2Us
IHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2LDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdW5y
ZWFjaGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJpZXI6
IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjog
ewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIwICs1
NTYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxs
OwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RD
ZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0gICAg
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVC
YXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQotCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjps
aW5rQnJhbmNoZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVy
KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyKTsK
KyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5vcCgp
ID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhp
cyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRlQmFy
cmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0gICAg
bm9SZXN1bHQobm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgeworICAg
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1faml0
LnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7
CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVt
cElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9qaXQu
bWVtb3J5RmVuY2UoKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQo
bV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOwor
ICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVk
ZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRv
V3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMikKLXsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdyaXRl
QmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5tX3dy
aXRlQmFycmllckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5l
ZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKKyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJl
bnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5l
ZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDIpOwotICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFycmll
ckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRj
aDFHUFIpOwogICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVz
ZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIoY2Vs
bCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7
CisgICAgbV9qaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
Y3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKIAog
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwogICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxpbmso
Jm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVy
KG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluaygmbV9qaXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1cnJl
bnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAogICAg
IHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2
ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKQEAg
LTczOCw4ICs3MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUJh
c2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsKLQog
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQo
RWRnZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
T3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVuY2lu
ZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpCisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNpemUo
KSk7CisgICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUoKTsK
KyAgICAgICAgICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9pbnRz
LmNsZWFyUmFuZ2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXplcyBl
dmVyeXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0cnVj
dCBDaGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAgICAg
IAorICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNlbWFu
dGljT3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2luIHNl
bWFudGljT3JpZ2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5KCkp
OworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVyZSB3
ZSB3b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQorICAg
ICAgICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0byB0
ZWxsIHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMgYSBi
YWNrd2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVsbHMg
dXMgaWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVyIHRo
YXQgbm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAo
ZG9lc0dDKG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05v
dEV4aXQpIHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlLT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAg
bV9iYXJyaWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVy
ZUdDID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE5vdyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2Ug
aGl0IGEgYmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGgg
YSBmZW5jZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFy
cmllcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7
CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmll
cnMuYXBwZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNl
bWFudGljKSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAg
ICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQo
KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LmNoaWxkIDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8g
ZW5kID0gc3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdp
bigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3Qg
Q2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IGl0ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4gPSBpdGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25j
dXJyZW50QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndp
dGhTZW1hbnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hp
bGQsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRC
YXJyaWVycy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9p
bnNlcnRpb25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVj
dG9yPENoaWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
IGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmll
cnMgdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVh
Y2ggb3RoZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhl
IHByb2dyYW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQor
Ly8gbWFrZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJh
cnJpZXIgd2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBw
aGFzZSBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBj
bHVzdGVyIG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNh
bWUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJv
cAorLy8gb25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9u
IHRoZSAiZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJl
Y3QiIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBh
OiBDYWxsKCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZl
bmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQor
Ly8gICAgIGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChA
cCwgQHAsIEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBH
ZXRCeU9mZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBi
YXJyaWVycyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2Vl
biB0d28gZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNl
IHRoZXJlIGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUg
aXMgbm8KKy8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2Ug
YmV0d2VlbiBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2Yg
dGhlIGJhcnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBv
aW50IHdoZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIg
QGYsIHNpbmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIu
IFdlIHVzZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hl
biB0aGUgYmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLwor
Ly8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwg
QHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5j
ZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8g
ICAgIGg6IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhh
c2UgZG9lcyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVt
b3ZlIGZlbmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhh
c2Ugd2lsbCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0
QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQor
Ly8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVC
YXJyaWVyKEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXBy
b3ZlcyBib3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhl
IGNvbmN1cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1w
bGlmeWluZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNl
LiBJbgorLy8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQg
dGhlIGZpcnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtl
IHNsb3cgcGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRo
ZSBzbG93IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIg
YmFycmllcnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8g
cmVtZW1iZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9j
YXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNl
cnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRl
eCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBv
Y2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBA
IC00MzAsMTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5c
biIpOwotICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAg
aW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQg
aW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sg
PSB0cnVlKQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2Ug
YmFzZSkKICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0g
ICAgICAgIC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIg
d2F5IG9mIHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBv
dGhlciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJv
dmVkIG9uZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IK
KyAgICAgICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5z
ZXRFcG9jaChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwg
d2Ugc2hvdWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2Vk
LgpAQCAtNDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0
IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAot
ICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQg
YWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8v
IHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5z
ZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0
aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsg
YnkgaG9pc3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJp
Z2h0IG5vdy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewot
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4
aXRPSyk7Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0K
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQo
KSkpOworICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBh
ZnRlciB0aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25v
dworICAgICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSht
X2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlk
RXhpdCgpOworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNl
ZFN0b3JlQmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFy
cmllcjsKICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICsz
MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAog
Ly8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0
IGNvbnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBl
cG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJz
LiBUaGlzIHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNl
cyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmll
cnMgb24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRo
YXQgd2UgYXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0
aW9uKEdyYXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwg
YW5hbHlzaXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0v
LyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFu
dCBiYXJyaWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVu
dCIgcHJvcGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWly
ZXMgU1NBLiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQg
bGl2ZW5lc3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0
aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyBy
ZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5k
IGxpdmVuZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBo
Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTk2LDEyICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYg
YXRBbnlBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7
IH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAg
Y29uc3QgQWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVz
cykpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9p
ZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhl
YXAmIG9wZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7
IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNs
dWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBA
IC0xMTYsNiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQ
YXQKICAgICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFw
LCB2YWx1ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVu
Y2VSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1f
aGVhcEZvckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisK
K3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFi
c3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3Jp
dGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0
SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7
CiAgICAgcm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6
IG1faGVhcEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVl
PigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFw
Rm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnku
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5n
ZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3Rz
LnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRy
eSA6IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPEND
YWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBl
bnRyeS5oZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFw
Rm9yRmVuY2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVh
ZCA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBt
X2hlYXBGb3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4o
KS0+d3JpdGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxNiw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUo
Y29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNo
cG9pbnRSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVj
b3JhdGVQYXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7Cisg
ICAgdm9pZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6
VmFsdWUqKTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25z
KCk7CiAKQEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFs
dWU+IG1faGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFw
Rm9yUGF0Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVh
ZDsKKyAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzgsNiArMTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToK
ICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5l
ZENhbGxlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAi
QjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRl
ICJCM1Nsb3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgpAQCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291
bnRFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFy
cmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21w
aWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJy
aWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVy
KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJh
cnJpZXIpOwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CkBAIC04MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3Vz
U3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZW1pdFN0b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1
biBhZnRlciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlv
dSBzaG91bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkg
aW4gYW55IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvciwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNo
cG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50
VHlwZXMuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChm
dW5jdG9yLCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBG
dW5jdG9yJiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAg
ICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBj
b25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVP
cmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0
MjksMjYgKzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFpl
cm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZv
aWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJp
ZXIoTFZhbHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsK
KyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9h
ZDMyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9s
ZCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0
SW50MzIoYmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJ
bnQzMihibGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxT
dGF0ZShiYXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAg
ICAgLy8gV2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxv
dCBvZiBjYXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0
IGRvZXMgZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1
c2luZyBvdXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9w
dGltaXppbmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRl
R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBM
YXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2Fk
RmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5
RmVuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFw
cGVuZChqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xv
d1BhdGgtPnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAK
KyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNo
cG9pbnRSZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2Nl
bGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50
V3JpdGUoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNs
dWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6
OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5
KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2Uo
KQoreworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlw
ZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVy
LnZhbHVlKCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUg
dmFsdWUsIFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1U
eXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVy
IE91dHB1dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlw
ZWRQb2ludGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNz
KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBE
RkcKIAogbmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZh
bHVlOwogfSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAog
ICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZh
bHVlLCBUeXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAg
TFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVy
b0V4dDMyKFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3Rh
bnQsIG9mZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFk
ZHJlc3MpOworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsK
IAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RI
ZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkp
OyB9CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFj
dEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxk
KSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWlu
dDhfdCB7CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAv
LyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgdGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRo
cmVzaG9sZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQo
Q2VsbFN0YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGlu
ZSBib29sIGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJu
IGlzV2l0aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxp
bmUgQ2VsbFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSw0ICsxNTQ5LDMy
IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4g
bV9jb2RlQmxvY2tzLT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFycmll
clNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmll
clNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFr
eUJsYWNrVGhyZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28g
ZnJvbQorICAgICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBr
bm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6c3Rv
cmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYWRkVG9SZW1lbWJlcmVkU2V0
KGZyb20pOworfQorCit2b2lkIEhlYXA6OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2Vs
bCogZnJvbSwgSlNDZWxsKiB0bykKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmllclNob3VsZEJl
RmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFreUJsYWNrVGhy
ZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28gZnJvbQorICAg
ICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBz
dXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6c3RvcmVMb2FkRmVu
Y2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkg
IT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRvUmVtZW1i
ZXJlZFNldChmcm9tKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsxMDQsMTUgQEAgcHVibGlj
OgogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAg
dm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlND
ZWxsKiwgSlNDZWxsKik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9t
KTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8p
OworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7
CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBm
cm9tKTsKKyAgICAKKyAgICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxs
U3RhdGUoKSA8IHNuZWFreUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSwg
SlNDZWxsKiB0byk7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZl
cigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTI1NCw2ICsyNjAsMTIgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRG
cmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKKyAgICAKKyAgICBib29sIGJhcnJpZXJTaG91bGRC
ZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAg
Y29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1
cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgCisgICAgdW5zaWduZWQgc25lYWt5
QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX3NuZWFreUJsYWNrVGhyZXNob2xkOyB9
CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29u
c3QgeyByZXR1cm4gJm1fc25lYWt5QmxhY2tUaHJlc2hvbGQ7IH0KIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQWxsb2NhdGlvblNjb3BlOwpAQCAtNDExLDYgKzQyMyw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBt
X3dyaXRlQmFycmllckJ1ZmZlcjsKKyAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsg
T3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1bnNpZ25lZCBtX3NuZWFreUJs
YWNrVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2lj
YWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CiAgICAgZG91
YmxlIG1fbGFzdEZ1bGxHQ0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE5ICsxMjUsMjggQEAg
aW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0
ZUJhcnJpZXIoKTsKICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxs
U3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8
fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRo
aW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkK
KyAgICAgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJvbSwgdG8pOwogfQogCiBpbmxpbmUgdm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYg
KCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+
Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVCYXJy
aWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldp
dGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9M
T09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20pCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVzaG9s
ZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lk
IEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzA2LDE3ICsxMzA2LDU2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwg
VHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1wIGp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIEp1bXAganVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAg
ICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogCi0gICAgSnVt
cCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwpCisgICAgSnVtcCBqdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAgewog
ICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2Vs
bCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoOChB
Ym92ZSwgQWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hv
bGQpKTsKICAgICB9CiAgICAgCisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPcklu
RWRlbihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBsb2Fk
OChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJl
c3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAgfQor
CisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGws
IEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQo
KTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRk
cmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIHsKKyAgICAgICAgc3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKworICAgIEp1bXAganVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVC
YXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3Jl
QmFycmllclN0b3JlTG9hZEZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEJhcnJpZXJzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAg
b2sgPSBqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAg
ICBtZW1vcnlGZW5jZSgpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAg
ICBKdW1wIGp1bXBJZlN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+
aGVhcC5hZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAgIH0KKyAgICAKICAg
ICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0
dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3IgaXMg
Y2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBP
bmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCiAgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRo
ZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3Rl
ciBhbmQgdGhlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc3LDE0ICsyMTc3LDExIEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKICAgICB2bS0+aGVhcC53cml0
ZUJhcnJpZXIoY2VsbCk7CiB9CiAKLS8vIE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1ZSBh
cyBwYXJ0IG9mIHRoZSBiYXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lvbgot
Ly8gcGhhc2UgaW4gdGhlIERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVpbmcg
c3RvcmVkIHRvIGhhcyBiZWVuIGJhcnJpZXJlZC4gSXQgCi0vLyB3b3VsZCBiZSBtdWNoIG1vcmUg
Y29tcGxpY2F0ZWQgdG8gdHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMgd2Vs
bC4KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKKyAgICB2
bS0+aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFU
SU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxMiw4ICs0MTIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0
ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3Qg
bmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
Owotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIo
RXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjczLDggKzY3Myw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBkaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAgICAg
Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0K
ICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsK
ICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAt
Njg3LDYgKzY4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDggKzY2Niw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWVWUmVnID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJhc2Up
OwotCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1
cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBm
cm9tIHRoaXMuCkBAIC02ODQsNiArNjgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5SWRz
LmFwcGVuZChnZW4pOwogfQogCkBAIC0xMTgwLDggKzExODAsOCBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RD
ZWxsID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwogCi0g
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4ocmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwLCByZWdUMSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBAIC0x
MjE4LDggKzEyMTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
cmVnVDEpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsxMjQ2
LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIGlmICghb3duZXItPmNl
bGxDb250YWluZXIoKS5pc01hcmtlZChvd25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93
bmVyKTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotICAg
IH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIG93bmVyKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lciwgcmVnVDApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0QnlW
YWxJZGVudGlmaWVyQ2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwg
UmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBM
aXN0JiBzbG93Q2FzZXMpCkBAIC0xMzkwLDggKzEzODcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXBUb0RvbmUpKTsKICAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAg
IEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVC
YXJyaWVyKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBv
cGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICAgICAgQVNTRVJUKG1fY2Fs
bHMubGFzdCgpLnRvID09IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKKyAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJTbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtODkxLDYgKzg5MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdU
eXBlLCAKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93
UGF0aCkKKyAgICBtZW1mZW5jZQogICAgIGJiYSBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBC
bGFja1RocmVzaG9sZCwgLmRvbmUKICAgICBzbG93UGF0aCgpCiAuZG9uZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAt
MTUyNyw3ICsxNTI3LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVhcCIK
ICAgICAgICAgICAgICRhc20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJPcGVy
YW5kcyhvcGVyYW5kc1swXS54ODZBZGRyZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0ueDg2
T3BlcmFuZCg6cHRyKSl9IgogICAgICAgICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAgICRh
c20ucHV0cyAibWZlbmNlIgorICAgICAgICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWwsICJz
cCIpCisgICAgICAgICAgICAkYXNtLnB1dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3BlcmFu
ZCg6cHRyKX0pIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAg
ICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9w
dGlvblN0cmluZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRv
ZmYsIDEwMDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRo
ZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGNsZWFyUmFuZ2Uo
KSwgd2hpY2ggcXVpY2tseSBjbGVhcnMgYSByYW5nZSBvZiBiaXRzLiBUaGlzIHR1cm5lZCBvdXQg
dG8gYmUgdXNlZnVsIGZvcgorICAgICAgICBhIERGRyBvcHRpbWl6YXRpb24gcGFzcy4KKworICAg
ICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rv
cjo6Y2xlYXJSYW5nZSk6CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKwogMjAxNi0w
OS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQgYSBz
dG9yZS1sb2FkIGZlbmNlIGJldHdlZW4gc2V0dGluZyBjZWxsIHN0YXRlIGFuZCB2aXNpdGluZyB0
aGUgb2JqZWN0IGluIFNsb3RWaXNpdG9yCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDI0IEBAIHZvaWQgRmFzdEJpdFZlY3RvcldvcmRPd25l
cjo6cmVzaXplU2xvdygKICAgICBtX3dvcmRzID0gbmV3QXJyYXk7CiB9CiAKK3ZvaWQgRmFzdEJp
dFZlY3Rvcjo6Y2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYg
KGVuZCAtIGJlZ2luIDwgMzIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwg
ZW5kOyArK2kpCisgICAgICAgICAgICBhdChpKSA9IGZhbHNlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBlbmRCZWdpblNsb3AgPSAoYmVnaW4gKyAzMSkgJiB+MzE7
CisgICAgc2l6ZV90IGJlZ2luRW5kU2xvcCA9IGVuZCAmIH4zMTsKKyAgICAKKyAgICBmb3IgKHNp
emVfdCBpID0gYmVnaW47IGkgPCBlbmRCZWdpblNsb3A7ICsraSkKKyAgICAgICAgYXQoaSkgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW5FbmRTbG9wOyBpIDwgZW5kOyArK2kpCisg
ICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGVuZEJlZ2luU2xvcCAv
IDMyOyBpIDwgYmVnaW5FbmRTbG9wIC8gMzI7ICsraSkKKyAgICAgICAgbV93b3Jkcy53b3JkKGkp
ID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zh
c3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9y
LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDY4LDYgKzQ2OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjbGVhclJhbmdlKHNp
emVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3RoZXJXb3Jkcz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289790</attachid>
            <date>2016-09-25 18:11:48 -0700</date>
            <delta_ts>2016-09-25 22:54:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80556</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2
NCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0
b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZElt
cGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJ
bnN0cnVjdGlvbnMpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6
CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5j
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRs
L0ZUTE91dHB1dC5oOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6
OmlzV2l0aGluVGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hv
dWxkQmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxk
QmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAg
ICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmll
cik6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4p
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZl
bmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNt
L3g4Ni5yYjoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYy
MjEpOiBbVVNFUl0gY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNv
bS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEs
NiArMzYxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwMyw2ICs1MDMsOCBAQAogCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdD
MzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4
ODhBMEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBN
YXJrZWRCbG9ja0lubGluZXMuaCAqLzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8q
IE1hcmtlZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5l
cy5oICovOyB9OworCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuY3BwICovOyB9OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNzQzLDYgKzI3NDUsOCBAQAogCQkwRjdDMzlGRTFDOTBDNTVCMDA0ODAx
NTEgLyogREZHT3BJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09w
SW5mby5oOyBwYXRoID0gZGZnL0RGR09wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFy
a2VkU3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtl
ZFNwYWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4OTFE
OTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJF
IC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1
MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NTUsNiArNjU1OSw4IEBACiAJCQkJMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRGMjlERDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oICovLAorCQkJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovLAorCQkJCTBGN0Y5ODhB
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLywK
IAkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAv
KiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTc5NDgsNiArNzk1NCw3IEBA
CiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQw
MDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdGOTg4
QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3
QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5OCw2ICs5MTA1LDcgQEAKIAkJCQlBN0Q4OUNGNzE3
QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
NzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc0LDYgKzM3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGlt
bSkubGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBs
ZWZ0KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewog
ICAgICAgICBicmFuY2gzMihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIz
MjsKQEAgLTgyOCw2ICs4MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBx
X3JtKHJpZ2h0LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNv
bmRpdGlvbihjb25kKSkpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsK
KyAgICB9CiAKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElm
IHdlIGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBh
bHJlYWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAg
ICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFy
cmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAg
ICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
LCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3
cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFy
cmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVz
ZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEg
dG8gc2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAg
ICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAg
ICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6
OlNjYWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6
ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
aygmaml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0
dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMg
dGhhdAogICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2lu
dCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAg
ICAvLyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNl
dHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNy
byhKU0NlbGxfY2VsbFN0YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAor
ICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpT
T2JqZWN0X2J1dHRlcmZseSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBj
YXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2Fz
ZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAg
ICAgIHJlYWQoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3Rh
dGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOgorICAgICAgICByZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRl
KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRp
b25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xv
YmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9u
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5v
dGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUK
ICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9z
ZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICBjYXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQw
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdl
dFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRT
dG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAg
ICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRS
ZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUg
bWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBG
ZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENs
b3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3Rv
cmVCYXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJv
b2wgaGFzSWRlbnRpZmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cg
dGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlv
bkhhbmRsZVdhdGNoZG9nVGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBX
cml0ZSBiYXJyaWVycyAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8o
R2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hl
Y2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2Vy
dGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1T
dG9yZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZI
aW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFj
azoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVC
YXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9i
amVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2Fz
ZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8g
Y29tcGlsaW5nIHRoaXMgbm9kZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBT
dG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIC8vIFdl
IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUs
IHdoaWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAgLy8ga2VlcCB0aGVtIGV4YWN0
bHkgd2hlcmUgdGhleSB3ZXJlLiBUaGlzIGlzIHNvcnQgb2Ygb3ZlcmtpbGwgc2luY2UgdGhlIGNs
b2JiZXJpemUgZWZmZWN0cworICAgICAgICAvLyBhbHJlYWR5IGZvcmNlIHRoZXNlIHRoaW5ncyB0
byBiZSBvcmRlcmVkIHByZWNpc2VseS4gSSdtIGp1c3Qgbm90IGNvbmZpZGVudCBlbm91Z2ggaW4g
bXkKKyAgICAgICAgLy8gZWZmZWN0IGJhc2VkIG1lbW9yeSBtb2RlbCB0byByZWx5IHNvbGVseSBv
biB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI2OCwxOCArMTI2OCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBB
U1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRj
aDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxp
dHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNTAwNyw3ICs0OTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0
b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTU0NzQsMjAgKzU0NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFn
R1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQ
Uik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNj
cmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQot
ICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJS
ZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRn
ZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVF
ZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNl
RWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVk
Z2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
dW5yZWFjaGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIw
ICs1NTYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0g
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1f
aml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3Jp
dGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpsaW5rQnJhbmNoZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJy
aWVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVy
KTsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9
PSBGZW5jZWRTdG9yZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5v
cCgpID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEo
dGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0g
ICAgbm9SZXN1bHQobm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgewor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1f
aml0LnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BS
KSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQu
anVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9q
aXQubWVtb3J5RmVuY2UoKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBl
bmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikp
OworICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9y
ZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5t
X3dyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKKyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVy
QnVmZmVyLmNhcGFjaXR5KCkpKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDIpOwotICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZl
ci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDJHUFIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2Ny
YXRjaDFHUFIpOwogICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIo
Y2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikp
KSk7CisgICAgbV9qaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsK
IAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwog
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxp
bmsoJm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluaygmbV9qaXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1
cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykK
QEAgLTczOCw4ICs3MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGls
ZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsK
LQogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hO
dWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVu
Y2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpCisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNp
emUoKSk7CisgICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUo
KTsKKyAgICAgICAgICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9p
bnRzLmNsZWFyUmFuZ2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXpl
cyBldmVyeXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0
cnVjdCBDaGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1h
bnRpY09yaWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNl
bWFudGljT3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2lu
IHNlbWFudGljT3JpZ2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVy
ZSB3ZSB3b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQor
ICAgICAgICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0
byB0ZWxsIHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMg
YSBiYWNrd2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVs
bHMgdXMgaWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVy
IHRoYXQgbm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBp
ZiAoZG9lc0dDKG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9l
c05vdEV4aXQpIHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChub2RlLT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAg
ICAgbV9iYXJyaWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1
dHVyZUdDID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIE5vdyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4g
d2UgaGl0IGEgYmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdp
dGggYSBmZW5jZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3Jl
QmFycmllcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3Rl
ZCk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBO
b2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFy
cmllcnMuYXBwZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2lu
LnNlbWFudGljKSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAg
ICAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5l
bmQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25z
dCBDaGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhLmNoaWxkIDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1
dG8gZW5kID0gc3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5i
ZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29u
c3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29sewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IGl0ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNP
cmlnaW4gPSBpdGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VD
b25jdXJyZW50QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkK
KyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2lu
LndpdGhTZW1hbnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
Y2hpbGQsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVk
ZWRCYXJyaWVycy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQg
bV9pbnNlcnRpb25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAg
VmVjdG9yPENoaWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3Jh
cGgmIGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5n
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFy
cmllcnMgdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRv
IGVhY2ggb3RoZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4g
dGhlIHByb2dyYW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFz
ZQorLy8gbWFrZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9y
ZUJhcnJpZXIgd2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhp
cyBwaGFzZSBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRo
ZSBjbHVzdGVyIG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhl
IHNhbWUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8g
ZHJvcAorLy8gb25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2Vz
IG9uIHRoZSAiZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNv
cnJlY3QiIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAg
ICBhOiBDYWxsKCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6
IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5
KQorLy8gICAgIGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNl
dChAcCwgQHAsIEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBo
OiBHZXRCeU9mZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBv
ZiBiYXJyaWVycyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0
d2VlbiB0d28gZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNh
dXNlIHRoZXJlIGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhl
cmUgaXMgbm8KKy8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVu
Y2UgYmV0d2VlbiBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8g
b2YgdGhlIGJhcnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0
IHBvaW50IHdoZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0
ZXIgQGYsIHNpbmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJp
ZXIuIFdlIHVzZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4g
V2hlbiB0aGUgYmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6Cisv
LworLy8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisv
LyAgICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChA
cCwgQHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBG
ZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQor
Ly8gICAgIGg6IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMg
cGhhc2UgZG9lcyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8g
cmVtb3ZlIGZlbmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMg
cGhhc2Ugd2lsbCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjog
UHV0QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5
KQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3Rv
cmVCYXJyaWVyKEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRC
eU9mZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBp
bXByb3ZlcyBib3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUg
dGhlIGNvbmN1cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBz
aW1wbGlmeWluZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZl
bmNlLiBJbgorLy8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBi
dXQgdGhlIGZpcnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0
YWtlIHNsb3cgcGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNl
IHRoZSBzbG93IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3Ro
ZXIgYmFycmllcnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQg
dG8gcmVtZW1iZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJp
bmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2Fz
ZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFs
bG9jYXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBp
bnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJ
bmRleCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0
RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC00MzAsMTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmll
ci5cbiIpOwotICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAg
ICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZv
aWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0
T0sgPSB0cnVlKQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVk
Z2UgYmFzZSkKICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtl
Ci0gICAgICAgIC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBv
dXIgd2F5IG9mIHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFj
aCBvdGhlciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2Ug
cHJvdmVkIG9uZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBm
b3IKKyAgICAgICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNl
LT5zZXRFcG9jaChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9k
ZSwgd2Ugc2hvdWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVy
Z2VkLgpAQCAtNDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBz
b3J0IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4K
IAotICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91
bGQgYWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAg
IC8vIHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8g
aW5zZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFu
ZCB0aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdv
cmsgYnkgaG9pc3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVu
IHJpZ2h0IG5vdy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkg
ewotICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2lu
LmV4aXRPSyk7Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAg
IH0KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtp
bmQoKSkpOworICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRl
ZCBhZnRlciB0aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMg
a25vdworICAgICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBi
YXNlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0
ZShtX2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZh
bGlkRXhpdCgpOworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZl
bmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3Jl
QmFycmllcjsKICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0
ICszMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsK
IAogLy8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRo
b3V0IGNvbnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBs
ZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJp
ZXJzLiBUaGlzIHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8g
VXNlcyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFy
cmllcnMgb24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVz
IHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5z
ZXJ0aW9uKEdyYXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9i
YWwgYW5hbHlzaXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBh
Ci0vLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVu
ZGFudCBiYXJyaWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3Vy
cmVudCIgcHJvcGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVx
dWlyZXMgU1NBLiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBh
bmQgbGl2ZW5lc3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5z
ZXJ0aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisv
LyByZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkg
YW5kIGxpdmVuZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk2LDEyICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVh
cCYgYXRBbnlBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4
KCk7IH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisg
ICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRk
cmVzcykpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10o
dm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFj
dEhlYXAmIG9wZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVz
cyk7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNp
bmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgi
CkBAIC0xMTYsNiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3Jh
dGVQYXQKICAgICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZSho
ZWFwLCB2YWx1ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRl
RmVuY2VSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAg
IG1faGVhcEZvckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9
CisKK3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0
IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNl
V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygp
CiB7CiAgICAgcm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRy
eSA6IG1faGVhcEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZh
bHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChI
ZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50
cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5y
YW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZl
Y3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBl
bnRyeSA6IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFz
PENDYWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAg
ICAgICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMg
PSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9o
ZWFwRm9yRmVuY2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+
cmVhZCA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkg
OiBtX2hlYXBGb3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1
ZT4oKS0+d3JpdGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNiw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3Jp
dGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBh
dGNocG9pbnRSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQg
ZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7
CisgICAgdm9pZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFs
dWUqKTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBC
Mzo6VmFsdWUqKTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rp
b25zKCk7CiAKQEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9y
VmFsdWU+IG1faGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9o
ZWFwRm9yUGF0Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9y
UGF0Y2hwb2ludFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNl
UmVhZDsKKyAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzgsNiArMTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0
ZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5s
aW5lZENhbGxlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNs
dWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5oIgpAQCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxl
Q291bnRFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBj
b21waWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJy
aWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9y
ZUJhcnJpZXIpOwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CkBAIC04MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZp
b3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgZW1pdFN0b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8v
IHJ1biBhZnRlciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2Us
IHlvdSBzaG91bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsm
XSkgaW4gYW55IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
ciwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBh
dGNocG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3Vt
ZW50VHlwZXMuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0
aChmdW5jdG9yLCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykK
KyAgICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENv
ZGVPcmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAt
MTE0MjksMjYgKzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2Fk
OFplcm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAg
IHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJh
cnJpZXIoTFZhbHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9s
ZDsKKyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQu
bG9hZDMyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVz
aG9sZCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNv
bnN0SW50MzIoYmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29u
c3RJbnQzMihibGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENl
bGxTdGF0ZShiYXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAg
ICAgICAgLy8gV2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBh
IGxvdCBvZiBjYXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVu
IGl0IGRvZXMgZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29k
ZSB1c2luZyBvdXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1l
IG9wdGltaXppbmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25z
dCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6Okdl
bmVyYXRvcj4gewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFd
LmRpcmVjdEdQUigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3Jl
YXRlR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVM
b2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVt
b3J5RmVuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBz
LmFwcGVuZChqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQ
UikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5
U2xvd1BhdGgtPnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVy
cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9j
ayhiYXNlR1BSKTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBh
dGNocG9pbnRSZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxs
X2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBv
aW50V3JpdGUoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAg
IAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgog
I2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgog
I2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNp
bmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRw
dXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVt
b3J5KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVu
Y2UoKQoreworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFs
dWUgdmFsdWUsIFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci1UeXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2lu
dGVyIE91dHB1dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4g
VHlwZWRQb2ludGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRy
ZXNzKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFj
ZSBERkcKIAogbmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFz
ZVZhbHVlOwogfSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoK
IAogICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUo
TFZhbHVlLCBUeXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAg
ICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4
WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29u
c3RhbnQsIG9mZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQq
IGFkZHJlc3MpOworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNz
KTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVs
ZCkpOyB9CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0
cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZp
ZWxkKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZp
c2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDog
dWludDhfdCB7CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAx
OyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgdGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNh
bFRocmVzaG9sZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hv
bGQoQ2VsbFN0YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlu
bGluZSBib29sIGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0
dXJuIGlzV2l0aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBp
bmxpbmUgQ2VsbFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSw0ICsxNTQ5
LDMyIEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1
cm4gbV9jb2RlQmxvY2tzLT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFy
cmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFy
cmllclNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNu
ZWFreUJsYWNrVGhyZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwg
c28gZnJvbQorICAgICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4n
dCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6
c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYWRkVG9SZW1lbWJlcmVk
U2V0KGZyb20pOworfQorCit2b2lkIEhlYXA6OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpT
Q2VsbCogZnJvbSwgSlNDZWxsKiB0bykKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmllclNob3Vs
ZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHNuZWFreUJsYWNr
VGhyZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRocmVzaG9sZCwgc28gZnJvbQor
ICAgICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZv
ciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAgICAgIFdURjo6c3RvcmVMb2Fk
RmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRl
KCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRvUmVt
ZW1iZXJlZFNldChmcm9tKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsxMDQsMTUgQEAgcHVi
bGljOgogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0g
ICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiwgSlNDZWxsKik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBm
cm9tKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUg
dG8pOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0
byk7CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxs
KiBmcm9tKTsKKyAgICAKKyAgICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5j
ZWxsU3RhdGUoKSA8IHNuZWFreUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJv
bSwgSlNDZWxsKiB0byk7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1
ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdy
aXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTI1NCw2ICsyNjAsMTIgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgdm9pZCBk
aWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKKyAgICAKKyAgICBib29sIGJhcnJpZXJTaG91
bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9Cisg
ICAgY29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyBy
ZXR1cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgCisgICAgdW5zaWduZWQgc25l
YWt5QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX3NuZWFreUJsYWNrVGhyZXNob2xk
OyB9CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKCkg
Y29uc3QgeyByZXR1cm4gJm1fc25lYWt5QmxhY2tUaHJlc2hvbGQ7IH0KIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQWxsb2NhdGlvblNjb3BlOwpAQCAtNDExLDYgKzQyMyw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZl
ciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2Vk
IHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1bnNpZ25lZCBtX3NuZWFr
eUJsYWNrVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xv
Z2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CiAgICAg
ZG91YmxlIG1fbGFzdEZ1bGxHQ0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE5ICsxMjUsMjgg
QEAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRX
cml0ZUJhcnJpZXIoKTsKICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5j
ZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0
byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNX
aXRoaW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkp
KSkKKyAgICAgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJvbSwgdG8pOwogfQogCiBpbmxpbmUg
dm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAg
aWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20p
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJv
bS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVC
YXJyaWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmll
cldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20p
CiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYg
KFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVz
aG9sZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2
b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzA2LDE3ICsxMzA2LDU2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGpp
dCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1w
IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIEp1bXAganVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoR1BSUmVnIGNlbGwpCiAgICAgewogICAg
ICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogCi0gICAg
SnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwpCisgICAgSnVtcCBq
dW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAg
ewogICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
Y2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNo
OChBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJl
c2hvbGQpKTsKICAgICB9CiAgICAgCisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBs
b2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFk
ZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAg
fQorCisgICAgSnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNl
bGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAu
YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKyAgICAKKyAgICBKdW1w
IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIHsKKyAgICAgICAg
c3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKworICAgIEp1bXAganVt
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNlbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6
dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1
bXAgb2sgPSBqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAg
ICAgICBtZW1vcnlGZW5jZSgpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAK
KyAgICBKdW1wIGp1bXBJZlN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0o
KS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAgIH0KKyAgICAK
ICAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBl
bWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3Ig
aXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBl
LiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCiAgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0
IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdp
c3RlciBhbmQgdGhlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc3LDE0ICsyMTc3LDExIEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKICAgICB2bS0+aGVhcC53
cml0ZUJhcnJpZXIoY2VsbCk7CiB9CiAKLS8vIE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1
ZSBhcyBwYXJ0IG9mIHRoZSBiYXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lv
bgotLy8gcGhhc2UgaW4gdGhlIERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVp
bmcgc3RvcmVkIHRvIGhhcyBiZWVuIGJhcnJpZXJlZC4gSXQgCi0vLyB3b3VsZCBiZSBtdWNoIG1v
cmUgY29tcGxpY2F0ZWQgdG8gdHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMg
d2VsbC4KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJy
aWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKKyAg
ICB2bS0+aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAogdm9pZCBKSVRfT1BF
UkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxMiw4ICs0MTIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2Vs
bCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjczLDggKzY3Myw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBkaXJlY3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAg
ICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7
Ci0KICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpA
QCAtNjg3LDYgKzY4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlv
bioKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDggKzY2Niw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWVWUmVnID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkaXJlY3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJh
c2UpOwotCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1
Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAg
Ly8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdp
c3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0
aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5j
ZSBmcm9tIHRoaXMuCkBAIC02ODQsNiArNjgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5
SWRzLmFwcGVuZChnZW4pOwogfQogCkBAIC0xMTgwLDggKzExODAsOCBAQCB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJO
b3RDZWxsID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwog
Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4ocmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25h
bFdyaXRlQmFycmllciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwLCByZWdUMSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBA
IC0xMjE4LDggKzEyMTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBv
d25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciwgcmVnVDEpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsx
MjQ2LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIGlmICghb3duZXIt
PmNlbGxDb250YWluZXIoKS5pc01hcmtlZChvd25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IG93bmVyKTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwot
ICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIG93bmVyKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lciwgcmVnVDApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
QnlWYWxJZGVudGlmaWVyQ2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2Vs
bCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1
bXBMaXN0JiBzbG93Q2FzZXMpCkBAIC0xMzkwLDggKzEzODcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMs
IENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXBUb0RvbmUpKTsKICAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAg
ICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9t
LCBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbHMubGFzdCgpLnRvID09IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKKyAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtODkxLDYgKzg5MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhp
bmdUeXBlLCAKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBz
bG93UGF0aCkKKyAgICBtZW1mZW5jZQogICAgIGJiYSBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxd
LCBCbGFja1RocmVzaG9sZCwgLmRvbmUKICAgICBzbG93UGF0aCgpCiAuZG9uZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpA
QCAtMTUyNyw3ICsxNTI3LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVh
cCIKICAgICAgICAgICAgICRhc20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJP
cGVyYW5kcyhvcGVyYW5kc1swXS54ODZBZGRyZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0u
eDg2T3BlcmFuZCg6cHRyKSl9IgogICAgICAgICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAg
ICRhc20ucHV0cyAibWZlbmNlIgorICAgICAgICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWws
ICJzcCIpCisgICAgICAgICAgICAkYXNtLnB1dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3Bl
cmFuZCg6cHRyKX0pIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAg
ICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIq
IG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwg
MS40LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25D
dXRvZmYsIDEwMDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGNsZWFyUmFu
Z2UoKSwgd2hpY2ggcXVpY2tseSBjbGVhcnMgYSByYW5nZSBvZiBiaXRzLiBUaGlzIHR1cm5lZCBv
dXQgdG8gYmUgdXNlZnVsIGZvcgorICAgICAgICBhIERGRyBvcHRpbWl6YXRpb24gcGFzcy4KKwor
ICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFZl
Y3Rvcjo6Y2xlYXJSYW5nZSk6CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKwogMjAx
Ni0wOS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQg
YSBzdG9yZS1sb2FkIGZlbmNlIGJldHdlZW4gc2V0dGluZyBjZWxsIHN0YXRlIGFuZCB2aXNpdGlu
ZyB0aGUgb2JqZWN0IGluIFNsb3RWaXNpdG9yCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0
VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNw
cAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDI0IEBAIHZvaWQgRmFzdEJpdFZlY3RvcldvcmRP
d25lcjo6cmVzaXplU2xvdygKICAgICBtX3dvcmRzID0gbmV3QXJyYXk7CiB9CiAKK3ZvaWQgRmFz
dEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAg
aWYgKGVuZCAtIGJlZ2luIDwgMzIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBp
IDwgZW5kOyArK2kpCisgICAgICAgICAgICBhdChpKSA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHNpemVfdCBlbmRCZWdpblNsb3AgPSAoYmVnaW4gKyAzMSkgJiB+
MzE7CisgICAgc2l6ZV90IGJlZ2luRW5kU2xvcCA9IGVuZCAmIH4zMTsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmRCZWdpblNsb3A7ICsraSkKKyAgICAgICAgYXQoaSkg
PSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW5FbmRTbG9wOyBpIDwgZW5kOyArK2kp
CisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGVuZEJlZ2luU2xv
cCAvIDMyOyBpIDwgYmVnaW5FbmRTbG9wIC8gMzI7ICsraSkKKyAgICAgICAgbV93b3Jkcy53b3Jk
KGkpID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVj
dG9yLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDYgKzQ2OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjbGVhclJhbmdl
KHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGNvbnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJXb3Jkcz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289799</attachid>
            <date>2016-09-25 22:54:28 -0700</date>
            <delta_ts>2016-09-26 12:37:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85808</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2
NCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0
b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZElt
cGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJ
bnN0cnVjdGlvbnMpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6
CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5j
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRs
L0ZUTE91dHB1dC5oOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6
OmlzV2l0aGluVGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hv
dWxkQmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxk
QmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAg
ICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmll
cik6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4p
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZl
bmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNt
L3g4Ni5yYjoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYy
MjEpOiBbVVNFUl0gY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNv
bS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEs
NiArMzYxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwMyw2ICs1MDMsOCBAQAogCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdD
MzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4
ODhBMEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBN
YXJrZWRCbG9ja0lubGluZXMuaCAqLzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8q
IE1hcmtlZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5l
cy5oICovOyB9OworCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuY3BwICovOyB9OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNzQzLDYgKzI3NDUsOCBAQAogCQkwRjdDMzlGRTFDOTBDNTVCMDA0ODAx
NTEgLyogREZHT3BJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09w
SW5mby5oOyBwYXRoID0gZGZnL0RGR09wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFy
a2VkU3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtl
ZFNwYWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4OTFE
OTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJF
IC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1
MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NTUsNiArNjU1OSw4IEBACiAJCQkJMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRGMjlERDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oICovLAorCQkJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovLAorCQkJCTBGN0Y5ODhB
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLywK
IAkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAv
KiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTc5NDgsNiArNzk1NCw3IEBA
CiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQw
MDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdGOTg4
QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3
QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5OCw2ICs5MTA1LDcgQEAKIAkJCQlBN0Q4OUNGNzE3
QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
NzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc0LDYgKzM3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGlt
bSkubGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBs
ZWZ0KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewog
ICAgICAgICBicmFuY2gzMihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIz
MjsKQEAgLTgyOCw2ICs4MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBx
X3JtKHJpZ2h0LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNv
bmRpdGlvbihjb25kKSkpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsK
KyAgICB9CiAKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElm
IHdlIGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBh
bHJlYWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAg
ICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFy
cmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAg
ICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
LCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3
cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFy
cmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVz
ZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEg
dG8gc2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAg
ICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAg
ICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6
OlNjYWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6
ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
aygmaml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0
dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMg
dGhhdAogICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2lu
dCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAg
ICAvLyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNl
dHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNy
byhKU0NlbGxfY2VsbFN0YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAor
ICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpT
T2JqZWN0X2J1dHRlcmZseSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBj
YXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2Fz
ZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAg
ICAgIHJlYWQoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3Rh
dGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOgorICAgICAgICByZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRl
KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRp
b25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xv
YmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9u
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5v
dGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUK
ICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9z
ZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICBjYXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQw
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdl
dFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRT
dG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAg
ICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRS
ZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUg
bWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBG
ZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENs
b3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3Rv
cmVCYXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJv
b2wgaGFzSWRlbnRpZmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cg
dGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlv
bkhhbmRsZVdhdGNoZG9nVGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBX
cml0ZSBiYXJyaWVycyAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8o
R2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hl
Y2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2Vy
dGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1T
dG9yZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZI
aW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFj
azoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVC
YXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9i
amVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2Fz
ZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8g
Y29tcGlsaW5nIHRoaXMgbm9kZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBT
dG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIC8vIFdl
IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUs
IHdoaWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAgLy8ga2VlcCB0aGVtIGV4YWN0
bHkgd2hlcmUgdGhleSB3ZXJlLiBUaGlzIGlzIHNvcnQgb2Ygb3ZlcmtpbGwgc2luY2UgdGhlIGNs
b2JiZXJpemUgZWZmZWN0cworICAgICAgICAvLyBhbHJlYWR5IGZvcmNlIHRoZXNlIHRoaW5ncyB0
byBiZSBvcmRlcmVkIHByZWNpc2VseS4gSSdtIGp1c3Qgbm90IGNvbmZpZGVudCBlbm91Z2ggaW4g
bXkKKyAgICAgICAgLy8gZWZmZWN0IGJhc2VkIG1lbW9yeSBtb2RlbCB0byByZWx5IHNvbGVseSBv
biB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI2OCwxOCArMTI2OCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBB
U1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRj
aDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxp
dHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNTAwNyw3ICs0OTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0
b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTU0NzQsMjAgKzU0NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFn
R1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQ
Uik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNj
cmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQot
ICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJS
ZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRn
ZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVF
ZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNl
RWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVk
Z2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
dW5yZWFjaGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIw
ICs1NTYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0g
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1f
aml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3Jp
dGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpsaW5rQnJhbmNoZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJy
aWVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVy
KTsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9
PSBGZW5jZWRTdG9yZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5v
cCgpID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEo
dGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0g
ICAgbm9SZXN1bHQobm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgewor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1f
aml0LnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BS
KSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQu
anVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9q
aXQubWVtb3J5RmVuY2UoKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBl
bmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikp
OworICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9y
ZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5t
X3dyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKKyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVy
QnVmZmVyLmNhcGFjaXR5KCkpKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDIpOwotICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZl
ci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDJHUFIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2Ny
YXRjaDFHUFIpOwogICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIo
Y2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikp
KSk7CisgICAgbV9qaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsK
IAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwog
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxp
bmsoJm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluaygmbV9qaXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1
cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykK
QEAgLTczOCw4ICs3MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGls
ZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsK
LQogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hO
dWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVu
Y2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpCisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNp
emUoKSk7CisgICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUo
KTsKKyAgICAgICAgICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9p
bnRzLmNsZWFyUmFuZ2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXpl
cyBldmVyeXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0
cnVjdCBDaGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1h
bnRpY09yaWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNl
bWFudGljT3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2lu
IHNlbWFudGljT3JpZ2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVy
ZSB3ZSB3b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQor
ICAgICAgICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0
byB0ZWxsIHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMg
YSBiYWNrd2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVs
bHMgdXMgaWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVy
IHRoYXQgbm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXMsIHNvIGV4aXRzIHJl
cXVpcmUgY29uc2VydmF0aXNtLiBJZiB3ZSBleGl0LCB0aGVuIHRoZXJlCisgICAgICAgICAgICAv
LyBwcm9iYWJseSB3aWxsIGJlIGEgR0MgaW4gdGhlIGZ1dHVyZSEgSWYgd2UgbmVlZGVkIHRvIHRo
ZW4gd2UgY291bGQgbGlmdCB0aGF0CisgICAgICAgICAgICAvLyByZXF1aXJlbWVudCBieSBlaXRo
ZXIgKDEpIGhhdmluZyBhIFN0b3JlQmFycmllckhpbnQgdGhhdCB0ZWxscyBPU1IgZXhpdCB0byBP
U1IgdGhhdAorICAgICAgICAgICAgLy8gdmFsdWUgb3IgKDIpIGF1dG9tYXRpY2FsbHkgYmFycmll
cmluZyBhbnkgREZHLWxpdmUgTm9kZSBvbiBPU1IgZXhpdC4gRWl0aGVyIHdheSwgaXQKKyAgICAg
ICAgICAgIC8vIHdvdWxkIGJlIHdlaXJkIGJlY2F1c2UgaXQgd291bGQgY3JlYXRlIGEgbmV3IHJv
b3QgZm9yIE9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMuIEkKKyAgICAgICAgICAgIC8vIGRvbid0
IGhhdmUgZXZpZGVuY2UgdGhhdCBpdCB3b3VsZCBiZSB3b3J0aCBpdC4KKyAgICAgICAgICAgIGlm
IChkb2VzR0MobV9ncmFwaCwgbm9kZSkgfHwgbWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2Vz
Tm90RXhpdCkgeworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkgJiYgZnV0dXJlR0MpIHsKKyAgICAgICAgICAgICAg
ICBtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgZnV0
dXJlR0MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHdlIHJ1biBmb3J3YXJkIGFuZCBjb2xsZWN0IHRoZSBiYXJyaWVycy4gV2hlbiB3
ZSBoaXQgYSBiYXJyaWVyIHBvaW50LCBpbnNlcnQgYWxsIG9mCisgICAgICAgIC8vIHRoZW0gd2l0
aCBhIGZlbmNlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzU3RvcmVC
YXJyaWVyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIW5vZGUtPm9yaWdpbi53YXNIb2lzdGVk
KTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgbV9uZWVkZWRCYXJy
aWVycy5hcHBlbmQoQ2hpbGRBbmRPcmlnaW4obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBvcmlnaW4u
c2VtYW50aWMpKTsKKyAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIW1fYmFycmllclBvaW50c1tub2RlSW5kZXhdKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAg
ICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVu
ZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0
IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGEuY2hpbGQgPCBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXV0
byBlbmQgPSBzdGQ6OnVuaXF1ZSgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmJl
Z2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChjb25z
dCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2x7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxkID09IGIuY2hpbGQ7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gaXRlci0+Y2hpbGQ7CisgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09y
aWdpbiA9IGl0ZXItPnNlbWFudGljT3JpZ2luOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE5vZGVUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNv
bmN1cnJlbnRCYXJyaWVycygpICYmIGl0ZXIgPT0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpKQor
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gRmVuY2VkU3RvcmVCYXJyaWVyOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCB0eXBlLCBvcmlnaW4u
d2l0aFNlbWFudGljKHNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgRWRnZShj
aGlsZCwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX25lZWRl
ZEJhcnJpZXJzLnJlc2l6ZSgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBt
X2luc2VydGlvblNldDsKKyAgICBGYXN0Qml0VmVjdG9yIG1fYmFycmllclBvaW50czsKKyAgICBW
ZWN0b3I8Q2hpbGRBbmRPcmlnaW4+IG1fbmVlZGVkQmFycmllcnM7Cit9OworCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhHcmFw
aCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPFN0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFBpY2tzIHVwIGdyb3VwcyBvZiBiYXJy
aWVycyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGluIGFueSBvcmRlciB3aXRoIHJlc3BlY3QgdG8g
ZWFjaCBvdGhlciBhbmQKKy8vIHBsYWNlcyB0aGVuIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiB0
aGUgcHJvZ3JhbSB3aGVyZSB0aGUgY2x1c3RlciB3b3VsZCBiZSBjb3JyZWN0LiBUaGlzIHBoYXNl
CisvLyBtYWtlcyBvbmx5IHRoZSBmaXJzdCBvZiB0aGUgY2x1c3RlciBiZSBhIEZlbmNlZFN0b3Jl
QmFycmllciB3aGlsZSB0aGUgcmVzdCBhcmUgbm9ybWFsCisvLyBTdG9yZUJhcnJpZXJzLiBUaGlz
IHBoYXNlIGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgYmFycmllcnMgLSBmb3IgZXhhbXBsZSwgdGhl
IGNsdXN0ZXIgbWF5IGVuZCB1cAorLy8gd2l0aCB0d28gb3IgbW9yZSBiYXJyaWVycyBvbiB0aGUg
c2FtZSBvYmplY3QsIGluIHdoaWNoIGNhc2UgaXQgaXMgdG90YWxseSBzYWZlIGZvciB1cyB0byBk
cm9wCisvLyBvbmUgb2YgdGhlbS4gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBzb3VuZCBoaW5nZXMg
b24gdGhlICJlYXJsaWVzdCBwb2ludCB3aGVyZSB0aGUgY2x1c3RlciB3b3VsZAorLy8gYmUgY29y
cmVjdCIgcHJvcGVydHkuIEZvciBleGFtcGxlLCB0YWtlIHRoaXMgaW5wdXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgYzog
RmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkp
CisvLyAgICAgZTogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0
KEBwLCBAcCwgQHopCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoZSBjbHVzdGVyIG9m
IGJhcnJpZXJzIGlzIEBjLCBAZSwgYW5kIEBnLiBBbGwgb2YgdGhlIGJhcnJpZXJzIGFyZSBiZXR3
ZWVuIHR3byBkb2VzR0MgZWZmZWN0czoKKy8vIHRoZSBjYWxscyBhdCBAYSBhbmQgQGkuIEJlY2F1
c2UgdGhlcmUgYXJlIG5vIGRvZXNHQyBlZmZlY3RzIGJldHdlZW4gQGEgYW5kIEBpIGFuZCB0aGVy
ZSBpcyBubworLy8gcG9zc2libGUgY29udHJvbCBmbG93IGVudHJ5IGludG8gdGhpcyBzZXF1ZW5j
ZSBiZXR3ZWVuIEAgYW5kIEBpLCB3ZSBjb3VsZCBjb3VsZCBqdXN0IGV4ZWN1dGUgYWxsCisvLyBv
ZiB0aGUgYmFycmllcnMganVzdCBiZWZvcmUgQGkgaW4gYW55IG9yZGVyLiBUaGUgZWFybGllc3Qg
cG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUKKy8vIGNvcnJlY3QgaXMganVzdCBhZnRl
ciBAZiwgc2luY2UgdGhhdCdzIHRoZSBsYXN0IG9wZXJhdGlvbiB0aGF0IG5lZWRzIGEgYmFycmll
ci4gV2UgdXNlIHRoZQorLy8gZWFybGllc3QgdG8gcmVkdWNlIHJlZ2lzdGVyIHByZXNzdXJlLiBX
aGVuIHRoZSBiYXJyaWVycyBhcmUgY2x1c3RlcmVkIGp1c3QgYWZ0ZXIgQGYsIHdlIGdldDoKKy8v
CisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8v
ICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBw
LCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGU6IEZl
bmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBnOiBGZW5jZWRTdG9yZUJhcnJpZXIoQHApCisv
LyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTogQ2FsbCgpCisvLworLy8gVGhpcyBw
aGFzZSBkb2VzIG1vcmUuIEl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgY2x1c3RlcmluZyB0byBy
ZW1vdmUgZmVuY2VzIGFuZCByZW1vdmUgcmVkdW5kYW50CisvLyBiYXJyaWVycy4gU28gdGhpcyBw
aGFzZSB3aWxsIG91dHB1dCB0aGlzOgorLy8KKy8vICAgICBhOiBDYWxsKCkKKy8vICAgICBiOiBQ
dXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkp
CisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBjOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdldEJ5
T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgb3B0aW1pemF0aW9uIGlt
cHJvdmVzIGJvdGggb3ZlcmFsbCB0aHJvdWdocHV0IGFuZCB0aGUgdGhyb3VnaHB1dCB3aGlsZSB0
aGUgY29uY3VycmVudCBHQyBpcworLy8gcnVubmluZy4gSW4gdGhlIGZvcm1lciwgd2UgYXJlIHNp
bXBsaWZ5aW5nIGluc3RydWN0aW9uIHNlbGVjdGlvbiBmb3IgYWxsIGJ1dCB0aGUgZmlyc3QgZmVu
Y2UuIEluCisvLyB0aGUgbGF0dGVyLCB3ZSBhcmUgcmVkdWNpbmcgdGhlIGNvc3Qgb2YgYWxsIGJ1
dCB0aGUgZmlyc3QgYmFycmllci4gVGhlIGZpcnN0IGJhcnJpZXIgd2lsbCBhd2xheXMKKy8vIHRh
a2Ugc2xvdyBwYXRoIHdoZW4gdGhlcmUgaXMgY29uY3VycmVudCBHQyBhY3Rpdml0eSwgc2luY2Ug
dGhlIHNsb3cgcGF0aCBjb250YWlucyB0aGUgZmVuY2UuIEJ1dAorLy8gYWxsIG9mIHRoZSBvdGhl
ciBiYXJyaWVycyB3aWxsIG9ubHkgdGFrZSBzbG93IHBhdGggaWYgdGhleSByZWFsbHkgbmVlZCB0
byByZW1lbWJlciB0aGUgb2JqZWN0LgorYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
ZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxs
b2NhdGUgYnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGlu
c2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4ICsgMSwgbV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTQzMCwxMyArNDMwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVy
LlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2UpOworICAgICAg
ICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9p
ZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRP
SyA9IHRydWUpCisgICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRn
ZSBiYXNlKQogICAgIHsKLSAgICAgICAgLy8gSW5zZXJ0aW5nIGEgYmFycmllciBtZWFucyB0aGF0
IHRoZSBvYmplY3QgbWF5IGJlY29tZSBtYXJrZWQgYnkgdGhlIEdDLCB3aGljaCB3aWxsIG1ha2UK
LSAgICAgICAgLy8gdGhlIG9iamVjdCBibGFjay4KKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IG91
ciB3YXkgb2Ygc2F5aW5nIHRoYXQgYmFycmllcnMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aCBlYWNo
IG90aGVyIGFjY29yZGluZworICAgICAgICAvLyB0byBmb3J3YXJkIGFuYWx5c2lzOiBpZiB3ZSBw
cm92ZWQgb25lIHRpbWUgdGhhdCBhIGJhcnJpZXIgd2FzIG5lY2Vzc2FyeSB0aGVuIGl0J2xsIGZv
cgorICAgICAgICAvLyBzdXJlIGJlIG5lY2Vzc2FyeSBuZXh0IHRpbWUuCiAgICAgICAgIGJhc2Ut
PnNldEVwb2NoKEVwb2NoKCkpOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2Rl
LCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhlIGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJn
ZWQuCkBAIC00NDYsMTcgKzQ0NywyMyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogV2Ug
Y291bGQgc3VwcG9ydCBTdG9yZUJhcnJpZXIoVW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNv
cnQgb2YgY29vbC4KICAgICAgICAgLy8gQnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0Lgog
Ci0gICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3Vs
ZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2suIFdlIG1heSBiZSBpbiBhIGNvbnRleHQKLSAgICAgICAg
Ly8gd2hlcmUgY2hlY2tzIGFyZSBub3QgYWxsb3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBp
bnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4aXRJbnZhbGlkCi0gICAgICAgIC8vIGNvbnRleHQgYW5k
IHRoYXQgYmFycmllciBuZWVkZWQgYSBjaGVjaywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29y
ayBieSBob2lzdGluZyB0aGUgY2hlY2suCi0gICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4g
cmlnaHQgbm93LgotICAgICAgICBpZiAoYmFzZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7
Ci0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4u
ZXhpdE9LKTsKLSAgICAgICAgICAgIGJhc2Uuc2V0VXNlS2luZChDZWxsVXNlKTsKLSAgICAgICAg
fQorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDZWxsKGJhc2UudXNlS2lu
ZCgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBCYXJyaWVycyBhcmUgYWx3YXlzIGluc2VydGVk
IGFmdGVyIHRoZSBub2RlIHRoYXQgdGhleSBzZXJ2aWNlLiBUaGVyZWZvcmUsIHdlIGFsd2F5cyBr
bm93CisgICAgICAgIC8vIHRoYXQgdGhlIHRoaW5nIGlzIGEgY2VsbCBub3cuCisgICAgICAgIGJh
c2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAKKyAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKKyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRl
KG1fZ3JhcGgsIG1fbm9kZSkpCisgICAgICAgICAgICBvcmlnaW4gPSBvcmlnaW4ud2l0aEludmFs
aWRFeGl0KCk7CisgICAgICAgIAorICAgICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICBpZiAo
T3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCisgICAgICAgICAgICB0eXBlID0gRmVu
Y2VkU3RvcmVCYXJyaWVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0gU3RvcmVC
YXJyaWVyOwogICAgICAgICAKLSAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmln
aW4udGFrZVZhbGlkRXhpdChleGl0T0spLCBiYXNlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCB0eXBlLCBvcmlnaW4sIGJhc2UpOwogICAg
IH0KICAgICAKICAgICBib29sIHJlYWxseUluc2VydEJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQg
KzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwog
CiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJzIGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhv
dXQgY29uc3VsdGluZyB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIuCi0vLyBVc2VzIGEgc2ltcGxl
IGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmll
cnMuIFRoaXMgcGhhc2UgcmVxdWlyZXMKLS8vIHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCisvLyBV
c2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJy
aWVycyBvbiBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcworLy8gcGhhc2UgcmVxdWlyZXMg
dGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KIGJvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNl
cnRpb24oR3JhcGgmKTsKIAogLy8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2Jh
bCBhbmFseXNpcyBhbmQgY29uc3VsdHMgdGhlIGFic3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEK
LS8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5k
YW50IGJhcnJpZXJzLCBidXQgb25seSBwcm9wYWdhdGVzICJzYW1lCi0vLyBlcG9jaCBhcyBjdXJy
ZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBibG9jayB0byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1
aXJlcyBTU0EuIFRoaXMgcGhhc2UKLS8vIGFsc28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFu
ZCBsaXZlbmVzcy4KKy8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNl
cnRpbmcgYmFycmllcnMgb24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgcGhhc2UKKy8v
IHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZSBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBh
bmQgbGl2ZW5lc3MuCiBib29sIHBlcmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3Jh
cGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsMTIgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWJzdHJhY3RIZWFw
JiBhdEFueUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ZWRIZWFwLmF0QW55SW5kZXgo
KTsgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQodm9pZCogYWRkcmVzcykKKyAg
ICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9pbmRleGVkSGVhcC5hdChiaXR3aXNlX2Nhc3Q8cHRyZGlmZl90PihhZGRy
ZXNzKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXSh2
b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNzKTsgfQorICAgIGNvbnN0IEFic3RyYWN0
SGVhcCYgb3BlcmF0b3JbXShjb25zdCB2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNz
KTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
QEAgLTExNiw2ICsxMTcsMTYgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0
ZVBhdAogICAgIG1faGVhcEZvclBhdGNocG9pbnRXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhl
YXAsIHZhbHVlKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVG
ZW5jZVJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAg
bV9oZWFwRm9yRmVuY2VSZWFkLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30K
Kwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VX
cml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKIHZvaWQgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCkK
IHsKICAgICByb290LmNvbXB1dGUoKTsKQEAgLTEzMiw5ICsxNDMsMTMgQEAgdm9pZCBBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5
IDogbV9oZWFwRm9yQ0NhbGxXcml0ZSkKICAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhl
YXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBhdGNocG9pbnRSZWFkKQotICAgICAgICBlbnRy
eS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJh
bmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVj
dHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVu
dHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8
Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9
IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hl
YXBGb3JGZW5jZVJlYWQpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5y
ZWFkID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6
IG1faGVhcEZvckZlbmNlV3JpdGUpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVl
PigpLT53cml0ZSA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDYgKzIxNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlY29yYXRlQ0NhbGxXcml0
ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0
Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBk
ZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsK
KyAgICB2b2lkIGRlY29yYXRlRmVuY2VSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1
ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIz
OjpWYWx1ZSopOwogCiAgICAgdm9pZCBjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlv
bnMoKTsKIApAQCAtMjQxLDYgKzI0Myw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEhlYXBGb3JW
YWx1ZT4gbV9oZWFwRm9yQ0NhbGxXcml0ZTsKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hl
YXBGb3JQYXRjaHBvaW50UmVhZDsKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQ
YXRjaHBvaW50V3JpdGU7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yRmVuY2VS
ZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlV3JpdGU7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICBjYXNlIE5vdGlmeVdyaXRl
OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxJbmxp
bmVkQ2FsbGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmgiCkBAIC05NDUsNiArOTQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVD
b3VudEV4ZWN1dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNv
bXBpbGVTdG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eToKQEAgLTY5OTUsOSArNjk5Nyw5IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIGVtaXRTdG9yZUJh
cnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKQEAgLTgxMjYsOCArODEyOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcHJldmlv
dXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtMTAwNTMsMTMgKzEwMDUzLDEzIEBAIHByaXZhdGU6CiAgICAgLy8g
cnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwg
eW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVyZW5jZQogICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZd
KSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29u
c3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgUGF0
Y2hwb2ludFZhbHVlKiBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRo
KGZ1bmN0b3IsIFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQor
ICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Is
IGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29k
ZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKICAgICAgICAgCkBAIC0x
MTQyOSwyNiArMTE0MjksMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSk7CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlKQorICAgIHZvaWQgZW1pdFN0b3JlQmFy
cmllcihMVmFsdWUgYmFzZSwgYm9vbCBpc0ZlbmNlZCkKICAgICB7CiAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAorICAgICAgICBMVmFsdWUgdGhyZXNob2xk
OworICAgICAgICBpZiAoaXNGZW5jZWQpCisgICAgICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5s
b2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNo
b2xkKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQuY29u
c3RJbnQzMihibGFja1RocmVzaG9sZCk7CisgICAgICAgIAogICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCBtX291dC5jb25z
dEludDMyKGJsYWNrVGhyZXNob2xkKSksCisgICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2Vs
bFN0YXRlKGJhc2UpLCB0aHJlc2hvbGQpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRp
b24pLCByYXJlbHkoc2xvd1BhdGgpKTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCisgICAgICAgIAogICAg
ICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEg
bG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4g
aXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2Rl
IHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KICAgICAgICAgLy8gd2FzdGluZyBCMydzIHRpbWUg
b3B0aW1pemluZyBpdC4KLSAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVh
dGVHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tZW1v
cnlGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMu
YXBwZW5kKGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShiYXNlR1BS
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9GZW5jZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxhenlT
bG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOwogICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJz
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwpAQCAtMTE0OTMsNiArMTE1MDYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgYmFzZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNGZW5jZWQpCisgICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0
Y2hwb2ludFJlYWQoJm1faGVhcHMucm9vdCwgcGF0Y2hwb2ludCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxf
Y2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9p
bnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAg
CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1
dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1v
cnkocG9pbnRlci5oZWFwKCksIHN0b3JlKTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5j
ZSgpCit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpKTsKK30KKwogdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvaW50ZXIgcG9pbnRlcikKIHsKICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50
ZXIudmFsdWUoKSk7CkBAIC03OTUsNyArODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1
ZSB2YWx1ZSwgVHlwZWRQbwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LVR5cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50
ZXIgT3V0cHV0OjphYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBU
eXBlZFBvaW50ZXIobV9oZWFwcy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJl
c3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNl
IERGRwogCiBuYW1lc3BhY2UgQjMgeworY2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNl
VmFsdWU7CiB9IC8vIG5hbWVzcGFjZSBCMwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgog
CiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShM
VmFsdWUsIFR5cGVkUG9pbnRlcik7CisgICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAg
ICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDha
ZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKQEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBoZWFwLmJhc2VJbmRleCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25z
dGFudCwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCog
YWRkcmVzcyk7CisgICAgVHlwZWRQb2ludGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3Mp
OwogCiAgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFj
dEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxk
KSk7IH0KICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3Ry
YWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmll
bGQpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTYgQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1
aW50OF90IHsKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDE7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBibGFjay4KK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgPSAxMDA7IC8vIHggPD0gdGF1dG9sb2dpY2Fs
VGhyZXNob2xkIGlzIGFsd2F5cyB0cnVlLgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRocmVzaG9s
ZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1bnNpZ25lZCB0aHJlc2hvbGQpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU3RhdGUpIDw9IHRocmVzaG9sZDsKK30KIAogaW5s
aW5lIGJvb2wgaXNCbGFjayhDZWxsU3RhdGUgY2VsbFN0YXRlKQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSBibGFja1RocmVzaG9sZDsKKyAgICByZXR1
cm4gaXNXaXRoaW5UaHJlc2hvbGQoY2VsbFN0YXRlLCBibGFja1RocmVzaG9sZCk7CiB9CiAKIGlu
bGluZSBDZWxsU3RhdGUgYmxhY2tlbihDZWxsU3RhdGUgY2VsbFN0YXRlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDQgKzE1NDks
MTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTYwogICAgIHJldHVy
biBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJy
aWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIGlmIChVTkxJS0VMWShiYXJy
aWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgc25l
YWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2FsIGltcG9zc2libGUgdGhyZXNob2xkLCBz
byBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJlIG5vdCBibGFjay4gQnV0IHdlIGNhbid0
IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAgICAgICAgV1RGOjpz
dG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRUb1JlbWVtYmVyZWRT
ZXQoZnJvbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOSArMTA0LDE0IEBAIHB1YmxpYzoKICAg
ICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKIAotICAgIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCosIEpTVmFsdWUpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCos
IEpTQ2VsbCopOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7Cisg
ICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOworICAg
IAorICAgIHZvaWQgd3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7
CisgICAgCisgICAgLy8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRl
KCkgPCBzbmVha3lCbGFja1RocmVzaG9sZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdy
aXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSk7CiAKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVm
ZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTI1
NCw2ICsyNTksMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVf
dCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKKyAg
ICAKKyAgICBib29sIGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFy
cmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgY29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNo
b3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9
CisgICAgCisgICAgdW5zaWduZWQgc25lYWt5QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVy
biBtX3NuZWFreUJsYWNrVGhyZXNob2xkOyB9CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NP
ZlNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gJm1fc25lYWt5QmxhY2tUaHJl
c2hvbGQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGlvblNjb3BlOwpA
QCAtNDExLDYgKzQyMiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsK
IAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAgICBib29s
IG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkg
fTsKKyAgICB1bnNpZ25lZCBtX3NuZWFreUJsYWNrVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VG
ZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9
OwogCiAgICAgVk0qIG1fdm07CiAgICAgZG91YmxlIG1fbGFzdEZ1bGxHQ0xlbmd0aDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDE5ICsxMjUsMzEgQEAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVy
KGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICBXcml0
ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKICNlbmRpZgotICAgIGlmICgh
ZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRl
OjpOZXdXaGl0ZSkKKyAgICBpZiAoIWlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgp
LCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFRvUmVt
ZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoTElLRUxZKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkg
IT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB3cml0ZUJhcnJp
ZXJTbG93UGF0aChmcm9tKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNv
bnN0IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNv
bnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9t
LT5jZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFj
a1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOworfQor
CitpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxs
KiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxK
U0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgYWRk
VG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9s
ZChmcm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQpKSkKKyAgICAgICAgYWRkVG9SZW1l
bWJlcmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9y
eUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwNiwxNyAr
MTMwNiw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVX
aXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJl
LCBSZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRl
bihHUFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91
dEZlbmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUs
IEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihi
bGFja1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5X
aXRob3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVz
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVP
ZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhh
ZGRyZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogICAgIAorICAg
IEp1bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwsIEdQUlJl
ZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6
OmNlbGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gz
MihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
U25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25lYWt5SnVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAg
ICB7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxvYWQ4KGFkZHJl
c3MsIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hH
UFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNo
b2xkKCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRl
bihHUFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNl
KCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5j
ZShjZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpT
Q2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCk7
CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShj
ZWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZSgp
CisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3RvcmVCYXJyaWVy
U3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAg
ICAgb2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZTdG9yZUJhcnJp
ZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclNo
b3VsZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBz
dHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFs
bCB0aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMg
d2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0
bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUg
c3RyaW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uT1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCi0v
LyBOQjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUgYmFycmllciBi
ZWNhdXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRoZSBERkcgb25s
eSB0cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMgYmVlbiBiYXJy
aWVyZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRvIHRyeSB0byBt
b2RlbCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2
bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xv
d1BhdGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOCArNDEy
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9y
YWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFy
cmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmll
cihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4
Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0
QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQyKGJhc2UsIHJl
Z1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgCisg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAg
ICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0
QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNl
VlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIEluIG9yZGVyIHRv
IGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZz
ZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3Vt
ZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQg
d2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0
IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAtNjg0LDYgKzY4
Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNo
b3VsZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAt
MTE4MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3du
ZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25a
ZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QwKTsKKyAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDggQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7
CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCkuaXNNYXJrZWQo
b3duZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7CisgICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQpAQCAtMTM5
MCw4ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAu
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgaWYgKG5l
ZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCku
dG8gPT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdy
aXRlQmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxs
cy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgIH0KICAg
ICAKICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVu
dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4OTEsNyBAQCBt
YWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFjcm8gc2tp
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVtZmVuY2UKICAg
ICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQsIC5kb25lCiAg
ICAgc2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVh
c20veDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNyw4IEBAIGNsYXNz
IEluc3RydWN0aW9uCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAgICAgICAkYXNtLnB1dHMg
ImxlYSN7eDg2U3VmZml4KDpwdHIpfSAje29yZGVyT3BlcmFuZHMob3BlcmFuZHNbMF0ueDg2QWRk
cmVzc09wZXJhbmQoOnB0ciksIG9wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cikpfSIKICAgICAg
ICAgd2hlbiAibWVtZmVuY2UiCi0gICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKKyAgICAg
ICAgICAgIHNwID0gUmVnaXN0ZXJJRC5uZXcobmlsLCAic3AiKQorICAgICAgICAgICAgJGFzbS5w
dXRzICJsb2NrOyBvcmwgJDAsICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTgsNyArNDE4LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlzIG1l
dGhvZCBtYXkgY2FsbCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhpcyBp
cyBzdXBwb3NlZAogICAgIC8vIHRvIHdvcmsuCi0gICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0m
IHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGks
IEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKSB7CkBAIC00NjgsNiArNDY4LDU0IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAgICAgCisgICAgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgeworICAgICAgICBpbml0aWFsaXplSW5kZXhXaXRo
b3V0QmFycmllcihpLCB2LCBpbmRleGluZ1R5cGUoKSk7CisgICAgfQorCisgICAgLy8gVGhpcyB2
ZXJzaW9uIG9mIGluaXRpYWxpemVJbmRleCBpcyBmb3IgY2FzZXMgd2hlcmUgeW91IGtub3cgdGhh
dCB5b3Ugd2lsbCBub3QgbmVlZCBhbnkKKyAgICAvLyBiYXJyaWVycy4gVGhpcyBpbXBsaWVzIG5v
dCBoYXZpbmcgYW55IGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1bnNpZ25lZCBpLCBKU1ZhbHVlIHYs
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCisgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSkgeworICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogeworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2LmlzSW50MzIoKSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5E
RVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodi5pc051bWJlcigpKTsKKyAgICAgICAg
ICAgIGRvdWJsZSB2YWx1ZSA9IHYuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHZhbHVlID09IHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQo
aSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKICAgICBib29sIGhh
c1NwYXJzZU1hcCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBA
IC02NDIsNiArNjkwLDcgQEAgcHVibGljOgogICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3duIHBy
b3BlcnR5IG9mZnNldHMuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KSBjb25zdCB7IHJldHVybiBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5nZXQoKTsgfQog
ICAgIHZvaWQgcHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFsdWUp
OyB9CisgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0QmFycmllcihQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0V2l0aG91
dFdyaXRlQmFycmllcih2YWx1ZSk7IH0KICAgICB2b2lkIHB1dERpcmVjdFVuZGVmaW5lZChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0VW5kZWZp
bmVkKCk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0TmF0aXZlSW50
cmluc2ljR2V0dGVyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyLCBOYXRpdmVGdW5j
dGlvbiwgSW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYg
KzE4Miw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwg
dGVzdFRoZUZUTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVyYm9z
ZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVz
ZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVz
ZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29s
LCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihk
b3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAwMDAwLCBOb3JtYWwsIG51bGxw
dHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCAr
NzEsOCBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE0NAogICAgIAogICAg
IGF1dG8gc2V0UHJvcGVydGllcyA9IFsmXSAoKSB7Ci0gICAgICAgIGFycmF5LT5wdXREaXJlY3Qo
dm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKHJlc3Vs
dC5zdGFydCkpOwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJy
YXlJbnB1dFByb3BlcnR5T2Zmc2V0LCBpbnB1dCk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RX
aXRob3V0QmFycmllcihSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051
bWJlcihyZXN1bHQuc3RhcnQpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJy
aWVyKFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKICAgICB9
OwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0
ZXJucygpOwpAQCAtODIsMTAgKzgyLDEwIEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogY3JlYXRl
UmVnRXhwTWF0Y2gKICAgICAgICAgCiAgICAgICAgIHNldFByb3BlcnRpZXMoKTsKICAgICAgICAg
Ci0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoMCwganNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1
YnBhdHRlcm5zOyArK2kpCi0gICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBp
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRo
b3V0QmFycmllcihpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyB0
aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KICAgICAgICAgCkBAIC0xMDIsMTAgKzEw
MiwxMCBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAgICAg
IAogICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5p
dGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKDAsIGpzVW5kZWZp
bmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91
cyk7CisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwg
anNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIAogICAgICAgICAv
LyBOb3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCiAKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJlIGRvd24gd2l0aCBUU08KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjMxNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
Y2xlYXJSYW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFycyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMg
dHVybmVkIG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAgICAgIGEgREZHIG9wdGltaXphdGlvbiBw
YXNzLgorCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpG
YXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5o
OgorCiAyMDE2LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgTmVlZCBhIHN0b3JlLWxvYWQgZmVuY2UgYmV0d2VlbiBzZXR0aW5nIGNlbGwgc3RhdGUgYW5k
IHZpc2l0aW5nIHRoZSBvYmplY3QgaW4gU2xvdFZpc2l0b3IKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0Zhc3RCaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMsMjQgQEAgdm9pZCBGYXN0Qml0VmVj
dG9yV29yZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1fd29yZHMgPSBuZXdBcnJheTsKIH0KIAor
dm9pZCBGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkK
K3sKKyAgICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
YmVnaW47IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGVuZEJlZ2luU2xvcCA9IChiZWdpbiAr
IDMxKSAmIH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRTbG9wID0gZW5kICYgfjMxOworICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZEJlZ2luU2xvcDsgKytpKQorICAgICAg
ICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbkVuZFNsb3A7IGkgPCBl
bmQ7ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gZW5k
QmVnaW5TbG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3AgLyAzMjsgKytpKQorICAgICAgICBtX3dv
cmRzLndvcmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRleDogU291cmNl
L1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zh
c3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93dGYvRmFzdEJp
dFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiArNDY4LDggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
ZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289800</attachid>
            <date>2016-09-25 23:57:52 -0700</date>
            <delta_ts>2016-09-26 12:37:55 -0700</delta_ts>
            <desc>trying to get around the regexp regression</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102848</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEZpbmFsbHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5n
ZSBwdXQgdGhlIHN0b3JlLWxvYWQgZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAg
ICAgYWRkaW5nIEZUTE91dHB1dCBzdXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSBtYWdpYyBmb3IgZGVjb3JhdGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2Ug
bWlnaHQgYXMgd2VsbCBrZWVwIHRoYXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2
NCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0
b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZElt
cGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZl
VG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmll
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAg
ICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJ
bnN0cnVjdGlvbnMpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6
CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5j
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRs
L0ZUTE91dHB1dC5oOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6
OmlzV2l0aGluVGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hv
dWxkQmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxk
QmVGZW5jZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAg
ICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmll
cik6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4p
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZl
bmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNt
L3g4Ni5yYjoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYy
MjEpOiBbVVNFUl0gY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNv
bS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEs
NiArMzYxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwMyw2ICs1MDMsOCBAQAogCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdD
MzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4
ODhBMEMwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBN
YXJrZWRCbG9ja0lubGluZXMuaCAqLzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8q
IE1hcmtlZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5l
cy5oICovOyB9OworCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuY3BwICovOyB9OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNzQzLDYgKzI3NDUsOCBAQAogCQkwRjdDMzlGRTFDOTBDNTVCMDA0ODAx
NTEgLyogREZHT3BJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09w
SW5mby5oOyBwYXRoID0gZGZnL0RGR09wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFy
a2VkU3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtl
ZFNwYWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4OTFE
OTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJF
IC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1
MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NTUsNiArNjU1OSw4IEBACiAJCQkJMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRGMjlERDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oICovLAorCQkJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovLAorCQkJCTBGN0Y5ODhB
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLywK
IAkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAv
KiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTc5NDgsNiArNzk1NCw3IEBA
CiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQw
MDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdGOTg4
QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3
QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5OCw2ICs5MTA1LDcgQEAKIAkJCQlBN0Q4OUNGNzE3
QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
NzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzc0LDYgKzM3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGlt
bSkubGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBs
ZWZ0KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewog
ICAgICAgICBicmFuY2gzMihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIz
MjsKQEAgLTgyOCw2ICs4MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBx
X3JtKHJpZ2h0LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNv
bmRpdGlvbihjb25kKSkpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsK
KyAgICB9CiAKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElm
IHdlIGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBh
bHJlYWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAg
ICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFy
cmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAg
ICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
LCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3
cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFy
cmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVz
ZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEg
dG8gc2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAg
ICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAg
ICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6
OlNjYWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6
ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
aygmaml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0
dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMg
dGhhdAogICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2lu
dCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAg
ICAvLyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNl
dHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNy
byhKU0NlbGxfY2VsbFN0YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAor
ICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpT
T2JqZWN0X2J1dHRlcmZseSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBj
YXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2Fz
ZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAg
ICAgIHJlYWQoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3Rh
dGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOgorICAgICAgICByZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRl
KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRp
b25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xv
YmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9u
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5v
dGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUK
ICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9z
ZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICBjYXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQw
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdl
dFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRT
dG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAg
ICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRS
ZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUg
bWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBG
ZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENs
b3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3Rv
cmVCYXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJv
b2wgaGFzSWRlbnRpZmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cg
dGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlv
bkhhbmRsZVdhdGNoZG9nVGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBX
cml0ZSBiYXJyaWVycyAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8o
R2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiArMzYzLDcgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtVGllclVwQ2hl
Y2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2Vy
dGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAtNDUxLDYgKzQ1Myw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1T
dG9yZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZI
aW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFj
azoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVC
YXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9i
amVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNiBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2Fz
ZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkBAIC0zNzEsNiArMzcwLDE0
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgLy8g
Y29tcGlsaW5nIHRoaXMgbm9kZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBT
dG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIC8vIFdl
IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUs
IHdoaWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAgLy8ga2VlcCB0aGVtIGV4YWN0
bHkgd2hlcmUgdGhleSB3ZXJlLiBUaGlzIGlzIHNvcnQgb2Ygb3ZlcmtpbGwgc2luY2UgdGhlIGNs
b2JiZXJpemUgZWZmZWN0cworICAgICAgICAvLyBhbHJlYWR5IGZvcmNlIHRoZXNlIHRoaW5ncyB0
byBiZSBvcmRlcmVkIHByZWNpc2VseS4gSSdtIGp1c3Qgbm90IGNvbmZpZGVudCBlbm91Z2ggaW4g
bXkKKyAgICAgICAgLy8gZWZmZWN0IGJhc2VkIG1lbW9yeSBtb2RlbCB0byByZWx5IHNvbGVseSBv
biB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI2OCwxOCArMTI2OCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKLXsKLSAgICBB
U1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsKLQotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdyaXRlQmFycmllcihiYXNl
LmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRj
aDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxp
dHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNTAwNyw3ICs0OTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0
b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTU0NzQsMjAgKzU0NjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFn
R1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQ
Uik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNj
cmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQot
ICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJS
ZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBncHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDE4ICsxMzc1LDYgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRn
ZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVF
ZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNl
RWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVk
Z2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDc4LDExICs1MDY2
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
dW5yZWFjaGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC01NTc0LDIw
ICs1NTYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0g
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1f
aml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3Jp
dGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODMwMiw0NiArODMwMiw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpsaW5rQnJhbmNoZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJy
aWVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVy
KTsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgbm9kZS0+b3AoKSA9
PSBGZW5jZWRTdG9yZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wgaXNGZW5jZWQgPSBub2RlLT5v
cCgpID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEo
dGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAotICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotCi0g
ICAgbm9SZXN1bHQobm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgewor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmFwcGVuZCgKKyAgICAgICAgICAgIG1f
aml0LnNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIsIHNjcmF0Y2gxR1BS
KSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQu
anVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9q
aXQubWVtb3J5RmVuY2UoKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBl
bmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikp
OworICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQobV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9y
ZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5t
X3dyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKKyAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVy
QnVmZmVyLmNhcGFjaXR5KCkpKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDIpOwotICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZl
ci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDJHUFIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2Ny
YXRjaDFHUFIpOwogICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIo
Y2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikp
KSk7CisgICAgbV9qaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CiAKICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsK
IAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOwog
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKICAgICBkb25lLmxp
bmsoJm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluaygmbV9qaXQpOworCisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1
cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykK
QEAgLTczOCw4ICs3MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGls
ZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsK
LQogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hO
dWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVu
Y2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpCisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNp
emUoKSk7CisgICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUo
KTsKKyAgICAgICAgICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9p
bnRzLmNsZWFyUmFuZ2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXpl
cyBldmVyeXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0
cnVjdCBDaGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAg
ICAgIAorICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1h
bnRpY09yaWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNl
bWFudGljT3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2lu
IHNlbWFudGljT3JpZ2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5
KCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVy
ZSB3ZSB3b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQor
ICAgICAgICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0
byB0ZWxsIHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMg
YSBiYWNrd2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVs
bHMgdXMgaWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVy
IHRoYXQgbm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXMsIHNvIGV4aXRzIHJl
cXVpcmUgY29uc2VydmF0aXNtLiBJZiB3ZSBleGl0LCB0aGVuIHRoZXJlCisgICAgICAgICAgICAv
LyBwcm9iYWJseSB3aWxsIGJlIGEgR0MgaW4gdGhlIGZ1dHVyZSEgSWYgd2UgbmVlZGVkIHRvIHRo
ZW4gd2UgY291bGQgbGlmdCB0aGF0CisgICAgICAgICAgICAvLyByZXF1aXJlbWVudCBieSBlaXRo
ZXIgKDEpIGhhdmluZyBhIFN0b3JlQmFycmllckhpbnQgdGhhdCB0ZWxscyBPU1IgZXhpdCB0byBP
U1IgdGhhdAorICAgICAgICAgICAgLy8gdmFsdWUgb3IgKDIpIGF1dG9tYXRpY2FsbHkgYmFycmll
cmluZyBhbnkgREZHLWxpdmUgTm9kZSBvbiBPU1IgZXhpdC4gRWl0aGVyIHdheSwgaXQKKyAgICAg
ICAgICAgIC8vIHdvdWxkIGJlIHdlaXJkIGJlY2F1c2UgaXQgd291bGQgY3JlYXRlIGEgbmV3IHJv
b3QgZm9yIE9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMuIEkKKyAgICAgICAgICAgIC8vIGRvbid0
IGhhdmUgZXZpZGVuY2UgdGhhdCBpdCB3b3VsZCBiZSB3b3J0aCBpdC4KKyAgICAgICAgICAgIGlm
IChkb2VzR0MobV9ncmFwaCwgbm9kZSkgfHwgbWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2Vz
Tm90RXhpdCkgeworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkgJiYgZnV0dXJlR0MpIHsKKyAgICAgICAgICAgICAg
ICBtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgZnV0
dXJlR0MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHdlIHJ1biBmb3J3YXJkIGFuZCBjb2xsZWN0IHRoZSBiYXJyaWVycy4gV2hlbiB3
ZSBoaXQgYSBiYXJyaWVyIHBvaW50LCBpbnNlcnQgYWxsIG9mCisgICAgICAgIC8vIHRoZW0gd2l0
aCBhIGZlbmNlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzU3RvcmVC
YXJyaWVyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIW5vZGUtPm9yaWdpbi53YXNIb2lzdGVk
KTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgbV9uZWVkZWRCYXJy
aWVycy5hcHBlbmQoQ2hpbGRBbmRPcmlnaW4obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBvcmlnaW4u
c2VtYW50aWMpKTsKKyAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIW1fYmFycmllclBvaW50c1tub2RlSW5kZXhdKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAg
ICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVu
ZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0
IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGEuY2hpbGQgPCBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXV0
byBlbmQgPSBzdGQ6OnVuaXF1ZSgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmJl
Z2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChjb25z
dCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2x7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxkID09IGIuY2hpbGQ7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gaXRlci0+Y2hpbGQ7CisgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09y
aWdpbiA9IGl0ZXItPnNlbWFudGljT3JpZ2luOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE5vZGVUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNv
bmN1cnJlbnRCYXJyaWVycygpICYmIGl0ZXIgPT0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpKQor
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gRmVuY2VkU3RvcmVCYXJyaWVyOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCB0eXBlLCBvcmlnaW4u
d2l0aFNlbWFudGljKHNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgRWRnZShj
aGlsZCwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX25lZWRl
ZEJhcnJpZXJzLnJlc2l6ZSgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBt
X2luc2VydGlvblNldDsKKyAgICBGYXN0Qml0VmVjdG9yIG1fYmFycmllclBvaW50czsKKyAgICBW
ZWN0b3I8Q2hpbGRBbmRPcmlnaW4+IG1fbmVlZGVkQmFycmllcnM7Cit9OworCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhHcmFw
aCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPFN0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFBpY2tzIHVwIGdyb3VwcyBvZiBiYXJy
aWVycyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGluIGFueSBvcmRlciB3aXRoIHJlc3BlY3QgdG8g
ZWFjaCBvdGhlciBhbmQKKy8vIHBsYWNlcyB0aGVuIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiB0
aGUgcHJvZ3JhbSB3aGVyZSB0aGUgY2x1c3RlciB3b3VsZCBiZSBjb3JyZWN0LiBUaGlzIHBoYXNl
CisvLyBtYWtlcyBvbmx5IHRoZSBmaXJzdCBvZiB0aGUgY2x1c3RlciBiZSBhIEZlbmNlZFN0b3Jl
QmFycmllciB3aGlsZSB0aGUgcmVzdCBhcmUgbm9ybWFsCisvLyBTdG9yZUJhcnJpZXJzLiBUaGlz
IHBoYXNlIGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgYmFycmllcnMgLSBmb3IgZXhhbXBsZSwgdGhl
IGNsdXN0ZXIgbWF5IGVuZCB1cAorLy8gd2l0aCB0d28gb3IgbW9yZSBiYXJyaWVycyBvbiB0aGUg
c2FtZSBvYmplY3QsIGluIHdoaWNoIGNhc2UgaXQgaXMgdG90YWxseSBzYWZlIGZvciB1cyB0byBk
cm9wCisvLyBvbmUgb2YgdGhlbS4gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBzb3VuZCBoaW5nZXMg
b24gdGhlICJlYXJsaWVzdCBwb2ludCB3aGVyZSB0aGUgY2x1c3RlciB3b3VsZAorLy8gYmUgY29y
cmVjdCIgcHJvcGVydHkuIEZvciBleGFtcGxlLCB0YWtlIHRoaXMgaW5wdXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgYzog
RmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkp
CisvLyAgICAgZTogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0
KEBwLCBAcCwgQHopCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoZSBjbHVzdGVyIG9m
IGJhcnJpZXJzIGlzIEBjLCBAZSwgYW5kIEBnLiBBbGwgb2YgdGhlIGJhcnJpZXJzIGFyZSBiZXR3
ZWVuIHR3byBkb2VzR0MgZWZmZWN0czoKKy8vIHRoZSBjYWxscyBhdCBAYSBhbmQgQGkuIEJlY2F1
c2UgdGhlcmUgYXJlIG5vIGRvZXNHQyBlZmZlY3RzIGJldHdlZW4gQGEgYW5kIEBpIGFuZCB0aGVy
ZSBpcyBubworLy8gcG9zc2libGUgY29udHJvbCBmbG93IGVudHJ5IGludG8gdGhpcyBzZXF1ZW5j
ZSBiZXR3ZWVuIEAgYW5kIEBpLCB3ZSBjb3VsZCBjb3VsZCBqdXN0IGV4ZWN1dGUgYWxsCisvLyBv
ZiB0aGUgYmFycmllcnMganVzdCBiZWZvcmUgQGkgaW4gYW55IG9yZGVyLiBUaGUgZWFybGllc3Qg
cG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUKKy8vIGNvcnJlY3QgaXMganVzdCBhZnRl
ciBAZiwgc2luY2UgdGhhdCdzIHRoZSBsYXN0IG9wZXJhdGlvbiB0aGF0IG5lZWRzIGEgYmFycmll
ci4gV2UgdXNlIHRoZQorLy8gZWFybGllc3QgdG8gcmVkdWNlIHJlZ2lzdGVyIHByZXNzdXJlLiBX
aGVuIHRoZSBiYXJyaWVycyBhcmUgY2x1c3RlcmVkIGp1c3QgYWZ0ZXIgQGYsIHdlIGdldDoKKy8v
CisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8v
ICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBw
LCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGU6IEZl
bmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBnOiBGZW5jZWRTdG9yZUJhcnJpZXIoQHApCisv
LyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTogQ2FsbCgpCisvLworLy8gVGhpcyBw
aGFzZSBkb2VzIG1vcmUuIEl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgY2x1c3RlcmluZyB0byBy
ZW1vdmUgZmVuY2VzIGFuZCByZW1vdmUgcmVkdW5kYW50CisvLyBiYXJyaWVycy4gU28gdGhpcyBw
aGFzZSB3aWxsIG91dHB1dCB0aGlzOgorLy8KKy8vICAgICBhOiBDYWxsKCkKKy8vICAgICBiOiBQ
dXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkp
CisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBjOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdldEJ5
T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgb3B0aW1pemF0aW9uIGlt
cHJvdmVzIGJvdGggb3ZlcmFsbCB0aHJvdWdocHV0IGFuZCB0aGUgdGhyb3VnaHB1dCB3aGlsZSB0
aGUgY29uY3VycmVudCBHQyBpcworLy8gcnVubmluZy4gSW4gdGhlIGZvcm1lciwgd2UgYXJlIHNp
bXBsaWZ5aW5nIGluc3RydWN0aW9uIHNlbGVjdGlvbiBmb3IgYWxsIGJ1dCB0aGUgZmlyc3QgZmVu
Y2UuIEluCisvLyB0aGUgbGF0dGVyLCB3ZSBhcmUgcmVkdWNpbmcgdGhlIGNvc3Qgb2YgYWxsIGJ1
dCB0aGUgZmlyc3QgYmFycmllci4gVGhlIGZpcnN0IGJhcnJpZXIgd2lsbCBhd2xheXMKKy8vIHRh
a2Ugc2xvdyBwYXRoIHdoZW4gdGhlcmUgaXMgY29uY3VycmVudCBHQyBhY3Rpdml0eSwgc2luY2Ug
dGhlIHNsb3cgcGF0aCBjb250YWlucyB0aGUgZmVuY2UuIEJ1dAorLy8gYWxsIG9mIHRoZSBvdGhl
ciBiYXJyaWVycyB3aWxsIG9ubHkgdGFrZSBzbG93IHBhdGggaWYgdGhleSByZWFsbHkgbmVlZCB0
byByZW1lbWJlciB0aGUgb2JqZWN0LgorYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
ZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxs
b2NhdGUgYnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGlu
c2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4ICsgMSwgbV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTQzMCwxMyArNDMwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVy
LlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2UpOworICAgICAg
ICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9p
ZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRP
SyA9IHRydWUpCisgICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRn
ZSBiYXNlKQogICAgIHsKLSAgICAgICAgLy8gSW5zZXJ0aW5nIGEgYmFycmllciBtZWFucyB0aGF0
IHRoZSBvYmplY3QgbWF5IGJlY29tZSBtYXJrZWQgYnkgdGhlIEdDLCB3aGljaCB3aWxsIG1ha2UK
LSAgICAgICAgLy8gdGhlIG9iamVjdCBibGFjay4KKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IG91
ciB3YXkgb2Ygc2F5aW5nIHRoYXQgYmFycmllcnMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aCBlYWNo
IG90aGVyIGFjY29yZGluZworICAgICAgICAvLyB0byBmb3J3YXJkIGFuYWx5c2lzOiBpZiB3ZSBw
cm92ZWQgb25lIHRpbWUgdGhhdCBhIGJhcnJpZXIgd2FzIG5lY2Vzc2FyeSB0aGVuIGl0J2xsIGZv
cgorICAgICAgICAvLyBzdXJlIGJlIG5lY2Vzc2FyeSBuZXh0IHRpbWUuCiAgICAgICAgIGJhc2Ut
PnNldEVwb2NoKEVwb2NoKCkpOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2Rl
LCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhlIGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJn
ZWQuCkBAIC00NDYsMTcgKzQ0NywyMyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogV2Ug
Y291bGQgc3VwcG9ydCBTdG9yZUJhcnJpZXIoVW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNv
cnQgb2YgY29vbC4KICAgICAgICAgLy8gQnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0Lgog
Ci0gICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3Vs
ZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2suIFdlIG1heSBiZSBpbiBhIGNvbnRleHQKLSAgICAgICAg
Ly8gd2hlcmUgY2hlY2tzIGFyZSBub3QgYWxsb3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBp
bnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4aXRJbnZhbGlkCi0gICAgICAgIC8vIGNvbnRleHQgYW5k
IHRoYXQgYmFycmllciBuZWVkZWQgYSBjaGVjaywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29y
ayBieSBob2lzdGluZyB0aGUgY2hlY2suCi0gICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4g
cmlnaHQgbm93LgotICAgICAgICBpZiAoYmFzZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7
Ci0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4u
ZXhpdE9LKTsKLSAgICAgICAgICAgIGJhc2Uuc2V0VXNlS2luZChDZWxsVXNlKTsKLSAgICAgICAg
fQorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDZWxsKGJhc2UudXNlS2lu
ZCgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBCYXJyaWVycyBhcmUgYWx3YXlzIGluc2VydGVk
IGFmdGVyIHRoZSBub2RlIHRoYXQgdGhleSBzZXJ2aWNlLiBUaGVyZWZvcmUsIHdlIGFsd2F5cyBr
bm93CisgICAgICAgIC8vIHRoYXQgdGhlIHRoaW5nIGlzIGEgY2VsbCBub3cuCisgICAgICAgIGJh
c2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAKKyAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKKyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRl
KG1fZ3JhcGgsIG1fbm9kZSkpCisgICAgICAgICAgICBvcmlnaW4gPSBvcmlnaW4ud2l0aEludmFs
aWRFeGl0KCk7CisgICAgICAgIAorICAgICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICBpZiAo
T3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCisgICAgICAgICAgICB0eXBlID0gRmVu
Y2VkU3RvcmVCYXJyaWVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0gU3RvcmVC
YXJyaWVyOwogICAgICAgICAKLSAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmln
aW4udGFrZVZhbGlkRXhpdChleGl0T0spLCBiYXNlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCB0eXBlLCBvcmlnaW4sIGJhc2UpOwogICAg
IH0KICAgICAKICAgICBib29sIHJlYWxseUluc2VydEJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQg
KzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwog
CiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJzIGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhv
dXQgY29uc3VsdGluZyB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIuCi0vLyBVc2VzIGEgc2ltcGxl
IGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmll
cnMuIFRoaXMgcGhhc2UgcmVxdWlyZXMKLS8vIHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCisvLyBV
c2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJy
aWVycyBvbiBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcworLy8gcGhhc2UgcmVxdWlyZXMg
dGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KIGJvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNl
cnRpb24oR3JhcGgmKTsKIAogLy8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2Jh
bCBhbmFseXNpcyBhbmQgY29uc3VsdHMgdGhlIGFic3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEK
LS8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5k
YW50IGJhcnJpZXJzLCBidXQgb25seSBwcm9wYWdhdGVzICJzYW1lCi0vLyBlcG9jaCBhcyBjdXJy
ZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBibG9jayB0byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1
aXJlcyBTU0EuIFRoaXMgcGhhc2UKLS8vIGFsc28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFu
ZCBsaXZlbmVzcy4KKy8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNl
cnRpbmcgYmFycmllcnMgb24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgcGhhc2UKKy8v
IHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZSBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBh
bmQgbGl2ZW5lc3MuCiBib29sIHBlcmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3Jh
cGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsMTIgKzE5NiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWJzdHJhY3RIZWFw
JiBhdEFueUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ZWRIZWFwLmF0QW55SW5kZXgo
KTsgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQodm9pZCogYWRkcmVzcykKKyAg
ICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9pbmRleGVkSGVhcC5hdChiaXR3aXNlX2Nhc3Q8cHRyZGlmZl90PihhZGRy
ZXNzKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXSh2
b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNzKTsgfQorICAgIGNvbnN0IEFic3RyYWN0
SGVhcCYgb3BlcmF0b3JbXShjb25zdCB2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNz
KTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
QEAgLTExNiw2ICsxMTcsMTYgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0
ZVBhdAogICAgIG1faGVhcEZvclBhdGNocG9pbnRXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhl
YXAsIHZhbHVlKSk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVG
ZW5jZVJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAg
bV9oZWFwRm9yRmVuY2VSZWFkLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30K
Kwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VX
cml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKIHZvaWQgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCkK
IHsKICAgICByb290LmNvbXB1dGUoKTsKQEAgLTEzMiw5ICsxNDMsMTMgQEAgdm9pZCBBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFuZwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5
IDogbV9oZWFwRm9yQ0NhbGxXcml0ZSkKICAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhl
YXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBhdGNocG9pbnRSZWFkKQotICAgICAgICBlbnRy
eS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJh
bmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVj
dHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVu
dHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8
Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9
IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hl
YXBGb3JGZW5jZVJlYWQpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5y
ZWFkID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6
IG1faGVhcEZvckZlbmNlV3JpdGUpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVl
PigpLT53cml0ZSA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDYgKzIxNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlY29yYXRlQ0NhbGxXcml0
ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0
Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBk
ZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsK
KyAgICB2b2lkIGRlY29yYXRlRmVuY2VSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1
ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIz
OjpWYWx1ZSopOwogCiAgICAgdm9pZCBjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlv
bnMoKTsKIApAQCAtMjQxLDYgKzI0Myw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEhlYXBGb3JW
YWx1ZT4gbV9oZWFwRm9yQ0NhbGxXcml0ZTsKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hl
YXBGb3JQYXRjaHBvaW50UmVhZDsKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQ
YXRjaHBvaW50V3JpdGU7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yRmVuY2VS
ZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlV3JpdGU7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICBjYXNlIE5vdGlmeVdyaXRl
OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxJbmxp
bmVkQ2FsbGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmgiCkBAIC05NDUsNiArOTQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVD
b3VudEV4ZWN1dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNv
bXBpbGVTdG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eToKQEAgLTY5OTUsOSArNjk5Nyw5IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIGVtaXRTdG9yZUJh
cnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKQEAgLTgxMjYsOCArODEyOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcHJldmlv
dXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtMTAwNTMsMTMgKzEwMDUzLDEzIEBAIHByaXZhdGU6CiAgICAgLy8g
cnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwg
eW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVyZW5jZQogICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZd
KSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29u
c3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgUGF0
Y2hwb2ludFZhbHVlKiBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRo
KGZ1bmN0b3IsIFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQor
ICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Is
IGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29k
ZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKICAgICAgICAgCkBAIC0x
MTQyOSwyNiArMTE0MjksMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSk7CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlKQorICAgIHZvaWQgZW1pdFN0b3JlQmFy
cmllcihMVmFsdWUgYmFzZSwgYm9vbCBpc0ZlbmNlZCkKICAgICB7CiAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAorICAgICAgICBMVmFsdWUgdGhyZXNob2xk
OworICAgICAgICBpZiAoaXNGZW5jZWQpCisgICAgICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5s
b2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNo
b2xkKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQuY29u
c3RJbnQzMihibGFja1RocmVzaG9sZCk7CisgICAgICAgIAogICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCBtX291dC5jb25z
dEludDMyKGJsYWNrVGhyZXNob2xkKSksCisgICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2Vs
bFN0YXRlKGJhc2UpLCB0aHJlc2hvbGQpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRp
b24pLCByYXJlbHkoc2xvd1BhdGgpKTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCisgICAgICAgIAogICAg
ICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEg
bG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4g
aXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2Rl
IHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KICAgICAgICAgLy8gd2FzdGluZyBCMydzIHRpbWUg
b3B0aW1pemluZyBpdC4KLSAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVh
dGVHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tZW1v
cnlGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMu
YXBwZW5kKGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhvdXRGZW5jZShiYXNlR1BS
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9GZW5jZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxhenlT
bG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOwogICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJz
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwpAQCAtMTE0OTMsNiArMTE1MDYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgYmFzZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNGZW5jZWQpCisgICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0
Y2hwb2ludFJlYWQoJm1faGVhcHMucm9vdCwgcGF0Y2hwb2ludCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxf
Y2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9p
bnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAg
CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1
dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1v
cnkocG9pbnRlci5oZWFwKCksIHN0b3JlKTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5j
ZSgpCit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpKTsKK30KKwogdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvaW50ZXIgcG9pbnRlcikKIHsKICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50
ZXIudmFsdWUoKSk7CkBAIC03OTUsNyArODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1
ZSB2YWx1ZSwgVHlwZWRQbwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LVR5cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50
ZXIgT3V0cHV0OjphYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBU
eXBlZFBvaW50ZXIobV9oZWFwcy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJl
c3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNl
IERGRwogCiBuYW1lc3BhY2UgQjMgeworY2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNl
VmFsdWU7CiB9IC8vIG5hbWVzcGFjZSBCMwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgog
CiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShM
VmFsdWUsIFR5cGVkUG9pbnRlcik7CisgICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAg
ICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDha
ZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKQEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBoZWFwLmJhc2VJbmRleCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25z
dGFudCwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCog
YWRkcmVzcyk7CisgICAgVHlwZWRQb2ludGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3Mp
OwogCiAgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFj
dEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxk
KSk7IH0KICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3Ry
YWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmll
bGQpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTYgQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1
aW50OF90IHsKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDE7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBibGFjay4KK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgPSAxMDA7IC8vIHggPD0gdGF1dG9sb2dpY2Fs
VGhyZXNob2xkIGlzIGFsd2F5cyB0cnVlLgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRocmVzaG9s
ZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1bnNpZ25lZCB0aHJlc2hvbGQpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU3RhdGUpIDw9IHRocmVzaG9sZDsKK30KIAogaW5s
aW5lIGJvb2wgaXNCbGFjayhDZWxsU3RhdGUgY2VsbFN0YXRlKQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSBibGFja1RocmVzaG9sZDsKKyAgICByZXR1
cm4gaXNXaXRoaW5UaHJlc2hvbGQoY2VsbFN0YXRlLCBibGFja1RocmVzaG9sZCk7CiB9CiAKIGlu
bGluZSBDZWxsU3RhdGUgYmxhY2tlbihDZWxsU3RhdGUgY2VsbFN0YXRlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDQgKzE1NDks
MTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTYwogICAgIHJldHVy
biBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJy
aWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIGlmIChVTkxJS0VMWShiYXJy
aWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgc25l
YWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2FsIGltcG9zc2libGUgdGhyZXNob2xkLCBz
byBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJlIG5vdCBibGFjay4gQnV0IHdlIGNhbid0
IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAgICAgICAgV1RGOjpz
dG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRUb1JlbWVtYmVyZWRT
ZXQoZnJvbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOSArMTA0LDE0IEBAIHB1YmxpYzoKICAg
ICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKIAotICAgIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCosIEpTVmFsdWUpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCos
IEpTQ2VsbCopOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7Cisg
ICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOworICAg
IAorICAgIHZvaWQgd3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7
CisgICAgCisgICAgLy8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRl
KCkgPCBzbmVha3lCbGFja1RocmVzaG9sZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdy
aXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSk7CiAKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVm
ZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTE2
Niw3ICsxNzEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlw
ZSA9IEFueUNvbGxlY3Rpb24pOwotICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigp
OyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCisgICAgYm9vbCBjb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsgLy8gUmV0dXJucyB0
cnVlIGlmIGl0IGRpZCBjb2xsZWN0LgogICAgIHZvaWQgY29sbGVjdEFjY29yZGluZ1RvRGVmZXJH
Q1Byb2JhYmlsaXR5KCk7CiAKICAgICB2b2lkIGNvbXBsZXRlQWxsSklUUGxhbnMoKTsKQEAgLTI1
NCw2ICsyNTksMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVf
dCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKKyAg
ICAKKyAgICBib29sIGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFy
cmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgY29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNo
b3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9
CisgICAgCisgICAgdW5zaWduZWQgc25lYWt5QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVy
biBtX3NuZWFreUJsYWNrVGhyZXNob2xkOyB9CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NP
ZlNuZWFreUJsYWNrVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gJm1fc25lYWt5QmxhY2tUaHJl
c2hvbGQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGlvblNjb3BlOwpA
QCAtMjgzLDcgKzI5NCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVz
dHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggb2JqZWN0cyB3aXRoIGRlc3RydWN0b3Jz
LgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVz
ZSB3aXRoIG9iamVjdHMgd2l0aG91dCBkZXN0cnVjdG9ycy4KKyAgICB2b2lkKiBhbGxvY2F0ZVdp
dGhEZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCYsIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2Nh
dGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQmLCBzaXplX3QpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90
KTsgLy8gQ2hvb3NlcyBvbmUgb2YgdGhlIG1ldGhvZHMgYWJvdmUgYmFzZWQgb24gdHlwZS4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQqIGFsbG9jYXRlT2JqZWN0T2ZUeXBl
KERlZmVycmFsQ29udGV4dCYsIHNpemVfdCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1p
bkV4dHJhTWVtb3J5ID0gMjU2OwogICAgIApAQCAtNDExLDYgKzQyNSw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dy
aXRlQmFycmllckJ1ZmZlcjsKKyAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsgT3B0
aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1bnNpZ25lZCBtX3NuZWFreUJsYWNr
VGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxU
aHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CiAgICAgZG91Ymxl
IG1fbGFzdEZ1bGxHQ0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE5ICsxMjUsMzEgQEAgaW5s
aW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJh
cnJpZXIoKTsKICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3Rh
dGUoKSkpCisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8fCB0
by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICBpZiAoIWlzV2l0aGlu
VGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoTElL
RUxZKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICB3cml0ZUJhcnJpZXJTbG93UGF0aChmcm9tKTsKIH0KIAogaW5saW5l
IHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAg
IGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9t
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZy
b20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRl
QmFycmllclNsb3dQYXRoKGZyb20pOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJp
ZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9t
KQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlm
IChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJl
c2hvbGQpKSkKKyAgICAgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUg
dm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKQEAgLTIx
NCw2ICsyMjYsMTggQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydQog
ICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoYnl0ZXMp
OwogfQogCitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihEZWZlcnJh
bENvbnRleHQmIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVChp
c1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9j
YXRlV2l0aERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKK2lubGluZSB2
b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCYgZGVm
ZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0
aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVz
dHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlPgogaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVf
dCBieXRlcykKIHsKQEAgLTIyNiw2ICsyNTAsMTYgQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9j
YXRlT2JqZWN0T2ZUeXBlKAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Citpbmxp
bmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoRGVmZXJyYWxDb250ZXh0JiBkZWZl
cnJhbENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5l
ZWRzRGVzdHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGli
bGVPYmplY3Q+Ojp2YWx1ZSkpOworCisgICAgaWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlv
bikKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlV2l0aERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0
LCBieXRlcyk7CisgICAgcmV0dXJuIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoZGVmZXJyYWxD
b250ZXh0LCBieXRlcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KIGlubGlu
ZSBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCkK
IHsKICAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQg
d2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVj
dC4KQEAgLTMxMywxMiArMzQ3LDE1IEBAIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGgKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0KIAotaW5saW5lIGJvb2wgSGVhcDo6
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpCitpbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAg
IGlmICghc2hvdWxkQ29sbGVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb2xs
ZWN0KCk7CisgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgZGVmZXJyYWxDb250ZXh0
LT5tX3Nob3VsZEdDID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNDUg
KzE3NSw0OSBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpCitBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKERlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0KQogewogICAgIGlmICghT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0Nz
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0aW9uQ291
bnQgPSAwOwogICAgIGlmICghYWxsb2NhdGlvbkNvdW50KSB7Ci0gICAgICAgIGlmICghbV9oZWFw
LT5pc0RlZmVycmVkKCkpCi0gICAgICAgICAgICBtX2hlYXAtPmNvbGxlY3RBbGxHYXJiYWdlKCk7
CisgICAgICAgIGlmICghbV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChk
ZWZlcnJhbENvbnRleHQpCisgICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3Vs
ZEdDID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2hlYXAtPmNv
bGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG1faGVhcC0+bV9v
cGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKICAgICB9CiAgICAgaWYgKCsrYWxs
b2NhdGlvbkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAg
ICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2UoKQordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGJvb2wgY3Jhc2hPbkZh
aWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChjcmFzaE9uRmFp
bHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwg
Y3Jhc2hPbkZhaWx1cmUpOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
U2xvd0Nhc2UoKQordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKERl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGJvb2wgY3Jhc2hPbkZhaWx1
cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1
cmUpOworICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNy
YXNoT25GYWlsdXJlKTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlSW1wbChib29sIGNyYXNoT25GYWlsdXJlKQordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlSW1wbChEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgYm9vbCBj
cmFzaE9uRmFpbHVyZSkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7Ci0gICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAgIGRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCghbV9t
YXJrZWRTcGFjZS0+aXNJdGVyYXRpbmcoKSk7CiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2Zy
ZWVMaXN0Lm9yaWdpbmFsU2l6ZSk7CiAgICAgCiAgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAg
ICAgCi0gICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgbV9oZWFw
LT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAg
QWxsb2NhdGlvblNjb3BlIGFsbG9jYXRpb25TY29wZSgqbV9oZWFwKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTIsOCArMTUyLDggQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVk
c0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2
b2lkKiBhbGxvY2F0ZSgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxs
b2NhdGUoRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQqIHRyeUFsbG9jYXRl
KERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdGFrZUxhc3RBY3RpdmVCbG9jaygp
CiAgICAgewpAQCAtMjE2LDE1ICsyMTYsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIHNo
b3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkgY29uc3Q7CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZSgpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlSW1wbChib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKERlZmVycmFsQ29udGV4dCopOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoRGVmZXJyYWxDb250ZXh0Kik7
CisgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoRGVmZXJyYWxDb250ZXh0KiwgYm9vbCBj
cmFzaE9uRmFpbHVyZSk7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICB2b2lk
KiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxv
Y2s6OkhhbmRsZSopOwogICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSop
OwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoRGVmZXJyYWxD
b250ZXh0Kik7CiAgICAgCiAgICAgdm9pZCBzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYpOwog
ICAgIApAQCAtMjY1LDcgKzI2NSw3IEBAIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXQKICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9j
ZWxsU2l6ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGUoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7CiAgICAgdW5zaWduZWQgcmVt
YWluaW5nID0gbV9mcmVlTGlzdC5yZW1haW5pbmc7CiAgICAgaWYgKHJlbWFpbmluZykgewpAQCAt
Mjc3LDEzICsyNzcsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eQogICAgIAogICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChV
TkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKCk7Cisg
ICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7CiAgICAg
CiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKICAgICByZXR1cm4gaGVhZDsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKICAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0
LnJlbWFpbmluZzsKICAgICBpZiAocmVtYWluaW5nKSB7CkBAIC0yOTUsNyArMjk1LDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbAogICAgIAogICAgIEZyZWVDZWxs
KiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAg
ICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNs
b3dDYXNlKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVh
ZC0+bmV4dDsKICAgICByZXR1cm4gaGVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIz
OSwxNiBAQCB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoU3Vic3BhY2UmIHN1CiAgICAgICAg
IHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGJ5dGVzKTsK
KyAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwgbnVsbHB0ciwgYnl0ZXMpOworfQor
Cit2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoU3Vic3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJh
bENvbnRleHQmIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7
CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoJmRlZmVycmFsQ29u
dGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0
ZUxhcmdlKHN1YnNwYWNlLCAmZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7CiB9CiAKIHZvaWQqIE1h
cmtlZFNwYWNlOjp0cnlBbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNpemVfdCBieXRlcykK
QEAgLTI0OCwxOSArMjU3LDE5IEBAIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZShTdWJz
cGFjZSYKICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZSgpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVMYXJn
ZShzdWJzcGFjZSwgYnl0ZXMpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNl
LCBudWxscHRyLCBieXRlcyk7CiB9CiAKLXZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUxhcmdl
KFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2b2lkKiBNYXJrZWRTcGFjZTo6YWxs
b2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxh
cmdlKHN1YnNwYWNlLCBzaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdl
KHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogTWFya2VkU3BhY2U6OnRyeUFs
bG9jYXRlTGFyZ2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIE1hcmtl
ZFNwYWNlOjp0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIG1faGVhcC0+Y29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZVN0ZXA+KHNpemUpOwogICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlv
biA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX2hlYXAsIHNpemUsIHN1YnNwYWNlLmF0
dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTAgKzExMiwxMyBAQCBwdWJsaWM6CiAgICAg
TWFya2VkQWxsb2NhdG9yKiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKFN1YnNwYWNlJiwgc2l6ZV90KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShTdWJzcGFjZSYsIERlZmVycmFsQ29udGV4
dCYsIHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoU3Vi
c3BhY2UmLCBzaXplX3QpOwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Io
c2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQmLCBzaXplX3Qp
OworICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0Jiwg
c2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOwogICAgIHZvaWQq
IHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAgICAgCkBAIC0xOTUsOCArMTk4LDggQEAg
cHJpdmF0ZToKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxz
aXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3NpemVDbGFzc0ZvclNpemVTdGVwOwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBzaXplX3Qp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2Um
LCBzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBEZWZlcnJhbENv
bnRleHQqLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBE
ZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNp
emVDbGFzc0ZvclN0ZXBTaXplKCk7CiAgICAgCkBAIC0yNjQsNiArMjY3LDE2IEBAIGlubGluZSB2
b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRoRGUKICAgICByZXR1cm4gYWxsb2NhdGUobV9k
ZXN0cnVjdG9yU3BhY2UsIGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjph
bGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fbm9ybWFsU3BhY2UsIGRl
ZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFs
bG9jYXRlV2l0aERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYWxsb2NhdGUobV9kZXN0cnVjdG9yU3BhY2UsIGRl
ZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFs
bG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykKIHsKICAgICByZXR1cm4gYWxsb2NhdGUobV9h
dXhpbGlhcnlTcGFjZSwgYnl0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA2LDE3ICsx
MzA2LDU2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRTdG9yZVN0cnVjdHVyZVdp
dGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUs
IFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
KEdQUlJlZyBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0
RmVuY2UoR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwg
QWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJs
YWNrVGhyZXNob2xkKSk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPcklu
RWRlbihKU0NlbGwqIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldp
dGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICB1aW50OF90KiBhZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9m
ZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKGFk
ZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAgICAgCisgICAg
SnVtcCBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihHUFJSZWcgY2VsbCwgR1BSUmVn
IHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6
Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZT
bmVha3lCbGFja1RocmVzaG9sZCgpKSk7CisgICAgfQorCisgICAgSnVtcCBzbmVha3lKdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAg
IHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKKyAgICAgICAgbG9hZDgoYWRkcmVz
cywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQ
UiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hv
bGQoKSkpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
KEdQUlJlZyBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2Uo
KTsKKyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNl
KGNlbGwpOworICAgIH0KKworICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlND
ZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2UoKTsK
KyAgICAgICAgcmV0dXJuIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGNl
bGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKCkK
KyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZTdG9yZUJhcnJpZXJT
dG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBtZW1vcnlGZW5jZSgpOworICAgICAg
ICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZlN0b3JlQmFycmll
clN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyU2hv
dWxkQmVGZW5jZWQoKSkpOworICAgIH0KKyAgICAKICAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0
cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxs
IHRocm91Z2guIFRoZQogICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3
aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRv
CiAgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBz
dHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTc3LDE0ICsyMTc3LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25PU1JXcml0ZUJhcnIKICAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CiB9CiAKLS8v
IE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1ZSBhcyBwYXJ0IG9mIHRoZSBiYXJyaWVyIGJl
Y2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lvbgotLy8gcGhhc2UgaW4gdGhlIERGRyBvbmx5
IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVpbmcgc3RvcmVkIHRvIGhhcyBiZWVuIGJhcnJp
ZXJlZC4gSXQgCi0vLyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdG8gdHJ5IHRvIG1v
ZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMgd2VsbC4KLXZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHZt
LT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKKyAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXJTbG93
UGF0aChjZWxsKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw4ICs0MTIs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwog
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJy
aWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRl
KiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVy
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRXhj
ZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjczLDggKzY3Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwogICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRC
eUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjg3LDYgKzY4NSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAg
IG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjY2LDggKzY2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0
cnVjdGlvbioKICAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKICAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRC
eUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VW
UmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgLy8gSW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNl
dCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1l
bnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3
ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQg
YXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCkBAIC02ODQsNiArNjgy
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hv
dWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkBAIC0x
MTgwLDggKzExODAsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25l
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDApOworICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBAIC0xMjE4LDggKzEyMTgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAgICAg
b3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0g
anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDEpOworICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJl
Z1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsxMjQ2LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKQogewotICAgIGlmICghb3duZXItPmNlbGxDb250YWluZXIoKS5pc01hcmtlZChv
d25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyKTsKLSAgICAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihvd25lciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCkBAIC0xMzkw
LDggKzEzODcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAobmVl
ZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50
byA9PSBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyKTsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHMubGFzdCgpLnRvID09IG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
Lmxhc3QoKS5mcm9tLCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtODkxLDYgKzg5MSw3IEBAIG1h
Y3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKIGVuZAogCiBtYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKKyAgICBtZW1mZW5jZQogICAg
IGJiYSBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBCbGFja1RocmVzaG9sZCwgLmRvbmUKICAg
ICBzbG93UGF0aCgpCiAuZG9uZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZs
aW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTUyNyw3ICsxNTI3LDggQEAgY2xhc3Mg
SW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVhcCIKICAgICAgICAgICAgICRhc20ucHV0cyAi
bGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJPcGVyYW5kcyhvcGVyYW5kc1swXS54ODZBZGRy
ZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0ueDg2T3BlcmFuZCg6cHRyKSl9IgogICAgICAg
ICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAgICRhc20ucHV0cyAibWZlbmNlIgorICAgICAg
ICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWwsICJzcCIpCisgICAgICAgICAgICAkYXNtLnB1
dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3BlcmFuZCg6cHRyKX0pIgogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRvcjsKK2NsYXNzIERlZmVy
cmFsQ29udGV4dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBK
U0FycmF5QnVmZmVyVmlldzsKQEAgLTUzLDYgKzU0LDkgQEAgY2xhc3MgU3RydWN0dXJlOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIAordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBEZWZlcnJhbENvbnRleHQmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxD
b250ZXh0Jiwgc2l6ZV90KTsKKwogI2RlZmluZSBERUNMQVJFX0VYUE9SVF9JTkZPICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHByb3RlY3RlZDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCA6OkpTQzo6Q2xhc3NJbmZvIHNfaW5m
bzsgICAgICAgICAgICAgXApAQCAtNzAsNiArNzQsOCBAQCBjbGFzcyBKU0NlbGwgOiBwdWJsaWMg
SGVhcENlbGwgewogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBzaXplX3QpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYs
IERlZmVycmFsQ29udGV4dCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lk
KiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCYsIHNpemVfdCk7CiAKIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDIxIEBAIHZvaWQqIGFsbG9jYXRlQ2Vs
bChIZWFwJiBoZWFwKQogICAgIHJldHVybiBhbGxvY2F0ZUNlbGw8VD4oaGVhcCwgc2l6ZW9mKFQp
KTsKIH0KICAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkKiBhbGxvY2F0ZUNlbGwoSGVh
cCYgaGVhcCwgRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQor
eworICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7CisgICAgSlNDZWxsKiByZXN1bHQgPSBz
dGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwLmFsbG9jYXRlT2JqZWN0T2ZUeXBlPFQ+KGRlZmVycmFs
Q29udGV4dCwgc2l6ZSkpOworICAgIHJlc3VsdC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIGFsbG9jYXRl
Q2VsbChIZWFwJiBoZWFwLCBEZWZlcnJhbENvbnRleHQmIGRlZmVycmFsQ29udGV4dCkKK3sKKyAg
ICByZXR1cm4gYWxsb2NhdGVDZWxsPFQ+KGhlYXAsIGRlZmVycmFsQ29udGV4dCwgc2l6ZW9mKFQp
KTsKK30KKyAgICAKIGlubGluZSBib29sIEpTQ2VsbDo6aXNPYmplY3QoKSBjb25zdAogewogICAg
IHJldHVybiBUeXBlSW5mbzo6aXNPYmplY3QobV90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcg
KzQxOCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6IENsaWVudHMgb2YgdGhpcyBtZXRob2Qg
bWF5IGNhbGwgaXQgbW9yZSB0aGFuIG9uY2UgZm9yIGFueSBpbmRleCwgYW5kIHRoaXMgaXMgc3Vw
cG9zZWQKICAgICAvLyB0byB3b3JrLgotICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgewpAQCAtNDY4LDYgKzQ2OCw1NCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIodW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2KQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZUluZGV4V2l0aG91dEJh
cnJpZXIoaSwgdiwgaW5kZXhpbmdUeXBlKCkpOworICAgIH0KKworICAgIC8vIFRoaXMgdmVyc2lv
biBvZiBpbml0aWFsaXplSW5kZXggaXMgZm9yIGNhc2VzIHdoZXJlIHlvdSBrbm93IHRoYXQgeW91
IHdpbGwgbm90IG5lZWQgYW55CisgICAgLy8gYmFycmllcnMuIFRoaXMgaW1wbGllcyBub3QgaGF2
aW5nIGFueSBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIodW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKQorICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsK
KyAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodi5pc0ludDMyKCkpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHYuaXNOdW1iZXIoKSk7CisgICAgICAgICAgICBk
b3VibGUgdmFsdWUgPSB2LmFzTnVtYmVyKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
YWx1ZSA9PSB2YWx1ZSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IHZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCiAgICAgYm9vbCBoYXNTcGFy
c2VNYXAoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNjQy
LDYgKzY5MCw3IEBAIHB1YmxpYzoKICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0
eSBvZmZzZXRzLgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
Y29uc3QgeyByZXR1cm4gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+Z2V0KCk7IH0KICAgICB2
b2lkIHB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1
ZSkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQor
ICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dEJhcnJpZXIoUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBK
U1ZhbHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodmFsdWUpOyB9CiAgICAgdm9pZCBwdXREaXJlY3RVbmRlZmluZWQoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldFVuZGVmaW5lZCgp
OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdE5hdGl2ZUludHJpbnNp
Y0dldHRlcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSWRlbnRpZmllciwgTmF0aXZlRnVuY3Rpb24s
IEludHJpbnNpYywgdW5zaWduZWQgYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICsz
NzMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIAorICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVk
KFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIEpTU3RyaW5nKiBiYXNl
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEpTUm9w
ZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3Ry
aW5nPih2bS5oZWFwLCBkZWZlcnJhbENvbnRleHQpKSBKU1JvcGVTdHJpbmcodm0pOworICAgICAg
ICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgYmFzZSwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOworICAgIH0KKwogICAg
IHZvaWQgdmlzaXRGaWJlcnMoU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGaWJlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSb3BlU3RyaW5nLCB1
KTsgfQpAQCAtNTk0LDYgKzYwMSwxOCBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZChWCiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNv
bHZlZCh2bSwgcywgb2Zmc2V0LCBsZW5ndGgpOwogfQogCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIERlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0
LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
QVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkpKTsKKyAg
ICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwor
ICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMtPmxl
bmd0aCgpKSk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gcy0+bGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybiBzOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1
YnN0cmluZ09mUmVzb2x2ZWQodm0sIGRlZmVycmFsQ29udGV4dCwgcywgb2Zmc2V0LCBsZW5ndGgp
OworfQorCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHJldHVy
biBqc1N1YnN0cmluZyhleGVjLT52bSgpLCBleGVjLCBzLCBvZmZzZXQsIGxlbmd0aCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Miw2ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsK
ICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwg
Tm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDMwICs3MSwyNSBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4
cE1hdGNoCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTE0NAogICAgIAogICAgIGF1dG8gc2V0UHJvcGVydGllcyA9IFsmXSAoKSB7Ci0gICAgICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQs
IGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBS
ZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0LCBpbnB1dCk7CisgICAgICAgIGFy
cmF5LT5wdXREaXJlY3RXaXRob3V0QmFycmllcihSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3Bl
cnR5T2Zmc2V0LCBqc051bWJlcihyZXN1bHQuc3RhcnQpKTsKKyAgICAgICAgYXJyYXktPnB1dERp
cmVjdFdpdGhvdXRCYXJyaWVyKFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQs
IGlucHV0KTsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVn
RXhwLT5udW1TdWJwYXR0ZXJucygpOwogICAgIAorICAgIERlZmVycmFsQ29udGV4dCBkZWZlcnJh
bENvbnRleHQodm0uaGVhcCk7CisgICAgCiAgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+
aXNIYXZpbmdBQmFkVGltZSgpKSkgewogICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0
dXJlKCksIG51bVN1YnBhdHRlcm5zICsgMSk7CiAgICAgICAgIAogICAgICAgICBzZXRQcm9wZXJ0
aWVzKCk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBq
c1VuZGVmaW5lZCgpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5k
ZXgodm0sIGksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IHRoZSBv
YmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdDLgotICAgICAgICAKLSAgICAgICAgYXJyYXktPmlu
aXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVz
dWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7CisgICAgICAgIGFycmF5LT5p
bml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVk
KHZtLCBkZWZlcnJhbENvbnRleHQsIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSBy
ZXN1bHQuc3RhcnQpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PD0gbnVtU3VicGF0dGVybnM7ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0
dGVyblJlc3VsdHNbMiAqIGldOwogICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAg
ICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVh
dGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRz
WzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcih2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdP
ZlJlc29sdmVkKHZtLCBkZWZlcnJhbENvbnRleHQsIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJl
c3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAg
ICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0s
IGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRl
cm5zICsgMSk7CkBAIC0xMDIsMTkgKzk3LDE0IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogY3Jl
YXRlUmVnRXhwTWF0Y2gKICAgICAgICAgCiAgICAgICAgIHNldFByb3BlcnRpZXMoKTsKICAgICAg
ICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCks
IEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRp
YWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0g
ICAgICAgIAogICAgICAgICAvLyBOb3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0Mu
CiAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJl
c29sdmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0
KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhX
aXRob3V0QmFycmllcih2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBkZWZlcnJhbENv
bnRleHQsIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0ID0g
c3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwogICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0g
ICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3BlU3RyaW5n
OjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5S
ZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAg
ICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih2bSwgaSwgSlNS
b3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBkZWZlcnJhbENvbnRleHQs
IGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJy
YXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJlIGRvd24gd2l0aCBUU08KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjMxNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQgY2xl
YXJSYW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFycyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMgdHVy
bmVkIG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAgICAgIGEgREZHIG9wdGltaXphdGlvbiBwYXNz
LgorCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpGYXN0
Qml0VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgor
CiAyMDE2LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
TmVlZCBhIHN0b3JlLWxvYWQgZmVuY2UgYmV0d2VlbiBzZXR0aW5nIGNlbGwgc3RhdGUgYW5kIHZp
c2l0aW5nIHRoZSBvYmplY3QgaW4gU2xvdFZpc2l0b3IKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zh
c3RCaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0
b3IuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMsMjQgQEAgdm9pZCBGYXN0Qml0VmVjdG9y
V29yZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1fd29yZHMgPSBuZXdBcnJheTsKIH0KIAordm9p
ZCBGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sK
KyAgICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gYmVn
aW47IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGVuZEJlZ2luU2xvcCA9IChiZWdpbiArIDMx
KSAmIH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRTbG9wID0gZW5kICYgfjMxOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZEJlZ2luU2xvcDsgKytpKQorICAgICAgICBh
dChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbkVuZFNsb3A7IGkgPCBlbmQ7
ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gZW5kQmVn
aW5TbG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3AgLyAzMjsgKytpKQorICAgICAgICBtX3dvcmRz
LndvcmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRleDogU291cmNlL1dU
Ri93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiArNDY4LDggQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
UmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289846</attachid>
            <date>2016-09-26 12:37:55 -0700</date>
            <delta_ts>2016-09-26 12:49:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>125873</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYyMjEpOiBbVVNFUl0gY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29y
ZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQAog
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjkx
RDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyB9OworCQkwRjdGOTg4
QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgz
MjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTMsNiAr
NjE1LDggQEAKIAkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OwogCQkwRkI0MTU4NDFENzhGQjRD
MDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlD
b252ZW50aW9ucy5jcHAgKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1
Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJ
CTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIERlZmVycmFsQ29udGV4dElubGluZXMu
aCAqLzsgfTsKIAkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3
MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKIAkJMEZCNEZC
NzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8q
IEZUTExhenlTbG93UGF0aC5oICovOyB9OwogCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCAqLzsgfTsKQEAgLTI3NDMsNiArMjc0Nyw4IEBACiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4
MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBN
YXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODg5
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYx
MkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1Miw2ICsyODU4LDggQEAKIAkJMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBB
cnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0
MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWxDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlm
aWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAw
M0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBw
YXRoID0gZGZnL0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgzLDYgKzUyOTEsOCBAQAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2
YXRpdmVSb290cy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAor
CQkJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLywKKwkJ
CQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICov
LAogCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICov
LAogCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLywK
IAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgKi8sCkBAIC02NTU1LDYgKzY1NjUsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBG
NEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NjAsNyBAQAogCQkJCTBGNjE4
MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYg
LyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
NzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgzMjgsNiArODM0MSw3IEBACiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFC
Nzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzcwLDYgKzgz
ODQsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIERlZmVycmFs
Q29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MkQ4NUI3MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTA5OCw2ICs5MTEzLDcgQEAKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4
MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDYgKzM3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGltbSkubGlua1RvKHRhcmdl
dCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBsZWZ0KTsKKyAgICB9CisK
ICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBv
cDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gz
Mihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMy
OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyOCw2ICs4
MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBK
dW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0
ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVk
IHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
c3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2Nh
dGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGpp
dC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQz
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZm
ZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2Yg
LXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIu
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsK
LSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUg
c3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAg
ICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4g
aWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8o
R2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwK
LSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0
YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAg
bWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZs
eSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToK
ICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxs
X2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICBy
ZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0
YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0
Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUo
R3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBv
YnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVh
cHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwg
YnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5C
b3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAg
ICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJl
Z0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3Jh
cGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
Y2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9w
KCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmll
cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0
aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9n
VGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAq
L1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
Rm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5V2l0CiAKICAgICBKU0FycmF5KiByZXN1bHQ7CiAgICAgaWYgKGJ1dHRlcmZseSkKLSAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgYXJyYXlTdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIG51bGxwdHIsIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0
aW9uKGRmZyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZn
KTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92
YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBw
ZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAg
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5
V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGlu
ZyB0aGlzIG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJy
aWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBm
b3JjZXMgdGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJl
IHRoZXkgd2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXpl
IGVmZmVjdHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3Jk
ZXJlZCBwcmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAg
ICAgIC8vIGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCBy
aWdodCBub3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjgsMTggKzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVC
YXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFp
c0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCB2YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwg
dmFsdWUudGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigp
KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKQEAgLTUwMDcsNyArNDk5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NDc0LDIwICs1NDYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAg
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7
Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikK
IHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2Um
IHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hh
YmxlKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAg
ICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
CisgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMDIsNDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2Rl
KiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2Vk
U3RvcmVCYXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVz
dWx0KG5vZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9y
eUZlbmNlKCk7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAg
ICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJh
cnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5j
YXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gy
KTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BS
KTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAg
IG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJp
ZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsK
LQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKLQogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0
aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03Mzgs
OCArNzMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ug
b3BlcmFuZCk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5k
ZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOwor
ICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAg
ICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVh
clJhbmdlKDAsIGJsb2NrU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0
aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hp
bGRBbmRPcmlnaW4geworICAgICAgICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4pCisgICAgICAgICAgICA6IGNoaWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09y
aWdpbihzZW1hbnRpY09yaWdpbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjaGlsZCB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbjsKKyAgICB9OworICAgIAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAg
Ly8gYmFja3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1
cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlm
IGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5v
ZGUuCisgICAgICAgIGJvb2wgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCBzbyBleGl0cyByZXF1aXJlIGNv
bnNlcnZhdGlzbS4gSWYgd2UgZXhpdCwgdGhlbiB0aGVyZQorICAgICAgICAgICAgLy8gcHJvYmFi
bHkgd2lsbCBiZSBhIEdDIGluIHRoZSBmdXR1cmUhIElmIHdlIG5lZWRlZCB0byB0aGVuIHdlIGNv
dWxkIGxpZnQgdGhhdAorICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgYnkgZWl0aGVyICgxKSBo
YXZpbmcgYSBTdG9yZUJhcnJpZXJIaW50IHRoYXQgdGVsbHMgT1NSIGV4aXQgdG8gT1NSIHRoYXQK
KyAgICAgICAgICAgIC8vIHZhbHVlIG9yICgyKSBhdXRvbWF0aWNhbGx5IGJhcnJpZXJpbmcgYW55
IERGRy1saXZlIE5vZGUgb24gT1NSIGV4aXQuIEVpdGhlciB3YXksIGl0CisgICAgICAgICAgICAv
LyB3b3VsZCBiZSB3ZWlyZCBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyByb290IGZvciBP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLiBJCisgICAgICAgICAgICAvLyBkb24ndCBoYXZlIGV2
aWRlbmNlIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICBpZiAoZG9lc0dD
KG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQp
IHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJy
aWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEg
YmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5j
ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBw
ZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGlj
KSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAg
ICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFu
ZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxk
IDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0g
c3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBt
X25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRB
bmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0
ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBp
dGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50
QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1h
bnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVy
cy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENo
aWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBo
KQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhh
dCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3Ro
ZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dy
YW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFr
ZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIg
d2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBh
bHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVy
IG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2Jq
ZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8g
b25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAi
ZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHBy
b3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxs
KCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0
b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAs
IEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVy
cyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28g
ZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJl
IGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8K
Ky8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2Vl
biBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJh
cnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdo
ZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNp
bmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVz
ZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUg
YmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDog
UHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6
KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9l
cyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZl
bmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2ls
bCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZz
ZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVy
KEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChA
cSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBi
b3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1
cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWlu
ZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgor
Ly8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZp
cnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cg
cGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93
IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmll
cnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1i
ZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1
dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJy
aWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBv
Y2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAs
MTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwot
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0
QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkK
ICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2Jq
ZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAg
IC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9m
IHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBh
Y2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9u
ZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAg
ICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9j
aChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hv
dWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAt
NDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1
cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNv
b2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAg
ICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBu
b3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJl
IGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEg
YmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJh
cnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9p
c3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5v
dy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7
Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhZnRlciB0
aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25vdworICAg
ICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNlLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBo
LCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
OworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3Jl
QmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsK
ICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLnRha2VW
YWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5z
ZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1
bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1i
YXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlz
IHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNp
bXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24g
bmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2Ug
YXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlz
aXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBzaW1w
bGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJy
aWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIgcHJv
cGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NB
LiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5l
c3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJh
cnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1aXJl
cyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVu
ZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEy
ICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlB
ZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAg
ICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3Qg
QWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwog
ICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRk
cmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9w
ZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYs
NiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAg
ICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1
ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFk
KGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZv
ckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0
SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBw
ZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJl
cG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAg
cm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFs
dWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUt
PmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRz
ID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1f
aGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVu
Y2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVu
dHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBG
b3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3Jp
dGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQ
YXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9p
ZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAg
ICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAK
QEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1f
aGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAg
ICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNl
IENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5j
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpA
QCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291bnRFeGVj
dXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIp
OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC04
MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0
dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW1pdFN0
b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1biBhZnRl
ciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91
bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55
IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRW
YWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMu
Li4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9y
LCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAgICBQYXRj
aHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBW
ZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0MjksMjYg
KzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQz
MihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZh
bHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIo
YmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihi
bGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShi
YXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8g
V2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBj
YXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMg
ZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBv
dXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXpp
bmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VO
b3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChq
aXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgt
PnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BS
KTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0
ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUo
Jm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3Jl
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50
ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQorewor
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVl
KCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUs
IFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1UeXBlZFBv
aW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVyIE91dHB1
dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlwZWRQb2lu
dGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBERkcKIAog
bmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZhbHVlOwog
fSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExW
YWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBU
eXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAgTFZhbHVl
IGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMy
KFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9m
ZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3Mp
OworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKIAogICAg
IExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBm
aWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CiAg
ICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAm
IGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7
CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAvLyB4IDw9
IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
dGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0
YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGluZSBib29s
IGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJuIGlzV2l0
aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxpbmUgQ2Vs
bFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworCitjbGFzcyBEZWZlcnJhbENvbnRleHQgeworICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitwdWJsaWM6
CisgICAgaW5saW5lIERlZmVycmFsQ29udGV4dChIZWFwJik7CisgICAgaW5saW5lIH5EZWZlcnJh
bENvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgYm9vbCBtX3No
b3VsZEdDIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlcnJhbENvbnRleHRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJyYWxDb250ZXh0SW5saW5lcy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29u
dGV4dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVmZXJyYWxDb250ZXh0LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSBEZWZlcnJhbENvbnRleHQ6OkRlZmVycmFsQ29udGV4dChI
ZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCit7Cit9CisKK0FMV0FZU19JTkxJTkUgRGVm
ZXJyYWxDb250ZXh0Ojp+RGVmZXJyYWxDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoIURpc2FsbG93
R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOworI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQorICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsK
KyNlbmRpZgorICAgIGlmIChVTkxJS0VMWShtX3Nob3VsZEdDKSkKKyAgICAgICAgbV9oZWFwLmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0
OSw0ICsxNTQ5LDE3IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MK
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6
OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoYmFycmllclNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgdGhlIHNuZWFreUJsYWNrVGhyZXNob2xkIGlzIHRhdXRvbG9naWNhbCBpbXBvc3NpYmxlIHRo
cmVzaG9sZCwgc28gZnJvbQorICAgICAgICAvLyBjb3VsZCBzdGlsbCBiZSBub3QgYmxhY2suIEJ1
dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisgICAg
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20tPmNl
bGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYWRkVG9S
ZW1lbWJlcmVkU2V0KGZyb20pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIEFsbG9jYXRpb25TY29wZTsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIERlZmVycmFsQ29udGV4dDsKIGNsYXNzIEVkZW5HQ0Fj
dGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bGxHQ0FjdGl2
aXR5Q2FsbGJhY2s7CkBAIC0xMDQsOSArMTA1LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0
aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKIAotICAgIHZvaWQgd3JpdGVCYXJyaWVy
KGNvbnN0IEpTQ2VsbCopOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpT
VmFsdWUpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwor
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgdm9pZCB3cml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAgICB2b2lkIHdyaXRl
QmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pOworICAgIAorICAgIHZvaWQg
d3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgCisgICAg
Ly8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBzbmVha3lC
bGFja1RocmVzaG9sZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNs
b3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSk7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdy
aXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAg
dm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTE0OSw2ICsxNTUsNyBA
QCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRh
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JG
b3IoYnl0ZXMpOyB9CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShE
ZWZlcnJhbENvbnRleHQqLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9p
ZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9s
ZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgdm9pZCBhc2NyaWJl
T3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CiAKQEAgLTE2Niw3ICsxNzMsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxl
Y3Rpb24pOwotICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5z
IHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCisgICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRl
ZmVyKERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRp
ZCBjb2xsZWN0LgogICAgIHZvaWQgY29sbGVjdEFjY29yZGluZ1RvRGVmZXJHQ1Byb2JhYmlsaXR5
KCk7CiAKICAgICB2b2lkIGNvbXBsZXRlQWxsSklUUGxhbnMoKTsKQEAgLTI1NCw2ICsyNjEsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7
CiAgICAgdm9pZCBkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKKyAgICAKKyAgICBib29s
IGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJl
RmVuY2VkOyB9CisgICAgY29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2Vk
KCkgY29uc3QgeyByZXR1cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgCisgICAg
dW5zaWduZWQgc25lYWt5QmxhY2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX3NuZWFreUJs
YWNrVGhyZXNob2xkOyB9CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NPZlNuZWFreUJsYWNr
VGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gJm1fc25lYWt5QmxhY2tUaHJlc2hvbGQ7IH0KIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGlvblNjb3BlOwpAQCAtMjc4LDEyICsy
OTEsMTcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBzaXplX3Qp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVh
cCYsIERlZmVycmFsQ29udGV4dCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2
b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAKICAg
ICB2b2lkIGNvbGxlY3RXaXRob3V0QW55U3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlw
ZSA9IEFueUNvbGxlY3Rpb24pOwogCiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3Rvcihz
aXplX3QpOyAvLyBGb3IgdXNlIHdpdGggb2JqZWN0cyB3aXRoIGRlc3RydWN0b3JzLgogICAgIHZv
aWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9i
amVjdHMgd2l0aG91dCBkZXN0cnVjdG9ycy4KKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVj
dG9yKERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0
RGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90KTsgLy8gQ2hv
b3NlcyBvbmUgb2YgdGhlIG1ldGhvZHMgYWJvdmUgYmFzZWQgb24gdHlwZS4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQqIGFsbG9jYXRlT2JqZWN0T2ZUeXBlKERlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhTWVt
b3J5ID0gMjU2OwogICAgIApAQCAtNDExLDYgKzQyOSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmll
ckJ1ZmZlcjsKKyAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9y
Y2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1bnNpZ25lZCBtX3NuZWFreUJsYWNrVGhyZXNob2xk
IHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQg
OiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CiAgICAgZG91YmxlIG1fbGFzdEZ1
bGxHQ0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBIZWFwSW5s
aW5lc19oCiAjZGVmaW5lIEhlYXBJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkRlZmVycmFsQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKICNp
bmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtMTI1LDE5ICsxMjYsMzEgQEAgaW5saW5lIHZv
aWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIo
KTsKICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkp
CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8fCB0by0+Y2Vs
bFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICBpZiAoIWlzV2l0aGluVGhyZXNo
b2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoTElLRUxZKCF0
byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICB3cml0ZUJhcnJpZXJTbG93UGF0aChmcm9tKTsKIH0KIAogaW5saW5lIHZvaWQg
SGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICgh
ZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgaWYgKCFmcm9tKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNl
bGxTdGF0ZSgpLCBzbmVha3lCbGFja1RocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmll
clNsb3dQYXRoKGZyb20pOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJXaXRo
b3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9P
S1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChVTkxJ
S0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQp
KSkKKyAgICAgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBI
ZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKQEAgLTIxNCw2ICsy
MjcsMTggQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydQogICAgIHJl
dHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQog
CitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVChpc1ZhbGlk
QWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5
dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rv
cihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NU
eXBlPgogaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRl
cykKIHsKQEAgLTIyNiw2ICsyNTEsMTYgQEAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlT2Jq
ZWN0T2ZUeXBlKAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CitpbmxpbmUgdm9p
ZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVz
dHJ1Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9y
dGFsKSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmpl
Y3Q+Ojp2YWx1ZSkpOworCisgICAgaWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbikKKyAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlV2l0aERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0LCBieXRl
cyk7CisgICAgcmV0dXJuIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0
LCBieXRlcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KIGlubGluZSBNYXJr
ZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCkKIHsKICAg
ICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KQEAg
LTI3NCw2ICszMDksMTcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5
KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0
ZUF1eGlsaWFyeShEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RT
cGFjZS50cnlBbGxvY2F0ZUF1eGlsaWFyeShkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRP
d25lciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJl
YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBz
aXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgdm9pZCogbmV3QmFzZSA9IHRy
eUFsbG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIG5ld1NpemUpOwpAQCAtMzEzLDEyICsz
NTksMTUgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aAogICAgIG1f
ZGVmZXJyYWxEZXB0aC0tOwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKCkKK2lubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIo
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7CiAgICAgaWYgKCFzaG91bGRDb2xs
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbGxlY3QoKTsKKyAgICBpZiAo
ZGVmZXJyYWxDb250ZXh0KQorICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0
cnVlOworICAgIGVsc2UKKyAgICAgICAgY29sbGVjdCgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw0NSArMTc1LDQ5IEBAIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9u
c0lmTmVlZGVkKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7CiAg
ICAgaWYgKCFPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CiAgICAgaWYg
KCFhbGxvY2F0aW9uQ291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkK
LSAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICAgICAgaWYgKCFt
X2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkK
KyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2Uo
KTsKKyAgICAgICAgfQogICAgICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPT0gTm9PcGVyYXRpb24pOwogICAgIH0KICAgICBpZiAoKythbGxvY2F0aW9uQ291bnQgPj0g
T3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCiAgICAgICAgIGFsbG9jYXRpb25D
b3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgp
Cit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQpCiB7CiAgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7
CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZSgpCit2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2UoRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCiB7CiAgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOwotICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChjcmFzaE9uRmFpbHVyZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwog
fQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJvb2wgY3Jh
c2hPbkZhaWx1cmUpCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBs
KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBib29sIGNyYXNoT25GYWlsdXJlKQog
ewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBB
U1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAg
ICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CisgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5l
ZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNTRVJUKCFtX21hcmtlZFNwYWNlLT5pc0l0
ZXJhdGluZygpKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxT
aXplKTsKICAgICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKLSAgICBtX2hlYXAt
PmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBBbGxvY2F0aW9uU2NvcGUg
YWxsb2NhdGlvblNjb3BlKCptX2hlYXApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlZmVycmFsQ29udGV4dDsK
IGNsYXNzIEhlYXA7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKQEAgLTE1Miw4ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVz
dHJ1Y3Rpb247IH0KICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxs
S2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQq
IGFsbG9jYXRlKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoKTsKKyAgICB2b2lkKiBhbGxvY2F0
ZShEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoRGVm
ZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hl
YXA7IH0KICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0YWtlTGFzdEFjdGl2ZUJsb2NrKCkKICAg
ICB7CkBAIC0yMTYsMTUgKzIxNywxNSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgc2hvdWxk
U3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSBjb25zdDsKICAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZSgpOwotICAgIHZvaWQqIGFsbG9jYXRl
U2xvd0Nhc2VJbXBsKGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoRGVmZXJyYWxDb250ZXh0Kik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQqKTsKKyAg
ICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChEZWZlcnJhbENvbnRleHQqLCBib29sIGNyYXNo
T25GYWlsdXJlKTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIHZvaWQqIHRy
eUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0
cnlBbGxvY2F0ZUJsb2NrKCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6
SGFuZGxlKik7CiAgICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChEZWZlcnJhbENvbnRl
eHQqKTsKICAgICAKICAgICB2b2lkIHNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0Jik7CiAgICAg
CkBAIC0yNjUsNyArMjY2LDcgQEAgaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQWxsb2NhdG9yLCBtX2NlbGxT
aXplKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICB1bnNpZ25lZCByZW1haW5p
bmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKICAgICBpZiAocmVtYWluaW5nKSB7CkBAIC0yNzcs
MTMgKzI3OCwxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5CiAg
ICAgCiAgICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElL
RUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAg
ICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwogICAgIHJldHVybiBoZWFkOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoKQorQUxXQVlTX0lO
TElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKERlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0KQogewogICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVt
YWluaW5nOwogICAgIGlmIChyZW1haW5pbmcpIHsKQEAgLTI5NSw3ICsyOTYsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsCiAgICAgCiAgICAgRnJlZUNlbGwqIGhl
YWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAg
cmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nh
c2UoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5u
ZXh0OwogICAgIHJldHVybiBoZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMzIgKzIzNSw1
OCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAKIHZvaWQqIE1h
cmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNpemVfdCBieXRlcykKIHsK
KyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgYnl0ZXMsICIg
Ynl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOwogICAgIGlmIChNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7CiAg
ICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGJ5
dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwgbnVsbHB0ciwgYnl0ZXMp
OworfQorCit2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoU3Vic3BhY2UmIHN1YnNwYWNlLCBE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlm
IChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBieXRlcywgIiBkZWZlcnJl
ZCBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CisgICAgaWYgKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsK
KyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRl
eHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gYWxsb2NhdGVM
YXJnZShzdWJzcGFjZSwgZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7CiB9CiAKIHZvaWQqIE1hcmtl
ZFNwYWNlOjp0cnlBbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNpemVfdCBieXRlcykKIHsK
KyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlRyeS1hbGxvY2F0aW5nICIsIGJ5dGVz
LCAiIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMsICIuXG4iKTsKICAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkg
ewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1
YnNwYWNlLCBieXRlcyk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIG51
bGxwdHIsIGJ5dGVzKTsKK30KKwordm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNw
YWNlJiBzdWJzcGFjZSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBi
eXRlcykKK3sKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlRyeS1hbGxvY2F0aW5n
ICIsIGJ5dGVzLCAiIGRlZmVycmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMsICIu
XG4iKTsKKyAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Io
c3Vic3BhY2UsIGJ5dGVzKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPnRy
eUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQs
IGJ5dGVzKTsKIH0KIAotdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFyZ2UoU3Vic3BhY2Um
IHN1YnNwYWNlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUxhcmdl
KFN1YnNwYWNlJiBzdWJzcGFjZSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBzaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3Bh
Y2UsIHNpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2Us
IGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVMYXJn
ZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNpemVfdCBzaXplKQordm9pZCogTWFya2VkU3BhY2U6OnRy
eUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKCk7CisgICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVy
cmFsQ29udGV4dCk7CiAgICAgCiAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxz
aXplU3RlcD4oc2l6ZSk7CiAgICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VB
bGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1faGVhcCwgc2l6ZSwgc3Vic3BhY2UuYXR0cmlidXRlcyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMiwxMiArMTEyLDE3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGF1eGlsaWFyeUFsbG9jYXRvckZvcihzaXplX3QpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGUoU3Vic3BhY2UmLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlKFN1YnNwYWNlJiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJzcGFjZSYsIHNp
emVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoU3Vic3BhY2Um
LCBEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlV2l0
aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRl
eHQqLCBzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShzaXplX3Qp
OwogICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGVBdXhpbGlhcnkoRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKICAgICAKICAgICBT
dWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVybiBtX2Rl
c3RydWN0b3JTcGFjZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRob3V0
RGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE5NSw4ICsyMDAsOCBA
QCBwcml2YXRlOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5
PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIHNpemVf
dCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFj
ZSYsIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIERlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYs
IERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
U2l6ZUNsYXNzRm9yU3RlcFNpemUoKTsKICAgICAKQEAgLTI2NCw2ICsyNjksMTYgQEAgaW5saW5l
IHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZQogICAgIHJldHVybiBhbGxvY2F0ZSht
X2Rlc3RydWN0b3JTcGFjZSwgYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6
OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYWxsb2NhdGUobV9ub3JtYWxTcGFjZSwg
ZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
c2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0ZShtX2Rlc3RydWN0b3JTcGFjZSwg
ZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
YWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQogewogICAgIHJldHVybiBhbGxvY2F0ZSht
X2F1eGlsaWFyeVNwYWNlLCBieXRlcyk7CkBAIC0yNzQsNiArMjg5LDExIEBAIGlubGluZSB2b2lk
KiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXgKICAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9h
dXhpbGlhcnlTcGFjZSwgYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OnRy
eUFsbG9jYXRlQXV4aWxpYXJ5KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXpl
X3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlKG1fYXV4aWxpYXJ5U3BhY2UsIGRl
ZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogewogICAgIGZvckVhY2hBbGxvY2F0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDYsMTcgKzEzMDYsNTYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZW1pdFN0b3JlU3Ry
dWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAotICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4oR1BSUmVnIGNlbGwpCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRl
bldpdGhvdXRGZW5jZShHUFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2g4
KEFib3ZlLCBBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuV2l0aG91dEZlbmNlKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHVpbnQ4X3Qq
IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2Vs
bFN0YXRlT2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBicmFuY2g4KEFib3ZlLCBBYnNvbHV0ZUFk
ZHJlc3MoYWRkcmVzcyksIFRydXN0ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KICAg
ICAKKyAgICBKdW1wIHNuZWFreUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxs
LCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICB7CisgICAgICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwg
SlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKCkpKTsKKyAgICB9CisKKyAgICBKdW1wIHNuZWFr
eUp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCwgR1BSUmVnIHNjcmF0Y2hH
UFIpCisgICAgeworICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOworICAgICAgICBsb2Fk
OChhZGRyZXNzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBz
Y3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFj
a1RocmVzaG9sZCgpKSk7CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4oR1BSUmVnIGNlbGwpCisgICAgeworICAgICAgICBzdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZSgpOworICAgICAgICByZXR1cm4ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRo
b3V0RmVuY2UoY2VsbCk7CisgICAgfQorCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPcklu
RWRlbihKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBzdG9yZUJhcnJpZXJTdG9yZUxvYWRG
ZW5jZSgpOworICAgICAgICByZXR1cm4ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0
RmVuY2UoY2VsbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVCYXJyaWVyU3RvcmVMb2Fk
RmVuY2UoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmll
cnMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZlN0b3Jl
QmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJh
cnJpZXJTaG91bGRCZUZlbmNlZCgpKSk7CisgICAgfQorICAgIAogICAgIC8vIEVtaXRzIHRoZSBi
cmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vz
bid0IGZhbGwgdGhyb3VnaC4gVGhlCiAgICAgLy8gZnVuY3RvciBpcyBjYWxsZWQgYXQgdGhvc2Ug
cG9pbnRzIHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5cGUuIE9uZSB3YXkgdG8gdXNlIHRo
aXMgaXMgdG8KICAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVtaXQgdGhlIGNvZGUgdG8gcHV0IHRo
ZSB0eXBlIHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGFuZCB0aGVuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNzcsMTQgKzIxNzcsMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9TUldyaXRlQmFycgogICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsK
IH0KIAotLy8gTkI6IFdlIGRvbid0IGluY2x1ZGUgdGhlIHZhbHVlIGFzIHBhcnQgb2YgdGhlIGJh
cnJpZXIgYmVjYXVzZSB0aGUgd3JpdGUgYmFycmllciBlbGlzaW9uCi0vLyBwaGFzZSBpbiB0aGUg
REZHIG9ubHkgdHJhY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBiZWluZyBzdG9yZWQgdG8gaGFzIGJl
ZW4gYmFycmllcmVkLiBJdCAKLS8vIHdvdWxkIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0byB0
cnkgdG8gbW9kZWwgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBhcyB3ZWxsLgotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOworICAgIHZtLT5oZWFwLndyaXRlQmFy
cmllclNsb3dQYXRoKGNlbGwpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0
aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEy
LDggKzQxMiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5U
RVJOQUw7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1
ZmZlcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25X
cml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0
ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25FeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAy
MDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzMsOCArNjczLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4
XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKICAgICAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIGVtaXRMb2FkMihi
YXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02ODcsNiArNjg1LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2Up
OworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NjYsOCArNjY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4
XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICAvLyBJbiBv
cmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmpl
Y3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRo
ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2lu
JywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAm
IG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KQEAgLTY4
NCw2ICs2ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVW
UmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9
CiAKQEAgLTExODAsOCArMTE4MCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2ln
bmVkIG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hUZXN0
NjQoTm9uWmVybywgcmVnVDAsIHRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdU
MCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCByZWdUMCk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKQEAgLTEyMTgsOCArMTIxOCw4IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKICAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQog
ICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdUMSk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4ocmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKQEAgLTEyNDYsMTIgKzEyNDYsOSBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgaWYgKCFvd25lci0+Y2VsbENvbnRhaW5lcigpLmlz
TWFya2VkKG93bmVyKSkgewotICAgICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lcik7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOwotICAgICAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IHNuZWFreUp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKG93bmVyLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVj
ayhCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0
Y2gsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIHNsb3dDYXNlcykK
QEAgLTEzOTAsOCArMTM4Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5
VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAg
IGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbHMu
bGFzdCgpLnRvID09IG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHMubGFzdCgpLmZyb20sIG9wZXJhdGlvblVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIpOworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0g
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHMubGFzdCgpLmZyb20sIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkx
LDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogZW5kCiAKIG1h
Y3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQorICAgIG1lbWZl
bmNlCiAgICAgYmJhIEpTQ2VsbDo6bV9jZWxsU3RhdGVbY2VsbF0sIEJsYWNrVGhyZXNob2xkLCAu
ZG9uZQogICAgIHNsb3dQYXRoKCkKIC5kb25lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI3LDcgKzE1MjcsOCBA
QCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAgICAgICAgJGFz
bS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcmRlck9wZXJhbmRzKG9wZXJhbmRzWzBd
Lng4NkFkZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDpwdHIpKX0i
CiAgICAgICAgIHdoZW4gIm1lbWZlbmNlIgotICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVuY2Ui
CisgICAgICAgICAgICBzcCA9IFJlZ2lzdGVySUQubmV3KG5pbCwgInNwIikKKyAgICAgICAgICAg
ICRhc20ucHV0cyAibG9jazsgb3JsICQwLCAoI3tzcC54ODZPcGVyYW5kKDpwdHIpfSkiCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5E
aWN0aW9uCiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAotSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKQorSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBpZiAoaW5pdGlhbExlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzYs
NyArNzYsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAg
ICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhl
YXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
b3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFy
eShkZWZlcnJhbENvbnRleHQsIG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3Rv
cmFnZSk7CkBAIC0xMDQsNyArMTA0LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZAogICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOworICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRl
eHQsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhX
cml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEz
ICs1NCwxNyBAQCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSlNBcnJheSogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgIHN0
YXRpYyBKU0FycmF5KiBjcmVhdGVXaXRoQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVy
Zmx5Kik7CisgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mLCBEZWZl
cnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIC8vIHRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdo
b3NlIHNpemUgYW5kCiAgICAgLy8gY29udGVudHMgYXJlIGtub3duIGF0IHRpbWUgb2YgY3JlYXRp
b24uIENsaWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoKICAgICAvLyAgIC0gbnVsbC1jaGVj
ayB0aGUgcmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1vcnksIG9yIG90aGVyd2lzZSB1bmFi
bGUgdG8gYWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAgIC0gY2FsbCAnaW5pdGlhbGl6ZUluZGV4
JyBmb3IgYWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZvciAwIDw9IGkgPCBpbml0aWFsTGVu
Z3RoLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mLCBEZWZlcnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KTsKKyAgICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIG51bGxwdHIsIHN0cnVjdHVyZSwg
aW5pdGlhbExlbmd0aCk7CisgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC0y
MzEsMTIgKzIzNSwxMiBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwg
CiAgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVh
cigpOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIG51bGxw
dHIsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAotaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OmNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRl
cmZseShWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwKSkgSlNBcnJheSh2
bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNB
cnJheSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBEZWZlcnJhbENvbnRleHQ7
CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNBcnJheUJ1ZmZl
clZpZXc7CkBAIC01Myw2ICs1NCw5IEBAIGNsYXNzIFN0cnVjdHVyZTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCosIHNp
emVfdCk7CisKICNkZWZpbmUgREVDTEFSRV9FWFBPUlRfSU5GTyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBwcm90ZWN0ZWQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyBzX2luZm87ICAgICAgICAg
ICAgIFwKQEAgLTcwLDYgKzc0LDggQEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxsIHsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
ZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBEZWZlcnJhbENv
bnRleHQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmLCBEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogCiBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwyMSBAQCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVh
cCkKICAgICByZXR1cm4gYWxsb2NhdGVDZWxsPFQ+KGhlYXAsIHNpemVvZihUKSk7CiB9CiAgICAg
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIERl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NF
UlQoc2l6ZSA+PSBzaXplb2YoVCkpOworICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZU9iamVjdE9mVHlwZTxUPihkZWZlcnJhbENvbnRleHQsIHNp
emUpKTsKKyAgICByZXN1bHQtPmNsZWFyU3RydWN0dXJlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYg
aGVhcCwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgcmV0dXJuIGFs
bG9jYXRlQ2VsbDxUPihoZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemVvZihUKSk7Cit9CisgICAg
CiBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzT2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gVHlw
ZUluZm86OmlzT2JqZWN0KG1fdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0MTgsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBOT1RFOiBDbGllbnRzIG9mIHRoaXMgbWV0aG9kIG1heSBjYWxsIGl0
IG1vcmUgdGhhbiBvbmNlIGZvciBhbnkgaW5kZXgsIGFuZCB0aGlzIGlzIHN1cHBvc2VkCiAgICAg
Ly8gdG8gd29yay4KLSAgICB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGks
IEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsK
QEAgLTQ2OCw2ICs0NjgsNTQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgICAgICAK
KyAgICB2b2lkIGluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHVuc2lnbmVkIGksIEpTVmFs
dWUgdikKKyAgICB7CisgICAgICAgIGluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIHYs
IGluZGV4aW5nVHlwZSgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHZlcnNpb24gb2YgaW5pdGlh
bGl6ZUluZGV4IGlzIGZvciBjYXNlcyB3aGVyZSB5b3Uga25vdyB0aGF0IHlvdSB3aWxsIG5vdCBu
ZWVkIGFueQorICAgIC8vIGJhcnJpZXJzLiBUaGlzIGltcGxpZXMgbm90IGhhdmluZyBhbnkgZGF0
YSBmb3JtYXQgY29udmVyc2lvbnMuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJ
bmRleFdpdGhvdXRCYXJyaWVyKHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CisgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgIGNh
c2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBBU1NFUlQo
aSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHYu
aXNJbnQzMigpKTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VS
VChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2LmlzTnVtYmVyKCkpOworICAgICAgICAgICAgZG91YmxlIHZhbHVl
ID0gdi5hc051bWJlcigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUgPT0gdmFs
dWUpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAogICAgIGJvb2wgaGFzU3BhcnNlTWFwKCkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTY0Miw2ICs2OTAsNyBA
QCBwdWJsaWM6CiAgICAgLy8gRmFzdCBhY2Nlc3MgdG8ga25vd24gcHJvcGVydHkgb2Zmc2V0cy4K
ICAgICBKU1ZhbHVlIGdldERpcmVjdChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0
dXJuIGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmdldCgpOyB9CiAgICAgdm9pZCBwdXREaXJl
Y3QoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRp
b25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHB1
dERpcmVjdFdpdGhvdXRCYXJyaWVyKFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1
ZSkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZh
bHVlKTsgfQogICAgIHZvaWQgcHV0RGlyZWN0VW5kZWZpbmVkKFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXRVbmRlZmluZWQoKTsgfQogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3ROYXRpdmVJbnRyaW5zaWNHZXR0ZXIoVk0m
LCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZpZXIsIE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsMTMgKzM2NiwxOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBK
U1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0m
IHZtLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgSlNTdHJpbmcqIGJhc2UsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNSb3BlU3Ry
aW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+
KHZtLmhlYXApKSBKU1JvcGVTdHJpbmcodm0pOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0
cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCwg
ZGVmZXJyYWxDb250ZXh0KSkgSlNSb3BlU3RyaW5nKHZtKTsKICAgICAgICAgbmV3U3RyaW5nLT5m
aW5pc2hDcmVhdGlvblN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGJhc2UsIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3Ry
aW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBudWxscHRyLCBiYXNlLCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgfQorCiAgICAgdm9pZCB2aXNpdEZpYmVycyhTbG90VmlzaXRv
ciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpYmVycygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1JvcGVTdHJpbmcsIHUpOyB9CkBAIC00OTIsNiArNDk3LDcgQEAgaW5s
aW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBqc0Nhc3Q8
SlNTdHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKKy8vIFRoaXMgTVVTVCBOT1QgR0MuCiBp
bmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qIHZtKQogewogICAgIHJldHVybiB2bS0+
c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CkBAIC01ODIsNyArNTg4LDcgQEAgaW5saW5lIEpT
U3RyaW5nKiBqc1N1YnN0cmluZyhWTSYgdm0sIEV4ZQogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6
OmNyZWF0ZSh2bSwgZXhlYywgcywgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJl
c29sdmVkKFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEpTU3RyaW5n
KiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQob2Zm
c2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwogICAgIEFTU0VSVChs
ZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMtPmxlbmd0aCgpKSk7CkBAIC01OTEsNyAr
NTk3LDEyIEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29sdmVkKFYKICAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwogICAgIGlmICghb2Zmc2V0
ICYmIGxlbmd0aCA9PSBzLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHM7Ci0gICAgcmV0dXJu
IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgcywgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGRlZmVycmFsQ29udGV4dCwgcywgb2Zmc2V0LCBsZW5ndGgpOworfQorCitpbmxpbmUg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3RyaW5nKiBzLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4ganNTdWJzdHJpbmdP
ZlJlc29sdmVkKHZtLCBudWxscHRyLCBzLCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIGlubGluZSBK
U1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogcywgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEws
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0
YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9u
YWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50
QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgZm9yY2VGZW5j
ZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJs
ZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXpl
Q2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVk
LCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI5ICszNiwz
MSBAQCBKU0FycmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQK
ICAgICAKKyAgICBEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOworICAg
IAogICAgIGlmIChVTkxJS0VMWShnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsK
LSAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKICAgICAgICAg
Ci0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZt
KSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBqc0Vt
cHR5U3RyaW5nKCZ2bSkpOwogICAgICAgICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBh
dHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCi0gICAgICAgICAgICAgICAg
YXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVV
bmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1h
dGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAg
ICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZt
LCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVj
dHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJyYXkpOwogICAgICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2
bSwgMCwganNFbXB0eVN0cmluZygmdm0pLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAg
YXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKDAsIGpzRW1wdHlTdHJpbmcoJnZt
KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIAogICAgICAgICBpZiAodW5zaWduZWQg
bnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAg
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJh
eVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4
V2l0aG91dEJhcnJpZXIoaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVz
QXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcigtMSkpOwotICAgIGFycmF5LT5wdXRE
aXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsK
KyAgICBhcnJheS0+cHV0RGlyZWN0V2l0aG91dEJhcnJpZXIoUmVnRXhwTWF0Y2hlc0FycmF5SW5k
ZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIoLTEpKTsKKyAgICBhcnJheS0+cHV0RGlyZWN0V2l0
aG91dEJhcnJpZXIoUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQp
OwogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFJlZ0V4cE1hdGNoZXNBcnJheV9o
CiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCisjaW5jbHVkZSAiRGVmZXJyYWxDb250
ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKQEAgLTMyLDEzICszMywxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGVzQXJy
YXlJbmRleFByb3BlcnR5T2Zmc2V0ID0gMTAwOwogc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0
IFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQgPSAxMDE7CiAKLUFMV0FZU19J
TkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorQUxX
QVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IGluaXRpYWxMZW5ndGg7CiAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogdGVtcCA9
IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5
QWxsb2NhdGVBdXhpbGlhcnkoZGVmZXJyYWxDb250ZXh0LCBudWxscHRyLCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBpZiAoIXRlbXApCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpAQCAtNDgs
NyArNDksNyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQog
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIAotICAgIHJl
dHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIGRlZmVycmFs
Q29udGV4dCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTQXJy
YXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSgKQEAgLTc3LDQ3ICs3OCw0NCBAQCBBTFdBWVNf
SU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAgCiAgICAgdW5zaWduZWQgbnVt
U3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCk7CiAgICAgCisgICAgRGVmZXJy
YWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtF
TFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0g
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBN
YXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKKyAgICAgICAgYXJy
YXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCAmZGVmZXJyYWxDb250ZXh0
LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0
ZXJucyArIDEpOwogICAgICAgICAKICAgICAgICAgc2V0UHJvcGVydGllcygpOwogICAgICAgICAK
LSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpCi0gICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8g
c2NhbiBieSBHQy4KLSAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0s
IDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0
LmVuZCAtIHJlc3VsdC5zdGFydCkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0
aG91dEJhcnJpZXIoMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0
LCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyAr
K2kpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsK
KyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkK
LSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJp
bmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVy
blJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBK
U1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRl
eHQsIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwgdmFs
dWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVV
bmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1h
dGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOworICAgICAgICBhcnJh
eSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sICZkZWZlcnJh
bENvbnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51
bVN1YnBhdHRlcm5zICsgMSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAg
ICAgCiAgICAgICAgIHNldFByb3BlcnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5p
bml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMp
OwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0
ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNV
bmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgIAogICAgICAgICAvLyBO
b3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCiAKLSAgICAgICAgYXJyYXktPmlu
aXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVz
dWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91
cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBqc1N1
YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCByZXN1bHQuc3Rh
cnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7
ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGld
OworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgICAgIGlmIChzdGFydCA+PSAw
KQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0
cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0
ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNv
bHZlZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0
c1syICogaSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5k
ZXhXaXRob3V0QmFycmllcihpLCB2YWx1ZSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAg
IH0KICAgICB9Ci0KICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJlIGRvd24gd2l0aCBUU08KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjMxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQgY2xlYXJS
YW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFycyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMgdHVybmVk
IG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAgICAgIGEgREZHIG9wdGltaXphdGlvbiBwYXNzLgor
CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpGYXN0Qml0
VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorCiAy
MDE2LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTmVl
ZCBhIHN0b3JlLWxvYWQgZmVuY2UgYmV0d2VlbiBzZXR0aW5nIGNlbGwgc3RhdGUgYW5kIHZpc2l0
aW5nIHRoZSBvYmplY3QgaW4gU2xvdFZpc2l0b3IKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMsMjQgQEAgdm9pZCBGYXN0Qml0VmVjdG9yV29y
ZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1fd29yZHMgPSBuZXdBcnJheTsKIH0KIAordm9pZCBG
YXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sKKyAg
ICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47
IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGVuZEJlZ2luU2xvcCA9IChiZWdpbiArIDMxKSAm
IH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRTbG9wID0gZW5kICYgfjMxOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZEJlZ2luU2xvcDsgKytpKQorICAgICAgICBhdChp
KSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbkVuZFNsb3A7IGkgPCBlbmQ7ICsr
aSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gZW5kQmVnaW5T
bG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3AgLyAzMjsgKytpKQorICAgICAgICBtX3dvcmRzLndv
cmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRleDogU291cmNlL1dURi93
dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiArNDY4LDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyUmFu
Z2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289847</attachid>
            <date>2016-09-26 12:49:56 -0700</date>
            <delta_ts>2016-09-26 14:27:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126014</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYyMjEpOiBbVVNFUl0gY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29y
ZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQAog
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjkx
RDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyB9OworCQkwRjdGOTg4
QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgz
MjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTMsNiAr
NjE1LDggQEAKIAkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OwogCQkwRkI0MTU4NDFENzhGQjRD
MDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlD
b252ZW50aW9ucy5jcHAgKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1
Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJ
CTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIERlZmVycmFsQ29udGV4dElubGluZXMu
aCAqLzsgfTsKIAkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3
MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKIAkJMEZCNEZC
NzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8q
IEZUTExhenlTbG93UGF0aC5oICovOyB9OwogCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCAqLzsgfTsKQEAgLTI3NDMsNiArMjc0Nyw4IEBACiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4
MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBN
YXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODg5
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYx
MkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1Miw2ICsyODU4LDggQEAKIAkJMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBB
cnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0
MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWxDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlm
aWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAw
M0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBw
YXRoID0gZGZnL0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgzLDYgKzUyOTEsOCBAQAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2
YXRpdmVSb290cy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAor
CQkJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLywKKwkJ
CQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICov
LAogCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICov
LAogCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLywK
IAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgKi8sCkBAIC02NTU1LDYgKzY1NjUsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBG
NEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NjAsNyBAQAogCQkJCTBGNjE4
MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYg
LyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
NzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgzMjgsNiArODM0MSw3IEBACiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFC
Nzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzcwLDYgKzgz
ODQsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIERlZmVycmFs
Q29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MkQ4NUI3MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTA5OCw2ICs5MTEzLDcgQEAKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4
MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDYgKzM3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGltbSkubGlua1RvKHRhcmdl
dCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBsZWZ0KTsKKyAgICB9CisK
ICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBv
cDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gz
Mihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMy
OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyOCw2ICs4
MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBK
dW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0
ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVk
IHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
c3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2Nh
dGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGpp
dC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQz
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZm
ZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2Yg
LXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIu
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsK
LSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUg
c3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAg
ICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4g
aWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8o
R2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwK
LSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0
YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAg
bWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZs
eSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToK
ICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxs
X2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICBy
ZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0
YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0
Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUo
R3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBv
YnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVh
cHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwg
YnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5C
b3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAg
ICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJl
Z0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3Jh
cGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
Y2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9w
KCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmll
cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0
aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9n
VGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAq
L1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
Rm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5V2l0CiAKICAgICBKU0FycmF5KiByZXN1bHQ7CiAgICAgaWYgKGJ1dHRlcmZseSkKLSAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgYXJyYXlTdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIG51bGxwdHIsIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0
aW9uKGRmZyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZn
KTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92
YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBw
ZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAg
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5
V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGlu
ZyB0aGlzIG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJy
aWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBm
b3JjZXMgdGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJl
IHRoZXkgd2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXpl
IGVmZmVjdHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3Jk
ZXJlZCBwcmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAg
ICAgIC8vIGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCBy
aWdodCBub3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjgsMTggKzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVC
YXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFp
c0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCB2YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwg
dmFsdWUudGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigp
KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKQEAgLTUwMDcsNyArNDk5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NDc0LDIwICs1NDYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAg
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7
Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikK
IHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2Um
IHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hh
YmxlKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAg
ICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
CisgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMDIsNDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2Rl
KiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2Vk
U3RvcmVCYXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVz
dWx0KG5vZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9y
eUZlbmNlKCk7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAg
ICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJh
cnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5j
YXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gy
KTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BS
KTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAg
IG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJp
ZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsK
LQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKLQogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0
aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03Mzgs
OCArNzMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ug
b3BlcmFuZCk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5k
ZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOwor
ICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAg
ICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVh
clJhbmdlKDAsIGJsb2NrU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0
aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hp
bGRBbmRPcmlnaW4geworICAgICAgICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4pCisgICAgICAgICAgICA6IGNoaWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09y
aWdpbihzZW1hbnRpY09yaWdpbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjaGlsZCB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbjsKKyAgICB9OworICAgIAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAg
Ly8gYmFja3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1
cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlm
IGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5v
ZGUuCisgICAgICAgIGJvb2wgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCBzbyBleGl0cyByZXF1aXJlIGNv
bnNlcnZhdGlzbS4gSWYgd2UgZXhpdCwgdGhlbiB0aGVyZQorICAgICAgICAgICAgLy8gcHJvYmFi
bHkgd2lsbCBiZSBhIEdDIGluIHRoZSBmdXR1cmUhIElmIHdlIG5lZWRlZCB0byB0aGVuIHdlIGNv
dWxkIGxpZnQgdGhhdAorICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgYnkgZWl0aGVyICgxKSBo
YXZpbmcgYSBTdG9yZUJhcnJpZXJIaW50IHRoYXQgdGVsbHMgT1NSIGV4aXQgdG8gT1NSIHRoYXQK
KyAgICAgICAgICAgIC8vIHZhbHVlIG9yICgyKSBhdXRvbWF0aWNhbGx5IGJhcnJpZXJpbmcgYW55
IERGRy1saXZlIE5vZGUgb24gT1NSIGV4aXQuIEVpdGhlciB3YXksIGl0CisgICAgICAgICAgICAv
LyB3b3VsZCBiZSB3ZWlyZCBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyByb290IGZvciBP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLiBJCisgICAgICAgICAgICAvLyBkb24ndCBoYXZlIGV2
aWRlbmNlIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICBpZiAoZG9lc0dD
KG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQp
IHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJy
aWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEg
YmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5j
ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBw
ZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGlj
KSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAg
ICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFu
ZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxk
IDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0g
c3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBt
X25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRB
bmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0
ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBp
dGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50
QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1h
bnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVy
cy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENo
aWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBo
KQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhh
dCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3Ro
ZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dy
YW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFr
ZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIg
d2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBh
bHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVy
IG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2Jq
ZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8g
b25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAi
ZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHBy
b3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxs
KCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0
b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAs
IEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVy
cyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28g
ZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJl
IGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8K
Ky8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2Vl
biBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJh
cnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdo
ZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNp
bmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVz
ZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUg
YmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDog
UHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6
KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9l
cyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZl
bmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2ls
bCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZz
ZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVy
KEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChA
cSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBi
b3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1
cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWlu
ZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgor
Ly8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZp
cnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cg
cGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93
IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmll
cnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1i
ZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1
dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJy
aWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBv
Y2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAs
MTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwot
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0
QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkK
ICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2Jq
ZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAg
IC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9m
IHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBh
Y2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9u
ZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAg
ICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9j
aChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hv
dWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAt
NDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1
cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNv
b2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAg
ICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBu
b3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJl
IGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEg
YmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJh
cnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9p
c3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5v
dy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7
Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhZnRlciB0
aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25vdworICAg
ICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNlLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBo
LCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
OworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3Jl
QmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsK
ICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLnRha2VW
YWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5z
ZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1
bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1i
YXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlz
IHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNp
bXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24g
bmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2Ug
YXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlz
aXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBzaW1w
bGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJy
aWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIgcHJv
cGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NB
LiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5l
c3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJh
cnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1aXJl
cyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVu
ZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEy
ICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlB
ZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAg
ICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3Qg
QWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwog
ICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRk
cmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9w
ZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYs
NiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAg
ICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1
ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFk
KGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZv
ckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0
SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBw
ZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJl
cG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAg
cm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFs
dWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUt
PmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRz
ID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1f
aGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVu
Y2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVu
dHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBG
b3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3Jp
dGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQ
YXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9p
ZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAg
ICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAK
QEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1f
aGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAg
ICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNl
IENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5j
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpA
QCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291bnRFeGVj
dXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIp
OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC04
MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0
dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW1pdFN0
b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1biBhZnRl
ciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91
bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55
IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRW
YWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMu
Li4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9y
LCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAgICBQYXRj
aHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBW
ZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0MjksMjYg
KzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQz
MihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZh
bHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIo
YmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihi
bGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShi
YXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8g
V2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBj
YXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMg
ZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBv
dXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXpp
bmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VO
b3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChq
aXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgt
PnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BS
KTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0
ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUo
Jm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3Jl
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50
ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQorewor
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVl
KCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUs
IFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1UeXBlZFBv
aW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVyIE91dHB1
dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlwZWRQb2lu
dGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBERkcKIAog
bmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZhbHVlOwog
fSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExW
YWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBU
eXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAgTFZhbHVl
IGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMy
KFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9m
ZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3Mp
OworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKIAogICAg
IExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBm
aWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CiAg
ICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAm
IGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7
CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAvLyB4IDw9
IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
dGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0
YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGluZSBib29s
IGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJuIGlzV2l0
aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxpbmUgQ2Vs
bFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworCitjbGFzcyBEZWZlcnJhbENvbnRleHQgeworICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitwdWJsaWM6
CisgICAgaW5saW5lIERlZmVycmFsQ29udGV4dChIZWFwJik7CisgICAgaW5saW5lIH5EZWZlcnJh
bENvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgYm9vbCBtX3No
b3VsZEdDIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlcnJhbENvbnRleHRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJyYWxDb250ZXh0SW5saW5lcy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29u
dGV4dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVmZXJyYWxDb250ZXh0LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSBEZWZlcnJhbENvbnRleHQ6OkRlZmVycmFsQ29udGV4dChI
ZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCit7Cit9CisKK0FMV0FZU19JTkxJTkUgRGVm
ZXJyYWxDb250ZXh0Ojp+RGVmZXJyYWxDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoIURpc2FsbG93
R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOworI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQorICAgIEFTU0VSVCghbV9oZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkp
OworI2VuZGlmCisgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxkR0MpKQorICAgICAgICBtX2hlYXAu
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTQ5LDQgKzE1NDksMTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBT
YwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK3ZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIGlmIChV
TkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBj
YXNlLCB0aGUgc25lYWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2FsIGltcG9zc2libGUg
dGhyZXNob2xkLCBzbyBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJlIG5vdCBibGFjay4g
QnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAg
ICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+
Y2VsbFN0YXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQWxsb2NhdGlvblNjb3BlOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRWRlbkdD
QWN0aXZpdHlDYWxsYmFjazsKIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgRnVsbEdDQWN0
aXZpdHlDYWxsYmFjazsKQEAgLTEwNCw5ICsxMDUsMTQgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7
CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAgdm9p
ZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICAKKyAg
ICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IHNuZWFr
eUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
U2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAg
ICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwpAQCAtMTQ5LDYgKzE1NSw3
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvckF1eGlsaWFyeURh
dGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5
KERlZmVycmFsQ29udGV4dCosIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICB2
b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCog
b2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICB2b2lkIGFzY3Jp
YmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKIApAQCAtMTY2LDcgKzE3Myw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29s
bGVjdGlvbik7Ci0gICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4KKyAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQg
ZGlkIGNvbGxlY3QuCiAgICAgdm9pZCBjb2xsZWN0QWNjb3JkaW5nVG9EZWZlckdDUHJvYmFiaWxp
dHkoKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQbGFucygpOwpAQCAtMjU0LDYgKzI2MSwx
MiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlQmxvY2soc2l6ZV90IGNhcGFjaXR5
KTsKICAgICB2b2lkIGRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpOworICAgIAorICAgIGJv
b2wgYmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyU2hvdWxk
QmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQ7IH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBzbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc25lYWt5
QmxhY2tUaHJlc2hvbGQ7IH0KKyAgICBjb25zdCB1bnNpZ25lZCogYWRkcmVzc09mU25lYWt5Qmxh
Y2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiAmbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9uU2NvcGU7CkBAIC0yNzgsMTIg
KzI5MSwxNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0OwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVf
dCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChI
ZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAog
ICAgIHZvaWQgY29sbGVjdFdpdGhvdXRBbnlTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25U
eXBlID0gQW55Q29sbGVjdGlvbik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGggZGVzdHJ1Y3RvcnMuCiAgICAg
dm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGgg
b2JqZWN0cyB3aXRob3V0IGRlc3RydWN0b3JzLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3Ry
dWN0b3IoRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhv
dXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBhbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QpOyAvLyBD
aG9vc2VzIG9uZSBvZiB0aGUgbWV0aG9kcyBhYm92ZSBiYXNlZCBvbiB0eXBlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFN
ZW1vcnkgPSAyNTY7CiAgICAgCkBAIC00MTEsNiArNDI5LDggQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJy
aWVyQnVmZmVyOworICAgIGJvb2wgbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpm
b3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIHVuc2lnbmVkIG1fc25lYWt5QmxhY2tUaHJlc2hv
bGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0
RnVsbEdDTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEhlYXBJ
bmxpbmVzX2gKICNkZWZpbmUgSGVhcElubGluZXNfaAogCisjaW5jbHVkZSAiRGVmZXJyYWxDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCkBAIC0xMjUsMTkgKzEyNiwzMSBAQCBpbmxpbmUg
dm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmll
cigpOwogI2VuZGlmCi0gICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgp
KSkKKyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRvIHx8IHRvLT5j
ZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQorICAgIGlmICghaXNXaXRoaW5UaHJl
c2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChMSUtFTFko
IXRvIHx8IHRvLT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOwogfQogCiBpbmxpbmUgdm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYg
KCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+
Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVCYXJy
aWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldp
dGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9M
T09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20pCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVzaG9s
ZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lk
IEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpAQCAtMjE0LDYg
KzIyNywxOCBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiAgICAg
cmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9
CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFs
aWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQq
IEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24o
Ynl0ZXMpKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVj
dG9yKGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFz
c1R5cGU+CiBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKQogewpAQCAtMjI2LDYgKzI1MSwxNiBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVP
YmplY3RPZlR5cGUoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KK2lubGluZSB2
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNE
ZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1t
b3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9i
amVjdD46OnZhbHVlKSk7CisKKyAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQor
ICAgICAgICByZXR1cm4gYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5
dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRl
eHQsIGJ5dGVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogaW5saW5lIE1h
cmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewog
ICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRo
IG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgpA
QCAtMjc0LDYgKzMwOSwxNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlh
cnkoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVj
dFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworI2lm
IEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0
aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRl
ZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5
UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2Us
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICB2b2lkKiBuZXdCYXNlID0g
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CkBAIC0zMTMsMTIg
KzM1OSwxNSBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoCiAgICAg
bV9kZWZlcnJhbERlcHRoLS07CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKQoraW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29sbGVjdCgpOworICAgIGlm
IChkZWZlcnJhbENvbnRleHQpCisgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9
IHRydWU7CisgICAgZWxzZQorICAgICAgICBjb2xsZWN0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDQ1ICsxNzUsNDkgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoKQorQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZChEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsK
ICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKICAgICBp
ZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgp
KQotICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBpZiAo
IW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0
KQorICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFn
ZSgpOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CiAgICAgfQogICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+
PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKICAgICAgICAgYWxsb2NhdGlv
bkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
KCkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
LSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1cmUpOworICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJl
KTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKCkKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7
CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoYm9vbCBj
cmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUlt
cGwoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAg
IEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UtPmlz
SXRlcmF0aW5nKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUpOwogICAgIAogICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIG1faGVh
cC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIEFsbG9jYXRpb25TY29w
ZSBhbGxvY2F0aW9uU2NvcGUoKm1faGVhcCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVmZXJyYWxDb250ZXh0
OwogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpAQCAtMTUyLDggKzE1Myw4IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNE
ZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9p
ZCogYWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZSgpOworICAgIHZvaWQqIGFsbG9j
YXRlKERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShE
ZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1f
aGVhcDsgfQogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRha2VMYXN0QWN0aXZlQmxvY2soKQog
ICAgIHsKQEAgLTIxNiwxNSArMjE3LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBzaG91
bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpIGNvbnN0OwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZUltcGwoYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKERlZmVycmFsQ29udGV4dCopOwor
ICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKERlZmVycmFsQ29udGV4dCosIGJvb2wgY3Jh
c2hPbkZhaWx1cmUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IHRyeUFsbG9jYXRlQmxvY2soKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKERlZmVycmFsQ29u
dGV4dCopOwogICAgIAogICAgIHZvaWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKICAg
ICAKQEAgLTI2NSw3ICsyNjYsNyBAQCBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0CiAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2Vs
bFNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUoKQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIHVuc2lnbmVkIHJlbWFp
bmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwogICAgIGlmIChyZW1haW5pbmcpIHsKQEAgLTI3
NywxMyArMjc4LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnkK
ICAgICAKICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5M
SUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZSgpOworICAg
ICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAog
ICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZSgpCitBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5y
ZW1haW5pbmc7CiAgICAgaWYgKHJlbWFpbmluZykgewpAQCAtMjk1LDcgKzI5Niw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAgICAKICAgICBGcmVlQ2VsbCog
aGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93
Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQt
Pm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwzMiArMjM1
LDU4IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIAogdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBieXRlcywg
IiBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CiAgICAgaWYgKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsK
ICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
Ynl0ZXMpOworICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBudWxscHRyLCBieXRl
cyk7Cit9CisKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2Us
IERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAg
aWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIGJ5dGVzLCAiIGRlZmVy
cmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMsICIuXG4iKTsKKyAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkg
eworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0
ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKIH0KIAogdm9pZCogTWFy
a2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRpbmcgIiwgYnl0
ZXMsICIgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOwogICAgIGlmIChN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMp
KSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uo
c3Vic3BhY2UsIGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
bnVsbHB0ciwgYnl0ZXMpOworfQorCit2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGUoU3Vi
c3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90
IGJ5dGVzKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRp
bmcgIiwgYnl0ZXMsICIgZGVmZXJyZWQgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywg
Ii5cbiIpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
cihzdWJzcGFjZSwgYnl0ZXMpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4
dCwgYnl0ZXMpOwogfQogCi12b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVMYXJnZShTdWJzcGFj
ZSYgc3Vic3BhY2UsIHNpemVfdCBzaXplKQordm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFy
Z2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJz
cGFjZSwgc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFj
ZSwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUxh
cmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIERlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKTsKKyAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVm
ZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVTdGVwPihzaXplKTsKICAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJn
ZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9oZWFwLCBzaXplLCBzdWJzcGFjZS5hdHRyaWJ1dGVz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDEyICsxMTIsMTcgQEAgcHVibGljOgogICAgIE1hcmtlZEFs
bG9jYXRvciogYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKHNpemVfdCk7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkKiBhbGxvY2F0ZShTdWJzcGFjZSYsIHNpemVfdCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoU3Vic3BhY2UmLCBEZWZlcnJhbENvbnRleHQqLCBzaXpl
X3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKFN1YnNwYWNlJiwg
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJzcGFj
ZSYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCogYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0
b3Ioc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCosIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZUF1eGlsaWFyeShEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIAogICAg
IFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1f
ZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhv
dXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTk1LDggKzIwMCw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJy
YXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgc2l6
ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNw
YWNlJiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNl
JiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVTaXplQ2xhc3NGb3JTdGVwU2l6ZSgpOwogICAgIApAQCAtMjY0LDYgKzI2OSwxNiBAQCBpbmxp
bmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlCiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fZGVzdHJ1Y3RvclNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFj
ZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0ZShtX25vcm1hbFNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fZGVzdHJ1Y3RvclNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fYXV4aWxpYXJ5U3BhY2UsIGJ5dGVzKTsKQEAgLTI3NCw2ICsyODksMTEgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eAogICAgIHJldHVybiB0cnlBbGxvY2F0ZSht
X2F1eGlsaWFyeVNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9hdXhpbGlhcnlTcGFjZSwg
ZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMwNiwxNyArMTMwNiw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVT
dHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIg
c3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuV2l0aG91dEZlbmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5j
aDgoQWJvdmUsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1l
bWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW5XaXRob3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhf
dCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpj
ZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRl
QWRkcmVzcyhhZGRyZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQog
ICAgIAorICAgIEp1bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNl
bGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxs
LCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAu
YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25l
YWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRj
aEdQUikKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxv
YWQ4KGFkZHJlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUs
IHNjcmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJs
YWNrVGhyZXNob2xkKCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldp
dGhvdXRGZW5jZShjZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9h
ZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhv
dXRGZW5jZShjZWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJy
aWVycygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
QmFycmllclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhl
IGJyYW5jaCBzdHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRv
ZXNuJ3QgZmFsbCB0aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9z
ZSBwb2ludHMgd2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2Ug
dGhpcyBpcyB0bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQg
dGhlIHR5cGUgc3RyaW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwp
OwogfQogCi0vLyBOQjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUg
YmFycmllciBiZWNhdXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRo
ZSBERkcgb25seSB0cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMg
YmVlbiBiYXJyaWVyZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRv
IHRyeSB0byBtb2RlbCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVC
YXJyaWVyU2xvd1BhdGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTIsOCArNDEyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9J
TlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldy
aXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAt
Njg0LDYgKzY4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1
ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IH0KIApAQCAtMTE4MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJl
Z1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
CiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihyZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCku
aXNNYXJrZWQob3duZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25l
cik7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNo
ZWNrKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2Vz
KQpAQCAtMTM5MCw4ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxs
cy5sYXN0KCkudG8gPT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25k
aXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9
PSBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwog
ICAgIH0KICAgICAKICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4
OTEsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAog
bWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVt
ZmVuY2UKICAgICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQs
IC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNyw4
IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAgICAgICAk
YXNtLnB1dHMgImxlYSN7eDg2U3VmZml4KDpwdHIpfSAje29yZGVyT3BlcmFuZHMob3BlcmFuZHNb
MF0ueDg2QWRkcmVzc09wZXJhbmQoOnB0ciksIG9wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cikp
fSIKICAgICAgICAgd2hlbiAibWVtZmVuY2UiCi0gICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5j
ZSIKKyAgICAgICAgICAgIHNwID0gUmVnaXN0ZXJJRC5uZXcobmlsLCAic3AiKQorICAgICAgICAg
ICAgJGFzbS5wdXRzICJsb2NrOyBvcmwgJDAsICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJ
bkRpY3Rpb24KICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCi1KU0FycmF5KiBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGgpCitKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIGlmIChpbml0aWFsTGVu
Z3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03
Niw3ICs3Niw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxp
YXJ5KGRlZmVycmFsQ29udGV4dCwgbnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0
T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOwogICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVT
dG9yYWdlKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkCiAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIGRlZmVycmFsQ29u
dGV4dCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQogCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0
aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTMgKzU0LDE3IEBAIHByb3RlY3RlZDoKIAogcHVibGljOgogICAgIHN0YXRpYyBKU0FycmF5KiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAg
c3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0
ZXJmbHkqKTsKKyAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlV2l0aEJ1dHRlcmZseShWTSYsIERl
ZmVycmFsQ29udGV4dCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgLy8gdHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMg
d2hvc2Ugc2l6ZSBhbmQKICAgICAvLyBjb250ZW50cyBhcmUga25vd24gYXQgdGltZSBvZiBjcmVh
dGlvbi4gQ2xpZW50cyBvZiB0aGlzIGludGVyZmFjZSBtdXN0OgogICAgIC8vICAgLSBudWxsLWNo
ZWNrIHRoZSByZXN1bHQgKGluZGljYXRpbmcgb3V0IG9mIG1lbW9yeSwgb3Igb3RoZXJ3aXNlIHVu
YWJsZSB0byBhbGxvY2F0ZSB2ZWN0b3IpLgogICAgIC8vICAgLSBjYWxsICdpbml0aWFsaXplSW5k
ZXgnIGZvciBhbGwgcHJvcGVydGllcyBpbiBzZXF1ZW5jZSwgZm9yIDAgPD0gaSA8IGluaXRpYWxM
ZW5ndGguCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChWTSYsIERlZmVycmFsQ29udGV4dCosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgpOworICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgbnVsbHB0ciwgc3RydWN0dXJl
LCBpbml0aWFsTGVuZ3RoKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKQEAg
LTIzMSwxMiArMjM1LDEyIEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZt
LCAKICAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNs
ZWFyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKKyAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgbnVs
bHB0ciwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQogCi1pbmxpbmUgSlNBcnJheSogSlNBcnJh
eTo6Y3JlYXRlV2l0aEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKK2lubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0
dGVyZmx5KFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKLSAgICBKU0FycmF5KiBhcnJh
eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KHZtLmhlYXApKSBKU0FycmF5
KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwLCBkZWZlcnJhbENvbnRleHQpKSBK
U0FycmF5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRvcjsKK2NsYXNzIERlZmVycmFsQ29udGV4
dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0FycmF5QnVm
ZmVyVmlldzsKQEAgLTUzLDYgKzU0LDkgQEAgY2xhc3MgU3RydWN0dXJlOwogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBEZWZlcnJhbENvbnRleHQqKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKKwogI2RlZmluZSBERUNMQVJFX0VYUE9SVF9JTkZPICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHByb3RlY3RlZDogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBz
dGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCA6OkpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsgICAgICAg
ICAgICAgXApAQCAtNzAsNiArNzQsOCBAQCBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgSGVhcENlbGwg
ewogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBzaXplX3QpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFs
Q29udGV4dCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0
ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAKIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDI1IEBAIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBo
ZWFwKQogICAgIHJldHVybiBhbGxvY2F0ZUNlbGw8VD4oaGVhcCwgc2l6ZW9mKFQpKTsKIH0KICAg
ICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwg
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQoreworICAgIEFT
U0VSVChzaXplID49IHNpemVvZihUKSk7CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihoZWFwLmFsbG9jYXRlT2JqZWN0T2ZUeXBlPFQ+KGRlZmVycmFsQ29udGV4dCwg
c2l6ZSkpOworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAgIEFTU0VSVCghaGVhcC52bSgp
LT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemlu
Z09iamVjdENsYXNzKFQ6OmluZm8oKSk7CisjZW5kaWYKKyAgICByZXN1bHQtPmNsZWFyU3RydWN0
dXJlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlQ2VsbDxUPihoZWFwLCBkZWZlcnJhbENv
bnRleHQsIHNpemVvZihUKSk7Cit9CisgICAgCiBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzT2JqZWN0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gVHlwZUluZm86OmlzT2JqZWN0KG1fdHlwZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxOCw3ICs0MTgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBOT1RFOiBDbGllbnRz
IG9mIHRoaXMgbWV0aG9kIG1heSBjYWxsIGl0IG1vcmUgdGhhbiBvbmNlIGZvciBhbnkgaW5kZXgs
IGFuZCB0aGlzIGlzIHN1cHBvc2VkCiAgICAgLy8gdG8gd29yay4KLSAgICB2b2lkIGluaXRpYWxp
emVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsK
ICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAg
ICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKQEAgLTQ2OCw2ICs0NjgsNTQgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogICAgICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVJbmRleFdpdGhv
dXRCYXJyaWVyKHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICB7CisgICAgICAgIGluaXRpYWxp
emVJbmRleFdpdGhvdXRCYXJyaWVyKGksIHYsIGluZGV4aW5nVHlwZSgpKTsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIHZlcnNpb24gb2YgaW5pdGlhbGl6ZUluZGV4IGlzIGZvciBjYXNlcyB3aGVyZSB5
b3Uga25vdyB0aGF0IHlvdSB3aWxsIG5vdCBuZWVkIGFueQorICAgIC8vIGJhcnJpZXJzLiBUaGlz
IGltcGxpZXMgbm90IGhhdmluZyBhbnkgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMuCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHVuc2lnbmVkIGks
IEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKKyAgICB7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
OworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHYuaXNJbnQzMigpKTsKKyAgICAgICAgICAgIEZBTExU
SFJPVUdIOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2LmlzTnVtYmVyKCkp
OworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gdi5hc051bWJlcigpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQodmFsdWUgPT0gdmFsdWUpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAog
ICAgIGJvb2wgaGFzU3BhcnNlTWFwKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKQEAgLTY0Miw2ICs2OTAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRmFzdCBhY2Nlc3Mg
dG8ga25vd24gcHJvcGVydHkgb2Zmc2V0cy4KICAgICBKU1ZhbHVlIGdldERpcmVjdChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkt
PmdldCgpOyB9CiAgICAgdm9pZCBwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0KHZtLCB0
aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQp
LT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsgfQogICAgIHZvaWQgcHV0RGlyZWN0VW5k
ZWZpbmVkKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQp
LT5zZXRVbmRlZmluZWQoKTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJl
Y3ROYXRpdmVJbnRyaW5zaWNHZXR0ZXIoVk0mLCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZpZXIs
IE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjYsMTMgKzM2NiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdTdHJp
bmc7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1
YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgSlNTdHJpbmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogICAgIHsKLSAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmcodm0pOwor
ICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNSb3BlU3RyaW5n
KHZtKTsKICAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvblN1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGJhc2UsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsK
ICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlU3Vic3Ry
aW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVTdWJzdHJpbmdPZlJl
c29sdmVkKHZtLCBudWxscHRyLCBiYXNlLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgfQorCiAgICAg
dm9pZCB2aXNpdEZpYmVycyhTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkZpYmVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1JvcGVTdHJpbmcsIHUp
OyB9CkBAIC00OTIsNiArNDk3LDcgQEAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVl
IHZhbHVlKQogICAgIHJldHVybiBqc0Nhc3Q8SlNTdHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CiB9
CiAKKy8vIFRoaXMgTVVTVCBOT1QgR0MuCiBpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmco
Vk0qIHZtKQogewogICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CkBA
IC01ODIsNyArNTg4LDcgQEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYgdm0sIEV4
ZQogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgZXhlYywgcywgb2Zmc2V0LCBs
ZW5ndGgpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYg
dm0sIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGlu
ZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
LT5sZW5ndGgoKSkpOwogICAgIEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMtPmxlbmd0aCgpKSk7CkBAIC01OTEsNyArNTk3LDEyIEBAIGlubGluZSBKU1N0cmluZyoganNT
dWJzdHJpbmdPZlJlc29sdmVkKFYKICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0
eVN0cmluZygpOwogICAgIGlmICghb2Zmc2V0ICYmIGxlbmd0aCA9PSBzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIHM7Ci0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5n
T2ZSZXNvbHZlZCh2bSwgcywgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGRlZmVycmFsQ29udGV4dCwgcywgb2Zm
c2V0LCBsZW5ndGgpOworfQorCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZl
ZChWTSYgdm0sIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICByZXR1cm4ganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBudWxscHRyLCBzLCBvZmZz
ZXQsIGxlbmd0aCk7CiB9CiAKIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICB2KGJvb2wsIHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAw
MCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDI5ICszNiwzMSBAQCBKU0FycmF5KiBjcmVhdGVFbXB0eVJlZ0V4
cE1hdGNoZXNBcnJheShKCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhbmRsZSBhcnJheSBh
bGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQKICAgICAKKyAgICBEZWZlcnJhbENvbnRleHQgZGVm
ZXJyYWxDb250ZXh0KHZtLmhlYXApOworICAgIAogICAgIGlmIChVTkxJS0VMWShnbG9iYWxPYmpl
Y3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsKLSAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJyYXkg
PSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBn
bG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1
YnBhdHRlcm5zKCkgKyAxKTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5k
ZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcigwLCBqc0VtcHR5U3RyaW5nKCZ2bSkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRl
cm5zOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwg
anNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5
KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAt
Pm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRp
YWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmpl
Y3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOwogICAgICAgICAKLSAgICAg
ICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNFbXB0eVN0cmluZygmdm0pLCBBcnJh
eVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRC
YXJyaWVyKDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAg
ICAgIAogICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1
YnBhdHRlcm5zKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVt
U3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4
KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwganNVbmRlZmluZWQo
KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhcnJheS0+
cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051
bWJlcigtMSkpOwotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUlu
cHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKyAgICBhcnJheS0+cHV0RGlyZWN0V2l0aG91dEJh
cnJpZXIoUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIoLTEp
KTsKKyAgICBhcnJheS0+cHV0RGlyZWN0V2l0aG91dEJhcnJpZXIoUmVnRXhwTWF0Y2hlc0FycmF5
SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAj
ZGVmaW5lIFJlZ0V4cE1hdGNoZXNBcnJheV9oCiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVz
LmgiCisjaW5jbHVkZSAiRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJy
YXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKQEAgLTMyLDEzICszMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBQcm9w
ZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0ID0gMTAwOwog
c3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVy
dHlPZmZzZXQgPSAxMDE7CiAKLUFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0
aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVV
bmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoKQogewogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IGluaXRpYWxMZW5ndGg7CiAgICAg
aWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnko
bnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkoZGVmZXJyYWxDb250
ZXh0LCBudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOwpAQCAtNDgsNyArNDksNyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJy
YXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0
aDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5jbGVhcigpOwogICAgIAotICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIGRlZmVycmFsQ29udGV4dCwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OwogfQogCiBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSgK
QEAgLTc3LDQ3ICs3OCw0NCBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1h
dGNoCiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCk7CiAgICAgCisgICAgRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5o
ZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRU
aW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3Vi
cGF0dGVybnMgKyAxKTsKKyAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOwogICAgICAgICAKICAgICAgICAg
c2V0UHJvcGVydGllcygpOwogICAgICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRl
eCh2bSwgMCwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCi0gICAgICAgICAgICBhcnJheS0+aW5p
dGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4KLSAgICAgICAgCi0gICAgICAg
IGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwg
aW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCkpOworICAgICAg
ICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoMCwganNTdWJzdHJpbmdPZlJl
c29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQu
ZW5kIC0gcmVzdWx0LnN0YXJ0KSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9
IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAg
ICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlh
bGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQo
dm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09m
UmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJl
c3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5
KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJw
YXR0ZXJucyArIDEpOworICAgICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdF
eHBNYXRjaGVzQXJyYXkodm0sICZkZWZlcnJhbENvbnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhw
TWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRlcm5zICsgMSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAgICAgCiAgICAgICAgIHNldFByb3BlcnRpZXMoKTsK
ICAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZp
bmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91
cyk7Ci0gICAgICAgIAogICAgICAgICAvLyBOb3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4g
YnkgR0MuCiAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJp
bmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0
LnN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcigwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJh
bENvbnRleHQsIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0
ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsK
ICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZl
ZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEpTUm9wZVN0
cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgaW5w
dXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcihpLCB2YWx1ZSwgQXJy
YXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gYXJyYXk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJl
IGRvd24gd2l0aCBUU08KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgQWRkZWQgY2xlYXJSYW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFycyBh
IHJhbmdlIG9mIGJpdHMuIFRoaXMgdHVybmVkIG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAgICAg
IGEgREZHIG9wdGltaXphdGlvbiBwYXNzLgorCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3Iu
Y3BwOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAgICAg
KiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorCiAyMDE2LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTmVlZCBhIHN0b3JlLWxvYWQgZmVuY2UgYmV0d2VlbiBz
ZXR0aW5nIGNlbGwgc3RhdGUgYW5kIHZpc2l0aW5nIHRoZSBvYmplY3QgaW4gU2xvdFZpc2l0b3IK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMs
MjQgQEAgdm9pZCBGYXN0Qml0VmVjdG9yV29yZE93bmVyOjpyZXNpemVTbG93KAogICAgIG1fd29y
ZHMgPSBuZXdBcnJheTsKIH0KIAordm9pZCBGYXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKHNpemVf
dCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAoZW5kIC0gYmVnaW4gPCAzMikgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgIGF0
KGkpID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGVu
ZEJlZ2luU2xvcCA9IChiZWdpbiArIDMxKSAmIH4zMTsKKyAgICBzaXplX3QgYmVnaW5FbmRTbG9w
ID0gZW5kICYgfjMxOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZEJl
Z2luU2xvcDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkg
PSBiZWdpbkVuZFNsb3A7IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gZW5kQmVnaW5TbG9wIC8gMzI7IGkgPCBiZWdpbkVuZFNsb3AgLyAz
MjsgKytpKQorICAgICAgICBtX3dvcmRzLndvcmQoaSkgPSAwOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiAr
NDY4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3Ig
Y2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289869</attachid>
            <date>2016-09-26 14:27:19 -0700</date>
            <delta_ts>2016-09-26 14:45:30 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYyMjEpOiBbVVNFUl0gY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29y
ZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQAog
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjkx
RDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyB9OworCQkwRjdGOTg4
QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgz
MjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTMsNiAr
NjE1LDggQEAKIAkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OwogCQkwRkI0MTU4NDFENzhGQjRD
MDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlD
b252ZW50aW9ucy5jcHAgKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1
Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJ
CTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIERlZmVycmFsQ29udGV4dElubGluZXMu
aCAqLzsgfTsKIAkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3
MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKIAkJMEZCNEZC
NzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8q
IEZUTExhenlTbG93UGF0aC5oICovOyB9OwogCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCAqLzsgfTsKQEAgLTI3NDMsNiArMjc0Nyw4IEBACiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4
MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBN
YXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODg5
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYx
MkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1Miw2ICsyODU4LDggQEAKIAkJMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBB
cnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0
MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWxDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlm
aWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAw
M0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBw
YXRoID0gZGZnL0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgzLDYgKzUyOTEsOCBAQAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2
YXRpdmVSb290cy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAor
CQkJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLywKKwkJ
CQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICov
LAogCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICov
LAogCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLywK
IAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgKi8sCkBAIC02NTU1LDYgKzY1NjUsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBG
NEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NjAsNyBAQAogCQkJCTBGNjE4
MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYg
LyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
NzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgzMjgsNiArODM0MSw3IEBACiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFC
Nzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzcwLDYgKzgz
ODQsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIERlZmVycmFs
Q29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MkQ4NUI3MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTA5OCw2ICs5MTEzLDcgQEAKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4
MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDYgKzM3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGltbSkubGlua1RvKHRhcmdl
dCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBsZWZ0KTsKKyAgICB9CisK
ICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBv
cDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gz
Mihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMy
OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyOCw2ICs4
MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBK
dW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0
ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVk
IHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
c3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2Nh
dGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGpp
dC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQz
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZm
ZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2Yg
LXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIu
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsK
LSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUg
c3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAg
ICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4g
aWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8o
R2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwK
LSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0
YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAg
bWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZs
eSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToK
ICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxs
X2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICBy
ZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0
YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0
Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUo
R3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBv
YnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVh
cHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwg
YnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5C
b3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAg
ICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJl
Z0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3Jh
cGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
Y2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9w
KCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmll
cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0
aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9n
VGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAq
L1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
Rm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5V2l0CiAKICAgICBKU0FycmF5KiByZXN1bHQ7CiAgICAgaWYgKGJ1dHRlcmZseSkKLSAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgYXJyYXlTdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIG51bGxwdHIsIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0
aW9uKGRmZyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZn
KTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92
YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBw
ZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAg
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5
V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGlu
ZyB0aGlzIG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJy
aWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBm
b3JjZXMgdGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJl
IHRoZXkgd2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXpl
IGVmZmVjdHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3Jk
ZXJlZCBwcmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAg
ICAgIC8vIGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCBy
aWdodCBub3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjgsMTggKzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVC
YXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFp
c0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCB2YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwg
dmFsdWUudGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigp
KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKQEAgLTUwMDcsNyArNDk5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NDc0LDIwICs1NDYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAg
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7
Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikK
IHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2Um
IHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hh
YmxlKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAg
ICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
CisgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMDIsNDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2Rl
KiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2Vk
U3RvcmVCYXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVz
dWx0KG5vZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9y
eUZlbmNlKCk7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAg
ICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJh
cnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5j
YXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gy
KTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BS
KTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAg
IG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJp
ZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsK
LQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKLQogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0
aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03Mzgs
OCArNzMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ug
b3BlcmFuZCk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5k
ZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOwor
ICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAg
ICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVh
clJhbmdlKDAsIGJsb2NrU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0
aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hp
bGRBbmRPcmlnaW4geworICAgICAgICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4pCisgICAgICAgICAgICA6IGNoaWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09y
aWdpbihzZW1hbnRpY09yaWdpbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjaGlsZCB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbjsKKyAgICB9OworICAgIAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAg
Ly8gYmFja3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1
cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlm
IGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5v
ZGUuCisgICAgICAgIGJvb2wgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCBzbyBleGl0cyByZXF1aXJlIGNv
bnNlcnZhdGlzbS4gSWYgd2UgZXhpdCwgdGhlbiB0aGVyZQorICAgICAgICAgICAgLy8gcHJvYmFi
bHkgd2lsbCBiZSBhIEdDIGluIHRoZSBmdXR1cmUhIElmIHdlIG5lZWRlZCB0byB0aGVuIHdlIGNv
dWxkIGxpZnQgdGhhdAorICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgYnkgZWl0aGVyICgxKSBo
YXZpbmcgYSBTdG9yZUJhcnJpZXJIaW50IHRoYXQgdGVsbHMgT1NSIGV4aXQgdG8gT1NSIHRoYXQK
KyAgICAgICAgICAgIC8vIHZhbHVlIG9yICgyKSBhdXRvbWF0aWNhbGx5IGJhcnJpZXJpbmcgYW55
IERGRy1saXZlIE5vZGUgb24gT1NSIGV4aXQuIEVpdGhlciB3YXksIGl0CisgICAgICAgICAgICAv
LyB3b3VsZCBiZSB3ZWlyZCBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyByb290IGZvciBP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLiBJCisgICAgICAgICAgICAvLyBkb24ndCBoYXZlIGV2
aWRlbmNlIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICBpZiAoZG9lc0dD
KG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQp
IHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJy
aWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEg
YmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5j
ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBw
ZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGlj
KSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAg
ICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFu
ZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxk
IDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0g
c3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBt
X25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRB
bmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0
ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBp
dGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50
QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1h
bnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVy
cy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENo
aWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBo
KQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhh
dCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3Ro
ZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dy
YW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFr
ZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIg
d2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBh
bHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVy
IG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2Jq
ZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8g
b25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAi
ZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHBy
b3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxs
KCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0
b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAs
IEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVy
cyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28g
ZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJl
IGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8K
Ky8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2Vl
biBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJh
cnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdo
ZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNp
bmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVz
ZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUg
YmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDog
UHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6
KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9l
cyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZl
bmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2ls
bCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZz
ZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVy
KEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChA
cSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBi
b3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1
cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWlu
ZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgor
Ly8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZp
cnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cg
cGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93
IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmll
cnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1i
ZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1
dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJy
aWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBv
Y2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAs
MTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwot
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0
QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkK
ICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2Jq
ZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAg
IC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9m
IHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBh
Y2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9u
ZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAg
ICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9j
aChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hv
dWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAt
NDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1
cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNv
b2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAg
ICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBu
b3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJl
IGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEg
YmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJh
cnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9p
c3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5v
dy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7
Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhZnRlciB0
aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25vdworICAg
ICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNlLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBo
LCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
OworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3Jl
QmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsK
ICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLnRha2VW
YWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5z
ZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1
bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1i
YXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlz
IHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNp
bXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24g
bmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2Ug
YXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlz
aXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBzaW1w
bGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJy
aWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIgcHJv
cGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NB
LiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5l
c3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJh
cnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1aXJl
cyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVu
ZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEy
ICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlB
ZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAg
ICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3Qg
QWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwog
ICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRk
cmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9w
ZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYs
NiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAg
ICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1
ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFk
KGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZv
ckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0
SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBw
ZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJl
cG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAg
cm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFs
dWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUt
PmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRz
ID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1f
aGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVu
Y2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVu
dHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBG
b3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3Jp
dGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQ
YXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9p
ZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAg
ICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAK
QEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1f
aGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAg
ICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNl
IENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5j
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpA
QCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291bnRFeGVj
dXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIp
OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC04
MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0
dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW1pdFN0
b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1biBhZnRl
ciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91
bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55
IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRW
YWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMu
Li4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9y
LCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAgICBQYXRj
aHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBW
ZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0MjksMjYg
KzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQz
MihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZh
bHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIo
YmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihi
bGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShi
YXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8g
V2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBj
YXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMg
ZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBv
dXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXpp
bmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VO
b3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChq
aXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgt
PnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BS
KTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0
ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUo
Jm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3Jl
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50
ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQorewor
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVl
KCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUs
IFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1UeXBlZFBv
aW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVyIE91dHB1
dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlwZWRQb2lu
dGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBERkcKIAog
bmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZhbHVlOwog
fSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExW
YWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBU
eXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAgTFZhbHVl
IGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMy
KFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9m
ZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3Mp
OworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKIAogICAg
IExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBm
aWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CiAg
ICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAm
IGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7
CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAvLyB4IDw9
IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
dGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0
YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGluZSBib29s
IGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJuIGlzV2l0
aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxpbmUgQ2Vs
bFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworCitjbGFzcyBEZWZlcnJhbENvbnRleHQgeworICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitwdWJsaWM6
CisgICAgaW5saW5lIERlZmVycmFsQ29udGV4dChIZWFwJik7CisgICAgaW5saW5lIH5EZWZlcnJh
bENvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgYm9vbCBtX3No
b3VsZEdDIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlcnJhbENvbnRleHRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJyYWxDb250ZXh0SW5saW5lcy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29u
dGV4dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVmZXJyYWxDb250ZXh0LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSBEZWZlcnJhbENvbnRleHQ6OkRlZmVycmFsQ29udGV4dChI
ZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCit7Cit9CisKK0FMV0FZU19JTkxJTkUgRGVm
ZXJyYWxDb250ZXh0Ojp+RGVmZXJyYWxDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoIURpc2FsbG93
R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOworI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQorICAgIEFTU0VSVCghbV9oZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkp
OworI2VuZGlmCisgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxkR0MpKQorICAgICAgICBtX2hlYXAu
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTQ5LDQgKzE1NDksMTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBT
YwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK3ZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIGlmIChV
TkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBj
YXNlLCB0aGUgc25lYWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2FsIGltcG9zc2libGUg
dGhyZXNob2xkLCBzbyBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJlIG5vdCBibGFjay4g
QnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAg
ICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+
Y2VsbFN0YXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQWxsb2NhdGlvblNjb3BlOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRWRlbkdD
QWN0aXZpdHlDYWxsYmFjazsKIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgRnVsbEdDQWN0
aXZpdHlDYWxsYmFjazsKQEAgLTEwNCw5ICsxMDUsMTQgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7
CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAgdm9p
ZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICAKKyAg
ICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IHNuZWFr
eUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
U2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAg
ICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwpAQCAtMTQ5LDYgKzE1NSw3
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvckF1eGlsaWFyeURh
dGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5
KERlZmVycmFsQ29udGV4dCosIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICB2
b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCog
b2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICB2b2lkIGFzY3Jp
YmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKIApAQCAtMTY2LDcgKzE3Myw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29s
bGVjdGlvbik7Ci0gICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4KKyAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQg
ZGlkIGNvbGxlY3QuCiAgICAgdm9pZCBjb2xsZWN0QWNjb3JkaW5nVG9EZWZlckdDUHJvYmFiaWxp
dHkoKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQbGFucygpOwpAQCAtMjU0LDYgKzI2MSwx
MiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlQmxvY2soc2l6ZV90IGNhcGFjaXR5
KTsKICAgICB2b2lkIGRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpOworICAgIAorICAgIGJv
b2wgYmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyU2hvdWxk
QmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQ7IH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBzbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc25lYWt5
QmxhY2tUaHJlc2hvbGQ7IH0KKyAgICBjb25zdCB1bnNpZ25lZCogYWRkcmVzc09mU25lYWt5Qmxh
Y2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiAmbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9uU2NvcGU7CkBAIC0yNzgsMTIg
KzI5MSwxNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0OwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVf
dCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChI
ZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAog
ICAgIHZvaWQgY29sbGVjdFdpdGhvdXRBbnlTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25U
eXBlID0gQW55Q29sbGVjdGlvbik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGggZGVzdHJ1Y3RvcnMuCiAgICAg
dm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGgg
b2JqZWN0cyB3aXRob3V0IGRlc3RydWN0b3JzLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3Ry
dWN0b3IoRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhv
dXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBhbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QpOyAvLyBD
aG9vc2VzIG9uZSBvZiB0aGUgbWV0aG9kcyBhYm92ZSBiYXNlZCBvbiB0eXBlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFN
ZW1vcnkgPSAyNTY7CiAgICAgCkBAIC00MTEsNiArNDI5LDggQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJy
aWVyQnVmZmVyOworICAgIGJvb2wgbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpm
b3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIHVuc2lnbmVkIG1fc25lYWt5QmxhY2tUaHJlc2hv
bGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0
RnVsbEdDTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEhlYXBJ
bmxpbmVzX2gKICNkZWZpbmUgSGVhcElubGluZXNfaAogCisjaW5jbHVkZSAiRGVmZXJyYWxDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCkBAIC0xMjUsMTkgKzEyNiwzMSBAQCBpbmxpbmUg
dm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmll
cigpOwogI2VuZGlmCi0gICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgp
KSkKKyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRvIHx8IHRvLT5j
ZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQorICAgIGlmICghaXNXaXRoaW5UaHJl
c2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChMSUtFTFko
IXRvIHx8IHRvLT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOwogfQogCiBpbmxpbmUgdm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYg
KCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+
Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVCYXJy
aWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldp
dGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9M
T09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20pCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVzaG9s
ZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lk
IEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpAQCAtMjE0LDYg
KzIyNywxOCBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiAgICAg
cmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9
CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFs
aWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQq
IEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24o
Ynl0ZXMpKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVj
dG9yKGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFz
c1R5cGU+CiBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKQogewpAQCAtMjI2LDYgKzI1MSwxNiBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVP
YmplY3RPZlR5cGUoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KK2lubGluZSB2
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNE
ZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1t
b3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9i
amVjdD46OnZhbHVlKSk7CisKKyAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQor
ICAgICAgICByZXR1cm4gYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5
dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRl
eHQsIGJ5dGVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogaW5saW5lIE1h
cmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewog
ICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRo
IG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgpA
QCAtMjc0LDYgKzMwOSwxNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlh
cnkoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVj
dFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworI2lm
IEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0
aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRl
ZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5
UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2Us
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICB2b2lkKiBuZXdCYXNlID0g
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CkBAIC0zMTMsMTIg
KzM1OSwxNSBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoCiAgICAg
bV9kZWZlcnJhbERlcHRoLS07CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKQoraW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29sbGVjdCgpOworICAgIGlm
IChkZWZlcnJhbENvbnRleHQpCisgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9
IHRydWU7CisgICAgZWxzZQorICAgICAgICBjb2xsZWN0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDQ1ICsxNzUsNDkgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoKQorQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZChEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsK
ICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKICAgICBp
ZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgp
KQotICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBpZiAo
IW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0
KQorICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFn
ZSgpOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CiAgICAgfQogICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+
PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKICAgICAgICAgYWxsb2NhdGlv
bkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
KCkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
LSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1cmUpOworICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJl
KTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKCkKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7
CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoYm9vbCBj
cmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUlt
cGwoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAg
IEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UtPmlz
SXRlcmF0aW5nKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUpOwogICAgIAogICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIG1faGVh
cC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIEFsbG9jYXRpb25TY29w
ZSBhbGxvY2F0aW9uU2NvcGUoKm1faGVhcCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVmZXJyYWxDb250ZXh0
OwogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpAQCAtMTUyLDggKzE1Myw4IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNE
ZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9p
ZCogYWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZSgpOworICAgIHZvaWQqIGFsbG9j
YXRlKERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShE
ZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1f
aGVhcDsgfQogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRha2VMYXN0QWN0aXZlQmxvY2soKQog
ICAgIHsKQEAgLTIxNiwxNSArMjE3LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBzaG91
bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpIGNvbnN0OwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZUltcGwoYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKERlZmVycmFsQ29udGV4dCopOwor
ICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKERlZmVycmFsQ29udGV4dCosIGJvb2wgY3Jh
c2hPbkZhaWx1cmUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IHRyeUFsbG9jYXRlQmxvY2soKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKERlZmVycmFsQ29u
dGV4dCopOwogICAgIAogICAgIHZvaWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKICAg
ICAKQEAgLTI2NSw3ICsyNjYsNyBAQCBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0CiAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2Vs
bFNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUoKQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIHVuc2lnbmVkIHJlbWFp
bmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwogICAgIGlmIChyZW1haW5pbmcpIHsKQEAgLTI3
NywxMyArMjc4LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnkK
ICAgICAKICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5M
SUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZSgpOworICAg
ICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAog
ICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZSgpCitBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5y
ZW1haW5pbmc7CiAgICAgaWYgKHJlbWFpbmluZykgewpAQCAtMjk1LDcgKzI5Niw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAgICAKICAgICBGcmVlQ2VsbCog
aGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93
Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQt
Pm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwzMiArMjM1
LDU4IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIAogdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBieXRlcywg
IiBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CiAgICAgaWYgKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsK
ICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
Ynl0ZXMpOworICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBudWxscHRyLCBieXRl
cyk7Cit9CisKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2Us
IERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAg
aWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIGJ5dGVzLCAiIGRlZmVy
cmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMsICIuXG4iKTsKKyAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkg
eworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0
ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKIH0KIAogdm9pZCogTWFy
a2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRpbmcgIiwgYnl0
ZXMsICIgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOwogICAgIGlmIChN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMp
KSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uo
c3Vic3BhY2UsIGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
bnVsbHB0ciwgYnl0ZXMpOworfQorCit2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGUoU3Vi
c3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90
IGJ5dGVzKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRp
bmcgIiwgYnl0ZXMsICIgZGVmZXJyZWQgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywg
Ii5cbiIpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
cihzdWJzcGFjZSwgYnl0ZXMpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4
dCwgYnl0ZXMpOwogfQogCi12b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVMYXJnZShTdWJzcGFj
ZSYgc3Vic3BhY2UsIHNpemVfdCBzaXplKQordm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFy
Z2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJz
cGFjZSwgc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFj
ZSwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUxh
cmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIERlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKTsKKyAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVm
ZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVTdGVwPihzaXplKTsKICAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJn
ZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9oZWFwLCBzaXplLCBzdWJzcGFjZS5hdHRyaWJ1dGVz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDEyICsxMTIsMTcgQEAgcHVibGljOgogICAgIE1hcmtlZEFs
bG9jYXRvciogYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKHNpemVfdCk7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkKiBhbGxvY2F0ZShTdWJzcGFjZSYsIHNpemVfdCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoU3Vic3BhY2UmLCBEZWZlcnJhbENvbnRleHQqLCBzaXpl
X3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKFN1YnNwYWNlJiwg
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJzcGFj
ZSYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCogYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0
b3Ioc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCosIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZUF1eGlsaWFyeShEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIAogICAg
IFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1f
ZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhv
dXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTk1LDggKzIwMCw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJy
YXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgc2l6
ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNw
YWNlJiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNl
JiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVTaXplQ2xhc3NGb3JTdGVwU2l6ZSgpOwogICAgIApAQCAtMjY0LDYgKzI2OSwxNiBAQCBpbmxp
bmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlCiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fZGVzdHJ1Y3RvclNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFj
ZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0ZShtX25vcm1hbFNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fZGVzdHJ1Y3RvclNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fYXV4aWxpYXJ5U3BhY2UsIGJ5dGVzKTsKQEAgLTI3NCw2ICsyODksMTEgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eAogICAgIHJldHVybiB0cnlBbGxvY2F0ZSht
X2F1eGlsaWFyeVNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9hdXhpbGlhcnlTcGFjZSwg
ZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMwNiwxNyArMTMwNiw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVT
dHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIg
c3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuV2l0aG91dEZlbmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5j
aDgoQWJvdmUsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1l
bWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW5XaXRob3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhf
dCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpj
ZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRl
QWRkcmVzcyhhZGRyZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQog
ICAgIAorICAgIEp1bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNl
bGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxs
LCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAu
YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25l
YWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRj
aEdQUikKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxv
YWQ4KGFkZHJlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUs
IHNjcmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJs
YWNrVGhyZXNob2xkKCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldp
dGhvdXRGZW5jZShjZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9h
ZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhv
dXRGZW5jZShjZWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJy
aWVycygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
QmFycmllclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhl
IGJyYW5jaCBzdHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRv
ZXNuJ3QgZmFsbCB0aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9z
ZSBwb2ludHMgd2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2Ug
dGhpcyBpcyB0bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQg
dGhlIHR5cGUgc3RyaW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwp
OwogfQogCi0vLyBOQjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUg
YmFycmllciBiZWNhdXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRo
ZSBERkcgb25seSB0cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMg
YmVlbiBiYXJyaWVyZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRv
IHRyeSB0byBtb2RlbCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVC
YXJyaWVyU2xvd1BhdGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTIsOCArNDEyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9J
TlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldy
aXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAt
Njg0LDYgKzY4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1
ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IH0KIApAQCAtMTE4MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJl
Z1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
CiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihyZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCku
aXNNYXJrZWQob3duZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25l
cik7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNo
ZWNrKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2Vz
KQpAQCAtMTM5MCw4ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxs
cy5sYXN0KCkudG8gPT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25k
aXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9
PSBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwog
ICAgIH0KICAgICAKICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4
OTEsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAog
bWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVt
ZmVuY2UKICAgICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQs
IC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNywx
MiBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAgICAgICAg
JGFzbS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcmRlck9wZXJhbmRzKG9wZXJhbmRz
WzBdLng4NkFkZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDpwdHIp
KX0iCiAgICAgICAgIHdoZW4gIm1lbWZlbmNlIgotICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVu
Y2UiCisgICAgICAgICAgICBzcCA9IFJlZ2lzdGVySUQubmV3KG5pbCwgInNwIikKKyAgICAgICAg
ICAgIGlmIGlzSW50ZWxTeW50YXgKKyAgICAgICAgICAgICAgICAkYXNtLnB1dHMgImxvY2s7IG9y
bCAkMCwgKCN7c3AueDg2T3BlcmFuZCg6cHRyKX0pIgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICRhc20ucHV0cyAibWZlbmNlIgorICAgICAgICAgICAgZW5kCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9u
CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAotSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQorSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYg
dm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzYsNyArNzYs
NyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAg
ICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3Ry
dWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5
QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZM
aW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShkZWZl
cnJhbENvbnRleHQsIG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7
CkBAIC0xMDQsNyArMTA0LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZAogICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwx
NyBAQCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgIHN0YXRpYyBK
U0FycmF5KiBjcmVhdGVXaXRoQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7
CisgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mLCBEZWZlcnJhbENv
bnRleHQqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIC8vIHRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNp
emUgYW5kCiAgICAgLy8gY29udGVudHMgYXJlIGtub3duIGF0IHRpbWUgb2YgY3JlYXRpb24uIENs
aWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoKICAgICAvLyAgIC0gbnVsbC1jaGVjayB0aGUg
cmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1vcnksIG9yIG90aGVyd2lzZSB1bmFibGUgdG8g
YWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAgIC0gY2FsbCAnaW5pdGlhbGl6ZUluZGV4JyBmb3Ig
YWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZvciAwIDw9IGkgPCBpbml0aWFsTGVuZ3RoLgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxp
emVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBE
ZWZlcnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIG51bGxwdHIsIHN0cnVjdHVyZSwgaW5pdGlh
bExlbmd0aCk7CisgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC0yMzEsMTIg
KzIzNSwxMiBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAg
ICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIG51bGxwdHIsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAotaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0
ZVdpdGhCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCitpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseShW
TSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgSlNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwKSkgSlNBcnJheSh2bSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNBcnJheSh2
bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgcmV0dXJuIGFycmF5OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBEZWZlcnJhbENvbnRleHQ7CiBjbGFz
cyBFeGVjU3RhdGU7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7
CkBAIC01Myw2ICs1NCw5IEBAIGNsYXNzIFN0cnVjdHVyZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBh
bGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQq
IGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7
CisKICNkZWZpbmUgREVDTEFSRV9FWFBPUlRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBwcm90ZWN0ZWQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyBzX2luZm87ICAgICAgICAgICAgIFwK
QEAgLTcwLDYgKzc0LDggQEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxsIHsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJp
ZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBEZWZlcnJhbENvbnRleHQq
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhl
YXAmLCBEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDYgKzE0MiwyNSBAQCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAg
ICByZXR1cm4gYWxsb2NhdGVDZWxsPFQ+KGhlYXAsIHNpemVvZihUKSk7CiB9CiAgICAgCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIERlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2l6
ZSA+PSBzaXplb2YoVCkpOworICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcC5hbGxvY2F0ZU9iamVjdE9mVHlwZTxUPihkZWZlcnJhbENvbnRleHQsIHNpemUpKTsK
KyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0
aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RD
bGFzcyhUOjppbmZvKCkpOworI2VuZGlmCisgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQoreworICAgIHJldHVybiBhbGxvY2F0ZUNlbGw8VD4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBz
aXplb2YoVCkpOworfQorICAgIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFR5cGVJbmZvOjppc09iamVjdChtX3R5cGUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MTgsNyArNDE4LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlz
IG1ldGhvZCBtYXkgY2FsbCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhp
cyBpcyBzdXBwb3NlZAogICAgIC8vIHRvIHdvcmsuCi0gICAgdm9pZCBpbml0aWFsaXplSW5kZXgo
Vk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVk
IGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CkBAIC00NjgsNiArNDY4LDU0IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAgICAgCisgICAgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmll
cih1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgeworICAgICAgICBpbml0aWFsaXplSW5kZXhX
aXRob3V0QmFycmllcihpLCB2LCBpbmRleGluZ1R5cGUoKSk7CisgICAgfQorCisgICAgLy8gVGhp
cyB2ZXJzaW9uIG9mIGluaXRpYWxpemVJbmRleCBpcyBmb3IgY2FzZXMgd2hlcmUgeW91IGtub3cg
dGhhdCB5b3Ugd2lsbCBub3QgbmVlZCBhbnkKKyAgICAvLyBiYXJyaWVycy4gVGhpcyBpbXBsaWVz
IG5vdCBoYXZpbmcgYW55IGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCisgICAgeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSkgeworICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2LmlzSW50MzIoKSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9ET1VCTEVf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodi5pc051bWJlcigpKTsKKyAgICAg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IHYuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHZhbHVlID09IHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKICAgICBib29s
IGhhc1NwYXJzZU1hcCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CkBAIC02NDIsNiArNjkwLDcgQEAgcHVibGljOgogICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3du
IHByb3BlcnR5IG9mZnNldHMuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdCB7IHJldHVybiBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5nZXQoKTsg
fQogICAgIHZvaWQgcHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1Zh
bHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFs
dWUpOyB9CisgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0QmFycmllcihQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7IH0KICAgICB2b2lkIHB1dERpcmVjdFVuZGVmaW5lZChQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0VW5k
ZWZpbmVkKCk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0TmF0aXZl
SW50cmluc2ljR2V0dGVyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyLCBOYXRpdmVG
dW5jdGlvbiwgSW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY2LDEzICszNjYsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJzdHJpbmdP
ZlJlc29sdmVkKFZNJiB2bSwgSlNTdHJpbmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJz
dHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7
Ci0gICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKKyAgICAgICAg
SlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Jv
cGVTdHJpbmc+KHZtLmhlYXAsIGRlZmVycmFsQ29udGV4dCkpIEpTUm9wZVN0cmluZyh2bSk7CiAg
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb25TdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBi
YXNlLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQog
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVz
b2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgbnVsbHB0ciwgYmFzZSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIH0KKwogICAgIHZvaWQgdmlz
aXRGaWJlcnMoU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZG
aWJlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSb3BlU3RyaW5nLCB1KTsgfQpAQCAt
NDkyLDYgKzQ5Nyw3IEBAIGlubGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkK
ICAgICByZXR1cm4ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUuYXNDZWxsKCkpOwogfQogCisvLyBU
aGlzIE1VU1QgTk9UIEdDLgogaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNKiB2bSkK
IHsKICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwpAQCAtNTgyLDcg
KzU4OCw3IEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBFeGUKICAgICBy
ZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsK
IH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0
cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgQVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3Ro
KCkpKTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5n
dGgoKSkpOwpAQCAtNTkxLDcgKzU5NywxMiBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
T2ZSZXNvbHZlZChWCiAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmco
KTsKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gcy0+bGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybiBzOwotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVh
dGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBkZWZlcnJhbENvbnRleHQsIHMsIG9mZnNldCwgbGVu
Z3RoKTsKK30KKworaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZt
LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgbnVsbHB0ciwgcywgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNiArMTgyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Ym9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
Ym9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAsIE5vcm1h
bCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwyOSArMzYsMzEgQEAgSlNBcnJheSogY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVz
QXJyYXkoSgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlv
biBlcnJvcnMgZ3JhY2VmdWxseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAgICAgCisgICAgRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpICsgMSk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAw
LCBqc0VtcHR5U3RyaW5nKCZ2bSkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0
aG91dEJhcnJpZXIoMCwganNFbXB0eVN0cmluZygmdm0pKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytp
KQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFy
cmllcihpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xv
YmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJl
Z0V4cE1hdGNoZXNBcnJheSh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdF
eHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAgICAgCi0gICAgICAgIGFycmF5
LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29u
dGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigw
LCBqc0VtcHR5U3RyaW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAg
ICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRl
cm5zOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwg
anNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgYXJy
YXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVkKCksIEFycmF5
V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXJyYXktPnB1dERpcmVj
dCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIoLTEp
KTsKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3Bl
cnR5T2Zmc2V0LCBpbnB1dCk7CisgICAgYXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJl
Z0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7CisgICAg
YXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJv
cGVydHlPZmZzZXQsIGlucHV0KTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBS
ZWdFeHBNYXRjaGVzQXJyYXlfaAogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRlZmVycmFsQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0z
MiwxMyArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZz
ZXQgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCA9IDEwMDsKIHN0YXRpYyBj
b25zdCBQcm9wZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0
ID0gMTAxOwogCi1BTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRS
ZWdFeHBNYXRjaGVzQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKK0FMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFs
aXplZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsK
ICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0
b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIs
IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
dHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQq
IHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgbnVs
bHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAg
aWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKQEAgLTQ4LDcgKzQ5LDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlD
cmVhdGVVbmluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xl
YXIoKTsKICAgICAKLSAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0
dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAog
QUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCkBAIC03Nyw0
NyArNzgsNDQgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAg
IAogICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
OwogICAgIAorICAgIERlZmVycmFsQ29udGV4dCBkZWZlcnJhbENvbnRleHQodm0uaGVhcCk7Cisg
ICAgCiAgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkg
ewotICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGds
b2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRlcm5z
ICsgMSk7CisgICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2
bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1
Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKICAgICAgICAgCiAgICAgICAgIHNldFByb3Bl
cnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAs
IGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgdGhl
IG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCi0gICAgICAgIAotICAgICAgICBhcnJheS0+
aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBy
ZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpKTsKKyAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJl
c3VsdC5zdGFydCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CiAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0
ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlOwogICAgICAgICAg
ICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRl
eCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1
dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAg
ICAgICAgICAgIHZhbHVlID0gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVk
KHZtLCAmZGVmZXJyYWxDb250ZXh0LCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIg
KiBpICsgMV0gLSBzdGFydCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFs
dWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKGksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xv
YmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMg
KyAxKTsKKyAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hl
c0FycmF5KHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcnJheSk7CiAgICAgICAgIAogICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CiAgICAgICAg
IAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAg
ICAgICAKICAgICAgICAgLy8gTm93IHRoZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdDLgog
Ci0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNv
bHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCks
IEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0
aG91dEJhcnJpZXIoMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0
LCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwgQXJyYXlX
aXRoQ29udGlndW91cyk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBh
dHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAg
ICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlX
aXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCBzdGFy
dCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBh
cnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwgdmFsdWUsIEFycmF5V2l0aENv
bnRpZ3VvdXMpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIGFycmF5OwogfQogCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdp
dGggVFNPCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjIzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEFkZGVkIGNsZWFyUmFuZ2UoKSwgd2hpY2ggcXVpY2tseSBjbGVhcnMgYSByYW5nZSBv
ZiBiaXRzLiBUaGlzIHR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGZvcgorICAgICAgICBhIERGRyBv
cHRpbWl6YXRpb24gcGFzcy4KKworICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZSk6CisgICAgICAgICogd3RmL0Zh
c3RCaXRWZWN0b3IuaDoKKwogMjAxNi0wOS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIE5lZWQgYSBzdG9yZS1sb2FkIGZlbmNlIGJldHdlZW4gc2V0dGluZyBj
ZWxsIHN0YXRlIGFuZCB2aXNpdGluZyB0aGUgb2JqZWN0IGluIFNsb3RWaXNpdG9yCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93
dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDI0IEBAIHZv
aWQgRmFzdEJpdFZlY3RvcldvcmRPd25lcjo6cmVzaXplU2xvdygKICAgICBtX3dvcmRzID0gbmV3
QXJyYXk7CiB9CiAKK3ZvaWQgRmFzdEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZShzaXplX3QgYmVnaW4s
IHNpemVfdCBlbmQpCit7CisgICAgaWYgKGVuZCAtIGJlZ2luIDwgMzIpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpCisgICAgICAgICAgICBhdChpKSA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHNpemVfdCBlbmRCZWdpblNs
b3AgPSAoYmVnaW4gKyAzMSkgJiB+MzE7CisgICAgc2l6ZV90IGJlZ2luRW5kU2xvcCA9IGVuZCAm
IH4zMTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmRCZWdpblNsb3A7
ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW5F
bmRTbG9wOyBpIDwgZW5kOyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChz
aXplX3QgaSA9IGVuZEJlZ2luU2xvcCAvIDMyOyBpIDwgYmVnaW5FbmRTbG9wIC8gMzI7ICsraSkK
KyAgICAgICAgbV93b3Jkcy53b3JkKGkpID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9X
VEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDYgKzQ2OCw4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJXb3Jkcz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289875</attachid>
            <date>2016-09-26 14:45:30 -0700</date>
            <delta_ts>2016-09-27 12:39:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYyMjEpOiBbVVNFUl0gY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29y
ZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQAog
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjkx
RDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyB9OworCQkwRjdGOTg4
QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgz
MjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTMsNiAr
NjE1LDggQEAKIAkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OwogCQkwRkI0MTU4NDFENzhGQjRD
MDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlD
b252ZW50aW9ucy5jcHAgKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1
Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJ
CTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIERlZmVycmFsQ29udGV4dElubGluZXMu
aCAqLzsgfTsKIAkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3
MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKIAkJMEZCNEZC
NzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8q
IEZUTExhenlTbG93UGF0aC5oICovOyB9OwogCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCAqLzsgfTsKQEAgLTI3NDMsNiArMjc0Nyw4IEBACiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4
MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBN
YXJrZWRTcGFjZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkU3BhY2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODg5
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYx
MkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1Miw2ICsyODU4LDggQEAKIAkJMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBB
cnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0
MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWxDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlm
aWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAw
M0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBw
YXRoID0gZGZnL0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgzLDYgKzUyOTEsOCBAQAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2
YXRpdmVSb290cy5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAor
CQkJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBEZWZlcnJhbENvbnRleHQuaCAqLywKKwkJ
CQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICov
LAogCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICov
LAogCQkJCTBGOTYzMDM4MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLywK
IAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgKi8sCkBAIC02NTU1LDYgKzY1NjUsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBG
NEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NjAsNyBAQAogCQkJCTBGNjE4
MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAw
RjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYg
LyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUw
NzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgzMjgsNiArODM0MSw3IEBACiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFC
Nzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogRGVmZXJyYWxDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzcwLDYgKzgz
ODQsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIERlZmVycmFs
Q29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MkQ4NUI3MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTA5OCw2ICs5MTEzLDcgQEAKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4
MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDYgKzM3NCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0cihjb25kLCBvcDEsIGltbSkubGlua1RvKHRhcmdl
dCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJzb2x1dGVBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAoY29uZCksIHJpZ2h0LCBsZWZ0KTsKKyAgICB9CisK
ICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBv
cDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gz
Mihjb25kLCBvcDEsIG9wMikubGlua1RvKHRhcmdldCwgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMy
OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyOCw2ICs4
MjksMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBK
dW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSArMTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0
ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVk
IHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
c3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2Nh
dGluZ0lubGluZSkgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGpp
dC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQz
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZm
ZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2Yg
LXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIu
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsK
LSAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUg
c3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAg
ICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4g
aWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8o
R2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwK
LSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0
YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAg
bWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZs
eSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODQ0LDExICsyODQ0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9y
ZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA1LDExICs0MDUsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToK
ICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxs
X2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICBy
ZWFkKEhlYXApOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0
YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0
Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUo
R3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgog
ICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBv
YnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVh
cHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwg
YnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5C
b3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAg
ICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJl
Z0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3Jh
cGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
Y2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9w
KCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmll
cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgXAogICAgIC8qIENoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0
aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3BlcmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9n
VGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAq
L1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
Rm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxl
bmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5V2l0CiAKICAgICBKU0FycmF5KiByZXN1bHQ7CiAgICAgaWYgKGJ1dHRlcmZseSkKLSAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgYXJyYXlTdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdpdGhC
dXR0ZXJmbHkodm0sIG51bGxwdHIsIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSwg
c2l6ZSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0
aW9uKGRmZyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZn
KTsKKyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92
YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBw
ZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAg
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoK
ICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5
V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGlu
ZyB0aGlzIG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJy
aWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBm
b3JjZXMgdGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJl
IHRoZXkgd2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXpl
IGVmZmVjdHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3Jk
ZXJlZCBwcmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAg
ICAgIC8vIGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCBy
aWdodCBub3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjgsMTggKzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVC
YXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFp
c0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCB2YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwg
dmFsdWUudGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigp
KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKQEAgLTUwMDcsNyArNDk5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJp
ZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NDc0LDIwICs1NDYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRn
ZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAg
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7
Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikK
IHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2Um
IHZhbHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hh
YmxlKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAg
ICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
CisgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMDIsNDYgKzgzMDIsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2Rl
KiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2Vk
U3RvcmVCYXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVz
dWx0KG5vZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5zbmVh
a3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZlN0
b3JlQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIG1faml0Lm1lbW9y
eUZlbmNlKCk7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0
Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAg
ICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4uYXBwZW5kKG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuV2l0
aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJh
cnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9G
bHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5j
YXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gy
KTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BS
KTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworICAg
IG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMiArMjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJp
ZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsK
LQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBH
UFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKLQogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0
aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJS
ZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03Mzgs
OCArNzMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUluKE5vZGUqKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ug
b3BlcmFuZCk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5k
ZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOwor
ICAgICAgICBtX2JhcnJpZXJQb2ludHMucmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAg
ICAgICAgICBkb0Jsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVh
clJhbmdlKDAsIGJsb2NrU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0
aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hp
bGRBbmRPcmlnaW4geworICAgICAgICBDaGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9kZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4pCisgICAgICAgICAgICA6IGNoaWxkKGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09y
aWdpbihzZW1hbnRpY09yaWdpbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjaGlsZCB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
Y09yaWdpbjsKKyAgICB9OworICAgIAorICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAg
Ly8gYmFja3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1
cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlm
IGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5v
ZGUuCisgICAgICAgIGJvb2wgZnV0dXJlR0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCBzbyBleGl0cyByZXF1aXJlIGNv
bnNlcnZhdGlzbS4gSWYgd2UgZXhpdCwgdGhlbiB0aGVyZQorICAgICAgICAgICAgLy8gcHJvYmFi
bHkgd2lsbCBiZSBhIEdDIGluIHRoZSBmdXR1cmUhIElmIHdlIG5lZWRlZCB0byB0aGVuIHdlIGNv
dWxkIGxpZnQgdGhhdAorICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgYnkgZWl0aGVyICgxKSBo
YXZpbmcgYSBTdG9yZUJhcnJpZXJIaW50IHRoYXQgdGVsbHMgT1NSIGV4aXQgdG8gT1NSIHRoYXQK
KyAgICAgICAgICAgIC8vIHZhbHVlIG9yICgyKSBhdXRvbWF0aWNhbGx5IGJhcnJpZXJpbmcgYW55
IERGRy1saXZlIE5vZGUgb24gT1NSIGV4aXQuIEVpdGhlciB3YXksIGl0CisgICAgICAgICAgICAv
LyB3b3VsZCBiZSB3ZWlyZCBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyByb290IGZvciBP
U1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLiBJCisgICAgICAgICAgICAvLyBkb24ndCBoYXZlIGV2
aWRlbmNlIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICBpZiAoZG9lc0dD
KG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQp
IHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAgbV9iYXJy
aWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVyZUdDID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2UgaGl0IGEg
YmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGggYSBmZW5j
ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYXBw
ZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNlbWFudGlj
KSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAg
ICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFu
ZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxk
IDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0g
c3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBt
X25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRB
bmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0
ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBp
dGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50
QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndpdGhTZW1h
bnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVy
cy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVjdG9yPENo
aWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgmIGdyYXBo
KQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmllcnMgdGhh
dCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3Ro
ZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhlIHByb2dy
YW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQorLy8gbWFr
ZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJhcnJpZXIg
d2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBwaGFzZSBh
bHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBjbHVzdGVy
IG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNhbWUgb2Jq
ZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJvcAorLy8g
b25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9uIHRoZSAi
ZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJlY3QiIHBy
b3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBhOiBDYWxs
KCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZlbmNlZFN0
b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAs
IEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBiYXJyaWVy
cyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2VlbiB0d28g
ZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNlIHRoZXJl
IGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUgaXMgbm8K
Ky8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2UgYmV0d2Vl
biBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2YgdGhlIGJh
cnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBvaW50IHdo
ZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIgQGYsIHNp
bmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIuIFdlIHVz
ZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hlbiB0aGUg
YmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLworLy8gICAg
IGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgZDog
UHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwgQHAsIEB6
KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5jZWRTdG9y
ZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6
IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhhc2UgZG9l
cyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVtb3ZlIGZl
bmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhhc2Ugd2ls
bCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlPZmZz
ZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQorLy8gICAg
IGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVy
KEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChA
cSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXByb3ZlcyBi
b3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhlIGNvbmN1
cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1wbGlmeWlu
ZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNlLiBJbgor
Ly8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQgdGhlIGZp
cnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtlIHNsb3cg
cGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRoZSBzbG93
IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIgYmFycmll
cnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8gcmVtZW1i
ZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1
dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJy
aWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBv
Y2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00MzAs
MTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5cbiIpOwot
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAgaW5zZXJ0
QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkK
ICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0aGUgb2Jq
ZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0gICAgICAg
IC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIgd2F5IG9m
IHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBvdGhlciBh
Y2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJvdmVkIG9u
ZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IKKyAgICAg
ICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5zZXRFcG9j
aChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hv
dWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpAQCAt
NDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1
cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNv
b2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAotICAgICAg
ICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBu
b3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8vIHdoZXJl
IGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEg
YmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJh
cnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9p
c3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5v
dy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7
Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhZnRlciB0
aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25vdworICAg
ICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNlLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBo
LCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
OworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3Jl
QmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsK
ICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLnRha2VW
YWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAogLy8gSW5z
ZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0IGNvbnN1
bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBlcG9jaC1i
YXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLiBUaGlz
IHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNlcyBhIHNp
bXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24g
bmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRoYXQgd2Ug
YXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlz
aXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0vLyBzaW1w
bGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJy
aWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVudCIgcHJv
cGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NB
LiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5l
c3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJh
cnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyByZXF1aXJl
cyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVu
ZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEy
ICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlB
ZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KICAg
ICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAgY29uc3Qg
QWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOwog
ICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRk
cmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9w
ZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xMTYs
NiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXQKICAg
ICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1
ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVuY2VSZWFk
KGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZv
ckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFic3RyYWN0
SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3JpdGUuYXBw
ZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0SGVhcFJl
cG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7CiAgICAg
cm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFwRm9yVmFs
dWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUt
PmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRz
ID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1f
aGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFs
dWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVu
Y2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVu
dHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBG
b3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3Jp
dGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUoY29uc3Qg
QWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQ
YXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9p
ZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAg
ICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCk7CiAK
QEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1f
aGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVhZDsKKyAg
ICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNl
IENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5j
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpA
QCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291bnRFeGVj
dXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIp
OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC04
MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0
dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZW1pdFN0
b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1biBhZnRl
ciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91
bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55
IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRW
YWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMu
Li4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9y
LCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAgICBQYXRj
aHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBW
ZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0MjksMjYg
KzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQz
MihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZh
bHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZTbmVha3lCbGFja1RocmVzaG9sZCgpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIo
YmxhY2tUaHJlc2hvbGQpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihi
bGFja1RocmVzaG9sZCkpLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShi
YXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8g
V2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBj
YXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMg
ZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBv
dXIgSklUIHJhdGhlciB0aGFuCiAgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXpp
bmcgaXQuCi0gICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmU3RvcmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VO
b3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChq
aXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW5XaXRob3V0RmVuY2UoYmFzZUdQUikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgt
PnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BS
KTsKQEAgLTExNDkzLDYgKzExNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRS
ZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0
ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUo
Jm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIAogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9pZCBPdXRwdXQ6OnN0b3Jl
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50
ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQorewor
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVl
KCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUs
IFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1UeXBlZFBv
aW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlwZWRQb2ludGVyIE91dHB1
dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICByZXR1cm4gVHlwZWRQb2lu
dGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5hbWVzcGFjZSBERkcKIAog
bmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBTbG90QmFzZVZhbHVlOwog
fSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExW
YWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBU
eXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOwogCiAgICAgTFZhbHVl
IGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMy
KFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9m
ZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3Mp
OworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKIAogICAg
IExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBm
aWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CiAg
ICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAm
IGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7
CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAxOyAvLyB4IDw9
IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
dGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0
YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9CiAKIGlubGluZSBib29s
IGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7CisgICAgcmV0dXJuIGlzV2l0
aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwogfQogCiBpbmxpbmUgQ2Vs
bFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworCitjbGFzcyBEZWZlcnJhbENvbnRleHQgeworICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitwdWJsaWM6
CisgICAgaW5saW5lIERlZmVycmFsQ29udGV4dChIZWFwJik7CisgICAgaW5saW5lIH5EZWZlcnJh
bENvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgYm9vbCBtX3No
b3VsZEdDIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlcnJhbENvbnRleHRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJyYWxDb250ZXh0SW5saW5lcy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVycmFsQ29u
dGV4dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVmZXJyYWxDb250ZXh0LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSBEZWZlcnJhbENvbnRleHQ6OkRlZmVycmFsQ29udGV4dChI
ZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCit7Cit9CisKK0FMV0FZU19JTkxJTkUgRGVm
ZXJyYWxDb250ZXh0Ojp+RGVmZXJyYWxDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoIURpc2FsbG93
R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOworI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQorICAgIEFTU0VSVCghbV9oZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkp
OworI2VuZGlmCisgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxkR0MpKQorICAgICAgICBtX2hlYXAu
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTQ5LDQgKzE1NDksMTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBT
YwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK3ZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIGlmIChV
TkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBj
YXNlLCB0aGUgc25lYWt5QmxhY2tUaHJlc2hvbGQgaXMgdGF1dG9sb2dpY2FsIGltcG9zc2libGUg
dGhyZXNob2xkLCBzbyBmcm9tCisgICAgICAgIC8vIGNvdWxkIHN0aWxsIGJlIG5vdCBibGFjay4g
QnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAg
ICAgICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+
Y2VsbFN0YXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQWxsb2NhdGlvblNjb3BlOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRWRlbkdD
QWN0aXZpdHlDYWxsYmFjazsKIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgRnVsbEdDQWN0
aXZpdHlDYWxsYmFjazsKQEAgLTEwNCw5ICsxMDUsMTQgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJhcnJp
ZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7
CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAgdm9p
ZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICAKKyAg
ICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IHNuZWFr
eUJsYWNrVGhyZXNob2xkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVy
U2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAg
ICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwpAQCAtMTQ5LDYgKzE1NSw3
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvckF1eGlsaWFyeURh
dGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5
KERlZmVycmFsQ29udGV4dCosIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICB2
b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCog
b2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICB2b2lkIGFzY3Jp
YmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKIApAQCAtMTY2LDcgKzE3Myw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29s
bGVjdGlvbik7Ci0gICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4KKyAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQg
ZGlkIGNvbGxlY3QuCiAgICAgdm9pZCBjb2xsZWN0QWNjb3JkaW5nVG9EZWZlckdDUHJvYmFiaWxp
dHkoKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQbGFucygpOwpAQCAtMjU0LDYgKzI2MSwx
MiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlQmxvY2soc2l6ZV90IGNhcGFjaXR5
KTsKICAgICB2b2lkIGRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpOworICAgIAorICAgIGJv
b2wgYmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyU2hvdWxk
QmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQ7IH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBzbmVha3lCbGFja1RocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc25lYWt5
QmxhY2tUaHJlc2hvbGQ7IH0KKyAgICBjb25zdCB1bnNpZ25lZCogYWRkcmVzc09mU25lYWt5Qmxh
Y2tUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiAmbV9zbmVha3lCbGFja1RocmVzaG9sZDsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9uU2NvcGU7CkBAIC0yNzgsMTIg
KzI5MSwxNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0OwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVf
dCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChI
ZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAog
ICAgIHZvaWQgY29sbGVjdFdpdGhvdXRBbnlTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25U
eXBlID0gQW55Q29sbGVjdGlvbik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGggZGVzdHJ1Y3RvcnMuCiAgICAg
dm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGgg
b2JqZWN0cyB3aXRob3V0IGRlc3RydWN0b3JzLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3Ry
dWN0b3IoRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhv
dXREZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBhbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QpOyAvLyBD
aG9vc2VzIG9uZSBvZiB0aGUgbWV0aG9kcyBhYm92ZSBiYXNlZCBvbiB0eXBlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFN
ZW1vcnkgPSAyNTY7CiAgICAgCkBAIC00MTEsNiArNDI5LDggQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJy
aWVyQnVmZmVyOworICAgIGJvb2wgbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpm
b3JjZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIHVuc2lnbmVkIG1fc25lYWt5QmxhY2tUaHJlc2hv
bGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0
RnVsbEdDTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEhlYXBJ
bmxpbmVzX2gKICNkZWZpbmUgSGVhcElubGluZXNfaAogCisjaW5jbHVkZSAiRGVmZXJyYWxDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCkBAIC0xMjUsMTkgKzEyNiwzMSBAQCBpbmxpbmUg
dm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmll
cigpOwogI2VuZGlmCi0gICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgp
KSkKKyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRvIHx8IHRvLT5j
ZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQorICAgIGlmICghaXNXaXRoaW5UaHJl
c2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChMSUtFTFko
IXRvIHx8IHRvLT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOwogfQogCiBpbmxpbmUgdm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYg
KCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+
Y2VsbFN0YXRlKCksIHNuZWFreUJsYWNrVGhyZXNob2xkKCkpKSkKKyAgICAgICAgd3JpdGVCYXJy
aWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldp
dGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9M
T09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKKyAgICBpZiAoIWZyb20pCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKFVO
TElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBibGFja1RocmVzaG9s
ZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lk
IEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQpAQCAtMjE0LDYg
KzIyNywxOCBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiAgICAg
cmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7CiB9
CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFs
aWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQq
IEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24o
Ynl0ZXMpKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVj
dG9yKGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFz
c1R5cGU+CiBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5
dGVzKQogewpAQCAtMjI2LDYgKzI1MSwxNiBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVP
YmplY3RPZlR5cGUoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KK2lubGluZSB2
b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNE
ZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1t
b3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9i
amVjdD46OnZhbHVlKSk7CisKKyAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQor
ICAgICAgICByZXR1cm4gYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5
dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRl
eHQsIGJ5dGVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogaW5saW5lIE1h
cmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3JPYmplY3RPZlR5cGUoKQogewog
ICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRo
IG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgpA
QCAtMjc0LDYgKzMwOSwxNyBAQCBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlh
cnkoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU0NlbGwqIGlu
dGVuZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVj
dFNwYWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworI2lm
IEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0
aW5nICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRl
ZE93bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5
UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2Us
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICB2b2lkKiBuZXdCYXNlID0g
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CkBAIC0zMTMsMTIg
KzM1OSwxNSBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoCiAgICAg
bV9kZWZlcnJhbERlcHRoLS07CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKQoraW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29sbGVjdCgpOworICAgIGlm
IChkZWZlcnJhbENvbnRleHQpCisgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9
IHRydWU7CisgICAgZWxzZQorICAgICAgICBjb2xsZWN0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDQ1ICsxNzUsNDkgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoKQorQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZChEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsK
ICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKICAgICBp
ZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgp
KQotICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBpZiAo
IW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0
KQorICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFn
ZSgpOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CiAgICAgfQogICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+
PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKICAgICAgICAgYWxsb2NhdGlv
bkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
KCkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsK
LSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1cmUpOworICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJl
KTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKCkKK3Zv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICByZXR1
cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7
CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoYm9vbCBj
cmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUlt
cGwoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAg
IEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UtPmlz
SXRlcmF0aW5nKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUpOwogICAgIAogICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIG1faGVh
cC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIEFsbG9jYXRpb25TY29w
ZSBhbGxvY2F0aW9uU2NvcGUoKm1faGVhcCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVmZXJyYWxDb250ZXh0
OwogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpAQCAtMTUyLDggKzE1Myw4IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNE
ZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9p
ZCogYWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZSgpOworICAgIHZvaWQqIGFsbG9j
YXRlKERlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShE
ZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1f
aGVhcDsgfQogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRha2VMYXN0QWN0aXZlQmxvY2soKQog
ICAgIHsKQEAgLTIxNiwxNSArMjE3LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBzaG91
bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpIGNvbnN0OwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZUltcGwoYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShEZWZlcnJhbENvbnRleHQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKERlZmVycmFsQ29udGV4dCopOwor
ICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKERlZmVycmFsQ29udGV4dCosIGJvb2wgY3Jh
c2hPbkZhaWx1cmUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCog
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IHRyeUFsbG9jYXRlQmxvY2soKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKERlZmVycmFsQ29u
dGV4dCopOwogICAgIAogICAgIHZvaWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKICAg
ICAKQEAgLTI2NSw3ICsyNjYsNyBAQCBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0CiAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2Vs
bFNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUoKQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
KERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIHVuc2lnbmVkIHJlbWFp
bmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwogICAgIGlmIChyZW1haW5pbmcpIHsKQEAgLTI3
NywxMyArMjc4LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnkK
ICAgICAKICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5M
SUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZSgpOworICAg
ICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAog
ICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZSgpCitBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5y
ZW1haW5pbmc7CiAgICAgaWYgKHJlbWFpbmluZykgewpAQCAtMjk1LDcgKzI5Niw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAgICAKICAgICBGcmVlQ2VsbCog
aGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93
Q2FzZShkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQt
Pm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwzMiArMjM1
LDU4IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIAogdm9pZCog
TWFya2VkU3BhY2U6OmFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBieXRlcywg
IiBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CiAgICAgaWYgKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsK
ICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
Ynl0ZXMpOworICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBudWxscHRyLCBieXRl
cyk7Cit9CisKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2Us
IERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAg
aWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIGJ5dGVzLCAiIGRlZmVy
cmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMsICIuXG4iKTsKKyAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkg
eworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0
ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKIH0KIAogdm9pZCogTWFy
a2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRpbmcgIiwgYnl0
ZXMsICIgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOwogICAgIGlmIChN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMp
KSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uo
c3Vic3BhY2UsIGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFjZSwg
bnVsbHB0ciwgYnl0ZXMpOworfQorCit2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGUoU3Vi
c3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90
IGJ5dGVzKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRp
bmcgIiwgYnl0ZXMsICIgZGVmZXJyZWQgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywg
Ii5cbiIpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
cihzdWJzcGFjZSwgYnl0ZXMpKSB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4
dCwgYnl0ZXMpOwogfQogCi12b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVMYXJnZShTdWJzcGFj
ZSYgc3Vic3BhY2UsIHNpemVfdCBzaXplKQordm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFy
Z2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJz
cGFjZSwgc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFj
ZSwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUxh
cmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIERlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKTsKKyAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVm
ZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVTdGVwPihzaXplKTsKICAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJn
ZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9oZWFwLCBzaXplLCBzdWJzcGFjZS5hdHRyaWJ1dGVz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDEyICsxMTIsMTcgQEAgcHVibGljOgogICAgIE1hcmtlZEFs
bG9jYXRvciogYXV4aWxpYXJ5QWxsb2NhdG9yRm9yKHNpemVfdCk7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkKiBhbGxvY2F0ZShTdWJzcGFjZSYsIHNpemVfdCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoU3Vic3BhY2UmLCBEZWZlcnJhbENvbnRleHQqLCBzaXpl
X3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKFN1YnNwYWNlJiwg
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJzcGFj
ZSYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCogYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0
b3Ioc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29u
dGV4dCosIHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVf
dCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZUF1eGlsaWFyeShEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIAogICAg
IFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3RvcigpIHsgcmV0dXJuIG1f
ZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhv
dXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpAQCAtMTk1LDggKzIwMCw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJy
YXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgc2l6
ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNw
YWNlJiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNl
JiwgRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVTaXplQ2xhc3NGb3JTdGVwU2l6ZSgpOwogICAgIApAQCAtMjY0LDYgKzI2OSwxNiBAQCBpbmxp
bmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlCiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fZGVzdHJ1Y3RvclNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFj
ZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0ZShtX25vcm1hbFNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fZGVzdHJ1Y3RvclNwYWNl
LCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRl
KG1fYXV4aWxpYXJ5U3BhY2UsIGJ5dGVzKTsKQEAgLTI3NCw2ICsyODksMTEgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eAogICAgIHJldHVybiB0cnlBbGxvY2F0ZSht
X2F1eGlsaWFyeVNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9hdXhpbGlhcnlTcGFjZSwg
ZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMwNiwxNyArMTMwNiw1NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVT
dHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIg
c3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuV2l0aG91dEZlbmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5j
aDgoQWJvdmUsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmSXNSZW1l
bWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW5XaXRob3V0RmVuY2UoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgdWludDhf
dCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpj
ZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRl
QWRkcmVzcyhhZGRyZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQog
ICAgIAorICAgIEp1bXAgc25lYWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNl
bGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVzcyhjZWxs
LCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAu
YWRkcmVzc09mU25lYWt5QmxhY2tUaHJlc2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgc25l
YWt5SnVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRj
aEdQUikKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxv
YWQ4KGFkZHJlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUs
IHNjcmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZlNuZWFreUJs
YWNrVGhyZXNob2xkKCkpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihHUFJSZWcgY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3Jl
TG9hZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldp
dGhvdXRGZW5jZShjZWxsKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0b3JlQmFycmllclN0b3JlTG9h
ZEZlbmNlKCk7CisgICAgICAgIHJldHVybiBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbldpdGhv
dXRGZW5jZShjZWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZUJhcnJpZXJTdG9yZUxv
YWRGZW5jZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJy
aWVycygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmU3Rv
cmVCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVuY2Uo
KTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1wSWZT
dG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
QmFycmllclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gRW1pdHMgdGhl
IGJyYW5jaCBzdHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRv
ZXNuJ3QgZmFsbCB0aHJvdWdoLiBUaGUKICAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9z
ZSBwb2ludHMgd2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2Ug
dGhpcyBpcyB0bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQg
dGhlIHR5cGUgc3RyaW5nIGludG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE3NywxNCArMjE3NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwp
OwogfQogCi0vLyBOQjogV2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUg
YmFycmllciBiZWNhdXNlIHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KLS8vIHBoYXNlIGluIHRo
ZSBERkcgb25seSB0cmFja3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMg
YmVlbiBiYXJyaWVyZWQuIEl0IAotLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRv
IHRyeSB0byBtb2RlbCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CisgICAgdm0tPmhlYXAud3JpdGVC
YXJyaWVyU2xvd1BhdGgoY2VsbCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTIsOCArNDEyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9J
TlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldy
aXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw4ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwotCiAgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2Niw4ICs2NjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAt
Njg0LDYgKzY4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1
ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IH0KIApAQCAtMTE4MCw4ICsxMTgwLDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJl
Z1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
CiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzbmVha3lKdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihyZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCku
aXNNYXJrZWQob3duZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25l
cik7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc25lYWt5SnVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNo
ZWNrKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2Vz
KQpAQCAtMTM5MCw4ICsxMzg3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxs
cy5sYXN0KCkudG8gPT0gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25k
aXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9
PSBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwog
ICAgIH0KICAgICAKICAgICBib29sIGlzRGlyZWN0ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4
OTEsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAog
bWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCisgICAgbWVt
ZmVuY2UKICAgICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQs
IC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTE1MjcsNyArMTUyNywx
MiBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAgICAgICAg
JGFzbS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcmRlck9wZXJhbmRzKG9wZXJhbmRz
WzBdLng4NkFkZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDpwdHIp
KX0iCiAgICAgICAgIHdoZW4gIm1lbWZlbmNlIgotICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVu
Y2UiCisgICAgICAgICAgICBzcCA9IFJlZ2lzdGVySUQubmV3KG5pbCwgInNwIikKKyAgICAgICAg
ICAgIGlmIGlzSW50ZWxTeW50YXgKKyAgICAgICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkYXNtLnB1dHMgImxvY2s7IG9ybCAk
MCwgKCN7c3AueDg2T3BlcmFuZCg6cHRyKX0pIgorICAgICAgICAgICAgZW5kCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9u
CiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAotSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQorSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYg
dm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzYsNyArNzYs
NyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAg
ICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3Ry
dWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5
QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZM
aW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShkZWZl
cnJhbENvbnRleHQsIG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7
CkBAIC0xMDQsNyArMTA0LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZAogICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwx
NyBAQCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgIHN0YXRpYyBK
U0FycmF5KiBjcmVhdGVXaXRoQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7
CisgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mLCBEZWZlcnJhbENv
bnRleHQqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIC8vIHRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNp
emUgYW5kCiAgICAgLy8gY29udGVudHMgYXJlIGtub3duIGF0IHRpbWUgb2YgY3JlYXRpb24uIENs
aWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoKICAgICAvLyAgIC0gbnVsbC1jaGVjayB0aGUg
cmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1vcnksIG9yIG90aGVyd2lzZSB1bmFibGUgdG8g
YWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAgIC0gY2FsbCAnaW5pdGlhbGl6ZUluZGV4JyBmb3Ig
YWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZvciAwIDw9IGkgPCBpbml0aWFsTGVuZ3RoLgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxp
emVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBE
ZWZlcnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIG51bGxwdHIsIHN0cnVjdHVyZSwgaW5pdGlh
bExlbmd0aCk7CisgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC0yMzEsMTIg
KzIzNSwxMiBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAg
ICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJmbHkodm0sIG51bGxwdHIsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAotaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0
ZVdpdGhCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCitpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseShW
TSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgSlNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwKSkgSlNBcnJheSh2bSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNBcnJheSh2
bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgcmV0dXJuIGFycmF5OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBEZWZlcnJhbENvbnRleHQ7CiBjbGFz
cyBFeGVjU3RhdGU7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7
CkBAIC01Myw2ICs1NCw5IEBAIGNsYXNzIFN0cnVjdHVyZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBh
bGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQq
IGFsbG9jYXRlQ2VsbChIZWFwJiwgRGVmZXJyYWxDb250ZXh0Kik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIERlZmVycmFsQ29udGV4dCosIHNpemVfdCk7
CisKICNkZWZpbmUgREVDTEFSRV9FWFBPUlRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBwcm90ZWN0ZWQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyBzX2luZm87ICAgICAgICAgICAgIFwK
QEAgLTcwLDYgKzc0LDggQEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxsIHsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJp
ZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBEZWZlcnJhbENvbnRleHQq
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhl
YXAmLCBEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDYgKzE0MiwyNSBAQCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAg
ICByZXR1cm4gYWxsb2NhdGVDZWxsPFQ+KGhlYXAsIHNpemVvZihUKSk7CiB9CiAgICAgCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIERlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2l6
ZSA+PSBzaXplb2YoVCkpOworICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oaGVhcC5hbGxvY2F0ZU9iamVjdE9mVHlwZTxUPihkZWZlcnJhbENvbnRleHQsIHNpemUpKTsK
KyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0
aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RD
bGFzcyhUOjppbmZvKCkpOworI2VuZGlmCisgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQoreworICAgIHJldHVybiBhbGxvY2F0ZUNlbGw8VD4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBz
aXplb2YoVCkpOworfQorICAgIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFR5cGVJbmZvOjppc09iamVjdChtX3R5cGUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MTgsNyArNDE4LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlz
IG1ldGhvZCBtYXkgY2FsbCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhp
cyBpcyBzdXBwb3NlZAogICAgIC8vIHRvIHdvcmsuCi0gICAgdm9pZCBpbml0aWFsaXplSW5kZXgo
Vk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVk
IGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CkBAIC00NjgsNiArNDY4LDU0IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAgICAgCisgICAgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmll
cih1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgeworICAgICAgICBpbml0aWFsaXplSW5kZXhX
aXRob3V0QmFycmllcihpLCB2LCBpbmRleGluZ1R5cGUoKSk7CisgICAgfQorCisgICAgLy8gVGhp
cyB2ZXJzaW9uIG9mIGluaXRpYWxpemVJbmRleCBpcyBmb3IgY2FzZXMgd2hlcmUgeW91IGtub3cg
dGhhdCB5b3Ugd2lsbCBub3QgbmVlZCBhbnkKKyAgICAvLyBiYXJyaWVycy4gVGhpcyBpbXBsaWVz
IG5vdCBoYXZpbmcgYW55IGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCisgICAgeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSkgeworICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2LmlzSW50MzIoKSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9ET1VCTEVf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodi5pc051bWJlcigpKTsKKyAgICAg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IHYuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHZhbHVlID09IHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKICAgICBib29s
IGhhc1NwYXJzZU1hcCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CkBAIC02NDIsNiArNjkwLDcgQEAgcHVibGljOgogICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3du
IHByb3BlcnR5IG9mZnNldHMuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdCB7IHJldHVybiBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5nZXQoKTsg
fQogICAgIHZvaWQgcHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1Zh
bHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFs
dWUpOyB9CisgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0QmFycmllcihQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7IH0KICAgICB2b2lkIHB1dERpcmVjdFVuZGVmaW5lZChQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0VW5k
ZWZpbmVkKCk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0TmF0aXZl
SW50cmluc2ljR2V0dGVyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyLCBOYXRpdmVG
dW5jdGlvbiwgSW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY2LDEzICszNjYsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJzdHJpbmdP
ZlJlc29sdmVkKFZNJiB2bSwgSlNTdHJpbmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJz
dHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7
Ci0gICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKKyAgICAgICAg
SlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Jv
cGVTdHJpbmc+KHZtLmhlYXAsIGRlZmVycmFsQ29udGV4dCkpIEpTUm9wZVN0cmluZyh2bSk7CiAg
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb25TdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBi
YXNlLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQog
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVz
b2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgbnVsbHB0ciwgYmFzZSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIH0KKwogICAgIHZvaWQgdmlz
aXRGaWJlcnMoU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZG
aWJlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSb3BlU3RyaW5nLCB1KTsgfQpAQCAt
NDkyLDYgKzQ5Nyw3IEBAIGlubGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkK
ICAgICByZXR1cm4ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUuYXNDZWxsKCkpOwogfQogCisvLyBU
aGlzIE1VU1QgTk9UIEdDLgogaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNKiB2bSkK
IHsKICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwpAQCAtNTgyLDcg
KzU4OCw3IEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBFeGUKICAgICBy
ZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsK
IH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0
cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgQVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3Ro
KCkpKTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5n
dGgoKSkpOwpAQCAtNTkxLDcgKzU5NywxMiBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
T2ZSZXNvbHZlZChWCiAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmco
KTsKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gcy0+bGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybiBzOwotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVh
dGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBkZWZlcnJhbENvbnRleHQsIHMsIG9mZnNldCwgbGVu
Z3RoKTsKK30KKworaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZt
LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgbnVsbHB0ciwgcywgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNiArMTgyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Ym9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
Ym9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAsIE5vcm1h
bCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwyOSArMzYsMzEgQEAgSlNBcnJheSogY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVz
QXJyYXkoSgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlv
biBlcnJvcnMgZ3JhY2VmdWxseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAgICAgCisgICAgRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpICsgMSk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAw
LCBqc0VtcHR5U3RyaW5nKCZ2bSkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0
aG91dEJhcnJpZXIoMCwganNFbXB0eVN0cmluZygmdm0pKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytp
KQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFy
cmllcihpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xv
YmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJl
Z0V4cE1hdGNoZXNBcnJheSh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdF
eHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAgICAgCi0gICAgICAgIGFycmF5
LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29u
dGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigw
LCBqc0VtcHR5U3RyaW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAg
ICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRl
cm5zOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwg
anNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgYXJy
YXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVkKCksIEFycmF5
V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXJyYXktPnB1dERpcmVj
dCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIoLTEp
KTsKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3Bl
cnR5T2Zmc2V0LCBpbnB1dCk7CisgICAgYXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJl
Z0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7CisgICAg
YXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJv
cGVydHlPZmZzZXQsIGlucHV0KTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShy
ZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBS
ZWdFeHBNYXRjaGVzQXJyYXlfaAogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRlZmVycmFsQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0z
MiwxMyArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZz
ZXQgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCA9IDEwMDsKIHN0YXRpYyBj
b25zdCBQcm9wZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0
ID0gMTAxOwogCi1BTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRS
ZWdFeHBNYXRjaGVzQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKK0FMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFs
aXplZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIERlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsK
ICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0
b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIs
IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
dHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQq
IHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgbnVs
bHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAg
aWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKQEAgLTQ4LDcgKzQ5LDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlD
cmVhdGVVbmluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2
ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xl
YXIoKTsKICAgICAKLSAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0
dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAog
QUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCkBAIC03Nyw0
NyArNzgsNDQgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAg
IAogICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
OwogICAgIAorICAgIERlZmVycmFsQ29udGV4dCBkZWZlcnJhbENvbnRleHQodm0uaGVhcCk7Cisg
ICAgCiAgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkg
ewotICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGds
b2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRlcm5z
ICsgMSk7CisgICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2
bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1
Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKICAgICAgICAgCiAgICAgICAgIHNldFByb3Bl
cnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAs
IGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgdGhl
IG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCi0gICAgICAgIAotICAgICAgICBhcnJheS0+
aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBy
ZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpKTsKKyAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJl
c3VsdC5zdGFydCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CiAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0
ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlOwogICAgICAgICAg
ICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRl
eCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1
dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAg
ICAgICAgICAgIHZhbHVlID0gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVk
KHZtLCAmZGVmZXJyYWxDb250ZXh0LCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIg
KiBpICsgMV0gLSBzdGFydCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFs
dWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKGksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xv
YmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMg
KyAxKTsKKyAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hl
c0FycmF5KHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcnJheSk7CiAgICAgICAgIAogICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CiAgICAgICAg
IAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1VuZGVmaW5lZCgpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAg
ICAgICAKICAgICAgICAgLy8gTm93IHRoZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdDLgog
Ci0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNv
bHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCks
IEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0
aG91dEJhcnJpZXIoMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0
LCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwgQXJyYXlX
aXRoQ29udGlndW91cyk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBh
dHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAg
ICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlX
aXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCBzdGFy
dCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBh
cnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwgdmFsdWUsIEFycmF5V2l0aENv
bnRpZ3VvdXMpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIGFycmF5OwogfQogCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdp
dGggVFNPCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjIzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEFkZGVkIGNsZWFyUmFuZ2UoKSwgd2hpY2ggcXVpY2tseSBjbGVhcnMgYSByYW5nZSBv
ZiBiaXRzLiBUaGlzIHR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGZvcgorICAgICAgICBhIERGRyBv
cHRpbWl6YXRpb24gcGFzcy4KKworICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZSk6CisgICAgICAgICogd3RmL0Zh
c3RCaXRWZWN0b3IuaDoKKwogMjAxNi0wOS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIE5lZWQgYSBzdG9yZS1sb2FkIGZlbmNlIGJldHdlZW4gc2V0dGluZyBj
ZWxsIHN0YXRlIGFuZCB2aXNpdGluZyB0aGUgb2JqZWN0IGluIFNsb3RWaXNpdG9yCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9GYXN0Qml0VmVjdG9yLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL1dURi93
dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDI0IEBAIHZv
aWQgRmFzdEJpdFZlY3RvcldvcmRPd25lcjo6cmVzaXplU2xvdygKICAgICBtX3dvcmRzID0gbmV3
QXJyYXk7CiB9CiAKK3ZvaWQgRmFzdEJpdFZlY3Rvcjo6Y2xlYXJSYW5nZShzaXplX3QgYmVnaW4s
IHNpemVfdCBlbmQpCit7CisgICAgaWYgKGVuZCAtIGJlZ2luIDwgMzIpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpCisgICAgICAgICAgICBhdChpKSA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHNpemVfdCBlbmRCZWdpblNs
b3AgPSAoYmVnaW4gKyAzMSkgJiB+MzE7CisgICAgc2l6ZV90IGJlZ2luRW5kU2xvcCA9IGVuZCAm
IH4zMTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmRCZWdpblNsb3A7
ICsraSkKKyAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW5F
bmRTbG9wOyBpIDwgZW5kOyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChz
aXplX3QgaSA9IGVuZEJlZ2luU2xvcCAvIDMyOyBpIDwgYmVnaW5FbmRTbG9wIC8gMzI7ICsraSkK
KyAgICAgICAgbV93b3Jkcy53b3JkKGkpID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9X
VEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDYgKzQ2OCw4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJXb3Jkcz4K
</data>
<flag name="review"
          id="313057"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289998</attachid>
            <date>2016-09-27 12:39:01 -0700</date>
            <delta_ts>2016-09-28 09:51:02 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126710</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDYyMjEpOiBbVVNFUl0gY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29y
ZTogdm1FbnRyeVRvSmF2YVNjcmlwdCArIDI5OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQAog
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggKi87IH07CiAJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVFMiAvKiBNYXJr
ZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0M1RkI3MUQ4ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzVGQkExRDg4OTUwNzAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjkx
RDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyB9OworCQkwRjdGOTg4
QjFEOTU5NkM1MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODg5MUQ5
NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgz
MjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2MDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTMsNiAr
NjE1LDggQEAKIAkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OTExQkZE
MzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OwogCQkwRkI0MTU4NDFENzhGQjRD
MDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlD
b252ZW50aW9ucy5jcHAgKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1
Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJ
CTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAw
OEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCNDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVm
ZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNs
b3dQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovOyB9Owog
CQkwRkI0RkI3NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAy
NUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi87IH07CiAJCTBGQjRGQjc1MUJDODQzMTQwMDI1
Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNs
b3dQYXRoQ2FsbC5oICovOyB9OwpAQCAtMjc0Myw2ICsyNzQ3LDggQEAKIAkJMEY3QzM5RkUxQzkw
QzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdPcEluZm8uaDsgcGF0aCA9IGRmZy9ERkdPcEluZm8uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzVGQjkxRDg4OTUwNTAwNDRG
NUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYXJrZWRTcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODhBMUQ5NTk2
QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7
IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODUyLDYgKzI4NTgsOCBAQAogCQkwRkIz
ODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29tcGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDb21waWxlLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDE1ODMxRDc4Rjk4MjAwREY4
RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJy
YWxDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3NjdEMUQ5OUFFQTcw
MDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkSUQuaDsgcGF0
aCA9IGRmZy9ERkdNaW5pZmllZElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWxsb2NhdG9yLmg7IHBhdGggPSBkZmcvREZHQWxsb2NhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTFBMTZCNjI3NzIwMDNGNjk2
QiAvKiBERkdDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTI5NCw2ICs1MzAyLDggQEAKIAkJCQkyQUFDRTYzQTE4Q0E1QTAzMDBF
RDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQkyQUFDRTYzQjE4Q0E1QTAz
MDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAorCQkJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovLAorCQkJCTBGQjQ3NjdEMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3
QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCiAJCQkJ
MEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8s
CkBAIC02NTU1LDYgKzY1NjUsOCBAQAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBE
RkdTdGFja0xheW91dFBoYXNlLmggKi8sCiAJCQkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8q
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjRG
MjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaCAqLywKKwkJCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUg
LyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RTMyNjExQjA1
QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC03OTQ4LDYgKzc5NjAsNyBAQAogCQkJCTBGNjE4MzJBMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0
ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJF
IC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0
MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTgzMjgsNiArODM0MSw3IEBACiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcyQkEzIC8q
IFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFCNzk2RUNF
MDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEIxMUJENTk5NEUwMEY0NTc1QyAvKiBVcGRhdGVD
b250ZW50cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAv
KiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ4MTQ2MENCQjMwMDEz
MUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTgzNzAsNiArODM4NCw3
IEBACiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NEZWZlcnJhbENv
bnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjJEODVCNzFDMEQ2
NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggaW4gSGVhZGVycyAq
LywKQEAgLTkwOTgsNiArOTExMyw3IEBACiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURD
NzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3
Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3Jh
cGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFC
QThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw2ICszNzQsMTEgQEAg
cHVibGljOgogICAgICAgICBicmFuY2hQdHIoY29uZCwgb3AxLCBpbW0pLmxpbmtUbyh0YXJnZXQs
IHRoaXMpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIEFic29sdXRlQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBicmFuY2gzMihmbGlwKGNvbmQpLCByaWdodCwgbGVmdCk7CisgICAgfQorCiAg
ICAgdm9pZCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgb3Ax
LCBSZWdpc3RlcklEIG9wMiwgTGFiZWwgdGFyZ2V0KQogICAgIHsKICAgICAgICAgYnJhbmNoMzIo
Y29uZCwgb3AxLCBvcDIpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
cmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKICAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YW5kMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmJyYW5jaDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpicmFuY2hBZGQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6b3IzMjsK
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3ViMzI7CkBAIC04MjgsNiArODI5
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ybShyaWdodCwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsK
ICAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGxlZnQubV9wdHIsIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIHNjcmF0Y2hSZWdpc3RlcigpLCByaWdodCk7CisgICAgfQogCiAgICAgSnVt
cCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMDksMjkgKzEzMDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVl
KSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBoYWQgYWxsb2NhdGVk
IHVzaW5nIGFuIG9wZXJhdGlvbiB0aGVuIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBleGVjdXRlZCB0
aGUgc3RvcmUKLSAgICAgICAgLy8gYmFycmllciBhbmQgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHN0
b3JlZCB0aGUgYnV0dGVyZmx5IGludG8gdGhlIG9iamVjdC4KICAgICAgICAgaWYgKGFsbG9jYXRp
bmdJbmxpbmUpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQu
dm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgICAgIGppdC5sb2FkMzIo
d3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwot
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFuY2gz
MigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3
cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVy
KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1z
aXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgot
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0gICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIzLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0g
ICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7Ci0gICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhlIHN0
cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQKICAgICAgICAgICAg
IC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQgaXMgZm9yZ290dGVuIGlm
IHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAgLy8gcGF0aC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkgXAogICAgIG1hY3JvKEdl
dHRlclNldHRlcl9nZXR0ZXIpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyKSBcCi0g
ICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCisgICAgbWFjcm8oSlNDZWxsX2NlbGxTdGF0
ZSkgXAogICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUpIFwKKyAgICBtYWNybyhKU0NlbGxf
c3RydWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9GbGFncykgXAogICAgIG1h
Y3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUpIFwKICAgICBtYWNybyhKU09iamVjdF9idXR0ZXJmbHkp
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg0NCwxMSArMjg0NCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgU3RvcmVC
YXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJh
cnJpZXI6IHsKICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NS
RW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNSwxMSArNDA1LDIwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAg
ICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAg
Y2FzZSBQdXRIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICByZWFkKEpTQ2VsbF9j
ZWxsU3RhdGUpOworICAgICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKKyAgICAgICAgcmVh
ZChIZWFwKTsKKyAgICAgICAgd3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHJldHVy
bjsKKwogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNo
cG9pbnRfZmlyZSksIExhenlOb2RlKG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdy
YXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
KyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAg
ICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMgb2Jz
ZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCiAgICAgICAgIC8vIGhlYXBz
IGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QsIGJ1
dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYg
KzE5Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFN0
b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIEludmFs
aWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBDaGVja0luQm91
bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDYgKzE0MDIsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAg
Y2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAg
ICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdF
eHBPYmplY3RMYXN0SW5kZXg6CiAgICAgICAgIGNhc2UgUmVjb3JkUmVnRXhwQ2FjaGVkUmVzdWx0
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lv
biAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBo
JiBncmFwaCwgTm9kZSoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgUHV0U3RydWN0
dXJlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVy
OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgIGNh
c2UgUmVjb3JkUmVnRXhwQ2FjaGVkUmVzdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsNyArODk3LDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc1N0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBT
dG9yZUJhcnJpZXI7CisgICAgICAgIHJldHVybiBvcCgpID09IFN0b3JlQmFycmllciB8fCBvcCgp
ID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICB9CiAKICAgICBib29sIGhhc0lkZW50aWZpZXIo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzYsOCArMzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIFwKICAgICAvKiBDaGVja3MgdGhlIHdhdGNoZG9nIHRpbWVyLiBJZiB0aGUgdGlt
ZXIgaGFzIGZpcmVkLCB3ZSBjYWxsIG9wZXJhdGlvbiBvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1Rp
bWVyKi8gXAogICAgIG1hY3JvKENoZWNrV2F0Y2hkb2dUaW1lciwgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCisgICAgLyogV3JpdGUgYmFycmllcnMgKi9c
CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
RmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEZv
ci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAogICAgIG1hY3JvKEdldEVudW1lcmFibGVMZW5n
dGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJ
KHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKIAogc3RhdGljIHZvaWQgb3Ny
V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3Jh
dGNoKQogewotICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKKyAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5iYXJyaWVyQnJh
bmNoV2l0aG91dEZlbmNlKG93bmVyKTsKIAogICAgIC8vIFdlIG5lZWQgdGhlc2UgZXh0cmEgc2xv
dHMgYmVjYXVzZSBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUgd2lsbCB1c2UgcG9rZSBvbiB4
ODYuCiAjaWYgQ1BVKFg4NikKQEAgLTI2OSw2ICsyNjksOCBAQCBzdGF0aWMgdm9pZCBvc3JXcml0
ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAKIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKKyAgICBqaXQubWVtb3J5
RmVuY2UoKTsKKyAgICAKICAgICBqaXQubW92ZSgKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKAogICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVy
bmF0aXZlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQ5LDcgKzEwNDksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0CiAKICAgICBKU0FycmF5KiByZXN1bHQ7CiAgICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAg
cmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgYXJyYXlTdHJ1Y3R1cmUs
IGJ1dHRlcmZseSk7CisgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0ZXJm
bHkodm0sIG51bGxwdHIsIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGVsc2UKICAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSwgc2l6ZSk7
CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
NyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGFj
a0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0
aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5oIgpAQCAtMzYyLDYgKzM2Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRm
Zyk7CiAKICAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsKKyAg
ICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAgcGVyZm9y
bUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1EQ0UoZGZnKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUdsb2JhbFN0
b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZyhkZmcpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlTW92SGludFJlbW92YWwoKSkK
ICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3Jt
Q2xlYW5VcChkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTUsNiArOTk1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgIGNh
c2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAg
ICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNjM2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIFN0b3JlQmFy
cmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6
CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpAQCAtMzcxLDYgKzM3MCwxNCBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIC8vIGNvbXBpbGluZyB0aGlz
IG5vZGUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICAvLyBXZSBjb25zZXJ2YXRpdmVs
eSBhc3N1bWUgdGhhdCB0aGVzZSBjYW5ub3QgYmUgcHV0IGFueXdoZXJlLCB3aGljaCBmb3JjZXMg
dGhlIGNvbXBpbGVyIHRvCisgICAgICAgIC8vIGtlZXAgdGhlbSBleGFjdGx5IHdoZXJlIHRoZXkg
d2VyZS4gVGhpcyBpcyBzb3J0IG9mIG92ZXJraWxsIHNpbmNlIHRoZSBjbG9iYmVyaXplIGVmZmVj
dHMKKyAgICAgICAgLy8gYWxyZWFkeSBmb3JjZSB0aGVzZSB0aGluZ3MgdG8gYmUgb3JkZXJlZCBw
cmVjaXNlbHkuIEknbSBqdXN0IG5vdCBjb25maWRlbnQgZW5vdWdoIGluIG15CisgICAgICAgIC8v
IGVmZmVjdCBiYXNlZCBtZW1vcnkgbW9kZWwgdG8gcmVseSBzb2xlbHkgb24gdGhhdCByaWdodCBu
b3cuCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjgsMTgg
KzEyNjgsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVy
KEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFpc0tub3du
Tm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1
ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUu
dGFnR1BSKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLX0K
LQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTUwMDcsNyArNDk5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsK
KyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogewog
ICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC01NDc0LDIwICs1NDYzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1
ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgp
KSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAgIHN0b3Jl
VG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoIWlzS25v
d25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7
Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikKIHsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3ByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA2
MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM3NSwxOCArMTM3NSw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVl
RWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsK
LQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgIHdy
aXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5n
cHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTA3OCwxMSArNTA2NiwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hhYmxlKG5v
ZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgY2Fz
ZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAgICAgICAg
Y29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAg
ICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNTU3NCwyMCArNTU2Myw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BS
LCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAgICBpZiAo
IWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgIAotICAgIEpJVENv
bXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1Jl
bWVtYmVyZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZl
cihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzMDIsNDYgKzgzMDIsNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVz
KCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2RlKiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllcik7CisgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG5vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVC
YXJyaWVyKTsKKyAgICAKKyAgICBib29sIGlzRmVuY2VkID0gbm9kZS0+b3AoKSA9PSBGZW5jZWRT
dG9yZUJhcnJpZXI7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5n
cHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLQotICAgIG5vUmVzdWx0KG5v
ZGUpOwotfQorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgc2Ny
YXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb2s7CisgICAgCisg
ICAgaWYgKGlzRmVuY2VkKSB7CisgICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNo
KGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVk
KCk7CisgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CisgICAgICAgIG9rLmFwcGVuZChtX2pp
dC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKKyAgICAgICAgbm9GZW5jZS5s
aW5rKCZtX2ppdCk7CisgICAgfSBlbHNlCisgICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVy
QnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Rv
cmVUb1dyaXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpCi17Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKICAgICBX
cml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IG1faml0LnZtKCktPmhlYXAu
bV93cml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZl
ci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1
ZmZlci5jYXBhY2l0eSgpKSk7CisgICAgbV9qaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmll
ckJ1ZmZlci5jYXBhY2l0eSgpKSk7CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHNjcmF0Y2gyKTsKLSAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZm
ZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2gyR1BSKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJh
cnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNj
cmF0Y2gxR1BSKTsKICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJl
Y2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRy
KGNlbGwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCop
KSkpOworICAgIG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0
YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBvay5hcHBlbmQobV9qaXQuanVtcCgpKTsK
ICAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3Jp
dGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOwogCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19CisgICAgb2subGlu
aygmbV9qaXQpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1l
bWJlcmVkT3JJbkVkZW4ob3duZXJHUFIpOwotICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIo
b3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5saW5rKCZtX2ppdCk7CisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIw
NjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjk2LDEyICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb1dyaXRlQmFy
cmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
OwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIs
IEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOwotCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAogICAgIHN0
YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQ
UlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKQEAgLTcz
OCw4ICs3MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVHJ5R2V0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUJhc2VW
YWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsKLQogICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRn
ZSBvcGVyYW5kKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JV
bmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZmVuY2luZyIp
CisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IDA7CisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
CisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgYmxvY2stPnNpemUoKSk7
CisgICAgICAgIG1fYmFycmllclBvaW50cy5yZXNpemUobWF4U2l6ZSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2stPnNpemUoKTsKKyAg
ICAgICAgICAgIGRvQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9iYXJyaWVyUG9pbnRzLmNs
ZWFyUmFuZ2UoMCwgYmxvY2tTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoaXMgc3VtbWFyaXplcyBldmVy
eXRoaW5nIHdlIG5lZWQgdG8gcmVtZW1iZXIgYWJvdXQgYSBiYXJyaWVyLgorICAgIHN0cnVjdCBD
aGlsZEFuZE9yaWdpbiB7CisgICAgICAgIENoaWxkQW5kT3JpZ2luKCkgeyB9CisgICAgICAgIAor
ICAgICAgICBDaGlsZEFuZE9yaWdpbihOb2RlKiBjaGlsZCwgQ29kZU9yaWdpbiBzZW1hbnRpY09y
aWdpbikKKyAgICAgICAgICAgIDogY2hpbGQoY2hpbGQpCisgICAgICAgICAgICAsIHNlbWFudGlj
T3JpZ2luKHNlbWFudGljT3JpZ2luKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIE5vZGUqIGNoaWxkIHsgbnVsbHB0ciB9OworICAgICAgICBDb2RlT3JpZ2luIHNlbWFu
dGljT3JpZ2luOworICAgIH07CisgICAgCisgICAgdm9pZCBkb0Jsb2NrKEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5pc0VtcHR5KCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgaWRlbnRpZnkgdGhlIHBsYWNlcyB3aGVyZSB3ZSB3
b3VsZCB3YW50IHRvIHBsYWNlIGFsbCBvZiB0aGUgYmFycmllcnMgYmFzZWQgb24gYQorICAgICAg
ICAvLyBiYWNrd2FyZHMgYW5hbHlzaXMuIFdlIHVzZSB0aGUgZnV0dXJlR0MgZmxhZyB0byB0ZWxs
IHVzIGlmIHdlIGhhZCBzZWVuIGEgR0MuIFNpbmNlIHRoaXMKKyAgICAgICAgLy8gaXMgYSBiYWNr
d2FyZHMgYW5hbHlzaXMsIHdoZW4gd2UgZ2V0IHRvIGEgbm9kZSwgZnV0dXJlR0MgdGVsbHMgdXMg
aWYgYSBHQyB3aWxsIGhhcHBlbgorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIGFmdGVyIHRoYXQg
bm9kZS4KKyAgICAgICAgYm9vbCBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXMsIHNvIGV4aXRzIHJlcXVpcmUg
Y29uc2VydmF0aXNtLiBJZiB3ZSBleGl0LCB0aGVuIHRoZXJlCisgICAgICAgICAgICAvLyBwcm9i
YWJseSB3aWxsIGJlIGEgR0MgaW4gdGhlIGZ1dHVyZSEgSWYgd2UgbmVlZGVkIHRvIHRoZW4gd2Ug
Y291bGQgbGlmdCB0aGF0CisgICAgICAgICAgICAvLyByZXF1aXJlbWVudCBieSBlaXRoZXIgKDEp
IGhhdmluZyBhIFN0b3JlQmFycmllckhpbnQgdGhhdCB0ZWxscyBPU1IgZXhpdCB0byBiYXJyaWVy
IHRoYXQKKyAgICAgICAgICAgIC8vIHZhbHVlIG9yICgyKSBhdXRvbWF0aWNhbGx5IGJhcnJpZXJp
bmcgYW55IERGRy1saXZlIE5vZGUgb24gT1NSIGV4aXQuIEVpdGhlciB3YXksIGl0CisgICAgICAg
ICAgICAvLyB3b3VsZCBiZSB3ZWlyZCBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyByb290
IGZvciBPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLiBJCisgICAgICAgICAgICAvLyBkb24ndCBo
YXZlIGV2aWRlbmNlIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICBpZiAo
ZG9lc0dDKG1fZ3JhcGgsIG5vZGUpIHx8IG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05v
dEV4aXQpIHsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlLT5pc1N0b3JlQmFycmllcigpICYmIGZ1dHVyZUdDKSB7CisgICAgICAgICAgICAgICAg
bV9iYXJyaWVyUG9pbnRzW25vZGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGZ1dHVy
ZUdDID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE5vdyB3ZSBydW4gZm9yd2FyZCBhbmQgY29sbGVjdCB0aGUgYmFycmllcnMuIFdoZW4gd2Ug
aGl0IGEgYmFycmllciBwb2ludCwgaW5zZXJ0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIHdpdGgg
YSBmZW5jZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFy
cmllcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsICFub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCk7
CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmll
cnMuYXBwZW5kKENoaWxkQW5kT3JpZ2luKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgb3JpZ2luLnNl
bWFudGljKSk7CisgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4XSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAorICAgICAg
ICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQo
KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LmNoaWxkIDwgYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF1dG8g
ZW5kID0gc3RkOjp1bmlxdWUoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdp
bigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3Qg
Q2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29seworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxkOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJpZXJzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IGl0ZXItPmNoaWxkOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmln
aW4gPSBpdGVyLT5zZW1hbnRpY09yaWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBOb2RlVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25j
dXJyZW50QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLndp
dGhTZW1hbnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hp
bGQsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uZWVkZWRC
YXJyaWVycy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9p
bnNlcnRpb25TZXQ7CisgICAgRmFzdEJpdFZlY3RvciBtX2JhcnJpZXJQb2ludHM7CisgICAgVmVj
dG9yPENoaWxkQW5kT3JpZ2luPiBtX25lZWRlZEJhcnJpZXJzOworfTsKKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoR3JhcGgm
IGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQaWNrcyB1cCBncm91cHMgb2YgYmFycmll
cnMgdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBpbiBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIGVh
Y2ggb3RoZXIgYW5kCisvLyBwbGFjZXMgdGhlbiBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gdGhl
IHByb2dyYW0gd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQgYmUgY29ycmVjdC4gVGhpcyBwaGFzZQor
Ly8gbWFrZXMgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGNsdXN0ZXIgYmUgYSBGZW5jZWRTdG9yZUJh
cnJpZXIgd2hpbGUgdGhlIHJlc3QgYXJlIG5vcm1hbAorLy8gU3RvcmVCYXJyaWVycy4gVGhpcyBw
aGFzZSBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IGJhcnJpZXJzIC0gZm9yIGV4YW1wbGUsIHRoZSBj
bHVzdGVyIG1heSBlbmQgdXAKKy8vIHdpdGggdHdvIG9yIG1vcmUgYmFycmllcnMgb24gdGhlIHNh
bWUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gZHJv
cAorLy8gb25lIG9mIHRoZW0uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgc291bmQgaGluZ2VzIG9u
IHRoZSAiZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291bGQKKy8vIGJlIGNvcnJl
Y3QiIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgdGFrZSB0aGlzIGlucHV0OgorLy8KKy8vICAgICBh
OiBDYWxsKCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGM6IEZl
bmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQor
Ly8gICAgIGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBmOiBQdXRCeU9mZnNldChA
cCwgQHAsIEB6KQorLy8gICAgIGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBH
ZXRCeU9mZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGUgY2x1c3RlciBvZiBi
YXJyaWVycyBpcyBAYywgQGUsIGFuZCBAZy4gQWxsIG9mIHRoZSBiYXJyaWVycyBhcmUgYmV0d2Vl
biB0d28gZG9lc0dDIGVmZmVjdHM6CisvLyB0aGUgY2FsbHMgYXQgQGEgYW5kIEBpLiBCZWNhdXNl
IHRoZXJlIGFyZSBubyBkb2VzR0MgZWZmZWN0cyBiZXR3ZWVuIEBhIGFuZCBAaSBhbmQgdGhlcmUg
aXMgbm8KKy8vIHBvc3NpYmxlIGNvbnRyb2wgZmxvdyBlbnRyeSBpbnRvIHRoaXMgc2VxdWVuY2Ug
YmV0d2VlbiBAIGFuZCBAaSwgd2UgY291bGQgY291bGQganVzdCBleGVjdXRlIGFsbAorLy8gb2Yg
dGhlIGJhcnJpZXJzIGp1c3QgYmVmb3JlIEBpIGluIGFueSBvcmRlci4gVGhlIGVhcmxpZXN0IHBv
aW50IHdoZXJlIHRoZSBjbHVzdGVyIHdvdWxkIGJlCisvLyBjb3JyZWN0IGlzIGp1c3QgYWZ0ZXIg
QGYsIHNpbmNlIHRoYXQncyB0aGUgbGFzdCBvcGVyYXRpb24gdGhhdCBuZWVkcyBhIGJhcnJpZXIu
IFdlIHVzZSB0aGUKKy8vIGVhcmxpZXN0IHRvIHJlZHVjZSByZWdpc3RlciBwcmVzc3VyZS4gV2hl
biB0aGUgYmFycmllcnMgYXJlIGNsdXN0ZXJlZCBqdXN0IGFmdGVyIEBmLCB3ZSBnZXQ6CisvLwor
Ly8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwg
QHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBlOiBGZW5j
ZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZzogRmVuY2VkU3RvcmVCYXJyaWVyKEBwKQorLy8g
ICAgIGg6IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwoKQorLy8KKy8vIFRoaXMgcGhh
c2UgZG9lcyBtb3JlLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXJpbmcgdG8gcmVt
b3ZlIGZlbmNlcyBhbmQgcmVtb3ZlIHJlZHVuZGFudAorLy8gYmFycmllcnMuIFNvIHRoaXMgcGhh
c2Ugd2lsbCBvdXRwdXQgdGhpczoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0
QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8sIEB5KQor
Ly8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2VkU3RvcmVC
YXJyaWVyKEBvKQorLy8gICAgIGc6IFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9m
ZnNldChAcSkKKy8vICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIG9wdGltaXphdGlvbiBpbXBy
b3ZlcyBib3RoIG92ZXJhbGwgdGhyb3VnaHB1dCBhbmQgdGhlIHRocm91Z2hwdXQgd2hpbGUgdGhl
IGNvbmN1cnJlbnQgR0MgaXMKKy8vIHJ1bm5pbmcuIEluIHRoZSBmb3JtZXIsIHdlIGFyZSBzaW1w
bGlmeWluZyBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gZm9yIGFsbCBidXQgdGhlIGZpcnN0IGZlbmNl
LiBJbgorLy8gdGhlIGxhdHRlciwgd2UgYXJlIHJlZHVjaW5nIHRoZSBjb3N0IG9mIGFsbCBidXQg
dGhlIGZpcnN0IGJhcnJpZXIuIFRoZSBmaXJzdCBiYXJyaWVyIHdpbGwgYXdsYXlzCisvLyB0YWtl
IHNsb3cgcGF0aCB3aGVuIHRoZXJlIGlzIGNvbmN1cnJlbnQgR0MgYWN0aXZpdHksIHNpbmNlIHRo
ZSBzbG93IHBhdGggY29udGFpbnMgdGhlIGZlbmNlLiBCdXQKKy8vIGFsbCBvZiB0aGUgb3RoZXIg
YmFycmllcnMgd2lsbCBvbmx5IHRha2Ugc2xvdyBwYXRoIGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8g
cmVtZW1iZXIgdGhlIG9iamVjdC4KK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDYzNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9j
YXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAgICAgICAgICBpbnNl
cnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRl
eCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBv
Y2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBA
IC00MzAsMTMgKzQzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBJbnNlcnRpbmcgYmFycmllci5c
biIpOwotICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKKyAgICAgICAg
aW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQg
aW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sg
PSB0cnVlKQorICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2Ug
YmFzZSkKICAgICB7Ci0gICAgICAgIC8vIEluc2VydGluZyBhIGJhcnJpZXIgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0IG1heSBiZWNvbWUgbWFya2VkIGJ5IHRoZSBHQywgd2hpY2ggd2lsbCBtYWtlCi0g
ICAgICAgIC8vIHRoZSBvYmplY3QgYmxhY2suCisgICAgICAgIC8vIFRoaXMgaXMganVzdCBvdXIg
d2F5IG9mIHNheWluZyB0aGF0IGJhcnJpZXJzIGFyZSBub3QgcmVkdW5kYW50IHdpdGggZWFjaCBv
dGhlciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gZm9yd2FyZCBhbmFseXNpczogaWYgd2UgcHJv
dmVkIG9uZSB0aW1lIHRoYXQgYSBiYXJyaWVyIHdhcyBuZWNlc3NhcnkgdGhlbiBpdCdsbCBmb3IK
KyAgICAgICAgLy8gc3VyZSBiZSBuZWNlc3NhcnkgbmV4dCB0aW1lLgogICAgICAgICBiYXNlLT5z
ZXRFcG9jaChFcG9jaCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwg
d2Ugc2hvdWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2Vk
LgpAQCAtNDQ2LDE3ICs0NDcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0
IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KIAot
ICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQg
YWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0Ci0gICAgICAgIC8v
IHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5z
ZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAotICAgICAgICAvLyBjb250ZXh0IGFuZCB0
aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsg
YnkgaG9pc3RpbmcgdGhlIGNoZWNrLgotICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJp
Z2h0IG5vdy4KLSAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgewot
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4
aXRPSyk7Ci0gICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7Ci0gICAgICAgIH0K
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ2VsbChiYXNlLnVzZUtpbmQo
KSkpOworICAgICAgICAKKyAgICAgICAgLy8gQmFycmllcnMgYXJlIGFsd2F5cyBpbnNlcnRlZCBh
ZnRlciB0aGUgbm9kZSB0aGF0IHRoZXkgc2VydmljZS4gVGhlcmVmb3JlLCB3ZSBhbHdheXMga25v
dworICAgICAgICAvLyB0aGF0IHRoZSB0aGluZyBpcyBhIGNlbGwgbm93LgorICAgICAgICBiYXNl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CisgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSht
X2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlk
RXhpdCgpOworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAgdHlwZSA9IEZlbmNl
ZFN0b3JlQmFycmllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFy
cmllcjsKICAgICAgICAgCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoZXhpdE9LKSwgYmFzZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3JpZ2luLCBiYXNlKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICsz
MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHcmFwaDsKIAog
Ly8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1hbm5lciB3aXRob3V0
IGNvbnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgotLy8gVXNlcyBhIHNpbXBsZSBl
cG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJz
LiBUaGlzIHBoYXNlIHJlcXVpcmVzCi0vLyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgorLy8gVXNl
cyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmll
cnMgb24gbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMKKy8vIHBoYXNlIHJlcXVpcmVzIHRo
YXQgd2UgYXJlIG5vdCBpbiBTU0EuCiBib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0
aW9uKEdyYXBoJik7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwg
YW5hbHlzaXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCi0v
LyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFu
dCBiYXJyaWVycywgYnV0IG9ubHkgcHJvcGFnYXRlcyAic2FtZQotLy8gZXBvY2ggYXMgY3VycmVu
dCIgcHJvcGVydHkgZnJvbSBvbmUgYmxvY2sgdG8gdGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWly
ZXMgU1NBLiBUaGlzIHBoYXNlCi0vLyBhbHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQg
bGl2ZW5lc3MuCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0
aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIHBoYXNlCisvLyBy
ZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UgYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5k
IGxpdmVuZXNzLgogYm9vbCBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBo
Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTk2LDEyICsxOTYsMTIgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYg
YXRBbnlBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7
IH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHZvaWQqIGFkZHJlc3MpCisgICAg
Y29uc3QgQWJzdHJhY3RIZWFwJiBhdChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1faW5kZXhlZEhlYXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVz
cykpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9p
ZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhl
YXAmIG9wZXJhdG9yW10oY29uc3Qgdm9pZCogYWRkcmVzcykgeyByZXR1cm4gYXQoYWRkcmVzcyk7
IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNs
dWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBA
IC0xMTYsNiArMTE3LDE2IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQ
YXQKICAgICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFw
LCB2YWx1ZSkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlRmVu
Y2VSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1f
aGVhcEZvckZlbmNlUmVhZC5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7Cit9CisK
K3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVdyaXRlKGNvbnN0IEFi
c3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQoreworICAgIG1faGVhcEZvckZlbmNlV3Jp
dGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCiB2b2lkIEFic3RyYWN0
SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCiB7
CiAgICAgcm9vdC5jb21wdXRlKCk7CkBAIC0xMzIsOSArMTQzLDEzIEBAIHZvaWQgQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6
IG1faGVhcEZvckNDYWxsV3JpdGUpCiAgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVl
PigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CiAgICAgZm9yIChIZWFw
Rm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKLSAgICAgICAgZW50cnku
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5n
ZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3Rz
LnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRy
eSA6IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPEND
YWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBl
bnRyeS5oZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFw
Rm9yRmVuY2VSZWFkKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVh
ZCA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBt
X2hlYXBGb3JGZW5jZVdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4o
KS0+d3JpdGUgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxNiw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWNvcmF0ZUNDYWxsV3JpdGUo
Y29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNo
cG9pbnRSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogICAgIHZvaWQgZGVj
b3JhdGVQYXRjaHBvaW50V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7Cisg
ICAgdm9pZCBkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUq
KTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6
VmFsdWUqKTsKIAogICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25z
KCk7CiAKQEAgLTI0MSw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIZWFwRm9yVmFs
dWU+IG1faGVhcEZvckNDYWxsV3JpdGU7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFw
Rm9yUGF0Y2hwb2ludFJlYWQ7CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yUGF0
Y2hwb2ludFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckZlbmNlUmVh
ZDsKKyAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVdyaXRlOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzgsNiArMTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToK
ICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAg
ICBjYXNlIENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxDYWxsSW5saW5l
ZENhbGxlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAi
QjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRl
ICJCM1Nsb3RCYXNlVmFsdWUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgpAQCAtOTQ1LDYgKzk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlQ291
bnRFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlQmFy
cmllcjoKKyAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgICAgICBjb21w
aWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6CkBAIC02OTk1LDkgKzY5OTcsOSBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAgICAgICBlbWl0U3RvcmVCYXJy
aWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVy
KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJh
cnJpZXIpOwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CkBAIC04MTI2LDggKzgxMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHByZXZpb3Vz
U3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZW1pdFN0b3JlQmFycmllcihvYmplY3QpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKQEAgLTEwMDUzLDEzICsxMDA1MywxMyBAQCBwcml2YXRlOgogICAgIC8vIHJ1
biBhZnRlciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZW0gcmV0dXJucy4gSGVuY2UsIHlv
dSBzaG91bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKICAgICAvLyBjYXB0dXJlIChpLmUuIFsmXSkg
aW4gYW55IG9mIHRoZXNlIGxhbWJkYXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvciwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIFBhdGNo
cG9pbnRWYWx1ZSogbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50
VHlwZXMuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChm
dW5jdG9yLCBWZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBG
dW5jdG9yJiBmdW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKKyAg
ICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBj
b25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVP
cmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgIApAQCAtMTE0
MjksMjYgKzExNDI5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOFpl
cm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZv
aWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJp
ZXIoTFZhbHVlIGJhc2UsIGJvb2wgaXNGZW5jZWQpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKKyAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsK
KyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9h
ZDMyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQuY29uc3RJbnQz
MihibGFja1RocmVzaG9sZCk7CisgICAgICAgIAogICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCBtX291dC5jb25zdEludDMy
KGJsYWNrVGhyZXNob2xkKSksCisgICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRl
KGJhc2UpLCB0aHJlc2hvbGQpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd1BhdGgpKTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCisgICAgICAgIAogICAgICAgICAv
LyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9m
IGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4gaXQgZG9l
cyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5n
IG91ciBKSVQgcmF0aGVyIHRoYW4KICAgICAgICAgLy8gd2FzdGluZyBCMydzIHRpbWUgb3B0aW1p
emluZyBpdC4KLSAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5l
cmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlT
bG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1wSWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3RO
ZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQu
YmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9GZW5jZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwpAQCAtMTE0OTMsNiAr
MTE1MDYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgYmFzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNGZW5jZWQp
CisgICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMucm9v
dCwgcGF0Y2hwb2ludCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faGVhcHMuZGVjb3Jh
dGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsK
KyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxf
Y2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlz
aW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVl
LmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgi
CiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5o
IgpAQCAtNDQ1LDYgKzQ0NiwxMSBAQCB2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvCiAgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIHN0b3Jl
KTsKIH0KIAorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgpCit7CisgICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKK30KKwogdm9pZCBP
dXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKIHsK
ICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CkBAIC03OTUsNyAr
ODAxLDcgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVR5cGVkUG9pbnRlciBPdXRwdXQ6OmFi
c29sdXRlKHZvaWQqIGFkZHJlc3MpCitUeXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZShjb25z
dCB2b2lkKiBhZGRyZXNzKQogewogICAgIHJldHVybiBUeXBlZFBvaW50ZXIobV9oZWFwcy0+YWJz
b2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQCBzdHJ1Y3QgTm9kZTsKIH0gLy8gbmFtZXNwYWNlIERGRwogCiBuYW1lc3BhY2UgQjMgewor
Y2xhc3MgRmVuY2VWYWx1ZTsKIGNsYXNzIFNsb3RCYXNlVmFsdWU7CiB9IC8vIG5hbWVzcGFjZSBC
MwogCkBAIC0xODksNiArMTkwLDcgQEAgcHVibGljOgogCiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQ
b2ludGVyLCBMVHlwZSk7CiAgICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7Cisg
ICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIo
VHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsK
QEAgLTI4NSw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBoZWFwLmJhc2VJbmRl
eCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4QXNDb25zdGFudCwgb2Zmc2V0KTsKICAgICB9CiAK
LSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUodm9pZCogYWRkcmVzcyk7CisgICAgVHlwZWRQb2lu
dGVyIGFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3MpOwogCiAgICAgTFZhbHVlIGxvYWQ4U2ln
bkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBs
b2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KICAgICBMVmFsdWUgbG9hZDha
ZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJu
IGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCAr
NTMsMTYgQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKIH07CiAKIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDE7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQg
bWVhbnMgeCBpcyBibGFjay4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgPSAxMDA7IC8vIHggPD0gdGF1dG9sb2dpY2FsVGhyZXNob2xkIGlzIGFsd2F5cyB0cnVl
LgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRocmVzaG9sZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1
bnNpZ25lZCB0aHJlc2hvbGQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
ZWxsU3RhdGUpIDw9IHRocmVzaG9sZDsKK30KIAogaW5saW5lIGJvb2wgaXNCbGFjayhDZWxsU3Rh
dGUgY2VsbFN0YXRlKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0
YXRlKSA8PSBibGFja1RocmVzaG9sZDsKKyAgICByZXR1cm4gaXNXaXRoaW5UaHJlc2hvbGQoY2Vs
bFN0YXRlLCBibGFja1RocmVzaG9sZCk7CiB9CiAKIGlubGluZSBDZWxsU3RhdGUgYmxhY2tlbihD
ZWxsU3RhdGUgY2VsbFN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0RlZmVycmFsQ29udGV4dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJrZWRB
bGxvY2F0b3I7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKKyAgICBmcmllbmQgY2xhc3Mg
SGVhcDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOworcHVibGljOgorICAgIGlu
bGluZSBHQ0RlZmVycmFsQ29udGV4dChIZWFwJik7CisgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29u
dGV4dCgpOworCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKKyAgICBib29sIG1fc2hvdWxk
R0MgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgR0NEZWZlcnJhbENvbnRleHQ6OkdDRGVmZXJyYWxD
b250ZXh0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sKK30KKworQUxXQVlTX0lO
TElORSBHQ0RlZmVycmFsQ29udGV4dDo6fkdDRGVmZXJyYWxDb250ZXh0KCkKK3sKKyAgICBBU1NF
UlQoIURpc2FsbG93R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOworI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQorICAgIEFTU0VSVCghbV9oZWFwLnZtKCktPmlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkpOworI2VuZGlmCisgICAgaWYgKFVOTElLRUxZKG1fc2hvdWxkR0MpKQorICAg
ICAgICBtX2hlYXAuY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQ5LDQgKzE1NDksMTcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2Nr
SW1wbChjb25zdCBTYwogICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9
CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQor
eworICAgIGlmIChVTkxJS0VMWShiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICAgICAg
Ly8gSW4gdGhpcyBjYXNlLCB0aGUgYmFycmllclRocmVzaG9sZCBpcyB0aGUgdGF1dG9sb2dpY2Fs
IHRocmVzaG9sZCwgc28gZnJvbSBjb3VsZCBzdGlsbCBiZQorICAgICAgICAvLyBub3QgYmxhY2su
IEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCisg
ICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKCFpc0JsYWNrKGZyb20t
PmNlbGxTdGF0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYWRk
VG9SZW1lbWJlcmVkU2V0KGZyb20pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIEFsbG9jYXRpb25TY29wZTsKIGNsYXNzIENvZGVCbG9jazsK
IGNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRWRl
bkdDQWN0aXZpdHlDYWxsYmFjazsKIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3MgRnVsbEdD
QWN0aXZpdHlDYWxsYmFjazsKQEAgLTEwNCw5ICsxMDUsMTQgQEAgcHVibGljOgogICAgIAogICAg
IHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwogCi0gICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxs
Kik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICB2b2lk
IHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20sIEpTVmFsdWUgdG8pOworICAgIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgCisgICAg
dm9pZCB3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2UoY29uc3QgSlNDZWxsKiBmcm9tKTsKKyAgICAK
KyAgICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IGJh
cnJpZXJUaHJlc2hvbGQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJT
bG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pOwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3
cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAg
IHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CkBAIC0xNDksNiArMTU1LDcg
QEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yQXV4aWxpYXJ5RGF0
YShzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYXV4aWxpYXJ5QWxsb2NhdG9y
Rm9yKGJ5dGVzKTsgfQogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90KTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwq
IGludGVuZGVkT3duZXIsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnko
R0NEZWZlcnJhbENvbnRleHQqLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAg
dm9pZCogdHJ5UmVhbGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgdm9pZCBhc2Ny
aWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7CiAKQEAgLTE2Niw3ICsxNzMs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNv
bGxlY3Rpb24pOwotICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1
cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCisgICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOyAvLyBSZXR1cm5zIHRydWUgaWYg
aXQgZGlkIGNvbGxlY3QuCiAgICAgdm9pZCBjb2xsZWN0QWNjb3JkaW5nVG9EZWZlckdDUHJvYmFi
aWxpdHkoKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQbGFucygpOwpAQCAtMjU0LDYgKzI2
MSwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlQmxvY2soc2l6ZV90IGNhcGFj
aXR5KTsKICAgICB2b2lkIGRpZEZyZWVCbG9jayhzaXplX3QgY2FwYWNpdHkpOworICAgIAorICAg
IGJvb2wgYmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyU2hv
dWxkQmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVG
ZW5jZWQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQ7IH0KKyAgICAK
KyAgICB1bnNpZ25lZCBiYXJyaWVyVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVy
VGhyZXNob2xkOyB9CisgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NPZkJhcnJpZXJUaHJlc2hv
bGQoKSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyVGhyZXNob2xkOyB9CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpb25TY29wZTsKQEAgLTI3OCwxMiArMjkxLDE3IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0RlZmVy
cmFsQ29udGV4dCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxv
Y2F0ZUNlbGwoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHZvaWQg
Y29sbGVjdFdpdGhvdXRBbnlTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55
Q29sbGVjdGlvbik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7
IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGggZGVzdHJ1Y3RvcnMuCiAgICAgdm9pZCogYWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggb2JqZWN0cyB3
aXRob3V0IGRlc3RydWN0b3JzLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3IoR0NE
ZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3Ry
dWN0b3IoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZT4gdm9pZCogYWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90KTsgLy8gQ2hvb3Nl
cyBvbmUgb2YgdGhlIG1ldGhvZHMgYWJvdmUgYmFzZWQgb24gdHlwZS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQqIGFsbG9jYXRlT2JqZWN0T2ZUeXBlKEdDRGVmZXJyYWxD
b250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFNZW1v
cnkgPSAyNTY7CiAgICAgCkBAIC00MTEsNiArNDI5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNTYWZlVG9Db2xsZWN0OwogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVy
QnVmZmVyOworICAgIGJvb2wgbV9iYXJyaWVyU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKSB9OworICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9w
dGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxh
Y2tUaHJlc2hvbGQgfTsKIAogICAgIFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NM
ZW5ndGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSGVhcElubGluZXNf
aAogI2RlZmluZSBIZWFwSW5saW5lc19oCiAKKyNpbmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dC5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKICNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtMTI1LDE5ICsxMjYsMzEgQEAgaW5saW5lIHZvaWQg
SGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsK
ICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisg
ICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0
YXRlKCkgIT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKKyAgICBpZiAoIWlzV2l0aGluVGhyZXNob2xk
KGZyb20tPmNlbGxTdGF0ZSgpLCBiYXJyaWVyVGhyZXNob2xkKCkpKQogICAgICAgICByZXR1cm47
Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChMSUtFTFkoIXRvIHx8IHRv
LT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHdyaXRlQmFycmllclNsb3dQYXRoKGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
TE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7Ci0gICAgaWYgKCFmcm9tIHx8
ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkKKyAgICBpZiAoIWZyb20pCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRl
KCksIGJhcnJpZXJUaHJlc2hvbGQoKSkpKQorICAgICAgICB3cml0ZUJhcnJpZXJTbG93UGF0aChm
cm9tKTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNv
bnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNv
bnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOworICAgIGlmICghZnJvbSkKICAgICAgICAgcmV0dXJu
OwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNXaXRo
aW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIGJsYWNrVGhyZXNob2xkKSkpCisgICAgICAg
IGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90IHNpemUpCkBAIC0yMTQsNiArMjI3LDE4IEBAIGlu
bGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnUKICAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKGJ5dGVzKTsKIH0KIAoraW5saW5lIHZv
aWQqIEhlYXA6OmFsbG9jYXRlV2l0aERlc3RydWN0b3IoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlv
bihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aERlc3RydWN0
b3IoZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjphbGxv
Y2F0ZVdpdGhvdXREZXN0cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsK
KyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKGRlZmVy
cmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CiBp
bmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogewpA
QCAtMjI2LDYgKzI1MSwxNiBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5
cGUoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KK2lubGluZSB2b2lkKiBIZWFw
OjphbGxvY2F0ZU9iamVjdE9mVHlwZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uIHx8IChDbGFzc1R5cGU6OlN0cnVjdHVyZUZsYWdzICYgU3RydWN0dXJlSXNJbW1vcnRhbCkg
fHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
dmFsdWUpKTsKKworICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pCisgICAgICAg
IHJldHVybiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOwor
ICAgIHJldHVybiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKGRlZmVycmFsQ29udGV4dCwgYnl0
ZXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CiBpbmxpbmUgTWFya2VkU3Bh
Y2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvck9iamVjdE9mVHlwZSgpCiB7CiAgICAgLy8g
SlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFs
IGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCkBAIC0yNzQs
NiArMzA5LDE3IEBAIGlubGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeSgKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitpbmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVBdXhp
bGlhcnkoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gbV9vYmplY3RTcGFj
ZS50cnlBbGxvY2F0ZUF1eGlsaWFyeShkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgb2YgYXV4aWxpYXJ5IGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25l
ciwgcmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2Vu
ZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJlYWxs
b2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgdm9pZCogbmV3QmFzZSA9IHRyeUFs
bG9jYXRlQXV4aWxpYXJ5KGludGVuZGVkT3duZXIsIG5ld1NpemUpOwpAQCAtMzEzLDEyICszNTks
MTUgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aAogICAgIG1fZGVm
ZXJyYWxEZXB0aC0tOwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKCkKK2lubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBpZiAoIXNob3VsZENvbGxl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29sbGVjdCgpOworICAgIGlmIChk
ZWZlcnJhbENvbnRleHQpCisgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRy
dWU7CisgICAgZWxzZQorICAgICAgICBjb2xsZWN0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDQ1ICsxNzUsNDkgQEAgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25z
SWZOZWVkZWQoKQorQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0Q29s
bGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewog
ICAgIGlmICghT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0aW9uQ291bnQgPSAwOwogICAgIGlm
ICghYWxsb2NhdGlvbkNvdW50KSB7Ci0gICAgICAgIGlmICghbV9oZWFwLT5pc0RlZmVycmVkKCkp
Ci0gICAgICAgICAgICBtX2hlYXAtPmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgIGlmICgh
bV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChkZWZlcnJhbENvbnRleHQp
CisgICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2hlYXAtPmNvbGxlY3RBbGxHYXJiYWdl
KCk7CisgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dy
ZXNzID09IE5vT3BlcmF0aW9uKTsKICAgICB9CiAgICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49
IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICBhbGxvY2F0aW9u
Q291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uo
KQordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7CiAgICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7
Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVy
ZSk7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZSgpCit2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7
Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGNyYXNoT25GYWlsdXJlKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVy
ZSk7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoYm9v
bCBjcmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUltcGwoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgYm9vbCBjcmFzaE9uRmFp
bHVyZSkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7Ci0gICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAgIGRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCghbV9tYXJrZWRTcGFj
ZS0+aXNJdGVyYXRpbmcoKSk7CiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9y
aWdpbmFsU2l6ZSk7CiAgICAgCiAgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgCi0gICAg
bV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgbV9oZWFwLT5jb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAgQWxsb2NhdGlv
blNjb3BlIGFsbG9jYXRpb25TY29wZSgqbV9oZWFwKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBHQ0RlZmVycmFs
Q29udGV4dDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKQEAgLTE1Miw4ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09
IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6
S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQot
ICAgIHZvaWQqIGFsbG9jYXRlKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoKTsKKyAgICB2b2lk
KiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFwKiBoZWFwKCkg
eyByZXR1cm4gbV9oZWFwOyB9CiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdGFrZUxhc3RBY3Rp
dmVCbG9jaygpCiAgICAgewpAQCAtMjE2LDE1ICsyMTcsMTUgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBib29sIHNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkgY29uc3Q7
CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZSgpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICB2
b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVy
cmFsQ29udGV4dCopOworICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxD
b250ZXh0KiwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxp
c3QoKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIHZvaWQqIHRyeUFsbG9j
YXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2Vk
QmxvY2s6OkhhbmRsZSopOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9u
c0lmTmVlZGVkKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZO
ZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKICAgICAKICAgICB2b2lkIHNldEZyZWVMaXN0KGNv
bnN0IEZyZWVMaXN0Jik7CiAgICAgCkBAIC0yNjUsNyArMjY2LDcgQEAgaW5saW5lIHB0cmRpZmZf
dCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFy
a2VkQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQog
ewogICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwogICAgIGlm
IChyZW1haW5pbmcpIHsKQEAgLTI3NywxMyArMjc4LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnkKICAgICAKICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxp
c3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxs
b2NhdGVTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZl
cnJhbENvbnRleHQpOwogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CiAg
ICAgcmV0dXJuIGhlYWQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICB1bnNpZ25lZCBy
ZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKICAgICBpZiAocmVtYWluaW5nKSB7CkBA
IC0yOTUsNyArMjk2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFs
bAogICAgIAogICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwogICAgIGlmIChV
TkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKCk7CisgICAg
ICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAg
bV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKICAgICByZXR1cm4gaGVhZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwNjM2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDMyICsyMzUsNTggQEAgdm9pZCBNYXJrZWRTcGFjZTo6bGFzdENoYW5j
ZVRvRmluYWxpemUoKQogCiB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoU3Vic3BhY2UmIHN1
YnNwYWNlLCBzaXplX3QgYnl0ZXMpCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9n
KCJBbGxvY2F0aW5nICIsIGJ5dGVzLCAiIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMs
ICIuXG4iKTsKICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3Ioc3Vic3BhY2UsIGJ5dGVzKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBh
bGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBieXRlcyk7CisgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uo
c3Vic3BhY2UsIG51bGxwdHIsIGJ5dGVzKTsKK30KKwordm9pZCogTWFya2VkU3BhY2U6OmFsbG9j
YXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxs
b2NhdGluZyAiLCBieXRlcywgIiBkZWZlcnJlZCBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1
dGVzLCAiLlxuIik7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2Nh
dG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwgZGVmZXJyYWxDb250ZXh0
LCBieXRlcyk7CiB9CiAKIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZShTdWJzcGFjZSYg
c3Vic3BhY2UsIHNpemVfdCBieXRlcykKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFM
b2coIlRyeS1hbGxvY2F0aW5nICIsIGJ5dGVzLCAiIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJp
YnV0ZXMsICIuXG4iKTsKICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkgewogICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxv
Y2F0b3ItPnRyeUFsbG9jYXRlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAg
IHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBieXRlcyk7CisgICAgcmV0dXJuIHRy
eUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIG51bGxwdHIsIGJ5dGVzKTsKK30KKwordm9pZCogTWFy
a2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChmYWxzZSkKKyAg
ICAgICAgZGF0YUxvZygiVHJ5LWFsbG9jYXRpbmcgIiwgYnl0ZXMsICIgZGVmZXJyZWQgYnl0ZXMg
aW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOworICAgIGlmIChNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7CisgICAgICAg
IHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFy
Z2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOwogfQogCi12b2lkKiBNYXJrZWRT
cGFjZTo6YWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNpemVfdCBzaXplKQordm9p
ZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBzaXplKTsKKyAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmIHN1YnNwYWNlLCBzaXpl
X3Qgc2l6ZSkKK3ZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiBz
dWJzcGFjZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgbV9oZWFw
LT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAg
c2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplU3RlcD4oc2l6ZSk7CiAgICAgTGFy
Z2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1f
aGVhcCwgc2l6ZSwgc3Vic3BhY2UuYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMiAr
MTEyLDE3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGF1eGlsaWFyeUFsbG9jYXRv
ckZvcihzaXplX3QpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoU3Vi
c3BhY2UmLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKFN1
YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIHRyeUFsbG9jYXRlKFN1YnNwYWNlJiwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKICAgICAKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7
CiAgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOworICAgIHZvaWQq
IGFsbG9jYXRlV2l0aERlc3RydWN0b3IoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAg
IHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoR0NEZWZlcnJhbENvbnRleHQqLCBzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7CiAgICAgdm9pZCogdHJ5
QWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFy
eShHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgCiAgICAgU3Vic3BhY2UmIHN1YnNw
YWNlRm9yT2JqZWN0c1dpdGhEZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2U7
IH0KICAgICBTdWJzcGFjZSYgc3Vic3BhY2VGb3JPYmplY3RzV2l0aG91dERlc3RydWN0b3IoKSB7
IHJldHVybiBtX25vcm1hbFNwYWNlOyB9CkBAIC0xOTUsOCArMjAwLDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNp
emVDbGFzc2VzPiBzX3NpemVDbGFzc0ZvclNpemVTdGVwOwogICAgIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBzaXplX3QpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBzaXplX3QpOwor
ICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2UoU3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNp
emVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIEdDRGVmZXJyYWxD
b250ZXh0Kiwgc2l6ZV90KTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTaXplQ2xhc3NG
b3JTdGVwU2l6ZSgpOwogICAgIApAQCAtMjY0LDYgKzI2OSwxNiBAQCBpbmxpbmUgdm9pZCogTWFy
a2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlCiAgICAgcmV0dXJuIGFsbG9jYXRlKG1fZGVzdHJ1Y3Rv
clNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVX
aXRob3V0RGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXpl
X3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fbm9ybWFsU3BhY2UsIGRlZmVycmFs
Q29udGV4dCwgYnl0ZXMpOworfQorCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRl
V2l0aERlc3RydWN0b3IoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90
IGJ5dGVzKQoreworICAgIHJldHVybiBhbGxvY2F0ZShtX2Rlc3RydWN0b3JTcGFjZSwgZGVmZXJy
YWxDb250ZXh0LCBieXRlcyk7Cit9CisKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2Nh
dGVBdXhpbGlhcnkoc2l6ZV90IGJ5dGVzKQogewogICAgIHJldHVybiBhbGxvY2F0ZShtX2F1eGls
aWFyeVNwYWNlLCBieXRlcyk7CkBAIC0yNzQsNiArMjg5LDExIEBAIGlubGluZSB2b2lkKiBNYXJr
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVBdXgKICAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9hdXhpbGlh
cnlTcGFjZSwgYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9j
YXRlQXV4aWxpYXJ5KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBi
eXRlcykKK3sKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGUobV9hdXhpbGlhcnlTcGFjZSwgZGVmZXJy
YWxDb250ZXh0LCBieXRlcyk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxp
bmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwNiwx
NyArMTMwNiw0NCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1
cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0
dXJlLCBSZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPcklu
RWRlbihHUFJSZWcgY2VsbCkKKyAgICBKdW1wIGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoR1BS
UmVnIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWRkcmVzcyhj
ZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNo
b2xkKSk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0Nl
bGwqIGNlbGwpCisgICAgSnVtcCBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKEpTQ2VsbCogY2Vs
bCkKICAgICB7CiAgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CiAgICAgICAgIHJldHVy
biBicmFuY2g4KEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3MoYWRkcmVzcyksIFRydXN0ZWRJbW0zMihi
bGFja1RocmVzaG9sZCkpOwogICAgIH0KICAgICAKKyAgICBKdW1wIGJhcnJpZXJCcmFuY2goR1BS
UmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgbG9hZDgoQWRkcmVz
cyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHJldHVybiBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCkt
PmhlYXAuYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CisgICAgfQorCisgICAgSnVtcCBi
YXJyaWVyQnJhbmNoKEpTQ2VsbCogY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAg
ICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkg
KyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOworICAgICAgICBsb2FkOChhZGRyZXNzLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNv
bHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBiYXJyaWVyU3RvcmVMb2FkRmVuY2UoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmllcnMoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5l
ZWRlZCgpOworICAgICAgICBtZW1vcnlGZW5jZSgpOworICAgICAgICBvay5saW5rKHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCgpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRy
ZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICB9
CisgICAgCiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUgZm9yIHR5cGVvZi4gVGhl
IGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0aHJvdWdoLiBUaGUKICAgICAvLyBm
dW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hlcmUgd2UgaGF2ZSBwaW5wb2ludGVk
IGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bwogICAgIC8vIGhhdmUgdGhlIGZ1bmN0
b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3RyaW5nIGludG8gYW4gYXBwcm9wcmlh
dGUgcmVnaXN0ZXIgYW5kIHRoZW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3NywxNCArMjE3
NywxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAgICAgdm0t
PmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCi0vLyBOQjogV2UgZG9uJ3QgaW5jbHVkZSB0
aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUgYmFycmllciBiZWNhdXNlIHRoZSB3cml0ZSBiYXJyaWVy
IGVsaXNpb24KLS8vIHBoYXNlIGluIHRoZSBERkcgb25seSB0cmFja3Mgd2hldGhlciB0aGUgb2Jq
ZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMgYmVlbiBiYXJyaWVyZWQuIEl0IAotLy8gd291bGQgYmUg
bXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRvIHRyeSB0byBtb2RlbCB0aGUgdmFsdWUgYmVpbmcgc3Rv
cmVkIGFzIHdlbGwuCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdy
aXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY2Vs
bCk7CisgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xvd1BhdGgoY2VsbCk7CiB9CiAKIHZvaWQg
SklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBl
eGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOCArNDEyLDcgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlQgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw4
ICs2NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAg
aW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgZGly
ZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGly
ZWN0OwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
ckJhc2UpOwotCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1Qz
LCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKQEAgLTY4Nyw2ICs2ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4p
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Niw4ICs2NjYsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgaW50IHZhbHVl
VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGly
ZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGly
ZWN0OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRG
aWx0ZXJCYXNlKTsKLQogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgpAQCAtNjg0LDYgKzY4Miw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworCiAgICAg
bV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMTE4MCw4ICsxMTgwLDggQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lz
dGVyKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCkBAIC0xMjE4LDggKzEy
MTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDEpOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gocmVnVDEs
IHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
LCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSkKQEAgLTEyNDYsMTIgKzEyNDYsOSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIpCiB7Ci0gICAgaWYgKCFvd25lci0+Y2VsbENvbnRhaW5lcigpLmlzTWFya2VkKG93bmVy
KSkgewotICAgICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqdW1wSWZJc1Jl
bWVtYmVyZWRPckluRWRlbihvd25lcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOwotICAgICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOworICAgIEp1bXAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gob3duZXIsIHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7
CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdpc3Rl
cklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQpAQCAtMTM5MCw4ICsxMzg3LDggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikg
ewotICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3BlcmF0aW9uVW5jb25kaXRp
b25hbFdyaXRlQmFycmllcik7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0
KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIEFT
U0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgIH0KICAgICAKICAgICBib29sIGlzRGlyZWN0ID0g
bV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkg
PT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDYzNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTg5MSw2ICs4OTEsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFu
ZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4o
Y2VsbCwgc2xvd1BhdGgpCisgICAgbWVtZmVuY2UKICAgICBiYmEgSlNDZWxsOjptX2NlbGxTdGF0
ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQsIC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAyMDYz
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTE1MjcsNyArMTUyNywxMiBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3
aGVuICJsZWFwIgogICAgICAgICAgICAgJGFzbS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0g
I3tvcmRlck9wZXJhbmRzKG9wZXJhbmRzWzBdLng4NkFkZHJlc3NPcGVyYW5kKDpwdHIpLCBvcGVy
YW5kc1sxXS54ODZPcGVyYW5kKDpwdHIpKX0iCiAgICAgICAgIHdoZW4gIm1lbWZlbmNlIgotICAg
ICAgICAgICAgJGFzbS5wdXRzICJtZmVuY2UiCisgICAgICAgICAgICBzcCA9IFJlZ2lzdGVySUQu
bmV3KG5pbCwgInNwIikKKyAgICAgICAgICAgIGlmIGlzSW50ZWxTeW50YXgKKyAgICAgICAgICAg
ICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAkYXNtLnB1dHMgImxvY2s7IG9ybCAkMCwgKCN7c3AueDg2T3BlcmFuZCg6cHRyKX0pIgorICAg
ICAgICAgICAgZW5kCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAg
ICAgICBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBCdXR0ZXJmbHkqIGNyZWF0
ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uCiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAotSlNB
cnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewog
ICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC03Niw3ICs3Niw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBl
KSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFs
Q29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFw
LnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgbnVsbHB0ciwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCBKU0FycmF5KiBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5jbGVhcigpOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJm
bHkodm0sIGRlZmVycmFsQ29udGV4dCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQogCiB2b2lk
IEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJs
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9u
IDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDE3IEBAIHByb3RlY3RlZDoKIAogcHVibGljOgogICAg
IHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoID0gMCk7Ci0gICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0m
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKKyAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlV2l0
aEJ1dHRlcmZseShWTSYsIEdDRGVmZXJyYWxDb250ZXh0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
Kik7CiAKICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29u
c3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZAogICAgIC8vIGNvbnRlbnRzIGFyZSBr
bm93biBhdCB0aW1lIG9mIGNyZWF0aW9uLiBDbGllbnRzIG9mIHRoaXMgaW50ZXJmYWNlIG11c3Q6
CiAgICAgLy8gICAtIG51bGwtY2hlY2sgdGhlIHJlc3VsdCAoaW5kaWNhdGluZyBvdXQgb2YgbWVt
b3J5LCBvciBvdGhlcndpc2UgdW5hYmxlIHRvIGFsbG9jYXRlIHZlY3RvcikuCiAgICAgLy8gICAt
IGNhbGwgJ2luaXRpYWxpemVJbmRleCcgZm9yIGFsbCBwcm9wZXJ0aWVzIGluIHNlcXVlbmNlLCBm
b3IgMCA8PSBpIDwgaW5pdGlhbExlbmd0aC4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
SlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0FycmF5KiB0
cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUq
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dm0sIG51bGxwdHIsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7CisgICAgfQogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
dGhyb3dFeGNlcHRpb24pOwogCkBAIC0yMzEsMTIgKzIzNSwxMiBAQCBpbmxpbmUgSlNBcnJheSog
SlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVX
aXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmV0dXJuIGNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIG51bGxwdHIsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAot
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgSlNBcnJheSog
SlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSkKIHsKLSAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXk+KHZtLmhlYXApKSBKU0FycmF5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAg
SlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5o
ZWFwLCBkZWZlcnJhbENvbnRleHQpKSBKU0FycmF5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
CiAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gYXJyYXk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA2MzYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRv
cjsKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSWRl
bnRpZmllcjsKIGNsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OwpAQCAtNTMsNiArNTQsOSBAQCBjbGFz
cyBTdHJ1Y3R1cmU7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVh
cCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBzaXpl
X3QpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIEdD
RGVmZXJyYWxDb250ZXh0Kik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNl
bGwoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKwogI2RlZmluZSBERUNMQVJF
X0VYUE9SVF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCA6
OkpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsgICAgICAgICAgICAgXApAQCAtNzAsNiArNzQsOCBAQCBj
bGFzcyBKU0NlbGwgOiBwdWJsaWMgSGVhcENlbGwgewogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRC
bG9jazsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxs
KEhlYXAmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmLCBzaXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lk
KiBhbGxvY2F0ZUNlbGwoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgR0NEZWZlcnJhbENv
bnRleHQqLCBzaXplX3QpOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0
MiwyNSBAQCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKICAgICByZXR1cm4gYWxsb2Nh
dGVDZWxsPFQ+KGhlYXAsIHNpemVvZihUKSk7CiB9CiAgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgordm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChzaXplID49IHNpemVvZihU
KSk7CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwLmFsbG9j
YXRlT2JqZWN0T2ZUeXBlPFQ+KGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpOworI2lmIEVOQUJMRShH
Q19WQUxJREFUSU9OKQorICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVj
dCgpKTsKKyAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8o
KSk7CisjZW5kaWYKKyAgICByZXN1bHQtPmNsZWFyU3RydWN0dXJlKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkKiBhbGxvY2F0ZUNlbGwo
SGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBy
ZXR1cm4gYWxsb2NhdGVDZWxsPFQ+KGhlYXAsIGRlZmVycmFsQ29udGV4dCwgc2l6ZW9mKFQpKTsK
K30KKyAgICAKIGlubGluZSBib29sIEpTQ2VsbDo6aXNPYmplY3QoKSBjb25zdAogewogICAgIHJl
dHVybiBUeXBlSW5mbzo6aXNPYmplY3QobV90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA2MzYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcgKzQx
OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6IENsaWVudHMgb2YgdGhpcyBtZXRob2QgbWF5
IGNhbGwgaXQgbW9yZSB0aGFuIG9uY2UgZm9yIGFueSBpbmRleCwgYW5kIHRoaXMgaXMgc3VwcG9z
ZWQKICAgICAvLyB0byB3b3JrLgotICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSkgewpAQCAtNDY4LDYgKzQ2OCw1NCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIodW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJp
ZXIoaSwgdiwgaW5kZXhpbmdUeXBlKCkpOworICAgIH0KKworICAgIC8vIFRoaXMgdmVyc2lvbiBv
ZiBpbml0aWFsaXplSW5kZXggaXMgZm9yIGNhc2VzIHdoZXJlIHlvdSBrbm93IHRoYXQgeW91IHdp
bGwgbm90IG5lZWQgYW55CisgICAgLy8gYmFycmllcnMuIFRoaXMgaW1wbGllcyBub3QgaGF2aW5n
IGFueSBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucy4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5p
dGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIodW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQorICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAg
ICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAg
IEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQodi5pc0ludDMyKCkpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
OworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHYuaXNOdW1iZXIoKSk7CisgICAgICAgICAgICBkb3Vi
bGUgdmFsdWUgPSB2LmFzTnVtYmVyKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YWx1
ZSA9PSB2YWx1ZSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XSA9IHZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCiAgICAgYm9vbCBoYXNTcGFyc2VN
YXAoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNjQyLDYg
KzY5MCw3IEBAIHB1YmxpYzoKICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0eSBv
ZmZzZXRzLgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29u
c3QgeyByZXR1cm4gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+Z2V0KCk7IH0KICAgICB2b2lk
IHB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkg
eyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAg
IHZvaWQgcHV0RGlyZWN0V2l0aG91dEJhcnJpZXIoUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1Zh
bHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodmFsdWUpOyB9CiAgICAgdm9pZCBwdXREaXJlY3RVbmRlZmluZWQoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldFVuZGVmaW5lZCgpOyB9
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdE5hdGl2ZUludHJpbnNpY0dl
dHRlcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSWRlbnRpZmllciwgTmF0aXZlRnVuY3Rpb24sIElu
dHJpbnNpYywgdW5zaWduZWQgYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NiwxMyArMzY2
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZChW
TSYgdm0sIEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlU3Vic3RyaW5nT2ZSZXNv
bHZlZChWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEpTU3RyaW5n
KiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAgICAg
IEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNS
b3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKKyAgICAgICAgSlNSb3BlU3Ry
aW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+
KHZtLmhlYXAsIGRlZmVycmFsQ29udGV4dCkpIEpTUm9wZVN0cmluZyh2bSk7CiAgICAgICAgIG5l
d1N0cmluZy0+ZmluaXNoQ3JlYXRpb25TdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBiYXNlLCBvZmZz
ZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCisgICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0m
IHZtLCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgbnVsbHB0
ciwgYmFzZSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIH0KKwogICAgIHZvaWQgdmlzaXRGaWJlcnMo
U2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaWJlcnMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSb3BlU3RyaW5nLCB1KTsgfQpAQCAtNDkyLDYgKzQ5
Nyw3IEBAIGlubGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1
cm4ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUuYXNDZWxsKCkpOwogfQogCisvLyBUaGlzIE1VU1Qg
Tk9UIEdDLgogaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNKiB2bSkKIHsKICAgICBy
ZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwpAQCAtNTgyLDcgKzU4OCw3IEBA
IGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBFeGUKICAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUodm0sIGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAotaW5s
aW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogcywg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwog
ICAgIEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMtPmxlbmd0aCgpKSk7
CkBAIC01OTEsNyArNTk3LDEyIEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29s
dmVkKFYKICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwogICAg
IGlmICghb2Zmc2V0ICYmIGxlbmd0aCA9PSBzLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHM7
Ci0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwg
cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0
cmluZ09mUmVzb2x2ZWQodm0sIGRlZmVycmFsQ29udGV4dCwgcywgb2Zmc2V0LCBsZW5ndGgpOwor
fQorCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3Ry
aW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
anNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBudWxscHRyLCBzLCBvZmZzZXQsIGxlbmd0aCk7CiB9
CiAKIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2
ICsxODIsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2ws
IHRlc3RUaGVGVEwsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJv
c2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1
c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1
c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9v
bCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
ZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDI5ICszNiwzMSBAQCBKU0FycmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShK
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9uIGVycm9y
cyBncmFjZWZ1bGx5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTUxNDQKICAgICAKKyAgICBHQ0RlZmVycmFsQ29udGV4dCBkZWZlcnJhbENvbnRleHQo
dm0uaGVhcCk7CisgICAgCiAgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+aXNIYXZpbmdB
QmFkVGltZSgpKSkgewotICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJl
Z0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGdsb2JhbE9iamVjdC0+
cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSAr
IDEpOwogICAgICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNF
bXB0eVN0cmluZygmdm0pKTsKKyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRC
YXJyaWVyKDAsIGpzRW1wdHlTdHJpbmcoJnZtKSk7CiAgICAgICAgIAogICAgICAgICBpZiAodW5z
aWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAg
ICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIo
aSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBhcnJh
eSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sIGdsb2JhbE9i
amVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVy
bnMoKSArIDEpOworICAgICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkodm0sICZkZWZlcnJhbENvbnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5p
dGlhbGl6ZUluZGV4KHZtLCAwLCBqc0VtcHR5U3RyaW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3Vv
dXMpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoMCwganNF
bXB0eVN0cmluZygmdm0pLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAgCiAgICAgICAg
IGlmICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkg
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsg
KytpKQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5k
ZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIGFycmF5LT5p
bml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcihpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhD
b250aWd1b3VzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGFycmF5LT5wdXREaXJlY3Qodm0s
IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7Ci0g
ICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9m
ZnNldCwgaW5wdXQpOworICAgIGFycmF5LT5wdXREaXJlY3RXaXRob3V0QmFycmllcihSZWdFeHBN
YXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcigtMSkpOworICAgIGFycmF5
LT5wdXREaXJlY3RXaXRob3V0QmFycmllcihSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5
T2Zmc2V0LCBpbnB1dCk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNp
b24gMjA2MzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hl
c0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVnRXhw
TWF0Y2hlc0FycmF5X2gKIAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNsdWRl
ICJHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0zMiwx
MyArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQg
UmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCA9IDEwMDsKIHN0YXRpYyBjb25z
dCBQcm9wZXJ0eU9mZnNldCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0ID0g
MTAxOwogCi1BTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdF
eHBNYXRjaGVzQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCkKK0FMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewog
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IGluaXRpYWxMZW5ndGg7CiAgICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCog
dGVtcCA9IHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkoZGVmZXJyYWxDb250ZXh0LCBudWxs
cHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBp
ZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwpAQCAtNDgsNyArNDksNyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNy
ZWF0ZVVuaW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5pdGlhbExlbmd0aDsgaSA8IHZl
Y3Rvckxlbmd0aDsgKytpKQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOwogICAgIAotICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0
ZXJmbHkodm0sIGRlZmVycmFsQ29udGV4dCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSgKQEAgLTc3LDQ3
ICs3OCw0NCBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoCiAgICAg
CiAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCk7
CiAgICAgCisgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwor
ICAgIAogICAgIGlmIChVTkxJS0VMWShnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkp
IHsKLSAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBn
bG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJu
cyArIDEpOworICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dm0sICZkZWZlcnJhbENvbnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCksIG51bVN1YnBhdHRlcm5zICsgMSk7CiAgICAgICAgIAogICAgICAgICBzZXRQcm9w
ZXJ0aWVzKCk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAw
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IHRo
ZSBvYmplY3QgaXMgc2FmZSB0byBzY2FuIGJ5IEdDLgotICAgICAgICAKLSAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwg
cmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7CisgICAgICAgIGFycmF5
LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQo
dm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSBy
ZXN1bHQuc3RhcnQpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PD0gbnVtU3VicGF0dGVybnM7ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0
dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAg
ICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5k
ZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5w
dXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZl
ZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1sy
ICogaSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZh
bHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhX
aXRob3V0QmFycmllcihpLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sIGds
b2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBhdHRlcm5z
ICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNo
ZXNBcnJheSh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVz
QXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJyYXkpOwogICAgICAgICAKICAgICAgICAgc2V0UHJvcGVydGllcygpOwogICAgICAg
ICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSwg
QXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCi0gICAgICAgICAgICBhcnJheS0+aW5pdGlh
bGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAg
ICAgICAgCiAgICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBieSBHQy4K
IAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVz
b2x2ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQp
LCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgJmRlZmVycmFsQ29udGV4
dCwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCksIEFycmF5
V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CiAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJw
YXR0ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlOwogICAgICAg
ICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBp
bnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCksIEFycmF5
V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIHZhbHVlID0gSlNSb3BlU3RyaW5nOjpj
cmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBpbnB1dCwgc3Rh
cnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAg
YXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIHZhbHVlLCBBcnJheVdpdGhD
b250aWd1b3VzKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJldHVybiBhcnJheTsKIH0KIApJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDktMjUgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgd3JpdGUgYmFycmllciBzaG91bGQgYmUgZG93biB3
aXRoIFRTTworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAor
ICAgICAgICBBZGRlZCBjbGVhclJhbmdlKCksIHdoaWNoIHF1aWNrbHkgY2xlYXJzIGEgcmFuZ2Ug
b2YgYml0cy4gVGhpcyB0dXJuZWQgb3V0IHRvIGJlIHVzZWZ1bCBmb3IKKyAgICAgICAgYSBERkcg
b3B0aW1pemF0aW9uIHBhc3MuCisKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5jcHA6Cisg
ICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2UpOgorICAgICAgICAqIHd0Zi9G
YXN0Qml0VmVjdG9yLmg6CisKIDIwMTYtMDktMjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBOZWVkIGEgc3RvcmUtbG9hZCBmZW5jZSBiZXR3ZWVuIHNldHRpbmcg
Y2VsbCBzdGF0ZSBhbmQgdmlzaXRpbmcgdGhlIG9iamVjdCBpbiBTbG90VmlzaXRvcgpJbmRleDog
U291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdEJpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDIwNjM2MykKKysrIFNvdXJjZS9XVEYv
d3RmL0Zhc3RCaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1MywyNCBAQCB2
b2lkIEZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OnJlc2l6ZVNsb3coCiAgICAgbV93b3JkcyA9IG5l
d0FycmF5OwogfQogCit2b2lkIEZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2lu
LCBzaXplX3QgZW5kKQoreworICAgIGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKQorICAgICAgICAgICAgYXQoaSkgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgZW5kQmVnaW5T
bG9wID0gKGJlZ2luICsgMzEpICYgfjMxOworICAgIHNpemVfdCBiZWdpbkVuZFNsb3AgPSBlbmQg
JiB+MzE7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kQmVnaW5TbG9w
OyArK2kpCisgICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2lu
RW5kU2xvcDsgaSA8IGVuZDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAo
c2l6ZV90IGkgPSBlbmRCZWdpblNsb3AgLyAzMjsgaSA8IGJlZ2luRW5kU2xvcCAvIDMyOyArK2kp
CisgICAgICAgIG1fd29yZHMud29yZChpKSA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCShyZXZpc2lvbiAyMDYzNjMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsOCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQorICAg
IAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBz
aXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhp
cyBiaXR2ZWN0b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290096</attachid>
            <date>2016-09-28 09:51:02 -0700</date>
            <delta_ts>2016-09-28 13:34:57 -0700</delta_ts>
            <desc>rebased patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126575</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1
ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwNjUw
Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNjUy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
CiAgICAgZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAorICAg
IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcAogICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDggQEAKIAkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUx
IC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovOyB9OwogCQkw
RjdDNUZCODFEODg4QTBDMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCNzFEODg4QTAxMDA0
NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi87IH07CiAJCTBGN0M1RkJBMUQ4ODk1MDcw
MDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRT
cGFjZUlubGluZXMuaCAqLzsgfTsKKwkJMEY3Rjk4OEIxRDk1OTZDNTAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEY3Rjk4OEMxRDk1OTZDODAwRjRG
MTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8q
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzM1
QjcxNjM5QzFFNjAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2
MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjEzLDYgKzYxNSw4IEBACiAJCTBGQjM4NzkyMUJGRDMx
QTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxl
LmNwcCAqLzsgfTsKIAkJMEZCNDE1ODQxRDc4RkI0QzAwREY4RDA5IC8qIEFycmF5Q29udmVudGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NDE1ODMxRDc4Rjk4MjAwREY4RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICovOyB9OwogCQkw
RkI0MzhBMzE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQzOEEyMTkyNzBCMUQwMEUxRkJD
OSAvKiBTdHJ1Y3R1cmVTZXQuY3BwICovOyB9OworCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0Ig
LyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
QjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdEMUQ5OUFF
QTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLzsgfTsKIAkJMEZCNEZC
NzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEg
LyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5o
ICovOyB9OwogCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZC
NzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCAqLzsgfTsKQEAgLTI3
NDMsNiArMjc0Nyw4IEBACiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT3BJbmZvLmg7IHBhdGggPSBk
ZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI3MUQ4
ODhBMDEwMDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkU3BhY2VJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgwMjNF
OTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgz
MzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjg1Miw2ICsyODU4LDggQEAKIAkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZU
TENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29t
cGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBBcnJheUNvbnZlbnRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZC
QzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ3
NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRl
eHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxD
b250ZXh0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2
QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyog
REZHQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9j
YXRvci5oOyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1vbi5jcHA7IHBhdGggPSBkZmcv
REZHQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTQsNiArNTMw
Miw4IEBACiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCiAJCQkJMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMu
aCAqLywKKwkJCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQu
aCAqLywKKwkJCQkwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmggKi8sCiAJCQkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8sCiAJCQkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oICovLAogCQkJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovLApAQCAtNjU1NSw2ICs2NTY1LDggQEAKIAkJ
CQkwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovLAog
CQkJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8sCisJCQkJMEY3Rjk4ODkx
RDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8s
CisJCQkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5oICovLAogCQkJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1
IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUy
RTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLApAQCAtNzk0
OCw2ICs3OTYwLDcgQEAKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4
NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTMyOERBRTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAv
KiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTMzRjUwODUxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzI4LDYgKzgzNDEsNyBAQAog
CQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQxNDJFNTExQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRG
RDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0UxRDk5QUVB
OTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURB
MDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBkYXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLywK
IAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MzcwLDYgKzgzODQsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUw
MEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBB
OUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDc2N0Yx
RDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDk4LDYgKzkxMTMsNyBAQAog
CQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dy
YXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
RkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVy
cmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjA2NTI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzQsNiArMzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgYnJhbmNoUHRy
KGNvbmQsIG9wMSwgaW1tKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAgICB9CiAKKyAgICBKdW1w
IGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBYnNv
bHV0ZUFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoMzIoZmxpcChj
b25kKSwgcmlnaHQsIGxlZnQpOworICAgIH0KKwogICAgIHZvaWQgYnJhbmNoMzIoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIExhYmVsIHRh
cmdldCkKICAgICB7CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIG9wMSwgb3AyKS5saW5rVG8odGFy
Z2V0LCB0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6YWRkMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmFuZDMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2gzMjsKICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzI7CiAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246OnN1YjMyOwpAQCAtODI4LDYgKzgyOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcHFfcm0ocmlnaHQsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQorICAgIAorICAgIEp1bXAgYnJh
bmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBzY3JhdGNo
UmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3JhdGNoUmVnaXN0
ZXIoKSwgcmlnaHQpOworICAgIH0KIAogICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA5LDI5ICsx
MzA5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gSWYgd2UgaGFkIGFsbG9jYXRlZCB1c2luZyBhbiBvcGVyYXRpb24gdGhlbiB3
ZSB3b3VsZCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgdGhlIHN0b3JlCi0gICAgICAgIC8vIGJhcnJp
ZXIgYW5kIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBzdG9yZWQgdGhlIGJ1dHRlcmZseSBpbnRvIHRo
ZSBvYmplY3QuCiAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJ1
ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVm
ZmVyKCk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50
SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5
KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIo
c2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjMpOwotICAgICAg
ICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFs
cmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAgICAgICAgIGppdC5zdG9yZVB0cigK
LSAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywgc2NyYXRjaEdQUjIs
IENDYWxsSGVscGVyczo6U2NhbGVQdHIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSBz
ZXQgdGhlIG5ldyBidXR0ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gRG9pbmcgaXQgdGhp
cyB3YXkgZW5zdXJlcyB0aGF0CiAgICAgICAgICAgICAvLyB3aGF0ZXZlciB3ZSBoYWQgZG9uZSB1
cCB0byB0aGlzIHBvaW50IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2UgdG8gYnJhbmNoIHRvIHNs
b3cKICAgICAgICAgICAgIC8vIHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEJ1dHRlcmZs
eV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCiAgICAg
bWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAotICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJ
RCkgXAorICAgIG1hY3JvKEpTQ2VsbF9jZWxsU3RhdGUpIFwKICAgICBtYWNybyhKU0NlbGxfaW5k
ZXhpbmdUeXBlKSBcCisgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCiAgICAgbWFjcm8o
SlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlKSBc
CiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NDQsMTEgKzI4NDQs
MTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOiB7CiAgICAgICAgIGZpbHRlcihu
b2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6
CiAgICAgY2FzZSBab21iaWVIaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDUsMTEgKzQwNSwyMCBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBMb29w
SGludDoKICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93
OgotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgd3Jp
dGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICAgICAgcmVhZChKU0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgd3JpdGUo
SlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBG
ZW5jZWRTdG9yZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSGVhcCk7CisgICAgICAgIHdyaXRlKEpT
Q2VsbF9jZWxsU3RhdGUpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIEludmFsaWRhdGlv
blBvaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBMYXp5Tm9kZShub2Rl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJz
RXhpdFN0YXRlLmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3
LDggQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAogICAgIGNhc2Ug
Q291bnRFeGVjdXRpb246CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgIC8vIFRoZXNlIGRvIGNsb2JiZXIg
bWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUuIEl0IG1heSBiZSBuaWNlIHRv
IHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRob3NlIHRoYXQgYXJlIG9ic2Vy
dmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9uJ3QgZG8gdGhhdCByaWdodCBu
b3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
CShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgog
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5j
ZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5v
dGlmeVdyaXRlOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQwMiw2ICsxNDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAg
ICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAg
ICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RM
YXN0SW5kZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAg
ICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcs
NyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqCiAgICAgY2FzZSBO
b3RpZnlXcml0ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFN0b3JlQmFycmll
cjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogog
ICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3Vs
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDY1MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtODk3LDcgKzg5Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdG9yZUJhcnJpZXIoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyOworICAgICAgICByZXR1
cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgb3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXI7CiAg
ICAgfQogCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDggKzM3Niw5
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAgICAgLyogQ2hlY2tz
IHRoZSB3YXRjaGRvZyB0aW1lci4gSWYgdGhlIHRpbWVyIGhhcyBmaXJlZCwgd2UgY2FsbCBvcGVy
YXRpb24gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciovIFwKICAgICBtYWNybyhDaGVja1dh
dGNoZG9nVGltZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAvKiBXcml0ZSBiYXJyaWVycyAh
ICovXAorICAgIC8qIFdyaXRlIGJhcnJpZXJzICovXAogICAgIG1hY3JvKFN0b3JlQmFycmllciwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZlbmNlZFN0b3JlQmFycmllciwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2RlcyAq
L1wKICAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAKIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaCkKIHsKLSAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lcik7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShvd25lcik7CiAK
ICAgICAvLyBXZSBuZWVkIHRoZXNlIGV4dHJhIHNsb3RzIGJlY2F1c2Ugc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlIHdpbGwgdXNlIHBva2Ugb24geDg2LgogI2lmIENQVShYODYpCkBAIC0yNjks
NiArMjY5LDggQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwogCiB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhp
dEJhc2UmIGV4aXQpCiB7CisgICAgaml0Lm1lbW9yeUZlbmNlKCk7CisgICAgCiAgICAgaml0Lm1v
dmUoCiAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cigKICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAogCiAgICAgSlNBcnJheSogcmVzdWx0
OwogICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZVdp
dGhCdXR0ZXJmbHkodm0sIGFycmF5U3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICByZXN1
bHQgPSBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBudWxscHRyLCBhcnJheVN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OmNy
ZWF0ZSh2bSwgYXJyYXlTdHJ1Y3R1cmUsIHNpemUpOwogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJERkdTU0FMb3dl
cmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhY2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVy
SW5zZXJ0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCIKQEAgLTM2Miw2ICsz
NjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAg
IHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihkZmcpOwogCiAgICAgICAgIHBlcmZvcm1GYXN0
U3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJD
bHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7CkBAIC00
NTEsNiArNDUzLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgog
ICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZB
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsK
KyAgICAgICAgcGVyZm9ybVN0b3JlQmFycmllckNsdXN0ZXJpbmcoZGZnKTsKICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZU1vdkhpbnRSZW1vdmFsKCkpCiAgICAgICAgICAgICBwZXJmb3JtTW92SGlu
dFJlbW92YWwoZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTk1LDYgKzk5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAg
ICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAg
IGNhc2UgR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJlZ0V4cE9i
amVjdExhc3RJbmRleDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw2IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENoZWNr
VGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNh
c2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRp
b25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoK
QEAgLTM3MSw2ICszNzAsMTQgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBl
JiBzdAogICAgICAgICAvLyBjb21waWxpbmcgdGhpcyBub2RlLgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjoKKyAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgdGhlc2UgY2Fubm90
IGJlIHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9yY2VzIHRoZSBjb21waWxlciB0bworICAgICAgICAv
LyBrZWVwIHRoZW0gZXhhY3RseSB3aGVyZSB0aGV5IHdlcmUuIFRoaXMgaXMgc29ydCBvZiBvdmVy
a2lsbCBzaW5jZSB0aGUgY2xvYmJlcml6ZSBlZmZlY3RzCisgICAgICAgIC8vIGFscmVhZHkgZm9y
Y2UgdGhlc2UgdGhpbmdzIHRvIGJlIG9yZGVyZWQgcHJlY2lzZWx5LiBJJ20ganVzdCBub3QgY29u
ZmlkZW50IGVub3VnaCBpbiBteQorICAgICAgICAvLyBlZmZlY3QgYmFzZWQgbWVtb3J5IG1vZGVs
IHRvIHJlbHkgc29sZWx5IG9uIHRoYXQgcmlnaHQgbm93LgorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDY1
MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4LDE4ICsxMjY4LDYgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFs
dWVFZGdlKQotewotICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkp
OwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAg
d3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCB2YWx1ZUVkZ2UsIHNjcmF0
Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC01MDA3LDcgKzQ5OTUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0b3JlQmFycmll
cihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTQ3NCwyMCArNTQ2Myw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BS
LCBHUFJSZWcgdmFsdWVUYWdHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BS
UmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKLSAgICBp
ZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKG93bmVyR1BSKTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVy
R1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluaygmbV9qaXQpOwotCi0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQot
ICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCiB7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MSksIGdwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzYs
MTggKzEzNzYsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJy
aWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCi17Ci0gICAgQVNTRVJUKCFpc0tu
b3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2
YWx1ZUVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKLSAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFs
dWUuZ3ByKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKLX0K
LQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTUwNzksMTEgKzUwNjcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICB1bnJlYWNoYWJsZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAg
ICBjYXNlIFN0b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2Ug
RmVuY2VkU3RvcmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKQEAgLTU1NzUsMjAgKzU1NjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZh
bHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2Rl
KCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gbV9qaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXJHUFIp
OwotICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3Jh
dGNoMik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZtX2ppdCk7Ci0KLSAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbC5s
aW5rKCZtX2ppdCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVn
IGdwcikKIHsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCBncHIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzA1LDQ2ICs4MzA1LDUxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBTdG9yZUJhcnJpZXIpOworICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmll
ciB8fCBub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CisgICAgCisgICAgYm9vbCBp
c0ZlbmNlZCA9IG5vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwogICAgIAogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CiAgICAgCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHNjcmF0Y2gxLmdwcigpLCBzY3Jh
dGNoMi5ncHIoKSk7Ci0KLSAgICBub1Jlc3VsdChub2RlKTsKLX0KKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7
CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IG9rOworICAgIAorICAgIGlmIChpc0ZlbmNlZCkgeworICAgICAg
ICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaChiYXNlR1BSLCBzY3JhdGNoMUdQUikpOwor
ICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJ
ZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBtX2ppdC5tZW1vcnlG
ZW5jZSgpOworICAgICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5j
ZShiYXNlR1BSKSk7CisgICAgICAgIG5vRmVuY2UubGluaygmbV9qaXQpOworICAgIH0gZWxzZQor
ICAgICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BS
KSk7CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BS
UmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEFTU0VS
VChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSBtX2ppdC52bSgpLT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOwotICAg
IG1faml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBz
Y3JhdGNoMik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOworICAgIG1f
aml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3Jh
dGNoMkdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwogCi0g
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7Ci0gICAgbV9qaXQuc3Rv
cmUzMihzY3JhdGNoMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7
CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgbV9q
aXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVm
ZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3
cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMUdQUik7CiAgICAgLy8gV2UgdXNl
IGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0
byBzY3JhdGNoMi4KLSAgICBtX2ppdC5zdG9yZVB0cihjZWxsLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihi
YXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9m
KHZvaWQqKSkpKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisgICAgb2suYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgbmVlZFRvRmx1c2gubGluaygmbV9q
aXQpOwogCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgY2VsbCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgYmFzZUdQ
Uik7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKIAotICAgIGRv
bmUubGluaygmbV9qaXQpOwotfQorICAgIG9rLmxpbmsoJm1faml0KTsKIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BSKTsK
LSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRj
aDIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOworICAgIG5v
UmVzdWx0KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QWNjZXNz
b3JCeUlkKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NiwxMiAr
Mjk2LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICB9CiAKLSAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQotICAgIHZvaWQgd3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwotCi0gICAg
dm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVV
c2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQogICAgIHZvaWQgY29tcGls
ZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hH
UFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJ
bnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHBy
ZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCkBAIC03MzgsOCArNzMyLDYgQEAgcHVibGljOgogICAg
IHZvaWQgY29tcGlsZVRyeUdldEJ5SWQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUluKE5vZGUq
KTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFz
ZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7Ci0KICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCk7CiAgICAgdm9pZCBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTm9k
ZSogYnJhbmNoTm9kZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9l
c0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitjbGFzcyBTdG9y
ZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFN0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJzdG9yZSBiYXJyaWVyIGZlbmNpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0
KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IG1heFNpemUgPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAgICAgICAgbWF4U2l6ZSA9IHN0
ZDo6bWF4KG1heFNpemUsIGJsb2NrLT5zaXplKCkpOworICAgICAgICBtX2JhcnJpZXJQb2ludHMu
cmVzaXplKG1heFNpemUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgc2l6ZV90
IGJsb2NrU2l6ZSA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgICAgICBkb0Jsb2NrKGJsb2NrKTsK
KyAgICAgICAgICAgIG1fYmFycmllclBvaW50cy5jbGVhclJhbmdlKDAsIGJsb2NrU2l6ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICAvLyBUaGlzIHN1bW1hcml6ZXMgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIHJlbWVtYmVy
IGFib3V0IGEgYmFycmllci4KKyAgICBzdHJ1Y3QgQ2hpbGRBbmRPcmlnaW4geworICAgICAgICBD
aGlsZEFuZE9yaWdpbigpIHsgfQorICAgICAgICAKKyAgICAgICAgQ2hpbGRBbmRPcmlnaW4oTm9k
ZSogY2hpbGQsIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4pCisgICAgICAgICAgICA6IGNoaWxk
KGNoaWxkKQorICAgICAgICAgICAgLCBzZW1hbnRpY09yaWdpbihzZW1hbnRpY09yaWdpbikKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBjaGlsZCB7IG51bGxw
dHIgfTsKKyAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbjsKKyAgICB9OworICAgIAor
ICAgIHZvaWQgZG9CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhcnJpZXJQb2ludHMuaXNFbXB0eSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpcnN0
IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291bGQgd2FudCB0byBwbGFjZSBhbGwgb2Yg
dGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKKyAgICAgICAgLy8gYmFja3dhcmRzIGFuYWx5c2lzLiBX
ZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1cyBpZiB3ZSBoYWQgc2VlbiBhIEdDLiBT
aW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzLCB3aGVuIHdlIGdl
dCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlmIGEgR0Mgd2lsbCBoYXBwZW4KKyAgICAg
ICAgLy8gaW4gdGhlIGZ1dHVyZSBhZnRlciB0aGF0IG5vZGUuCisgICAgICAgIGJvb2wgZnV0dXJl
R0MgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYmFja3dh
cmRzIGFuYWx5c2lzLCBzbyBleGl0cyByZXF1aXJlIGNvbnNlcnZhdGlzbS4gSWYgd2UgZXhpdCwg
dGhlbiB0aGVyZQorICAgICAgICAgICAgLy8gcHJvYmFibHkgd2lsbCBiZSBhIEdDIGluIHRoZSBm
dXR1cmUhIElmIHdlIG5lZWRlZCB0byB0aGVuIHdlIGNvdWxkIGxpZnQgdGhhdAorICAgICAgICAg
ICAgLy8gcmVxdWlyZW1lbnQgYnkgZWl0aGVyICgxKSBoYXZpbmcgYSBTdG9yZUJhcnJpZXJIaW50
IHRoYXQgdGVsbHMgT1NSIGV4aXQgdG8gYmFycmllciB0aGF0CisgICAgICAgICAgICAvLyB2YWx1
ZSBvciAoMikgYXV0b21hdGljYWxseSBiYXJyaWVyaW5nIGFueSBERkctbGl2ZSBOb2RlIG9uIE9T
UiBleGl0LiBFaXRoZXIgd2F5LCBpdAorICAgICAgICAgICAgLy8gd291bGQgYmUgd2VpcmQgYmVj
YXVzZSBpdCB3b3VsZCBjcmVhdGUgYSBuZXcgcm9vdCBmb3IgT1NSIGF2YWlsYWJpbGl0eSBhbmFs
eXNpcy4gSQorICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSBldmlkZW5jZSB0aGF0IGl0IHdvdWxk
IGJlIHdvcnRoIGl0LgorICAgICAgICAgICAgaWYgKGRvZXNHQyhtX2dyYXBoLCBub2RlKSB8fCBt
YXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KSB7CisgICAgICAgICAgICAgICAg
ZnV0dXJlR0MgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSAm
JiBmdXR1cmVHQykgeworICAgICAgICAgICAgICAgIG1fYmFycmllclBvaW50c1tub2RlSW5kZXhd
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmdXR1cmVHQyA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgcnVuIGZvcndhcmQgYW5k
IGNvbGxlY3QgdGhlIGJhcnJpZXJzLiBXaGVuIHdlIGhpdCBhIGJhcnJpZXIgcG9pbnQsIGluc2Vy
dCBhbGwgb2YKKyAgICAgICAgLy8gdGhlbSB3aXRoIGEgZmVuY2UuCisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+aXNTdG9yZUJhcnJpZXIoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCAhbm9kZS0+b3JpZ2luLndhc0hvaXN0ZWQpOworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmln
aW47CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmFwcGVuZChDaGlsZEFuZE9yaWdpbihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG9yaWdpbi5zZW1hbnRpYykpOworICAgICAgICAgICAgbm9k
ZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9iYXJyaWVyUG9p
bnRzW25vZGVJbmRleF0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJz
LmJlZ2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChj
b25zdCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA8IGIuY2hpbGQ7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IHN0ZDo6dW5pcXVlKAorICAgICAg
ICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQo
KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEu
Y2hpbGQgPT0gYi5jaGlsZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvciAo
YXV0byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKKyAgICAgICAg
ICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZVR5cGUgdHlwZTsKKyAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkgJiYgaXRlciA9
PSBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBG
ZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIHR5cGUsIG9yaWdpbi53aXRoU2VtYW50aWMoc2VtYW50aWNPcmlnaW4p
LAorICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMucmVzaXplKDApOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEZhc3RCaXRW
ZWN0b3IgbV9iYXJyaWVyUG9pbnRzOworICAgIFZlY3RvcjxDaGlsZEFuZE9yaWdpbj4gbV9uZWVk
ZWRCYXJyaWVyczsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHBlcmZv
cm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVu
UGhhc2U8U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gUGlja3MgdXAgZ3JvdXBzIG9mIGJhcnJpZXJzIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQg
aW4gYW55IG9yZGVyIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyIGFuZAorLy8gcGxhY2VzIHRo
ZW4gYXQgdGhlIGVhcmxpZXN0IHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHRoZSBjbHVzdGVy
IHdvdWxkIGJlIGNvcnJlY3QuIFRoaXMgcGhhc2UKKy8vIG1ha2VzIG9ubHkgdGhlIGZpcnN0IG9m
IHRoZSBjbHVzdGVyIGJlIGEgRmVuY2VkU3RvcmVCYXJyaWVyIHdoaWxlIHRoZSByZXN0IGFyZSBu
b3JtYWwKKy8vIFN0b3JlQmFycmllcnMuIFRoaXMgcGhhc2UgYWxzbyByZW1vdmVzIHJlZHVuZGFu
dCBiYXJyaWVycyAtIGZvciBleGFtcGxlLCB0aGUgY2x1c3RlciBtYXkgZW5kIHVwCisvLyB3aXRo
IHR3byBvciBtb3JlIGJhcnJpZXJzIG9uIHRoZSBzYW1lIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBp
dCBpcyB0b3RhbGx5IHNhZmUgZm9yIHVzIHRvIGRyb3AKKy8vIG9uZSBvZiB0aGVtLiBUaGUgcmVh
c29uIHdoeSB0aGlzIGlzIHNvdW5kIGhpbmdlcyBvbiB0aGUgImVhcmxpZXN0IHBvaW50IHdoZXJl
IHRoZSBjbHVzdGVyIHdvdWxkCisvLyBiZSBjb3JyZWN0IiBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUs
IHRha2UgdGhpcyBpbnB1dDoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAgYjogUHV0QnlP
ZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBjOiBGZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBlOiBGZW5jZWRTdG9yZUJhcnJp
ZXIoQG8pCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBnOiBGZW5j
ZWRTdG9yZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTog
Q2FsbCgpCisvLworLy8gVGhlIGNsdXN0ZXIgb2YgYmFycmllcnMgaXMgQGMsIEBlLCBhbmQgQGcu
IEFsbCBvZiB0aGUgYmFycmllcnMgYXJlIGJldHdlZW4gdHdvIGRvZXNHQyBlZmZlY3RzOgorLy8g
dGhlIGNhbGxzIGF0IEBhIGFuZCBAaS4gQmVjYXVzZSB0aGVyZSBhcmUgbm8gZG9lc0dDIGVmZmVj
dHMgYmV0d2VlbiBAYSBhbmQgQGkgYW5kIHRoZXJlIGlzIG5vCisvLyBwb3NzaWJsZSBjb250cm9s
IGZsb3cgZW50cnkgaW50byB0aGlzIHNlcXVlbmNlIGJldHdlZW4gQCBhbmQgQGksIHdlIGNvdWxk
IGNvdWxkIGp1c3QgZXhlY3V0ZSBhbGwKKy8vIG9mIHRoZSBiYXJyaWVycyBqdXN0IGJlZm9yZSBA
aSBpbiBhbnkgb3JkZXIuIFRoZSBlYXJsaWVzdCBwb2ludCB3aGVyZSB0aGUgY2x1c3RlciB3b3Vs
ZCBiZQorLy8gY29ycmVjdCBpcyBqdXN0IGFmdGVyIEBmLCBzaW5jZSB0aGF0J3MgdGhlIGxhc3Qg
b3BlcmF0aW9uIHRoYXQgbmVlZHMgYSBiYXJyaWVyLiBXZSB1c2UgdGhlCisvLyBlYXJsaWVzdCB0
byByZWR1Y2UgcmVnaXN0ZXIgcHJlc3N1cmUuIFdoZW4gdGhlIGJhcnJpZXJzIGFyZSBjbHVzdGVy
ZWQganVzdCBhZnRlciBAZiwgd2UgZ2V0OgorLy8KKy8vICAgICBhOiBDYWxsKCkKKy8vICAgICBi
OiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8gICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywg
QHkpCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAsIEBwLCBAeikKKy8vICAgICBjOiBGZW5jZWRT
dG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZTogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8gICAg
IGc6IEZlbmNlZFN0b3JlQmFycmllcihAcCkKKy8vICAgICBoOiBHZXRCeU9mZnNldChAcSkKKy8v
ICAgICBpOiBDYWxsKCkKKy8vCisvLyBUaGlzIHBoYXNlIGRvZXMgbW9yZS4gSXQgdGFrZXMgYWR2
YW50YWdlIG9mIHRoZSBjbHVzdGVyaW5nIHRvIHJlbW92ZSBmZW5jZXMgYW5kIHJlbW92ZSByZWR1
bmRhbnQKKy8vIGJhcnJpZXJzLiBTbyB0aGlzIHBoYXNlIHdpbGwgb3V0cHV0IHRoaXM6CisvLwor
Ly8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAg
ICAgZDogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeSkKKy8vICAgICBmOiBQdXRCeU9mZnNldChAcCwg
QHAsIEB6KQorLy8gICAgIGM6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAgICBnOiBTdG9y
ZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisvLyAgICAgaTogQ2FsbCgp
CisvLworLy8gVGhpcyBvcHRpbWl6YXRpb24gaW1wcm92ZXMgYm90aCBvdmVyYWxsIHRocm91Z2hw
dXQgYW5kIHRoZSB0aHJvdWdocHV0IHdoaWxlIHRoZSBjb25jdXJyZW50IEdDIGlzCisvLyBydW5u
aW5nLiBJbiB0aGUgZm9ybWVyLCB3ZSBhcmUgc2ltcGxpZnlpbmcgaW5zdHJ1Y3Rpb24gc2VsZWN0
aW9uIGZvciBhbGwgYnV0IHRoZSBmaXJzdCBmZW5jZS4gSW4KKy8vIHRoZSBsYXR0ZXIsIHdlIGFy
ZSByZWR1Y2luZyB0aGUgY29zdCBvZiBhbGwgYnV0IHRoZSBmaXJzdCBiYXJyaWVyLiBUaGUgZmly
c3QgYmFycmllciB3aWxsIGF3bGF5cworLy8gdGFrZSBzbG93IHBhdGggd2hlbiB0aGVyZSBpcyBj
b25jdXJyZW50IEdDIGFjdGl2aXR5LCBzaW5jZSB0aGUgc2xvdyBwYXRoIGNvbnRhaW5zIHRoZSBm
ZW5jZS4gQnV0CisvLyBhbGwgb2YgdGhlIG90aGVyIGJhcnJpZXJzIHdpbGwgb25seSB0YWtlIHNs
b3cgcGF0aCBpZiB0aGV5IHJlYWxseSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvYmplY3QuCitib29s
IHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw3ICszMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3du
IGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEs
IEVkZ2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAg
ICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDMwLDEzICs0MzAsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgSW5zZXJ0aW5nIGJhcnJpZXIuXG4iKTsKLSAgICAgICAgaW5zZXJ0QmFycmll
cihtX25vZGVJbmRleCwgYmFzZSk7CisgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQgbm9k
ZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wgZXhpdE9LID0gdHJ1ZSkKKyAgICB2b2lkIGluc2VydEJh
cnJpZXIodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCiAgICAgewotICAgICAgICAvLyBJ
bnNlcnRpbmcgYSBiYXJyaWVyIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBtYXkgYmVjb21lIG1hcmtl
ZCBieSB0aGUgR0MsIHdoaWNoIHdpbGwgbWFrZQotICAgICAgICAvLyB0aGUgb2JqZWN0IGJsYWNr
LgorICAgICAgICAvLyBUaGlzIGlzIGp1c3Qgb3VyIHdheSBvZiBzYXlpbmcgdGhhdCBiYXJyaWVy
cyBhcmUgbm90IHJlZHVuZGFudCB3aXRoIGVhY2ggb3RoZXIgYWNjb3JkaW5nCisgICAgICAgIC8v
IHRvIGZvcndhcmQgYW5hbHlzaXM6IGlmIHdlIHByb3ZlZCBvbmUgdGltZSB0aGF0IGEgYmFycmll
ciB3YXMgbmVjZXNzYXJ5IHRoZW4gaXQnbGwgZm9yCisgICAgICAgIC8vIHN1cmUgYmUgbmVjZXNz
YXJ5IG5leHQgdGltZS4KICAgICAgICAgYmFzZS0+c2V0RXBvY2goRXBvY2goKSk7CiAKICAgICAg
ICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUg
YmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KQEAgLTQ0NiwxNyArNDQ3LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdXBwb3J0IFN0b3JlQmFycmllcihV
bnR5cGVkVXNlOikuIFRoYXQgd291bGQgYmUgc29ydCBvZiBjb29sLgogICAgICAgICAvLyBCdXQg
cmlnaHQgbm93IHdlIGRvbid0IG5lZWQgaXQuCiAKLSAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFs
IGVkZ2Ugd2FzIHVuY2hlY2tlZCwgd2Ugc2hvdWxkIGFsc28gbm90IGhhdmUgYSBjaGVjay4gV2Ug
bWF5IGJlIGluIGEgY29udGV4dAotICAgICAgICAvLyB3aGVyZSBjaGVja3MgYXJlIG5vdCBhbGxv
d2VkLiBJZiB3ZSBldmVyIGRpZCBoYXZlIHRvIGluc2VydCBhIGJhcnJpZXIgYXQgYW4gRXhpdElu
dmFsaWQKLSAgICAgICAgLy8gY29udGV4dCBhbmQgdGhhdCBiYXJyaWVyIG5lZWRlZCBhIGNoZWNr
LCB0aGVuIHdlIGNvdWxkIG1ha2UgdGhhdCB3b3JrIGJ5IGhvaXN0aW5nIHRoZSBjaGVjay4KLSAg
ICAgICAgLy8gVGhhdCBkb2Vzbid0IGhhcHBlbiByaWdodCBub3cuCi0gICAgICAgIGlmIChiYXNl
LnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpIHsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBtX25vZGUtPm9yaWdpbi5leGl0T0spOwotICAgICAgICAgICAgYmFzZS5z
ZXRVc2VLaW5kKENlbGxVc2UpOwotICAgICAgICB9CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBpc0NlbGwoYmFzZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEJhcnJpZXJzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIG5vZGUgdGhhdCB0aGV5IHNl
cnZpY2UuIFRoZXJlZm9yZSwgd2UgYWx3YXlzIGtub3cKKyAgICAgICAgLy8gdGhhdCB0aGUgdGhp
bmcgaXMgYSBjZWxsIG5vdy4KKyAgICAgICAgYmFzZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgIAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOwor
ICAgICAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbV9ub2RlKSkKKyAgICAgICAg
ICAgIG9yaWdpbiA9IG9yaWdpbi53aXRoSW52YWxpZEV4aXQoKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGVUeXBlIHR5cGU7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmll
cnMoKSkKKyAgICAgICAgICAgIHR5cGUgPSBGZW5jZWRTdG9yZUJhcnJpZXI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJhcnJpZXI7CiAgICAgICAgIAotICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGV4aXRPSyksIGJh
c2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIHR5cGUsIG9yaWdpbiwgYmFzZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgcmVhbGx5SW5z
ZXJ0QmFycmllcnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkocmV2aXNpb24gMjA2NTI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogY2xhc3MgR3JhcGg7CiAKIC8vIEluc2VydHMgc3RvcmUgYmFycmllcnMg
aW4gYSBibG9jay1sb2NhbCBtYW5uZXIgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBhYnN0cmFjdCBp
bnRlcnByZXRlci4KLS8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZv
aWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVycy4gVGhpcyBwaGFzZSByZXF1aXJlcwotLy8g
dGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KKy8vIFVzZXMgYSBzaW1wbGUgZXBvY2gtYmFzZWQgYW5h
bHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIGJhcnJpZXJzIG9uIG5ld2x5IGFsbG9jYXRlZCBvYmpl
Y3RzLiBUaGlzCisvLyBwaGFzZSByZXF1aXJlcyB0aGF0IHdlIGFyZSBub3QgaW4gU1NBLgogYm9v
bCBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiAvLyBJbnNlcnRz
IHN0b3JlIGJhcnJpZXJzIHVzaW5nIGEgZ2xvYmFsIGFuYWx5c2lzIGFuZCBjb25zdWx0cyB0aGUg
YWJzdHJhY3QgaW50ZXJwcmV0ZXIuIFVzZXMgYQotLy8gc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5
c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMsIGJ1dCBvbmx5IHByb3Bh
Z2F0ZXMgInNhbWUKLS8vIGVwb2NoIGFzIGN1cnJlbnQiIHByb3BlcnR5IGZyb20gb25lIGJsb2Nr
IHRvIHRoZSBuZXh0LiBUaGlzIHBoYXNlIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZQotLy8gYWxz
byByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgorLy8gc2ltcGxlIGVwb2No
LWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxv
Y2F0ZWQgb2JqZWN0cy4gVGhpcyBwaGFzZQorLy8gcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlIGFs
c28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KIGJvb2wgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
LmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMiArMTk2LDEyIEBAIHB1YmxpYzoK
ICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55QWRkcmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJh
Y3RIZWFwJiBhdCh2b2lkKiBhZGRyZXNzKQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXQoY29u
c3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2luZGV4ZWRIZWFwLmF0
KGJpdHdpc2VfY2FzdDxwdHJkaWZmX3Q+KGFkZHJlc3MpKTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKHZvaWQqIGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFk
ZHJlc3MpOyB9CisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsgcmV0dXJuIGF0KGFkZHJlc3MpOyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAK
ICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMTE2LDYgKzExNywxNiBAQCB2b2lkIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlUGF0CiAgICAgbV9oZWFwRm9yUGF0Y2hwb2lu
dFdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKIH0KIAordm9pZCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlUmVhZChjb25zdCBBYnN0cmFjdEhlYXAq
IGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVJlYWQuYXBwZW5kKEhl
YXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OmRlY29yYXRlRmVuY2VXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JGZW5jZVdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVh
cCwgdmFsdWUpKTsKK30KKwogdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFu
Z2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMoKQogewogICAgIHJvb3QuY29tcHV0ZSgpOwpAQCAt
MTMyLDkgKzE0MywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5n
CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2FsbFdyaXRlKQogICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRy
eS5oZWFwLT5yYW5nZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9y
UGF0Y2hwb2ludFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUt
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdl
KCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50V3Jp
dGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRl
cyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBm
b3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlUmVhZCkKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJlYWQgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVhcC0+cmFu
Z2UoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVjb3JhdGVDQ2FsbFdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpW
YWx1ZSopOwogICAgIHZvaWQgZGVjb3JhdGVQYXRjaHBvaW50UmVhZChjb25zdCBBYnN0cmFjdEhl
YXAqLCBCMzo6VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFdyaXRlKGNvbnN0
IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5jZVJlYWQo
Y29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0ZUZlbmNl
V3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CiAKICAgICB2b2lkIGNvbXB1
dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpOwogCkBAIC0yNDEsNiArMjQzLDggQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JDQ2FsbFdyaXRlOwog
ICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRSZWFkOwogICAgIFZl
Y3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZTsKKyAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JGZW5jZVJlYWQ7CisgICAgVmVjdG9yPEhlYXBGb3JWYWx1
ZT4gbV9oZWFwRm9yRmVuY2VXcml0ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRl
T2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgVGFp
bENhbGw6CiAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDY1MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1
ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKQEAgLTk0NSw2ICs5NDYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY29tcGlsZUNvdW50RXhlY3V0aW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgRmVuY2Vk
U3RvcmVCYXJyaWVyOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgpAQCAtNjk5Nyw5
ICs2OTk5LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIo
KQogICAgIHsKLSAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKICAgICB9Ci0KKyAgICAKICAg
ICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtODEyOCw4ICs4MTMwLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsK
LSAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDA1NSwxMyAr
MTAwNTUsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBydW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQg
Y3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNlLCB5b3Ugc2hvdWxkIG5vdCB1c2UgYnktcmVmZXJl
bmNlCiAgICAgLy8gY2FwdHVyZSAoaS5lLiBbJl0pIGluIGFueSBvZiB0aGVzZSBsYW1iZGFzLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBQYXRjaHBvaW50VmFsdWUqIGxhenlTbG93UGF0aChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKICAgICB7
CiAgICAgICAgIHJldHVybiBsYXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFy
Z3VtZW50cy4uLiB9KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVj
dG9yPExWYWx1ZT4mIHVzZXJBcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xv
d1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJB
cmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwogICAgICAgICAKQEAgLTExNDMxLDI2ICsxMTQzMSwzOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZDhaZXJvRXh0MzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVl
IGJhc2UpCisgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBib29sIGlzRmVu
Y2VkKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OwogCisgICAgICAgIExWYWx1ZSB0aHJlc2hvbGQ7CisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAg
ICAgICAgICAgIHRocmVzaG9sZCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhl
YXAuYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRocmVzaG9sZCA9IG1fb3V0LmNvbnN0SW50MzIoYmxhY2tUaHJlc2hvbGQpOworICAgICAg
ICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9hZENl
bGxTdGF0ZShiYXNlKSwgbV9vdXQuY29uc3RJbnQzMihibGFja1RocmVzaG9sZCkpLAorICAgICAg
ICAgICAgbV9vdXQuYWJvdmUobG9hZENlbGxTdGF0ZShiYXNlKSwgdGhyZXNob2xkKSwKICAgICAg
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgLy8gV2UgZW1pdCB0aGUgc3RvcmUgYmFycmll
ciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywgdGhpcyB3aWxsIG5ldmVyIGZp
cmUuIEFuZAogICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9y
IHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklUIHJhdGhlciB0aGFuCiAgICAg
ICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQuCi0gICAgICAgIGxhenlTbG93
UGF0aCgKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbGF6eVNsb3dQYXRo
KAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogCiAgICAgICAgICAgICAgICAg
cmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmVuY2VkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQu
anVtcElmQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Lm1lbW9yeUZlbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2Uo
YmFzZUdQUikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2UubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFt
cy5sYXp5U2xvd1BhdGgtPnVzZWRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IubG9jayhiYXNlR1BSKTsKQEAgLTExNDk1LDYgKzExNTA4LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGJhc2UpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzRmVuY2VkKQorICAgICAgICAgICAgbV9oZWFwcy5kZWNv
cmF0ZVBhdGNocG9pbnRSZWFkKCZtX2hlYXBzLnJvb3QsIHBhdGNocG9pbnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMu
SlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQ
YXRjaHBvaW50V3JpdGUoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7Cisg
ICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzRmVuY2VWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUu
aCIKICNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKQEAgLTQ0NSw2ICs0NDYsMTEgQEAgdm9p
ZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29y
YXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKK0ZlbmNlVmFsdWUqIE91dHB1
dDo6ZmVuY2UoKQoreworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2
YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVl
LCBwb2ludGVyLnZhbHVlKCkpOwpAQCAtNzk1LDcgKzgwMSw3IEBAIHZvaWQgT3V0cHV0OjpzdG9y
ZShMVmFsdWUgdmFsdWUsIFR5cGVkUG8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCi1UeXBlZFBvaW50ZXIgT3V0cHV0OjphYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorVHlw
ZWRQb2ludGVyIE91dHB1dDo6YWJzb2x1dGUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICBy
ZXR1cm4gVHlwZWRQb2ludGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25zdEludFB0
cihhZGRyZXNzKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJ
KHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RydWN0IE5vZGU7CiB9IC8vIG5h
bWVzcGFjZSBERkcKIAogbmFtZXNwYWNlIEIzIHsKK2NsYXNzIEZlbmNlVmFsdWU7CiBjbGFzcyBT
bG90QmFzZVZhbHVlOwogfSAvLyBuYW1lc3BhY2UgQjMKIApAQCAtMTg5LDYgKzE5MCw3IEBAIHB1
YmxpYzoKIAogICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQg
c3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgp
OwogCiAgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVl
IGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7CkBAIC0yODUsNyArMjg3LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gaGVhcC5iYXNlSW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRl
eEFzQ29uc3RhbnQsIG9mZnNldCk7CiAgICAgfQogCi0gICAgVHlwZWRQb2ludGVyIGFic29sdXRl
KHZvaWQqIGFkZHJlc3MpOworICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZShjb25zdCB2b2lkKiBh
ZGRyZXNzKTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3Qg
QWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNl
LCBmaWVsZCkpOyB9CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25z
dCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJh
c2UsIGZpZWxkKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5o
CShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDE2IEBAIGVudW0gY2xhc3MgQ2VsbFN0
YXRlIDogdWludDhfdCB7CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hv
bGQgPSAxOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgYmxhY2suCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgdGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRv
bG9naWNhbFRocmVzaG9sZCBpcyBhbHdheXMgdHJ1ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5U
aHJlc2hvbGQoQ2VsbFN0YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cit9
CiAKIGlubGluZSBib29sIGlzQmxhY2soQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKIHsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gYmxhY2tUaHJlc2hvbGQ7Cisg
ICAgcmV0dXJuIGlzV2l0aGluVGhyZXNob2xkKGNlbGxTdGF0ZSwgYmxhY2tUaHJlc2hvbGQpOwog
fQogCiBpbmxpbmUgQ2VsbFN0YXRlIGJsYWNrZW4oQ2VsbFN0YXRlIGNlbGxTdGF0ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRleHQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2VkQWxsb2NhdG9yOworCitjbGFzcyBHQ0RlZmVy
cmFsQ29udGV4dCB7CisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEFsbG9jYXRvcjsKK3B1YmxpYzoKKyAgICBpbmxpbmUgR0NEZWZlcnJhbENvbnRleHQoSGVh
cCYpOworICAgIGlubGluZSB+R0NEZWZlcnJhbENvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBI
ZWFwJiBtX2hlYXA7CisgICAgYm9vbCBtX3Nob3VsZEdDIHsgZmFsc2UgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dElubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHQu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5F
IEdDRGVmZXJyYWxDb250ZXh0OjpHQ0RlZmVycmFsQ29udGV4dChIZWFwJiBoZWFwKQorICAgIDog
bV9oZWFwKGhlYXApCit7Cit9CisKK0FMV0FZU19JTkxJTkUgR0NEZWZlcnJhbENvbnRleHQ6On5H
Q0RlZmVycmFsQ29udGV4dCgpCit7CisgICAgQVNTRVJUKCFEaXNhbGxvd0dDOjppc0dDRGlzYWxs
b3dlZE9uQ3VycmVudFRocmVhZCgpKTsKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICBB
U1NFUlQoIW1faGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyNlbmRpZgorICAg
IGlmIChVTkxJS0VMWShtX3Nob3VsZEdDKSkKKyAgICAgICAgbV9oZWFwLmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSw0ICsxNTQ5LDE3
IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4g
bV9jb2RlQmxvY2tzLT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFycmll
clNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoYmFycmll
clNob3VsZEJlRmVuY2VkKCkpKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGJhcnJp
ZXJUaHJlc2hvbGQgaXMgdGhlIHRhdXRvbG9naWNhbCB0aHJlc2hvbGQsIHNvIGZyb20gY291bGQg
c3RpbGwgYmUKKyAgICAgICAgLy8gbm90IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3Vy
ZSB1bnRpbCB3ZSBmaXJlIG9mZiBhIGZlbmNlLgorICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNl
KCk7CisgICAgICAgIGlmICghaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUoKSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBbGxv
Y2F0aW9uU2NvcGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFz
cyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFz
cyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7CkBAIC0xMDQs
OSArMTA1LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNv
bnN0IHZvaWQqKTsKIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwotICAg
IHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwotICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOworICAgIHZvaWQgd3JpdGVCYXJyaWVy
KGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiBmcm9tLCBKU1ZhbHVlIHRvKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
IGZyb20sIEpTQ2VsbCogdG8pOworICAgIAorICAgIHZvaWQgd3JpdGVCYXJyaWVyV2l0aG91dEZl
bmNlKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisgICAgCisgICAgLy8gVGFrZSB0aGlzIGlmIHlvdSBr
bm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBiYXJyaWVyVGhyZXNob2xkLgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9t
KTsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1
cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyKEpTQ2VsbCopOwpAQCAtMTQ5LDYgKzE1NSw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBt
X29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICB2b2lkKiBh
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9p
ZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwor
ICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEdDRGVmZXJyYWxDb250ZXh0KiwgSlNDZWxs
KiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwogICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCopOwogCkBAIC0xNjYsNyArMTczLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBz
aG91bGRDb2xsZWN0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0KEhlYXBP
cGVyYXRpb24gY29sbGVjdGlvblR5cGUgPSBBbnlDb2xsZWN0aW9uKTsKLSAgICBib29sIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xsZWN0
LgorICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCog
PSBudWxscHRyKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xsZWN0LgogICAgIHZvaWQg
Y29sbGVjdEFjY29yZGluZ1RvRGVmZXJHQ1Byb2JhYmlsaXR5KCk7CiAKICAgICB2b2lkIGNvbXBs
ZXRlQWxsSklUUGxhbnMoKTsKQEAgLTI1NCw2ICsyNjEsMTIgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVlQmxv
Y2soc2l6ZV90IGNhcGFjaXR5KTsKKyAgICAKKyAgICBib29sIGJhcnJpZXJTaG91bGRCZUZlbmNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgY29uc3Qg
Ym9vbCogYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gJm1f
YmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgCisgICAgdW5zaWduZWQgYmFycmllclRocmVz
aG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclRocmVzaG9sZDsgfQorICAgIGNvbnN0IHVu
c2lnbmVkKiBhZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gJm1fYmFy
cmllclRocmVzaG9sZDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW9u
U2NvcGU7CkBAIC0yNzgsMTIgKzI5MSwxNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBX
ZWFrU2V0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNl
bGwoSGVhcCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0
ZUNlbGwoSGVhcCYsIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZv
aWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0RlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7CiAKICAgICB2b2lkIGNvbGxlY3RXaXRob3V0QW55U3dlZXAoSGVh
cE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOwogCiAgICAgdm9pZCog
YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggb2JqZWN0cyB3
aXRoIGRlc3RydWN0b3JzLgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6
ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMgd2l0aG91dCBkZXN0cnVjdG9ycy4KKyAgICB2
b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsK
KyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQqIGFsbG9jYXRl
T2JqZWN0T2ZUeXBlKHNpemVfdCk7IC8vIENob29zZXMgb25lIG9mIHRoZSBtZXRob2RzIGFib3Zl
IGJhc2VkIG9uIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBh
bGxvY2F0ZU9iamVjdE9mVHlwZShHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhTWVtb3J5ID0gMjU2OwogICAgIApAQCAtNDExLDYg
KzQyOSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdy
aXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAgICBib29sIG1fYmFycmll
clNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICB1
bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIo
KSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKICAgICBWTSog
bV92bTsKICAgICBkb3VibGUgbV9sYXN0RnVsbEdDTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIEhlYXBJbmxpbmVzX2gKICNkZWZpbmUgSGVhcElubGluZXNfaAog
CisjaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHQuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5j
bHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKQEAg
LTEyNSwxOSArMTI2LDMxIEBAIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBK
U0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVy
Q291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CiAjZW5kaWYKLSAgICBpZiAoIWZyb20gfHwg
IWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICghZnJvbSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hp
dGUpCisgICAgaWYgKCFpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3RhdGUoKSwgYmFycmll
clRocmVzaG9sZCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFRvUmVtZW1iZXJlZFNldChm
cm9tKTsKKyAgICBpZiAoTElLRUxZKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRl
OjpOZXdXaGl0ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB3cml0ZUJhcnJpZXJTbG93UGF0aChm
cm9tKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCog
ZnJvbSkKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSB8fCAhaXNCbGFjayhmcm9tLT5jZWxsU3RhdGUo
KSkpCisgICAgaWYgKCFmcm9tKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFVOTElLRUxZKGlz
V2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0ZSgpLCBiYXJyaWVyVGhyZXNob2xkKCkpKSkK
KyAgICAgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJvbSk7Cit9CisKK2lubGluZSB2b2lkIEhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsK
KyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQo
ZnJvbSk7CisgICAgaWYgKFVOTElLRUxZKGlzV2l0aGluVGhyZXNob2xkKGZyb20tPmNlbGxTdGF0
ZSgpLCBibGFja1RocmVzaG9sZCkpKQorICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7
CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVf
dCBzaXplKQpAQCAtMjE0LDYgKzIyNywxOCBAQCBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVX
aXRob3V0RGVzdHJ1CiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVz
dHJ1Y3RvcihieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0
cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBieXRlcykK
K3sKKyAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKKyAgICByZXR1cm4gbV9v
YmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKGRlZmVycmFsQ29udGV4dCwgYnl0ZXMp
OworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNT
RVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwog
dGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRl
T2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcykKIHsKQEAgLTIyNiw2ICsyNTEsMTYgQEAgaW5saW5l
IHZvaWQqIEhlYXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDbGFzc1R5cGU+CitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmplY3RPZlR5cGUoR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFT
U0VSVCgoIUNsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiB8fCAoQ2xhc3NUeXBlOjpTdHJ1Y3R1
cmVGbGFncyAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHx8IHN0ZDo6aXNfY29udmVydGlibGU8Q2xh
c3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CisKKyAgICBpZiAoQ2xhc3NU
eXBlOjpuZWVkc0Rlc3RydWN0aW9uKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVXaXRoRGVzdHJ1
Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVXaXRob3V0
RGVzdHJ1Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgogaW5saW5lIE1hcmtlZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3Bh
Y2VGb3JPYmplY3RPZlR5cGUoKQogewogICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0
cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9t
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgpAQCAtMjc0LDYgKzMwOSwxNyBAQCBpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5QWxsb2NhdGVBdXhpbGlhcnkoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5s
aW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IG1fb2JqZWN0U3BhY2UudHJ5QWxsb2NhdGVBdXhpbGlhcnkoZGVm
ZXJyYWxDb250ZXh0LCBieXRlcyk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAg
ICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIGF1eGlsaWFyeSBmb3Ig
JXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsIHJlc3VsdCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIGlubGluZSB2b2lkKiBIZWFwOjp0cnlSZWFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQogewogICAgIHZvaWQqIG5ld0Jhc2UgPSB0cnlBbGxvY2F0ZUF1eGlsaWFyeShpbnRlbmRlZE93
bmVyLCBuZXdTaXplKTsKQEAgLTMxMywxMiArMzU5LDE1IEBAIGlubGluZSB2b2lkIEhlYXA6OmRl
Y3JlbWVudERlZmVycmFsRGVwdGgKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0KIAotaW5saW5l
IGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpCitpbmxpbmUgYm9vbCBIZWFw
Ojpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQpCiB7CiAgICAgaWYgKCFzaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGNvbGxlY3QoKTsKKyAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQorICAgICAgICBk
ZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgY29s
bGVjdCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NSw0NSArMTc1LDQ5IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVJbihNYXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRo
QWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBzdGF0aWMgdW5zaWdu
ZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKICAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAg
ICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKQotICAgICAgICAgICAgbV9oZWFwLT5jb2xs
ZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQorICAgICAgICAgICAgICAgIGRlZmVycmFs
Q29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CiAgICAg
fQogICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0Jl
dHdlZW5HQ3MoKSkKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKCkKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewog
ICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlSW1wbChjcmFzaE9uRmFpbHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBs
KGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwogfQogCi12b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2UoKQordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7CiAg
ICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlSW1wbChjcmFzaE9uRmFpbHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBs
KGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwogfQogCi12b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCiB7CiAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEFTU0VSVChtX2hlYXAtPnZtKCkt
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGRvVGVzdENvbGxlY3Rpb25z
SWZOZWVkZWQoKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4
dCk7CiAKICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UtPmlzSXRlcmF0aW5nKCkpOwogICAgIG1f
aGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUpOwogICAgIAogICAgIGRp
ZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJh
bENvbnRleHQpOwogICAgIAogICAgIEFsbG9jYXRpb25TY29wZSBhbGxvY2F0aW9uU2NvcGUoKm1f
aGVhcCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBIZWFwOwogY2xh
c3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xNTIsOCAr
MTUzLDggQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAg
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVz
LmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZSgpOwotICAg
IHZvaWQqIHRyeUFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqID0gbnVsbHB0cik7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
ID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIHRha2VMYXN0QWN0aXZlQmxvY2soKQogICAgIHsKQEAgLTIxNiwx
NSArMjE3LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBzaG91bGRTdGVhbEVtcHR5Qmxv
Y2tzRnJvbU90aGVyQWxsb2NhdG9ycygpIGNvbnN0OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
KiB0cnlBbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwo
Ym9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICB2b2lkKiBh
bGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCosIGJvb2wgY3Jhc2hPbkZhaWx1
cmUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCogdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9j
YXRlQmxvY2soKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUq
KTsKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZCgpOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7
CiAgICAgCiAgICAgdm9pZCBzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYpOwogICAgIApAQCAt
MjY1LDcgKzI2Niw3IEBAIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXQK
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZSgp
CitBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICB1bnNpZ25lZCByZW1haW5pbmcg
PSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKICAgICBpZiAocmVtYWluaW5nKSB7CkBAIC0yNzcsMTMg
KzI3OCwxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5CiAgICAg
CiAgICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYgKFVOTElLRUxZ
KCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoKTsKKyAgICAgICAg
cmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBt
X2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwogICAgIHJldHVybiBoZWFkOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoKQorQUxXQVlTX0lOTElO
RSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQpCiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5yZW1h
aW5pbmc7CiAgICAgaWYgKHJlbWFpbmluZykgewpAQCAtMjk1LDcgKzI5Niw3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAgICAKICAgICBGcmVlQ2VsbCogaGVh
ZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2Fz
ZShkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5l
eHQ7CiAgICAgcmV0dXJuIGhlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwzMiArMjM1LDU4
IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIAogdm9pZCogTWFy
a2VkU3BhY2U6OmFsbG9jYXRlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQogewor
ICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBieXRlcywgIiBi
eXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CiAgICAgaWYgKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsKICAg
ICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShzdWJzcGFjZSwgYnl0
ZXMpOworICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBudWxscHRyLCBieXRlcyk7
Cit9CisKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYgc3Vic3BhY2UsIEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBp
ZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgYnl0ZXMsICIgZGVmZXJy
ZWQgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRlcywgIi5cbiIpOworICAgIGlmIChNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7
CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxDb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIGFsbG9jYXRl
TGFyZ2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOwogfQogCiB2b2lkKiBNYXJr
ZWRTcGFjZTo6dHJ5QWxsb2NhdGUoU3Vic3BhY2UmIHN1YnNwYWNlLCBzaXplX3QgYnl0ZXMpCiB7
CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJUcnktYWxsb2NhdGluZyAiLCBieXRl
cywgIiBieXRlcyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CiAgICAgaWYgKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykp
IHsKICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZSgpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVMYXJnZShz
dWJzcGFjZSwgYnl0ZXMpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBu
dWxscHRyLCBieXRlcyk7Cit9CisKK3ZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZShTdWJz
cGFjZSYgc3Vic3BhY2UsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVf
dCBieXRlcykKK3sKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlRyeS1hbGxvY2F0
aW5nICIsIGJ5dGVzLCAiIGRlZmVycmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJpYnV0ZXMs
ICIuXG4iKTsKKyAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3Ioc3Vic3BhY2UsIGJ5dGVzKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3It
PnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIHJldHVybiB0cnlBbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRl
eHQsIGJ5dGVzKTsKIH0KIAotdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlTGFyZ2UoU3Vic3Bh
Y2UmIHN1YnNwYWNlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUxh
cmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShz
dWJzcGFjZSwgc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJnZShzdWJz
cGFjZSwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0
ZUxhcmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2b2lkKiBNYXJrZWRTcGFj
ZTo6dHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIG1faGVhcC0+Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcigpOworICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihkZWZlcnJhbENvbnRleHQpOwogICAgIAogICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZVN0ZXA+KHNpemUpOwogICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9
IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX2hlYXAsIHNpemUsIHN1YnNwYWNlLmF0dHJp
YnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShy
ZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTIgKzExMiwxNyBAQCBwdWJsaWM6CiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhdXhpbGlhcnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKFN1YnNwYWNlJiwgc2l6ZV90KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0
Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShTdWJz
cGFjZSYsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUo
U3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCog
YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91
dERlc3RydWN0b3Ioc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKEdD
RGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0
cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZUF1
eGlsaWFyeShzaXplX3QpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCk7
CisgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlhcnkoR0NEZWZlcnJhbENvbnRleHQqLCBzaXpl
X3QpOwogICAgIAogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRoRGVzdHJ1Y3Rv
cigpIHsgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlOyB9CiAgICAgU3Vic3BhY2UmIHN1YnNwYWNl
Rm9yT2JqZWN0c1dpdGhvdXREZXN0cnVjdG9yKCkgeyByZXR1cm4gbV9ub3JtYWxTcGFjZTsgfQpA
QCAtMTk1LDggKzIwMCw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JT
aXplU3RlcDsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZUxhcmdl
KFN1YnNwYWNlJiwgc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxv
Y2F0ZUxhcmdlKFN1YnNwYWNlJiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFN1
YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9j
YXRlTGFyZ2UoU3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAKICAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU2l6ZUNsYXNzRm9yU3RlcFNpemUoKTsKICAgICAKQEAgLTI2
NCw2ICsyNjksMTYgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZQog
ICAgIHJldHVybiBhbGxvY2F0ZShtX2Rlc3RydWN0b3JTcGFjZSwgYnl0ZXMpOwogfQogCitpbmxp
bmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBh
bGxvY2F0ZShtX25vcm1hbFNwYWNlLCBkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5s
aW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYWxs
b2NhdGUobV9kZXN0cnVjdG9yU3BhY2UsIGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiBp
bmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlQXV4aWxpYXJ5KHNpemVfdCBieXRlcykK
IHsKICAgICByZXR1cm4gYWxsb2NhdGUobV9hdXhpbGlhcnlTcGFjZSwgYnl0ZXMpOwpAQCAtMjc0
LDYgKzI4OSwxMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlQXV4CiAg
ICAgcmV0dXJuIHRyeUFsbG9jYXRlKG1fYXV4aWxpYXJ5U3BhY2UsIGJ5dGVzKTsKIH0KIAoraW5s
aW5lIHZvaWQqIE1hcmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eGlsaWFyeShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIHRyeUFs
bG9jYXRlKG1fYXV4aWxpYXJ5U3BhY2UsIGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworfQorCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVh
Y2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIGZvckVhY2hBbGxvY2F0b3Io
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMDYsMTcgKzEzMDYsNDQgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVs
cGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAot
ICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwpCisgICAgSnVt
cCBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihibGFja1RocmVzaG9sZCkpOwogICAgIH0KIAotICAgIEp1bXAg
anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQorICAgIEp1bXAgYmFycmll
ckJyYW5jaFdpdGhvdXRGZW5jZShKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICB1aW50OF90
KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNl
bGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVB
ZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAg
ICAgCisgICAgSnVtcCBiYXJyaWVyQnJhbmNoKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQ
UikKKyAgICB7CisgICAgICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIHNj
cmF0Y2hHUFIsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJhcnJpZXJUaHJl
c2hvbGQoKSkpOworICAgIH0KKworICAgIEp1bXAgYmFycmllckJyYW5jaChKU0NlbGwqIGNlbGws
IEdQUlJlZyBzY3JhdGNoR1BSKQorICAgIHsKKyAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQo
KTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRk
cmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYmFycmll
clN0b3JlTG9hZEZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEJhcnJpZXJzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAgb2sgPSBq
dW1wSWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbWVtb3J5RmVu
Y2UoKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBqdW1w
SWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJh
cnJpZXJTaG91bGRCZUZlbmNlZCgpKSk7CisgICAgfQorICAgIAogICAgIC8vIEVtaXRzIHRoZSBi
cmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vz
bid0IGZhbGwgdGhyb3VnaC4gVGhlCiAgICAgLy8gZnVuY3RvciBpcyBjYWxsZWQgYXQgdGhvc2Ug
cG9pbnRzIHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5cGUuIE9uZSB3YXkgdG8gdXNlIHRo
aXMgaXMgdG8KICAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVtaXQgdGhlIGNvZGUgdG8gcHV0IHRo
ZSB0eXBlIHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGFuZCB0aGVuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNjUsMTQgKzIxNjUsMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9TUldyaXRlQmFycgogICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihjZWxsKTsK
IH0KIAotLy8gTkI6IFdlIGRvbid0IGluY2x1ZGUgdGhlIHZhbHVlIGFzIHBhcnQgb2YgdGhlIGJh
cnJpZXIgYmVjYXVzZSB0aGUgd3JpdGUgYmFycmllciBlbGlzaW9uCi0vLyBwaGFzZSBpbiB0aGUg
REZHIG9ubHkgdHJhY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBiZWluZyBzdG9yZWQgdG8gaGFzIGJl
ZW4gYmFycmllcmVkLiBJdCAKLS8vIHdvdWxkIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0byB0
cnkgdG8gbW9kZWwgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBhcyB3ZWxsLgotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOworICAgIHZtLT5oZWFwLndyaXRlQmFy
cmllclNsb3dQYXRoKGNlbGwpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0
aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEx
LDggKzQxMSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5U
RVJOQUw7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1
ZmZlcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25X
cml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0
ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25FeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAy
MDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzMsOCArNjczLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4
XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKICAgICAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQogICAgIGVtaXRMb2FkMihi
YXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02ODcsNiArNjg1LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2Up
OworCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwNjUy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NjYsOCArNjY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKgogICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4
XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7Ci0KICAgICAvLyBJbiBv
cmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmpl
Y3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRo
ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2lu
JywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAm
IG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KQEAgLTY4
NCw2ICs2ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVW
UmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9
CiAKQEAgLTExODAsOCArMTE4MCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2ln
bmVkIG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hUZXN0
NjQoTm9uWmVybywgcmVnVDAsIHRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdU
MCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaChy
ZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7
CiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlKQpAQCAtMTIxOCw4ICsxMjE4LDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2Ug
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2Vs
bCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOwogICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0xMjQ2LDEyICsx
MjQ2LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIGlmICghb3duZXIt
PmNlbGxDb250YWluZXIoKS5pc01hcmtlZChvd25lcikpIHsKLSAgICAgICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4ob3duZXIpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IG93bmVyKTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwot
ICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIG93bmVyKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKG93bmVyLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVj
ayhCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0
Y2gsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIHNsb3dDYXNlcykK
QEAgLTEzOTAsOCArMTM4Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5
VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAg
IGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbHMu
bGFzdCgpLnRvID09IG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHMubGFzdCgpLmZyb20sIG9wZXJhdGlvblVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIpOworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0g
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHMubGFzdCgpLmZyb20sIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkx
LDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogZW5kCiAKIG1h
Y3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQorICAgIG1lbWZl
bmNlCiAgICAgYmJhIEpTQ2VsbDo6bV9jZWxsU3RhdGVbY2VsbF0sIEJsYWNrVGhyZXNob2xkLCAu
ZG9uZQogICAgIHNsb3dQYXRoKCkKIC5kb25lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI3LDcgKzE1MjcsMTIg
QEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAibGVhcCIKICAgICAgICAgICAgICRh
c20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3JkZXJPcGVyYW5kcyhvcGVyYW5kc1sw
XS54ODZBZGRyZXNzT3BlcmFuZCg6cHRyKSwgb3BlcmFuZHNbMV0ueDg2T3BlcmFuZCg6cHRyKSl9
IgogICAgICAgICB3aGVuICJtZW1mZW5jZSIKLSAgICAgICAgICAgICRhc20ucHV0cyAibWZlbmNl
IgorICAgICAgICAgICAgc3AgPSBSZWdpc3RlcklELm5ldyhuaWwsICJzcCIpCisgICAgICAgICAg
ICBpZiBpc0ludGVsU3ludGF4CisgICAgICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVuY2UiCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJGFzbS5wdXRzICJsb2NrOyBvcmwgJDAs
ICgje3NwLng4Nk9wZXJhbmQoOnB0cil9KSIKKyAgICAgICAgICAgIGVuZAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjA2NTI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbgog
ICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CiAKLUpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCkKK0pTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZt
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzYsNyArNzYs
NyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAg
ICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3Ry
dWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhlYXAudHJ5
QWxsb2NhdGVBdXhpbGlhcnkobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZM
aW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShkZWZl
cnJhbENvbnRleHQsIG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7
CkBAIC0xMDQsNyArMTA0LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZAogICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwx
NyBAQCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgIHN0YXRpYyBK
U0FycmF5KiBjcmVhdGVXaXRoQnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7
CisgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZVdpdGhCdXR0ZXJmbHkoVk0mLCBHQ0RlZmVycmFs
Q29udGV4dCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgLy8gdHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ug
c2l6ZSBhbmQKICAgICAvLyBjb250ZW50cyBhcmUga25vd24gYXQgdGltZSBvZiBjcmVhdGlvbi4g
Q2xpZW50cyBvZiB0aGlzIGludGVyZmFjZSBtdXN0OgogICAgIC8vICAgLSBudWxsLWNoZWNrIHRo
ZSByZXN1bHQgKGluZGljYXRpbmcgb3V0IG9mIG1lbW9yeSwgb3Igb3RoZXJ3aXNlIHVuYWJsZSB0
byBhbGxvY2F0ZSB2ZWN0b3IpLgogICAgIC8vICAgLSBjYWxsICdpbml0aWFsaXplSW5kZXgnIGZv
ciBhbGwgcHJvcGVydGllcyBpbiBzZXF1ZW5jZSwgZm9yIDAgPD0gaSA8IGluaXRpYWxMZW5ndGgu
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYs
IEdDRGVmZXJyYWxDb250ZXh0KiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7
CisgICAgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBudWxscHRyLCBzdHJ1Y3R1cmUsIGlu
aXRpYWxMZW5ndGgpOworICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIApAQCAtMjMx
LDEyICsyMzUsMTIgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIAog
ICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpOworICAgIHJldHVybiBjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBudWxscHRy
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiB9CiAKLWlubGluZSBKU0FycmF5KiBKU0FycmF5Ojpj
cmVhdGVXaXRoQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KQoraW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0ZXJm
bHkoVk0mIHZtLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwKSkgSlNBcnJheSh2
bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNB
cnJheSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBHQ0RlZmVycmFsQ29udGV4
dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0FycmF5QnVm
ZmVyVmlldzsKQEAgLTUzLDYgKzU0LDkgQEAgY2xhc3MgU3RydWN0dXJlOwogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCopOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4
dCosIHNpemVfdCk7CisKICNkZWZpbmUgREVDTEFSRV9FWFBPUlRfSU5GTyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBwcm90ZWN0ZWQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgOjpKU0M6OkNsYXNzSW5mbyBzX2luZm87ICAg
ICAgICAgICAgIFwKQEAgLTcwLDYgKzc0LDggQEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBD
ZWxsIHsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0Rl
ZmVycmFsQ29udGV4dCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBh
bGxvY2F0ZUNlbGwoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKIAogcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lv
biAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMjUgQEAgdm9pZCogYWxsb2NhdGVDZWxs
KEhlYXAmIGhlYXApCiAgICAgcmV0dXJuIGFsbG9jYXRlQ2VsbDxUPihoZWFwLCBzaXplb2YoVCkp
OwogfQogICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
JiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOworICAgIEpTQ2VsbCogcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZU9iamVjdE9mVHlwZTxUPihkZWZlcnJh
bENvbnRleHQsIHNpemUpKTsKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICBBU1NFUlQo
IWhlYXAudm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52bSgpLT5zZXRJ
bml0aWFsaXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOworI2VuZGlmCisgICAgcmVzdWx0LT5j
bGVhclN0cnVjdHVyZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlQ2VsbDxUPihoZWFw
LCBkZWZlcnJhbENvbnRleHQsIHNpemVvZihUKSk7Cit9CisgICAgCiBpbmxpbmUgYm9vbCBKU0Nl
bGw6OmlzT2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gVHlwZUluZm86OmlzT2JqZWN0KG1f
dHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0MTgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBO
T1RFOiBDbGllbnRzIG9mIHRoaXMgbWV0aG9kIG1heSBjYWxsIGl0IG1vcmUgdGhhbiBvbmNlIGZv
ciBhbnkgaW5kZXgsIGFuZCB0aGlzIGlzIHN1cHBvc2VkCiAgICAgLy8gdG8gd29yay4KLSAgICB2
b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUlu
ZGV4KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKQEAgLTQ2OCw2ICs0NjgsNTQg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgICAgICAKKyAgICB2b2lkIGluaXRpYWxp
emVJbmRleFdpdGhvdXRCYXJyaWVyKHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICB7CisgICAg
ICAgIGluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIHYsIGluZGV4aW5nVHlwZSgpKTsK
KyAgICB9CisKKyAgICAvLyBUaGlzIHZlcnNpb24gb2YgaW5pdGlhbGl6ZUluZGV4IGlzIGZvciBj
YXNlcyB3aGVyZSB5b3Uga25vdyB0aGF0IHlvdSB3aWxsIG5vdCBuZWVkIGFueQorICAgIC8vIGJh
cnJpZXJzLiBUaGlzIGltcGxpZXMgbm90IGhhdmluZyBhbnkgZGF0YSBmb3JtYXQgY29udmVyc2lv
bnMuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVy
KHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKKyAgICB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0lOVDMy
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHYuaXNJbnQzMigpKTsKKyAgICAg
ICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgQVNTRVJU
KGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwg
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
LmlzTnVtYmVyKCkpOworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gdi5hc051bWJlcigpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUgPT0gdmFsdWUpOworICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgICAgIAogICAgIGJvb2wgaGFzU3BhcnNlTWFwKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTY0Miw2ICs2OTAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
RmFzdCBhY2Nlc3MgdG8ga25vd24gcHJvcGVydHkgb2Zmc2V0cy4KICAgICBKU1ZhbHVlIGdldERp
cmVjdChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uRm9yT2Zm
c2V0KG9mZnNldCktPmdldCgpOyB9CiAgICAgdm9pZCBwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0
KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRCYXJy
aWVyKFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9m
ZnNldChvZmZzZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsgfQogICAgIHZvaWQg
cHV0RGlyZWN0VW5kZWZpbmVkKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeyBsb2NhdGlvbkZvck9m
ZnNldChvZmZzZXQpLT5zZXRVbmRlZmluZWQoKTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBwdXREaXJlY3ROYXRpdmVJbnRyaW5zaWNHZXR0ZXIoVk0mLCBKU0dsb2JhbE9iamVjdCos
IElkZW50aWZpZXIsIE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZp
c2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsMTMgKzM2NiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXdTdHJpbmc7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogYmFzZSwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU1N0cmluZyogYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9w
ZVN0cmluZyh2bSk7CisgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwLCBkZWZlcnJhbENvbnRleHQp
KSBKU1JvcGVTdHJpbmcodm0pOwogICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uU3Vi
c3RyaW5nT2ZSZXNvbHZlZCh2bSwgYmFzZSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICByZXR1
cm4gbmV3U3RyaW5nOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5n
KiBjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgSlNTdHJpbmcqIGJhc2UsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIG51bGxwdHIsIGJhc2UsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICB9CisKICAgICB2b2lkIHZpc2l0RmliZXJzKFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRmliZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
Um9wZVN0cmluZywgdSk7IH0KQEAgLTQ5Miw2ICs0OTcsNyBAQCBpbmxpbmUgSlNTdHJpbmcqIGFz
U3RyaW5nKEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGpzQ2FzdDxKU1N0cmluZyo+KHZhbHVl
LmFzQ2VsbCgpKTsKIH0KIAorLy8gVGhpcyBNVVNUIE5PVCBHQy4KIGlubGluZSBKU1N0cmluZyog
anNFbXB0eVN0cmluZyhWTSogdm0pCiB7CiAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKQEAgLTU4Miw3ICs1ODgsNyBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3Ry
aW5nKFZNJiB2bSwgRXhlCiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBleGVj
LCBzLCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdP
ZlJlc29sdmVkKFZNJiB2bSwgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQoraW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU1N0cmluZyogcywgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKG9mZnNldCA8PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkpKTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwpAQCAtNTkxLDcgKzU5NywxMiBAQCBpbmxp
bmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWCiAgICAgICAgIHJldHVybiB2bS5z
bWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0g
cy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBzOwotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6
OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBy
ZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBkZWZlcnJh
bENvbnRleHQsIHMsIG9mZnNldCwgbGVuZ3RoKTsKK30KKworaW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZ09mUmVzb2x2ZWQoVk0mIHZtLCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwg
bnVsbHB0ciwgcywgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMjA2NTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDggQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB0ZXN0VGhlRlRMLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVl
LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Np
b24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0
aW9uQ3V0b2ZmLCAxMDAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZp
c2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyOSArMzYsMzEgQEAgSlNBcnJheSog
Y3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CiAgICAgCisgICAgR0NE
ZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOworICAgIAogICAgIGlmIChV
TkxJS0VMWShnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSkpIHsKLSAgICAgICAgYXJy
YXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPnJl
Z0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAx
KTsKKyAgICAgICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCAm
ZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKICAgICAgICAgCi0gICAgICAgIGFy
cmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSk7CisgICAgICAg
IGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBqc0VtcHR5U3RyaW5nKCZ2
bSkpOwogICAgICAgICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVn
RXhwLT5udW1TdWJwYXR0ZXJucygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRp
YWxpemVJbmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVk
UmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICAgICAgYXJyYXkg
PSB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCAmZGVmZXJyYWxD
b250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdF
eHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkp
OwogICAgICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNFbXB0
eVN0cmluZygmdm0pLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgYXJyYXktPmluaXRp
YWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRo
Q29udGlndW91cyk7CiAgICAgICAgIAogICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVy
bnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1
b3VzKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJp
ZXIoaSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFBy
b3BlcnR5T2Zmc2V0LCBqc051bWJlcigtMSkpOwotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJl
Z0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKyAgICBhcnJheS0+
cHV0RGlyZWN0V2l0aG91dEJhcnJpZXIoUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9m
ZnNldCwganNOdW1iZXIoLTEpKTsKKyAgICBhcnJheS0+cHV0RGlyZWN0V2l0aG91dEJhcnJpZXIo
UmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwogICAgIHJldHVy
biBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFJlZ0V4cE1hdGNoZXNBcnJheV9oCiAKICNpbmNsdWRl
ICJCdXR0ZXJmbHlJbmxpbmVzLmgiCisjaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzIsMTMgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJv
cGVydHlPZmZzZXQgPSAxMDA7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQgUmVnRXhwTWF0
Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCA9IDEwMTsKIAotQUxXQVlTX0lOTElORSBKU0Fy
cmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitBTFdBWVNfSU5MSU5F
IEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkoVk0mIHZt
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFw
LnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRl
QXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgbnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
dGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKQEAgLTQ4LDcgKzQ5LDcg
QEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYQogICAgIGZvciAodW5z
aWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAKLSAgICByZXR1cm4gSlNB
cnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
IHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZlcnJhbENvbnRleHQs
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogQUxXQVlTX0lOTElORSBKU0FycmF5KiBjcmVh
dGVSZWdFeHBNYXRjaGVzQXJyYXkoCkBAIC03Nyw0NyArNzgsNDQgQEAgQUxXQVlTX0lOTElORSBK
U0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgIAogICAgIHVuc2lnbmVkIG51bVN1YnBhdHRl
cm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpOwogICAgIAorICAgIEdDRGVmZXJyYWxDb250
ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtFTFkoZ2xv
YmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0gSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVz
QXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKKyAgICAgICAgYXJyYXkgPSBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9i
YWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyAr
IDEpOwogICAgICAgICAKICAgICAgICAgc2V0UHJvcGVydGllcygpOwogICAgICAgICAKLSAgICAg
ICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kp
Ci0gICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gc2NhbiBi
eSBHQy4KLSAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpz
U3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAt
IHJlc3VsdC5zdGFydCkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJh
cnJpZXIoMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxDb250ZXh0LCBpbnB1
dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsK
ICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAg
ICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3Vs
dHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1JvcGVT
dHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoaSwgdmFsdWUpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRp
YWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOworICAgICAgICBhcnJheSA9IHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sICZkZWZlcnJhbENvbnRl
eHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIG51bVN1YnBh
dHRlcm5zICsgMSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAgICAgCiAg
ICAgICAgIHNldFByb3BlcnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsg
KytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmlu
ZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgIAogICAgICAgICAvLyBOb3cgdGhl
IG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCiAKLSAgICAgICAgYXJyYXktPmluaXRpYWxp
emVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0
YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7Cisg
ICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBqc1N1YnN0cmlu
Z09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCByZXN1bHQuc3RhcnQsIHJl
c3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkg
ewogICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQotICAg
ICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6
Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVz
dWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2
bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICog
aSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVl
ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRo
b3V0QmFycmllcihpLCB2YWx1ZSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIH0KICAg
ICB9Ci0KICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY1MjQpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhl
IHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJlIGRvd24gd2l0aCBUU08KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjMxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEdlb2ZmcmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgQWRkZWQgY2xlYXJSYW5nZSgp
LCB3aGljaCBxdWlja2x5IGNsZWFycyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMgdHVybmVkIG91dCB0
byBiZSB1c2VmdWwgZm9yCisgICAgICAgIGEgREZHIG9wdGltaXphdGlvbiBwYXNzLgorCisgICAg
ICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9y
OjpjbGVhclJhbmdlKToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorCiAyMDE2LTA5
LTI4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIENvcnJl
Y3QgJ3NhZmVDYXN0JyBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJp
dFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5j
cHAJKHJldmlzaW9uIDIwNjUyNCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1MywyNCBAQCB2b2lkIEZhc3RCaXRWZWN0b3JXb3Jk
T3duZXI6OnJlc2l6ZVNsb3coCiAgICAgbV93b3JkcyA9IG5ld0FycmF5OwogfQogCit2b2lkIEZh
c3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAg
IGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsg
aSA8IGVuZDsgKytpKQorICAgICAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBzaXplX3QgZW5kQmVnaW5TbG9wID0gKGJlZ2luICsgMzEpICYg
fjMxOworICAgIHNpemVfdCBiZWdpbkVuZFNsb3AgPSBlbmQgJiB+MzE7CisgICAgCisgICAgZm9y
IChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kQmVnaW5TbG9wOyArK2kpCisgICAgICAgIGF0KGkp
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luRW5kU2xvcDsgaSA8IGVuZDsgKytp
KQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBlbmRCZWdpblNs
b3AgLyAzMjsgaSA8IGJlZ2luRW5kU2xvcCAvIDMyOyArK2kpCisgICAgICAgIG1fd29yZHMud29y
ZChpKSA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9GYXN0Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdEJpdFZl
Y3Rvci5oCShyZXZpc2lvbiAyMDY1MjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290112</attachid>
            <date>2016-09-28 13:34:57 -0700</date>
            <delta_ts>2016-09-28 13:34:57 -0700</delta_ts>
            <desc>rebased patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126530</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBA
QAorMjAxNi0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB3cml0ZSBiYXJyaWVyIHNob3VsZCBiZSBkb3duIHdpdGggVFNPCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgb3Vy
IHdyaXRlIGJhcnJpZXIgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGl0IHJhY2VzIHdpdGggdGhlIGNv
bGxlY3Rvci4gVGhlCisgICAgICAgIGNvbGxlY3RvciB3YW50cyB0byBkbyB0aGlzIHdoZW4gdmlz
aXRpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2JqZWN0LT5jZWxsU3RhdGUgPSBibGFjawor
ICAgICAgICAgICAgdmlzaXQob2JqZWN0KQorICAgICAgICAKKyAgICAgICAgVGhlIG11dGF0b3Ig
d2FudHMgdG8gZG8gdGhpcyB3aGVuIHN0b3Jpbmc6CisgICAgICAgIAorICAgICAgICAgICAgb2Jq
ZWN0LT5wcm9wZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3Rh
dGUgPT0gYmxhY2spCisgICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAK
KyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgYmVj
YXVzZSB0aGUgY29tcGlsZXIgd291bGQgc29tZXRpbWVzIHBsYWNlCisgICAgICAgIGJhcnJpZXJz
IGJlZm9yZSB0aGUgc3RvcmUgdG8gdGhlIHByb3BlcnR5IGFuZCBiZWNhdXNlIHRoZSBtdXRhdG9y
IGRpZCBub3QgaGF2ZSBhZGVxdWF0ZQorICAgICAgICBmZW5jZXMuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgdGhlIERGRyBhbmQgRlRMIHdvdWxkIGVtaXQgdGhpczoK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPT0gYmxhY2spCisg
ICAgICAgICAgICAgICAgcmVtZW1iZXIob2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0LT5wcm9w
ZXJ0eSA9IG5ld1ZhbHVlCisgICAgICAgIAorICAgICAgICBXaGljaCBpcyB3cm9uZywgYmVjYXVz
ZSB0aGUgb2JqZWN0IGNvdWxkIHN0YXJ0IGJlaW5nIHNjYW5uZWQganVzdCBhZnRlciB0aGUgY2Vs
bFN0YXRlCisgICAgICAgIGNoZWNrLCBhdCB3aGljaCBwb2ludCB0aGUgc3RvcmUgd291bGQgYmUg
bG9zdC4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHN0YXRlIHdhcyBub3QKKyAgICAgICAg
YmxhY2sgKmFmdGVyKiB0aGUgc3RvcmUhIFRoaXMgY2hhbmdlIHdhcyBoYXJkZXIgdGhhbiB5b3Un
ZCBleHBlY3Q6IHBsYWNpbmcgdGhlIGJhcnJpZXIKKyAgICAgICAgYWZ0ZXIgdGhlIHN0b3JlIGJy
b2tlIEIzJ3MgYWJpbGl0eSB0byBkbyBpdHMgc3VwZXIgY3JhenkgbmluamEgQ1NFIG9uIHNvbWUg
c3RvcmUtbG9hZAorICAgICAgICByZWR1bmRhbmNpZXMuIEJlY2F1c2UgdGhlIEIzIENTRSBoYXMg
c29tZSBtb3ZlcyB0aGF0IHRoZSBERkcgQ1NFIGxhY2tzLCB0aGUgREZHIENTRSdzCisgICAgICAg
IGFiaWxpdHkgdG8gaWdub3JlIGJhcnJpZXJzIGRpZG4ndCBoZWxwLiBJIGZpeGVkIHRoaXMgYnkg
aGF2aW5nIHRoZSBGVEwgY29udmV5IHByZWNpc2UKKyAgICAgICAgaGVhcCByYW5nZXMgZm9yIHRo
ZSBwYXRjaHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJhcnJpZXIgc2xvdyBwYXRoLiBJdCBy
ZWFkcyB0aGUgd29ybGQKKyAgICAgICAgKGJlY2F1c2Ugb2YgdGhlIHN0b3JlLWxvYWQgZmVuY2Up
IGFuZCBpdCB3cml0ZXMgb25seSBjZWxsU3RhdGUgKGJlY2F1c2UgdGhlIEIzIGhlYXAgcmFuZ2Vz
CisgICAgICAgIGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgYW55IG9mIHRoZSBHQydz
IG90aGVyIHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IEIzIGRvZXMgbm90CisgICAgICAgIGhhdmUg
dG8gd29ycnkgYWJvdXQgYWxpYXNpbmcgd2l0aCBhbnkgb2YgdGhhdCkuCisgICAgICAgIAorICAg
ICAgICBUaGUgY29sbGVjdG9yIGFscmVhZHkgdXNlcyBhIHN0b3JlLWxvYWQgZmVuY2Ugb24geDg2
IGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUgY2VsbFN0YXRlIGFuZAorICAgICAgICBiZWZvcmUgdmlz
aXRpbmcgdGhlIG9iamVjdC4gVGhlIG11dGF0b3IgbmVlZHMgdG8gZG8gdGhlIHNhbWUuIEJ1dCB3
ZSBjYW5ub3QgcHV0IGEKKyAgICAgICAgc3RvcmUtbG9hZCBmZW5jZSBvZiBhbnkga2luZCBiZWZv
cmUgc3RvcmUgYmFycmllcnMsIGJlY2F1c2UgdGhhdCBjYXVzZXMgZW5vcm1vdXMgc2xvdworICAg
ICAgICBkb3ducy4gSW4gdGhlIHdvcnN0IGNhc2UsIE9jdGFuZS9yaWNoYXJkcyBzbG93ZWQgZG93
biBieSA5MCUhIFRoYXQncyBjcmF6eSEgSG93ZXZlciwgdGhlCisgICAgICAgIG92ZXJhbGwgc2xv
dyBkb3ducyB3ZXJlIHNtYWxsIGVub3VnaCAoMC0xNSUgb24gYmVuY2htYXJrIHN1aXRlIGFnZ3Jl
Z2F0ZXMpIHRoYXQgaXQgd291bGQgYmUKKyAgICAgICAgcmVhc29uYWJsZSBpZiB0aGUgc2xvdyBk
b3duIG9ubHkgaGFwcGVuZWQgd2hpbGUgdGhlIEdDIHdhcyBydW5uaW5nLiBUaGVuLCB0aGUgY29u
Y3VycmVudCBHQworICAgICAgICB3b3VsZCBsaWZ0IHRocm91Z2hwdXQtd2hpbGUtY29sbGVjdGlu
ZyBmcm9tIDAlIG9mIHBlYWsgdG8gODUlIG9mIHBlYWsuIFRoaXMgY2hhbmdlcyB0aGUKKyAgICAg
ICAgYmFycmllciBzbyB0aGF0IGl0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jZWxsU3RhdGUgPD0gaGVhcC5zbmVha3lCbGFja1RocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBzbG93UGF0aChvYmplY3QpCisgICAgICAgIAorICAgICAgICBXaGVy
ZSBzbmVha3lCbGFja1RocmVzaG9sZCBpcyB0aGUgbm9ybWFsIGJsYWNrVGhyZXNob2xkIHdoZW4g
d2UncmUgbm90IGNvbGxlY3RpbmcsIG9yIGEKKyAgICAgICAgdGF1dG9saWdpY2FsIHRocmVzaG9s
ZCAodGhhdCBtYWtlcyBldmVyeXRoaW5nIGxvb2sgYmxhY2spIHdoZW4gd2UgYXJlIGNvbGxlY3Rp
bmcuIFRoaXMKKyAgICAgICAgdHVybnMgb3V0IHRvIG5vdCBiZSBhbnkgbW9yZSBleHBlbnNpdmUg
dGhhbiB0aGUgYmFycmllciBpbiB0aXAgb2YgdHJlZSB3aGVuIHRoZSBHQyBpcyBub3QKKyAgICAg
ICAgcnVubmluZywgb3IgYSAwLTE1JSBzbG93LWRvd24gd2hlbiBpdCBpcyAicnVubmluZyIuIChP
ZiBjb3Vyc2Ugd2UgZG9uJ3QgcnVuIHRoZSBHQworICAgICAgICBjb25jdXJyZW50bHkgeWV0LiBJ
IHN0aWxsIGhhdmUgbW9yZSB3b3JrIHRvIGRvLikgVGhlIHNsb3dQYXRoKCkgZG9lcyBzb21lIGV4
dHJhIHdvcmsgdG8KKyAgICAgICAgY2hlY2sgaWYgd2UgYXJlIGNvbmN1cnJlbnRseSBjb2xsZWN0
aW5nOyBpZiBzbywgaXQgZG9lcyBhIGZlbmNlIGFuZCByZWNoZWNrcyBpZiB0aGUgb2JqZWN0Cisg
ICAgICAgIHJlYWxseSBkaWQgbmVlZCB0aGF0IGJhcnJpZXIuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFsc28gcmVpbnRyb2R1Y2VzIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBzdG9yZSBiYXJy
aWVycywgd2hpY2ggd2FzIGxvc3QgaW4gdGhlIGxhc3QKKyAgICAgICAgc3RvcmUgYmFycmllciBj
aGFuZ2UuIFdlIGNhbiBvbmx5IGRvIGl0IHdoZW4gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Yg
R0MsIGV4aXQsIG9yCisgICAgICAgIGV4Y2VwdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHN0b3JlIGJh
cnJpZXJzLiBXZSBjb3VsZCByZW1vdmUgdGhlIGV4aXQvZXhjZXB0aW9uIGxpbWl0YXRpb24gaWYK
KyAgICAgICAgd2UgdGF1Z2h0IE9TUiBleGl0IGhvdyB0byBidWZmZXIgc3RvcmUgYmFycmllcnMs
IHdoaWNoIGlzIGFuIGluc2FuZSB0aGluZyB0byBkbyBjb25zaWRlcmluZworICAgICAgICB0aGF0
IEkndmUgbmV2ZXIgYmVlbiBhYmxlIHRvIGRldGVjdCBhIHdpbiBmcm9tIHJlZHVuZGFudCBzdG9y
ZSBiYXJyaWVyIGVsaW1pbmF0aW9uLiBJIGp1c3QKKyAgICAgICAgd2FudCB1cyB0byBoYXZlIGl0
IGZvciBzdHVwaWRseSBvYnZpb3VzIHNpdHVhdGlvbnMsIGxpa2UgYSB0aWdodCBzZXF1ZW5jZSBv
ZiBzdG9yZXMgdG8gdGhlCisgICAgICAgIHNhbWUgb2JqZWN0LiBUaGlzIHNhbWUgb3B0aW1pemF0
aW9uIGFsc28gc29tZXRpbWVzIHN0cmVuZ3RoLXJlZHVjZXMgdGhlIHN0b3JlIGJhcnJpZXIgc28K
KyAgICAgICAgdGhhdCBpdCB1c2VzIGEgY29uc3RhbnQgYmxhY2sgdGhyZXNob2xkIHJhdGhlciB0
aGFuIHRoZSBzbmVha3kgb25lLCB0aGVyZWJ5IHNhdmluZyBvbmUKKyAgICAgICAgbG9hZC4KKyAg
ICAgICAgCisgICAgICAgIEV2ZW4gd2l0aCBhbGwgb2YgdGhvc2Ugb3B0aW1pemF0aW9ucywgSSBz
dGlsbCBoYWQgcHJvYmxlbXMgd2l0aCBiYXJyaWVyIGNvc3QuIEkgZm91bmQgdGhhdCBvbmUKKyAg
ICAgICAgb2YgdGhlIGJlbmNobWFya3MgdGhhdCB3YXMgYmVpbmcgaGl0IHBhcnRpY3VsYXJseSBo
YXJkIHdhcyBKZXRTdHJlYW0vcmVnZXhwLTIwMTAuIEZvcnR1bmF0ZWx5CisgICAgICAgIHRoYXQg
YmVuY2htYXJrIGRvZXMgbW9zdCBvZiBpdHMgYmFycmllcnMgaW4gYSB0aWdodCBDKysgbG9vcCBp
biBSZWdFeHBNYXRjaGVzQXJyYXkuaC4gV2hlbiB3ZQorICAgICAgICBrbm93IHdoYXQgd2UncmUg
ZG9pbmcsIHdlIGNhbiBkZWZlciBHQyBhcm91bmQgYSBidW5jaCBvZiBvYmplY3QgaW5pdGlhbGl6
YXRpb25zIGFuZCB0aGVuIHJlbW92ZQorICAgICAgICBhbGwgb2YgdGhlIGJhcnJpZXJzIGJldHdl
ZW4gYW55IG9mIHRoZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGRlZmVycmFsLiBVbmZv
cnR1bmF0ZWx5LAorICAgICAgICBvdXIgR0MgZGVmZXJyYWwgbWVjaGFuaXNtIGlzbid0IHJlYWxs
eSBwZXJmb3JtYW50IGVub3VnaCB0byBtYWtlIHRoaXMgYmUgYSB3b3J0aHdoaWxlCisgICAgICAg
IG9wdGltaXphdGlvbi4gVGhlIG1vc3QgZWZmaWNpZW50IHZlcnNpb24gb2Ygc3VjaCBhbiBvcHRp
bWl6YXRpb24gdGhhdCBJIGNvdWxkIGNvbWUgdXAgd2l0aCB3YXMKKyAgICAgICAgdG8gaGF2ZSBh
IERlZmVycmFsQ29udGV4dCBvYmplY3QgdGhhdCBob3VzZXMgYSBib29sZWFuIHRoYXQgaXMgZmFs
c2UgYnkgZGVmYXVsdCwgYnV0IHRoZSBHQworICAgICAgICB3cml0ZXMgdHJ1ZSBpbnRvIGl0IGlm
IGl0IHdvdWxkIGhhdmUgd2FudGVkIHRvIEdDLiBZb3UgdGhyZWFkIGEgcG9pbnRlciB0byB0aGUg
ZGVmZXJyYWxDb250ZXh0CisgICAgICAgIHRocm91Z2ggYWxsIG9mIHlvdXIgYWxsb2NhdGlvbnMu
IFRoaXMga2luZCBvZiBtZWNoYW5pc20gaGFzIHRoZSBvdmVyaGVhZCBvZiBhIHplcm8gCisgICAg
ICAgIGluaXRpYWxpemF0aW9uIG9uIHRoZSBzdGFjayBvbiBlbnRyeSBhbmQgYSB6ZXJvIGNoZWNr
IG9uIGV4aXQuIFRoaXMgaXMgcHJvYmFibHkgZXZlbiBlZmZpY2llbnQKKyAgICAgICAgZW5vdWdo
IHRoYXQgd2UgY291bGQgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaGF2aW5nIHRoZSBERkcgdXNlIGl0
LCBmb3IgZXhhbXBsZSBpZiB3ZSBmb3VuZCBhCisgICAgICAgIGJvdW5kZWQtdGltZSBzZWN0aW9u
IG9mIGNvZGUgd2l0aCBhIGxvdCBvZiBiYXJyaWVycyBhbmQgZW50cnkvZXhpdCBzaXRlcyB0aGF0
IGFyZW4ndCB0b3RhbGx5CisgICAgICAgIHdhY2t5LiBUaGlzIG9wdGltaXphdGlvbiB0b29rIHRo
aXMgcGF0Y2ggZnJvbSAwLjY4JSBKZXRTdHJlYW0gcmVncmVzc2VkIHRvIG5ldXRyYWwsIGFjY29y
ZGluZworICAgICAgICB0byBteSBsYXRlc3QgZGF0YS4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNoYW5nZSBwdXQgdGhlIHN0b3JlLWxvYWQg
ZmVuY2UgaW4gQjMgSVIsIHNvIEkgZW5kZWQgdXAKKyAgICAgICAgYWRkaW5nIEZUTE91dHB1dCBz
dXBwb3J0IGZvciBpdCBhbmQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtYWdpYyBmb3IgZGVjb3Jh
dGluZyB0aGUgaGVhcHMuCisgICAgICAgIEkgdGhpbmsgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRo
YXQsIGl0J2xsIGJlIHVzZWZ1bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpicmFuY2gzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2gzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RG
R0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6Cisg
ICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic29s
dXRlQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNv
cmF0ZUZlbmNlUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6ZGVjb3JhdGVGZW5jZVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Ojpjb21wdXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnN0b3JhZ2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpmZW5jZSk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjphYnNvbHV0ZSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAg
ICAqIGhlYXAvQ2VsbFN0YXRlLmg6CisgICAgICAgIChKU0M6OmlzV2l0aGluVGhyZXNob2xkKToK
KyAgICAgICAgKEpTQzo6aXNCbGFjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpiYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzbmVha3lCbGFja1RocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFk
ZHJlc3NPZlNuZWFreUJsYWNrVGhyZXNob2xkKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuV2l0aG91dEZlbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
bmVha3lKdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnN0b3JlQmFycmllclN0b3JlTG9hZEZlbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpqdW1wSWZTdG9yZUJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRl
ZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wOS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIEIzLT5BaXIgbG93ZXJpbmcgb2YgRmVuY2Ugb24g
QVJNCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDY1
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MSw2ICszNjEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cAogICAgIGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKKyAg
ICBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBACiAJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1
MSAvKiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLzsgfTsKIAkJ
MEY3QzVGQjgxRDg4OEEwQzAwNDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjcxRDg4OEEwMTAw
NDRGNUUyIC8qIE1hcmtlZEJsb2NrSW5saW5lcy5oICovOyB9OwogCQkwRjdDNUZCQTFEODg5NTA3
MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2Vk
U3BhY2VJbmxpbmVzLmggKi87IH07CisJCTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0
RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYxMyw2ICs2MTUsOCBAQAogCQkwRkIzODc5MjFCRkQz
MUExMDBFM0FCMUUgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29tcGls
ZS5jcHAgKi87IH07CiAJCTBGQjQxNTg0MUQ3OEZCNEMwMERGOEQwOSAvKiBBcnJheUNvbnZlbnRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQxNTgzMUQ3OEY5ODIwMERGOEQwOSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLzsgfTsKIAkJ
MEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZC
QzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLzsgfTsKKwkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNC
IC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRl
eHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3RDFEOTlB
RUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi87IH07CiAJCTBGQjRG
QjczMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzAxQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aC5jcHAgKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1
QSAvKiBGVExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLzsgfTsKIAkJMEZCNEZCNzUxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRG
QjcyMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggKi87IH07CkBAIC0y
NzQzLDYgKzI3NDcsOCBAQAogCQkwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wSW5mby5oOyBwYXRoID0g
ZGZnL0RGR09wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCNzFE
ODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZFNwYWNlSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUg
LyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIz
RTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI4NTIsNiArMjg1OCw4IEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBG
VExDb21waWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENv
bXBpbGUuY3BwOyBwYXRoID0gZnRsL0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFG
QkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0
NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NEZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250
ZXh0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFs
Q29udGV4dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAx
NkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8q
IERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbGxv
Y2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBwYXRoID0gZGZn
L0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjk0LDYgKzUz
MDIsOCBAQAogCQkJCTJBQUNFNjNBMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAogCQkJCTJBQUNFNjNCMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLywKIAkJCQlCQ0JFMkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25z
LmggKi8sCisJCQkJMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi8sCisJCQkJMEZCNDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
SW5saW5lcy5oICovLAogCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCAqLywKIAkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLywKQEAgLTY1NTUsNiArNjU2NSw4IEBACiAJ
CQkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywK
IAkJCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovLAorCQkJCTBGN0Y5ODg5
MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICov
LAorCQkJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaCAqLywKIAkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVE
NSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1
MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTc5
NDgsNiArNzk2MCw3IEBACiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYg
LyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5h
bFByb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODMyOCw2ICs4MzQxLDcgQEAK
IAkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MTQyRTUxMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0
RkQyIC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjQ3NjdFMUQ5OUFF
QTkwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlE
QTAwQjExQkQ1OTk0RTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovLApAQCAtODM3MCw2ICs4Mzg0LDcgQEAKIAkJCQk0NTE1MzlCOTEyREM5OTQ1
MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjQ3NjdG
MUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBp
biBIZWFkZXJzICovLAogCQkJCTI2MkQ4NUI3MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0
aWFsUmVnaXN0ZXJTdGFsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5OCw2ICs5MTEzLDcgQEAK
IAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdH
cmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjdGOTg4QjFEOTU5NkM1MDBGNEYxMkUgLyog
REZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjUzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzczLDYgKzM3MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaFB0
cihjb25kLCBvcDEsIGltbSkubGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCisgICAgSnVt
cCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWJz
b2x1dGVBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGZsaXAo
Y29uZCksIHJpZ2h0LCBsZWZ0KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaDMyKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBMYWJlbCB0
YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gzMihjb25kLCBvcDEsIG9wMikubGlua1RvKHRh
cmdldCwgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMzI7CiAg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpzdWIzMjsKQEAgLTgyNyw2ICs4MjgsMTIgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5jbXBxX3JtKHJpZ2h0LCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJy
YW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgc2NyYXRj
aFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyYXRjaFJlZ2lz
dGVyKCksIHJpZ2h0KTsKKyAgICB9CiAKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSwyOSAr
MTMwOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0
ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4g
d2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVkIHRoZSBzdG9yZQotICAgICAgICAvLyBiYXJy
aWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0
aGUgb2JqZWN0LgogICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJC
dWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1
ZmZlcigpOwotICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVu
dEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0
eSgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAg
ICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBh
bHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Ci0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIy
LCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluaygmaml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ug
c2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRo
aXMgd2F5IGVuc3VyZXMgdGhhdAogICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUg
dXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBz
bG93CiAgICAgICAgICAgICAvLyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1
MSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAg
IG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJl
SUQpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0YXRlKSBcCiAgICAgbWFjcm8oSlNDZWxsX2lu
ZGV4aW5nVHlwZSkgXAorICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCkgXAogICAgIG1hY3Jv
KEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkg
XAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQzLDExICsyODQz
LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIo
bm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50
OgogICAgIGNhc2UgWm9tYmllSGludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDExICs0MDQsMjAg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9v
cEhpbnQ6CiAgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxv
dzoKLSAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgICAgIHJlYWQoSlNDZWxsX2NlbGxTdGF0ZSk7CisgICAgICAgIHdyaXRl
KEpTQ2VsbF9jZWxsU3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
RmVuY2VkU3RvcmVCYXJyaWVyOgorICAgICAgICByZWFkKEhlYXApOworICAgICAgICB3cml0ZShK
U0NlbGxfY2VsbFN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJbnZhbGlkYXRp
b25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgTGF6eU5vZGUobm9k
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
c0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw4IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVy
IG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0
byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNl
cnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQg
bm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgYm9vbCBkb2VzR0MoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoK
ICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgRmVu
Y2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBO
b3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MDIsNiArMTQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgog
ICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAg
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgICAgIGNhc2UgR2V0UmVnRXhwT2JqZWN0
TGFzdEluZGV4OgogICAgICAgICBjYXNlIFNldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAg
ICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2Ug
Tm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoK
ICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA2NTM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5Niw3ICs4OTYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwog
ICAgIH0KIAogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw4ICszNzUs
OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIC8qIENoZWNr
cyB0aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIGNhbGwgb3Bl
cmF0aW9uIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIqLyBcCiAgICAgbWFjcm8oQ2hlY2tX
YXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgLyogV3JpdGUgYmFycmllcnMg
ISAqL1wKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGZW5jZWRTdG9yZUJhcnJpZXIsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMg
Ki9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogCiBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gpCiB7Ci0gICAgQXNzZW1ibHlIZWxw
ZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNSZW1lbWJl
cmVkT3JJbkVkZW4ob3duZXIpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2Uob3duZXIpOwog
CiAgICAgLy8gV2UgbmVlZCB0aGVzZSBleHRyYSBzbG90cyBiZWNhdXNlIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZSB3aWxsIHVzZSBwb2tlIG9uIHg4Ni4KICNpZiBDUFUoWDg2KQpAQCAtMjY5
LDYgKzI2OSw4IEBAIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMKIAog
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4
aXRCYXNlJiBleGl0KQogeworICAgIGppdC5tZW1vcnlGZW5jZSgpOworICAgIAogICAgIGppdC5t
b3ZlKAogICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoCiAgICAgICAgICAg
ICBqaXQuY29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNyArMTAyMSw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXQKIAogICAgIEpTQXJyYXkqIHJlc3Vs
dDsKICAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGVX
aXRoQnV0dGVyZmx5KHZtLCBhcnJheVN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgcmVz
dWx0ID0gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgbnVsbHB0ciwgYXJyYXlTdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojpj
cmVhdGUodm0sIGFycmF5U3RydWN0dXJlLCBzaXplKTsKICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PGNoYXIqPihyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBTG93
ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRl
ICJERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5o
IgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgiCkBAIC0zNjIsNiAr
MzYzLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAg
ICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsKIAogICAgICAgICBwZXJmb3JtRmFz
dFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOworICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZyhkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOwpAQCAt
NDUxLDYgKzQ1Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNG
QShkZmcpOwogICAgICAgICBwZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7
CisgICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJDbHVzdGVyaW5nKGRmZyk7CiAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VNb3ZIaW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhp
bnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5NSw2ICs5OTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAg
ICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAg
IGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBP
YmplY3RMYXN0SW5kZXg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNiBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBj
YXNlIExvb3BIaW50OgotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0
aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6
CkBAIC0zNzAsNiArMzY5LDE0IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICAgICAgLy8gY29tcGlsaW5nIHRoaXMgbm9kZS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CisgICAgICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5v
dCBiZSBwdXQgYW55d2hlcmUsIHdoaWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAg
Ly8ga2VlcCB0aGVtIGV4YWN0bHkgd2hlcmUgdGhleSB3ZXJlLiBUaGlzIGlzIHNvcnQgb2Ygb3Zl
cmtpbGwgc2luY2UgdGhlIGNsb2JiZXJpemUgZWZmZWN0cworICAgICAgICAvLyBhbHJlYWR5IGZv
cmNlIHRoZXNlIHRoaW5ncyB0byBiZSBvcmRlcmVkIHByZWNpc2VseS4gSSdtIGp1c3Qgbm90IGNv
bmZpZGVudCBlbm91Z2ggaW4gbXkKKyAgICAgICAgLy8gZWZmZWN0IGJhc2VkIG1lbW9yeSBtb2Rl
bCB0byByZWx5IHNvbGVseSBvbiB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2
NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2OCwxOCArMTI2OCw2IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZh
bHVlRWRnZSkKLXsKLSAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkp
KTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7Ci0gICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAg
IHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTAwNyw3ICs0OTk1LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJp
ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU0NzQsMjAgKzU0NjMsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKLXsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Ci0gICAg
aWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLQotICAgIEpJVENvbXBpbGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihvd25lckdQUik7Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsoJm1faml0KTsKLQotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkK
LSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQogewogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMy
KDEpLCBncHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc2
LDE4ICsxMzc2LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAog
ICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFy
cmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQotewotICAgIEFTU0VSVCghaXNL
bm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwotCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
dmFsdWVFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotCi0gICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZh
bHVlLmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7Ci19
Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2Rl
KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC01MDc5LDExICs1MDY3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgdW5yZWFjaGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0g
ICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNl
IEZlbmNlZFN0b3JlQmFycmllcjogewogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CkBAIC01NTc1LDIwICs1NTY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2
YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNOb3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IG1faml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyR1BS
KTsKLSAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmbV9qaXQpOwotCi0g
ICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwu
bGluaygmbV9qaXQpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJl
ZyBncHIpCiB7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMwNSw0NiArODMwNSw1MSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNoZXMoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU3RvcmVCYXJyaWVyKTsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJp
ZXIgfHwgbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOworICAgIAorICAgIGJvb2wg
aXNGZW5jZWQgPSBub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcjsKICAgICAKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OwogICAgIAotICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2Ny
YXRjaDIuZ3ByKCkpOwotCi0gICAgbm9SZXN1bHQobm9kZSk7Ci19CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigp
OworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBvazsKKyAgICAKKyAgICBpZiAoaXNGZW5jZWQpIHsKKyAgICAg
ICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2goYmFzZUdQUiwgc2NyYXRjaDFHUFIpKTsK
KyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBtX2ppdC5qdW1w
SWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgbV9qaXQubWVtb3J5
RmVuY2UoKTsKKyAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVu
Y2UoYmFzZUdQUikpOworICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFzZUdQ
UikpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQ
UlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBBU1NF
UlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwogICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVC
YXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZlcjsKLSAg
ICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwg
c2NyYXRjaDIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKyAgICBt
X2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2Ny
YXRjaDJHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDJHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKIAot
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwotICAgIG1faml0LnN0
b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkp
OworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgIG1f
aml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhB
ZGRyZXNzKCkpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1
ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
d3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDFHUFIpOwogICAgIC8vIFdlIHVz
ZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEg
dG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIoY2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIo
YmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgIG9rLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1f
aml0KTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGJhc2VH
UFIpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAKLSAgICBk
b25lLmxpbmsoJm1faml0KTsKLX0KKyAgICBvay5saW5rKCZtX2ppdCk7CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIEpJVENvbXBpbGVyOjpKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBtX2ppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihvd25lckdQUik7
Ci0gICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJm1faml0KTsKKyAgICBu
b1Jlc3VsdChub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEFjY2Vz
c29yQnlJZChOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsMTIg
KzI5NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KLSAgICB2b2lkIHdyaXRlQmFycmll
cihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKLQotICAg
IHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVl
VXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Ci0KICAgICB2b2lkIGNvbXBp
bGVTdG9yZUJhcnJpZXIoTm9kZSopOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNo
R1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0g
SW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBw
cmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnKQpAQCAtNzM3LDggKzczMSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVUcnlHZXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJbihOb2Rl
Kik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJh
c2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOwotCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE5v
ZGUqIGJyYW5jaE5vZGUpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNs
dXN0ZXJpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Rv
ZXNHQy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBT
dG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNl
KGdyYXBoLCAic3RvcmUgYmFycmllciBmZW5jaW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNl
dChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIHNpemVfdCBtYXhTaXplID0gMDsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAgIG1heFNpemUgPSBz
dGQ6Om1heChtYXhTaXplLCBibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgbV9iYXJyaWVyUG9pbnRz
LnJlc2l6ZShtYXhTaXplKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIHNpemVf
dCBibG9ja1NpemUgPSBibG9jay0+c2l6ZSgpOworICAgICAgICAgICAgZG9CbG9jayhibG9jayk7
CisgICAgICAgICAgICBtX2JhcnJpZXJQb2ludHMuY2xlYXJSYW5nZSgwLCBibG9ja1NpemUpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgLy8gVGhpcyBzdW1tYXJpemVzIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byByZW1lbWJl
ciBhYm91dCBhIGJhcnJpZXIuCisgICAgc3RydWN0IENoaWxkQW5kT3JpZ2luIHsKKyAgICAgICAg
Q2hpbGRBbmRPcmlnaW4oKSB7IH0KKyAgICAgICAgCisgICAgICAgIENoaWxkQW5kT3JpZ2luKE5v
ZGUqIGNoaWxkLCBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luKQorICAgICAgICAgICAgOiBjaGls
ZChjaGlsZCkKKyAgICAgICAgICAgICwgc2VtYW50aWNPcmlnaW4oc2VtYW50aWNPcmlnaW4pCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogY2hpbGQgeyBudWxs
cHRyIH07CisgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW47CisgICAgfTsKKyAgICAK
KyAgICB2b2lkIGRvQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBBU1NF
UlQobV9iYXJyaWVyUG9pbnRzLmlzRW1wdHkoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGaXJz
dCBpZGVudGlmeSB0aGUgcGxhY2VzIHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gcGxhY2UgYWxsIG9m
IHRoZSBiYXJyaWVycyBiYXNlZCBvbiBhCisgICAgICAgIC8vIGJhY2t3YXJkcyBhbmFseXNpcy4g
V2UgdXNlIHRoZSBmdXR1cmVHQyBmbGFnIHRvIHRlbGwgdXMgaWYgd2UgaGFkIHNlZW4gYSBHQy4g
U2luY2UgdGhpcworICAgICAgICAvLyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpcywgd2hlbiB3ZSBn
ZXQgdG8gYSBub2RlLCBmdXR1cmVHQyB0ZWxscyB1cyBpZiBhIEdDIHdpbGwgaGFwcGVuCisgICAg
ICAgIC8vIGluIHRoZSBmdXR1cmUgYWZ0ZXIgdGhhdCBub2RlLgorICAgICAgICBib29sIGZ1dHVy
ZUdDID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJhY2t3
YXJkcyBhbmFseXNpcywgc28gZXhpdHMgcmVxdWlyZSBjb25zZXJ2YXRpc20uIElmIHdlIGV4aXQs
IHRoZW4gdGhlcmUKKyAgICAgICAgICAgIC8vIHByb2JhYmx5IHdpbGwgYmUgYSBHQyBpbiB0aGUg
ZnV0dXJlISBJZiB3ZSBuZWVkZWQgdG8gdGhlbiB3ZSBjb3VsZCBsaWZ0IHRoYXQKKyAgICAgICAg
ICAgIC8vIHJlcXVpcmVtZW50IGJ5IGVpdGhlciAoMSkgaGF2aW5nIGEgU3RvcmVCYXJyaWVySGlu
dCB0aGF0IHRlbGxzIE9TUiBleGl0IHRvIGJhcnJpZXIgdGhhdAorICAgICAgICAgICAgLy8gdmFs
dWUgb3IgKDIpIGF1dG9tYXRpY2FsbHkgYmFycmllcmluZyBhbnkgREZHLWxpdmUgTm9kZSBvbiBP
U1IgZXhpdC4gRWl0aGVyIHdheSwgaXQKKyAgICAgICAgICAgIC8vIHdvdWxkIGJlIHdlaXJkIGJl
Y2F1c2UgaXQgd291bGQgY3JlYXRlIGEgbmV3IHJvb3QgZm9yIE9TUiBhdmFpbGFiaWxpdHkgYW5h
bHlzaXMuIEkKKyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgZXZpZGVuY2UgdGhhdCBpdCB3b3Vs
ZCBiZSB3b3J0aCBpdC4KKyAgICAgICAgICAgIGlmIChkb2VzR0MobV9ncmFwaCwgbm9kZSkgfHwg
bWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkgeworICAgICAgICAgICAgICAg
IGZ1dHVyZUdDID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkg
JiYgZnV0dXJlR0MpIHsKKyAgICAgICAgICAgICAgICBtX2JhcnJpZXJQb2ludHNbbm9kZUluZGV4
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgZnV0dXJlR0MgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIHJ1biBmb3J3YXJkIGFu
ZCBjb2xsZWN0IHRoZSBiYXJyaWVycy4gV2hlbiB3ZSBoaXQgYSBiYXJyaWVyIHBvaW50LCBpbnNl
cnQgYWxsIG9mCisgICAgICAgIC8vIHRoZW0gd2l0aCBhIGZlbmNlLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgIW5vZGUtPm9yaWdpbi53YXNIb2lzdGVkKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOworICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5hcHBlbmQoQ2hpbGRBbmRPcmlnaW4o
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBvcmlnaW4uc2VtYW50aWMpKTsKKyAgICAgICAgICAgIG5v
ZGUtPnJlbW92ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fYmFycmllclBv
aW50c1tub2RlSW5kZXhdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVy
cy5iZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAo
Y29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBiKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY2hpbGQgPCBiLmNoaWxkOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgYXV0byBlbmQgPSBzdGQ6OnVuaXF1ZSgKKyAgICAg
ICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmJlZ2luKCksIG1fbmVlZGVkQmFycmllcnMuZW5k
KCksCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBDaGlsZEFuZE9yaWdpbiYgYSwgY29uc3Qg
Q2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2x7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LmNoaWxkID09IGIuY2hpbGQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gaXRlci0+Y2hpbGQ7CisgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdpbiA9IGl0ZXItPnNlbWFudGljT3JpZ2lu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVUeXBlIHR5cGU7CisgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpICYmIGl0ZXIg
PT0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0g
RmVuY2VkU3RvcmVCYXJyaWVyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCB0eXBlLCBvcmlnaW4ud2l0aFNlbWFudGljKHNlbWFudGljT3JpZ2lu
KSwKKyAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLnJlc2l6ZSgwKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBGYXN0Qml0
VmVjdG9yIG1fYmFycmllclBvaW50czsKKyAgICBWZWN0b3I8Q2hpbGRBbmRPcmlnaW4+IG1fbmVl
ZGVkQmFycmllcnM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJm
b3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1
blBoYXNlPFN0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIFBpY2tzIHVwIGdyb3VwcyBvZiBiYXJyaWVycyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVk
IGluIGFueSBvcmRlciB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlciBhbmQKKy8vIHBsYWNlcyB0
aGVuIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSB0aGUgY2x1c3Rl
ciB3b3VsZCBiZSBjb3JyZWN0LiBUaGlzIHBoYXNlCisvLyBtYWtlcyBvbmx5IHRoZSBmaXJzdCBv
ZiB0aGUgY2x1c3RlciBiZSBhIEZlbmNlZFN0b3JlQmFycmllciB3aGlsZSB0aGUgcmVzdCBhcmUg
bm9ybWFsCisvLyBTdG9yZUJhcnJpZXJzLiBUaGlzIHBoYXNlIGFsc28gcmVtb3ZlcyByZWR1bmRh
bnQgYmFycmllcnMgLSBmb3IgZXhhbXBsZSwgdGhlIGNsdXN0ZXIgbWF5IGVuZCB1cAorLy8gd2l0
aCB0d28gb3IgbW9yZSBiYXJyaWVycyBvbiB0aGUgc2FtZSBvYmplY3QsIGluIHdoaWNoIGNhc2Ug
aXQgaXMgdG90YWxseSBzYWZlIGZvciB1cyB0byBkcm9wCisvLyBvbmUgb2YgdGhlbS4gVGhlIHJl
YXNvbiB3aHkgdGhpcyBpcyBzb3VuZCBoaW5nZXMgb24gdGhlICJlYXJsaWVzdCBwb2ludCB3aGVy
ZSB0aGUgY2x1c3RlciB3b3VsZAorLy8gYmUgY29ycmVjdCIgcHJvcGVydHkuIEZvciBleGFtcGxl
LCB0YWtlIHRoaXMgaW5wdXQ6CisvLworLy8gICAgIGE6IENhbGwoKQorLy8gICAgIGI6IFB1dEJ5
T2Zmc2V0KEBvLCBAbywgQHgpCisvLyAgICAgYzogRmVuY2VkU3RvcmVCYXJyaWVyKEBvKQorLy8g
ICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkpCisvLyAgICAgZTogRmVuY2VkU3RvcmVCYXJy
aWVyKEBvKQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgZzogRmVu
Y2VkU3RvcmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6
IENhbGwoKQorLy8KKy8vIFRoZSBjbHVzdGVyIG9mIGJhcnJpZXJzIGlzIEBjLCBAZSwgYW5kIEBn
LiBBbGwgb2YgdGhlIGJhcnJpZXJzIGFyZSBiZXR3ZWVuIHR3byBkb2VzR0MgZWZmZWN0czoKKy8v
IHRoZSBjYWxscyBhdCBAYSBhbmQgQGkuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIGRvZXNHQyBlZmZl
Y3RzIGJldHdlZW4gQGEgYW5kIEBpIGFuZCB0aGVyZSBpcyBubworLy8gcG9zc2libGUgY29udHJv
bCBmbG93IGVudHJ5IGludG8gdGhpcyBzZXF1ZW5jZSBiZXR3ZWVuIEAgYW5kIEBpLCB3ZSBjb3Vs
ZCBjb3VsZCBqdXN0IGV4ZWN1dGUgYWxsCisvLyBvZiB0aGUgYmFycmllcnMganVzdCBiZWZvcmUg
QGkgaW4gYW55IG9yZGVyLiBUaGUgZWFybGllc3QgcG9pbnQgd2hlcmUgdGhlIGNsdXN0ZXIgd291
bGQgYmUKKy8vIGNvcnJlY3QgaXMganVzdCBhZnRlciBAZiwgc2luY2UgdGhhdCdzIHRoZSBsYXN0
IG9wZXJhdGlvbiB0aGF0IG5lZWRzIGEgYmFycmllci4gV2UgdXNlIHRoZQorLy8gZWFybGllc3Qg
dG8gcmVkdWNlIHJlZ2lzdGVyIHByZXNzdXJlLiBXaGVuIHRoZSBiYXJyaWVycyBhcmUgY2x1c3Rl
cmVkIGp1c3QgYWZ0ZXIgQGYsIHdlIGdldDoKKy8vCisvLyAgICAgYTogQ2FsbCgpCisvLyAgICAg
YjogUHV0QnlPZmZzZXQoQG8sIEBvLCBAeCkKKy8vICAgICBkOiBQdXRCeU9mZnNldChAbywgQG8s
IEB5KQorLy8gICAgIGY6IFB1dEJ5T2Zmc2V0KEBwLCBAcCwgQHopCisvLyAgICAgYzogRmVuY2Vk
U3RvcmVCYXJyaWVyKEBvKQorLy8gICAgIGU6IEZlbmNlZFN0b3JlQmFycmllcihAbykKKy8vICAg
ICBnOiBGZW5jZWRTdG9yZUJhcnJpZXIoQHApCisvLyAgICAgaDogR2V0QnlPZmZzZXQoQHEpCisv
LyAgICAgaTogQ2FsbCgpCisvLworLy8gVGhpcyBwaGFzZSBkb2VzIG1vcmUuIEl0IHRha2VzIGFk
dmFudGFnZSBvZiB0aGUgY2x1c3RlcmluZyB0byByZW1vdmUgZmVuY2VzIGFuZCByZW1vdmUgcmVk
dW5kYW50CisvLyBiYXJyaWVycy4gU28gdGhpcyBwaGFzZSB3aWxsIG91dHB1dCB0aGlzOgorLy8K
Ky8vICAgICBhOiBDYWxsKCkKKy8vICAgICBiOiBQdXRCeU9mZnNldChAbywgQG8sIEB4KQorLy8g
ICAgIGQ6IFB1dEJ5T2Zmc2V0KEBvLCBAbywgQHkpCisvLyAgICAgZjogUHV0QnlPZmZzZXQoQHAs
IEBwLCBAeikKKy8vICAgICBjOiBGZW5jZWRTdG9yZUJhcnJpZXIoQG8pCisvLyAgICAgZzogU3Rv
cmVCYXJyaWVyKEBwKQorLy8gICAgIGg6IEdldEJ5T2Zmc2V0KEBxKQorLy8gICAgIGk6IENhbGwo
KQorLy8KKy8vIFRoaXMgb3B0aW1pemF0aW9uIGltcHJvdmVzIGJvdGggb3ZlcmFsbCB0aHJvdWdo
cHV0IGFuZCB0aGUgdGhyb3VnaHB1dCB3aGlsZSB0aGUgY29uY3VycmVudCBHQyBpcworLy8gcnVu
bmluZy4gSW4gdGhlIGZvcm1lciwgd2UgYXJlIHNpbXBsaWZ5aW5nIGluc3RydWN0aW9uIHNlbGVj
dGlvbiBmb3IgYWxsIGJ1dCB0aGUgZmlyc3QgZmVuY2UuIEluCisvLyB0aGUgbGF0dGVyLCB3ZSBh
cmUgcmVkdWNpbmcgdGhlIGNvc3Qgb2YgYWxsIGJ1dCB0aGUgZmlyc3QgYmFycmllci4gVGhlIGZp
cnN0IGJhcnJpZXIgd2lsbCBhd2xheXMKKy8vIHRha2Ugc2xvdyBwYXRoIHdoZW4gdGhlcmUgaXMg
Y29uY3VycmVudCBHQyBhY3Rpdml0eSwgc2luY2UgdGhlIHNsb3cgcGF0aCBjb250YWlucyB0aGUg
ZmVuY2UuIEJ1dAorLy8gYWxsIG9mIHRoZSBvdGhlciBiYXJyaWVycyB3aWxsIG9ubHkgdGFrZSBz
bG93IHBhdGggaWYgdGhleSByZWFsbHkgbmVlZCB0byByZW1lbWJlciB0aGUgb2JqZWN0LgorYm9v
bCBwZXJmb3JtU3RvcmVCYXJyaWVyQ2x1c3RlcmluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4gcnVuIHRoZWlyIG93
biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAx
LCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAg
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgbV9ub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQzMCwxMyArNDMwLDE0IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJp
ZXIobV9ub2RlSW5kZXgsIGJhc2UpOworICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4
ICsgMSwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5v
ZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRPSyA9IHRydWUpCisgICAgdm9pZCBpbnNlcnRC
YXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlKQogICAgIHsKLSAgICAgICAgLy8g
SW5zZXJ0aW5nIGEgYmFycmllciBtZWFucyB0aGF0IHRoZSBvYmplY3QgbWF5IGJlY29tZSBtYXJr
ZWQgYnkgdGhlIEdDLCB3aGljaCB3aWxsIG1ha2UKLSAgICAgICAgLy8gdGhlIG9iamVjdCBibGFj
ay4KKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IG91ciB3YXkgb2Ygc2F5aW5nIHRoYXQgYmFycmll
cnMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aCBlYWNoIG90aGVyIGFjY29yZGluZworICAgICAgICAv
LyB0byBmb3J3YXJkIGFuYWx5c2lzOiBpZiB3ZSBwcm92ZWQgb25lIHRpbWUgdGhhdCBhIGJhcnJp
ZXIgd2FzIG5lY2Vzc2FyeSB0aGVuIGl0J2xsIGZvcgorICAgICAgICAvLyBzdXJlIGJlIG5lY2Vz
c2FyeSBuZXh0IHRpbWUuCiAgICAgICAgIGJhc2UtPnNldEVwb2NoKEVwb2NoKCkpOwogCiAgICAg
ICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2RlLCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhl
IGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJnZWQuCkBAIC00NDYsMTcgKzQ0NywyMyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgc3VwcG9ydCBTdG9yZUJhcnJpZXIo
VW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNvcnQgb2YgY29vbC4KICAgICAgICAgLy8gQnV0
IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0LgogCi0gICAgICAgIC8vIElmIHRoZSBvcmlnaW5h
bCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3VsZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2suIFdl
IG1heSBiZSBpbiBhIGNvbnRleHQKLSAgICAgICAgLy8gd2hlcmUgY2hlY2tzIGFyZSBub3QgYWxs
b3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBpbnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4aXRJ
bnZhbGlkCi0gICAgICAgIC8vIGNvbnRleHQgYW5kIHRoYXQgYmFycmllciBuZWVkZWQgYSBjaGVj
aywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29yayBieSBob2lzdGluZyB0aGUgY2hlY2suCi0g
ICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4gcmlnaHQgbm93LgotICAgICAgICBpZiAoYmFz
ZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7Ci0gICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgIGJhc2Uu
c2V0VXNlS2luZChDZWxsVXNlKTsKLSAgICAgICAgfQorICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgaXNDZWxsKGJhc2UudXNlS2luZCgpKSk7CisgICAgICAgIAorICAgICAgICAv
LyBCYXJyaWVycyBhcmUgYWx3YXlzIGluc2VydGVkIGFmdGVyIHRoZSBub2RlIHRoYXQgdGhleSBz
ZXJ2aWNlLiBUaGVyZWZvcmUsIHdlIGFsd2F5cyBrbm93CisgICAgICAgIC8vIHRoYXQgdGhlIHRo
aW5nIGlzIGEgY2VsbCBub3cuCisgICAgICAgIGJhc2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICAKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsK
KyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIG1fbm9kZSkpCisgICAgICAg
ICAgICBvcmlnaW4gPSBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCk7CisgICAgICAgIAorICAgICAg
ICBOb2RlVHlwZSB0eXBlOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJp
ZXJzKCkpCisgICAgICAgICAgICB0eXBlID0gRmVuY2VkU3RvcmVCYXJyaWVyOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0eXBlID0gU3RvcmVCYXJyaWVyOwogICAgICAgICAKLSAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChleGl0T0spLCBi
YXNlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCB0eXBlLCBvcmlnaW4sIGJhc2UpOwogICAgIH0KICAgICAKICAgICBib29sIHJlYWxseUlu
c2VydEJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDIwNjUzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTQgKzMyLDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIGNsYXNzIEdyYXBoOwogCiAvLyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJz
IGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgYWJzdHJhY3Qg
aW50ZXJwcmV0ZXIuCi0vLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2
b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMuIFRoaXMgcGhhc2UgcmVxdWlyZXMKLS8v
IHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCisvLyBVc2VzIGEgc2ltcGxlIGVwb2NoLWJhc2VkIGFu
YWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyBiYXJyaWVycyBvbiBuZXdseSBhbGxvY2F0ZWQgb2Jq
ZWN0cy4gVGhpcworLy8gcGhhc2UgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KIGJv
b2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKIAogLy8gSW5zZXJ0
cyBzdG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2JhbCBhbmFseXNpcyBhbmQgY29uc3VsdHMgdGhl
IGFic3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEKLS8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFs
eXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLCBidXQgb25seSBwcm9w
YWdhdGVzICJzYW1lCi0vLyBlcG9jaCBhcyBjdXJyZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBibG9j
ayB0byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UKLS8vIGFs
c28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KKy8vIHNpbXBsZSBlcG9j
aC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgYmFycmllcnMgb24gbmV3bHkgYWxs
b2NhdGVkIG9iamVjdHMuIFRoaXMgcGhhc2UKKy8vIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFzZSBh
bHNvIHJlcXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5lc3MuCiBib29sIHBlcmZvcm1H
bG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTIgKzE5NSwxMiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdEFueUFkZHJlc3MoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4ZWRIZWFwLmF0QW55SW5kZXgoKTsgfQogICAgIAotICAgIGNvbnN0IEFic3Ry
YWN0SGVhcCYgYXQodm9pZCogYWRkcmVzcykKKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KGNv
bnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmRleGVkSGVhcC5h
dChiaXR3aXNlX2Nhc3Q8cHRyZGlmZl90PihhZGRyZXNzKSk7CiAgICAgfQogICAgIAotICAgIGNv
bnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXSh2b2lkKiBhZGRyZXNzKSB7IHJldHVybiBhdChh
ZGRyZXNzKTsgfQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXShjb25zdCB2b2lk
KiBhZGRyZXNzKSB7IHJldHVybiBhdChhZGRyZXNzKTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMjA2NTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQog
CiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNGZW5jZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKQEAgLTExNiw2ICsxMTcsMTYgQEAgdm9pZCBB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdAogICAgIG1faGVhcEZvclBhdGNocG9p
bnRXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhlYXAsIHZhbHVlKSk7CiB9CiAKK3ZvaWQgQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZVJlYWQoY29uc3QgQWJzdHJhY3RIZWFw
KiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VSZWFkLmFwcGVuZChI
ZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5OjpkZWNvcmF0ZUZlbmNlV3JpdGUoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSog
dmFsdWUpCit7CisgICAgbV9oZWFwRm9yRmVuY2VXcml0ZS5hcHBlbmQoSGVhcEZvclZhbHVlKGhl
YXAsIHZhbHVlKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJh
bmdlc0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKCkKIHsKICAgICByb290LmNvbXB1dGUoKTsKQEAg
LTEzMiw5ICsxNDMsMTMgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRlUmFu
ZwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yQ0NhbGxXcml0ZSkKICAg
ICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50
cnkuaGVhcC0+cmFuZ2UoKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZv
clBhdGNocG9pbnRSZWFkKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+
ZWZmZWN0cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVl
LT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5n
ZSgpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFdy
aXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0
ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hw
b2ludFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAg
Zm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVJlYWQpCisgICAgICAgIGVu
dHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5yZWFkID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsK
KyAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlV3JpdGUpCisgICAg
ICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT53cml0ZSA9IGVudHJ5LmhlYXAtPnJh
bmdlKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShy
ZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6
VmFsdWUqKTsKICAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RI
ZWFwKiwgQjM6OlZhbHVlKik7CiAgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25z
dCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRlY29yYXRlRmVuY2VSZWFk
KGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOworICAgIHZvaWQgZGVjb3JhdGVGZW5j
ZVdyaXRlKGNvbnN0IEFic3RyYWN0SGVhcCosIEIzOjpWYWx1ZSopOwogCiAgICAgdm9pZCBjb21w
dXRlUmFuZ2VzQW5kRGVjb3JhdGVJbnN0cnVjdGlvbnMoKTsKIApAQCAtMjQwLDYgKzI0Miw4IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yQ0NhbGxXcml0ZTsK
ICAgICBWZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZDsKICAgICBW
ZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGU7CisgICAgVmVjdG9y
PEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yRmVuY2VSZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFs
dWU+IG1faGVhcEZvckZlbmNlV3JpdGU7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0
ZU9mZnNldDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIFRh
aWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA2NTM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNs
dWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKICNpbmNsdWRl
ICJCM1BhdGNocG9pbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCkBAIC05NDUsNiArOTQ2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIEZlbmNl
ZFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKQEAgLTY5OTcs
OSArNjk5OSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVy
KCkKICAgICB7Ci0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSk7CisgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQotCisgICAgCiAg
ICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTgxMjgsOCArODEzMCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7
Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTAwNTUsMTMg
KzEwMDU1LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gcnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0
IGNyZWF0ZWQgdGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVy
ZW5jZQogICAgIC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVz
PgotICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgUGF0Y2hwb2ludFZhbHVlKiBsYXp5U2xvd1BhdGgo
Y29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiAgICAg
ewogICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3IsIFZlY3RvcjxMVmFsdWU+eyBh
cmd1bWVudHMuLi4gfSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
LSAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZl
Y3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIFBhdGNocG9pbnRWYWx1ZSogbGF6eVNs
b3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2Vy
QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYzsKICAgICAgICAgCkBAIC0xMTQzMSwyNiArMTE0MzEsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlND
ZWxsX2NlbGxTdGF0ZSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1
ZSBiYXNlKQorICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSwgYm9vbCBpc0Zl
bmNlZCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3Qmxv
Y2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKIAorICAgICAgICBMVmFsdWUgdGhyZXNob2xkOworICAgICAgICBpZiAoaXNGZW5jZWQpCisg
ICAgICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5o
ZWFwLmFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQoKSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0aHJlc2hvbGQgPSBtX291dC5jb25zdEludDMyKGJsYWNrVGhyZXNob2xkKTsKKyAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxvYWRD
ZWxsU3RhdGUoYmFzZSksIG1fb3V0LmNvbnN0SW50MzIoYmxhY2tUaHJlc2hvbGQpKSwKKyAgICAg
ICAgICAgIG1fb3V0LmFib3ZlKGxvYWRDZWxsU3RhdGUoYmFzZSksIHRocmVzaG9sZCksCiAgICAg
ICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwogCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJhcnJp
ZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZlciBm
aXJlLiBBbmQKICAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNlIGZv
ciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgogICAg
ICAgICAvLyB3YXN0aW5nIEIzJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBsYXp5U2xv
d1BhdGgoCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGxhenlTbG93UGF0
aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAt
PiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKIAogICAgICAgICAgICAgICAg
IHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAg
ICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZlbmNlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0ZlbmNlID0gaml0
Lmp1bXBJZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5tZW1vcnlGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNl
KGJhc2VHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0ZlbmNlLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJh
bXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKHVzZWRS
ZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmxvY2soYmFzZUdQUik7CkBAIC0xMTQ5NSw2ICsxMTUwOCwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBiYXNlKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChpc0ZlbmNlZCkKKyAgICAgICAgICAgIG1faGVhcHMuZGVj
b3JhdGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5yb290LCBwYXRjaHBvaW50KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRSZWFkKCZtX2hlYXBz
LkpTQ2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOworICAgICAgICBtX2hlYXBzLmRlY29yYXRl
UGF0Y2hwb2ludFdyaXRlKCZtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOwor
ICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZlbmNlVmFs
dWUuaCIKICNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCkBAIC00NDUsNiArNDQ2LDExIEBAIHZv
aWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG8KICAgICBtX2hlYXBzLT5kZWNv
cmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3RvcmUpOwogfQogCitGZW5jZVZhbHVlKiBPdXRw
dXQ6OmZlbmNlKCkKK3sKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCkpOworfQorCiB2b2lkIE91dHB1dDo6c3RvcmUzMkFzOChMVmFsdWUg
dmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQogewogICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbigpLCB2YWx1
ZSwgcG9pbnRlci52YWx1ZSgpKTsKQEAgLTc5NSw3ICs4MDEsNyBAQCB2b2lkIE91dHB1dDo6c3Rv
cmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotVHlwZWRQb2ludGVyIE91dHB1dDo6YWJzb2x1dGUodm9pZCogYWRkcmVzcykKK1R5
cGVkUG9pbnRlciBPdXRwdXQ6OmFic29sdXRlKGNvbnN0IHZvaWQqIGFkZHJlc3MpCiB7CiAgICAg
cmV0dXJuIFR5cGVkUG9pbnRlcihtX2hlYXBzLT5hYnNvbHV0ZVthZGRyZXNzXSwgY29uc3RJbnRQ
dHIoYWRkcmVzcykpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCBOb2RlOwogfSAvLyBu
YW1lc3BhY2UgREZHCiAKIG5hbWVzcGFjZSBCMyB7CitjbGFzcyBGZW5jZVZhbHVlOwogY2xhc3Mg
U2xvdEJhc2VWYWx1ZTsKIH0gLy8gbmFtZXNwYWNlIEIzCiAKQEAgLTE4OCw2ICsxODksNyBAQCBw
dWJsaWM6CiAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlKTsKICAgICB2b2lk
IHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyKTsKKyAgICBCMzo6RmVuY2VWYWx1ZSogZmVuY2Uo
KTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50ZXIpOwogICAgIExWYWx1
ZSBsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIpOwpAQCAtMjg0LDcgKzI4Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0aGlzLCBiYXNlLCBpbmRleCwgaW5k
ZXhBc0NvbnN0YW50LCBvZmZzZXQpOwogICAgIH0KIAotICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0
ZSh2b2lkKiBhZGRyZXNzKTsKKyAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUoY29uc3Qgdm9pZCog
YWRkcmVzcyk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0
IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKGFkZHJlc3MoYmFz
ZSwgZmllbGQpKTsgfQogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihMVmFsdWUgYmFzZSwgY29u
c3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDhaZXJvRXh0MzIoYWRkcmVzcyhi
YXNlLCBmaWVsZCkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUu
aAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1MiwxNiBAQCBlbnVtIGNsYXNzIENlbGxT
dGF0ZSA6IHVpbnQ4X3QgewogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsYWNrVGhyZXNo
b2xkID0gMTsgLy8geCA8PSBibGFja1RocmVzaG9sZCBtZWFucyB4IGlzIGJsYWNrLgorc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRhdXRvbG9naWNhbFRocmVzaG9sZCA9IDEwMDsgLy8geCA8PSB0YXV0
b2xvZ2ljYWxUaHJlc2hvbGQgaXMgYWx3YXlzIHRydWUuCisKK2lubGluZSBib29sIGlzV2l0aGlu
VGhyZXNob2xkKENlbGxTdGF0ZSBjZWxsU3RhdGUsIHVuc2lnbmVkIHRocmVzaG9sZCkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gdGhyZXNob2xkOwor
fQogCiBpbmxpbmUgYm9vbCBpc0JsYWNrKENlbGxTdGF0ZSBjZWxsU3RhdGUpCiB7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU3RhdGUpIDw9IGJsYWNrVGhyZXNob2xkOwor
ICAgIHJldHVybiBpc1dpdGhpblRocmVzaG9sZChjZWxsU3RhdGUsIGJsYWNrVGhyZXNob2xkKTsK
IH0KIAogaW5saW5lIENlbGxTdGF0ZSBibGFja2VuKENlbGxTdGF0ZSBjZWxsU3RhdGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKworY2xhc3MgR0NEZWZl
cnJhbENvbnRleHQgeworICAgIGZyaWVuZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBN
YXJrZWRBbGxvY2F0b3I7CitwdWJsaWM6CisgICAgaW5saW5lIEdDRGVmZXJyYWxDb250ZXh0KEhl
YXAmKTsKKyAgICBpbmxpbmUgfkdDRGVmZXJyYWxDb250ZXh0KCk7CisKK3ByaXZhdGU6CisgICAg
SGVhcCYgbV9oZWFwOworICAgIGJvb2wgbV9zaG91bGRHQyB7IGZhbHNlIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZl
cnJhbENvbnRleHRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdDRGVmZXJyYWxDb250ZXh0
LmgiCisjaW5jbHVkZSAiSGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElO
RSBHQ0RlZmVycmFsQ29udGV4dDo6R0NEZWZlcnJhbENvbnRleHQoSGVhcCYgaGVhcCkKKyAgICA6
IG1faGVhcChoZWFwKQoreworfQorCitBTFdBWVNfSU5MSU5FIEdDRGVmZXJyYWxDb250ZXh0Ojp+
R0NEZWZlcnJhbENvbnRleHQoKQoreworICAgIEFTU0VSVCghRGlzYWxsb3dHQzo6aXNHQ0Rpc2Fs
bG93ZWRPbkN1cnJlbnRUaHJlYWQoKSk7CisjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCisgICAg
QVNTRVJUKCFtX2hlYXAudm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisjZW5kaWYKKyAg
ICBpZiAoVU5MSUtFTFkobV9zaG91bGRHQykpCisgICAgICAgIG1faGVhcC5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksNCArMTU0OSwx
NyBAQCB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJbXBsKGNvbnN0IFNjCiAgICAgcmV0dXJu
IG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKIH0KIAordm9pZCBIZWFwOjp3cml0ZUJhcnJp
ZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCit7CisgICAgaWYgKFVOTElLRUxZKGJhcnJp
ZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBiYXJy
aWVyVGhyZXNob2xkIGlzIHRoZSB0YXV0b2xvZ2ljYWwgdGhyZXNob2xkLCBzbyBmcm9tIGNvdWxk
IHN0aWxsIGJlCisgICAgICAgIC8vIG5vdCBibGFjay4gQnV0IHdlIGNhbid0IGtub3cgZm9yIHN1
cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KKyAgICAgICAgV1RGOjpzdG9yZUxvYWRGZW5j
ZSgpOworICAgICAgICBpZiAoIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
cmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQWxs
b2NhdGlvblNjb3BlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUJsb2NrU2V0OworY2xh
c3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrOwogY2xh
c3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwpAQCAtMTAz
LDkgKzEwNCwxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShj
b25zdCB2b2lkKik7CiAKLSAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqKTsKLSAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKKyAgICB2b2lkIHdyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqIGZyb20pOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCogZnJvbSwgSlNWYWx1ZSB0byk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiBmcm9tLCBKU0NlbGwqIHRvKTsKKyAgICAKKyAgICB2b2lkIHdyaXRlQmFycmllcldpdGhvdXRG
ZW5jZShjb25zdCBKU0NlbGwqIGZyb20pOworICAgIAorICAgIC8vIFRha2UgdGhpcyBpZiB5b3Ug
a25vdyB0aGF0IGZyb20tPmNlbGxTdGF0ZSgpIDwgYmFycmllclRocmVzaG9sZC4KKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJv
bSk7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0
dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcihKU0NlbGwqKTsKQEAgLTE0OCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRlcykgeyByZXR1cm4g
bV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgdm9pZCog
YWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwogICAgIHZv
aWQqIHRyeUFsbG9jYXRlQXV4aWxpYXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGlsaWFyeShHQ0RlZmVycmFsQ29udGV4dCosIEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICB2b2lkKiB0cnlSZWFsbG9jYXRlQXV4aWxp
YXJ5KEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKTsKICAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVk
T3duZXIsIHZvaWQqKTsKIApAQCAtMTY1LDcgKzE3Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
c2hvdWxkQ29sbGVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdChIZWFw
T3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlvbik7Ci0gICAgYm9vbCBjb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVj
dC4KKyAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQq
ID0gbnVsbHB0cik7IC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4KICAgICB2b2lk
IGNvbGxlY3RBY2NvcmRpbmdUb0RlZmVyR0NQcm9iYWJpbGl0eSgpOwogCiAgICAgdm9pZCBjb21w
bGV0ZUFsbEpJVFBsYW5zKCk7CkBAIC0yNTMsNiArMjYwLDEyIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGlkQWxsb2NhdGVCbG9jayhzaXplX3QgY2FwYWNpdHkpOwogICAgIHZvaWQgZGlkRnJlZUJs
b2NrKHNpemVfdCBjYXBhY2l0eSk7CisgICAgCisgICAgYm9vbCBiYXJyaWVyU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0
IGJvb2wqIGFkZHJlc3NPZkJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZt
X2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIAorICAgIHVuc2lnbmVkIGJhcnJpZXJUaHJl
c2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXJUaHJlc2hvbGQ7IH0KKyAgICBjb25zdCB1
bnNpZ25lZCogYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jh
cnJpZXJUaHJlc2hvbGQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGlv
blNjb3BlOwpAQCAtMjc3LDEyICsyOTAsMTcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
V2Vha1NldDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2Nh
dGVDZWxsKEhlYXAmLCBzaXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2
b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgR0NEZWZlcnJh
bENvbnRleHQqLCBzaXplX3QpOwogCiAgICAgdm9pZCBjb2xsZWN0V2l0aG91dEFueVN3ZWVwKEhl
YXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUgPSBBbnlDb2xsZWN0aW9uKTsKIAogICAgIHZvaWQq
IGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMg
d2l0aCBkZXN0cnVjdG9ycy4KICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNp
emVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCisgICAg
dm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7
CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCos
IHNpemVfdCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBhbGxvY2F0
ZU9iamVjdE9mVHlwZShzaXplX3QpOyAvLyBDaG9vc2VzIG9uZSBvZiB0aGUgbWV0aG9kcyBhYm92
ZSBiYXNlZCBvbiB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCog
YWxsb2NhdGVPYmplY3RPZlR5cGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwogCiAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYU1lbW9yeSA9IDI1NjsKICAgICAKQEAgLTQxMCw2
ICs0MjgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKICAgICBX
cml0ZUJhcnJpZXJCdWZmZXIgbV93cml0ZUJhcnJpZXJCdWZmZXI7CisgICAgYm9vbCBtX2JhcnJp
ZXJTaG91bGRCZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CisgICAg
dW5zaWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVy
KCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0q
IG1fdm07CiAgICAgZG91YmxlIG1fbGFzdEZ1bGxHQ0xlbmd0aDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkdDRGVmZXJyYWxDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCkBAIC0xMjQsMTkgKzEyNSwzMSBAQCBpbmxpbmUgdm9p
ZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigp
OwogI2VuZGlmCi0gICAgaWYgKCFmcm9tIHx8ICFpc0JsYWNrKGZyb20tPmNlbGxTdGF0ZSgpKSkK
KyAgICBpZiAoIWZyb20pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRvIHx8IHRvLT5jZWxs
U3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQorICAgIGlmICghaXNXaXRoaW5UaHJlc2hv
bGQoZnJvbS0+Y2VsbFN0YXRlKCksIGJhcnJpZXJUaHJlc2hvbGQoKSkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CisgICAgaWYgKExJS0VMWSghdG8gfHwg
dG8tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hpdGUpKQorICAgICAgICByZXR1cm47
CisgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6
OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20g
fHwgIWlzQmxhY2soZnJvbS0+Y2VsbFN0YXRlKCkpKQorICAgIGlmICghZnJvbSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3Rh
dGUoKSwgYmFycmllclRocmVzaG9sZCgpKSkpCisgICAgICAgIHdyaXRlQmFycmllclNsb3dQYXRo
KGZyb20pOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJXaXRob3V0RmVuY2Uo
Y29uc3QgSlNDZWxsKiBmcm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQo
Y29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1
cm47Ci0gICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGlmIChVTkxJS0VMWShpc1dp
dGhpblRocmVzaG9sZChmcm9tLT5jZWxsU3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQpKSkKKyAgICAg
ICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKQEAgLTIxMyw2ICsyMjYsMTggQEAg
aW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydQogICAgIHJldHVybiBtX29i
amVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCitpbmxpbmUg
dm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0
aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRoRGVzdHJ1
Y3RvcihkZWZlcnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKworaW5saW5lIHZvaWQqIEhlYXA6OmFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3IoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgc2l6ZV90IGJ5dGVzKQoreworICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykp
OworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoZGVm
ZXJyYWxDb250ZXh0LCBieXRlcyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4K
IGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7
CkBAIC0yMjUsNiArMjUwLDE2IEBAIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9m
VHlwZSgKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgoraW5saW5lIHZvaWQqIEhl
YXA6OmFsbG9jYXRlT2JqZWN0T2ZUeXBlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24gfHwgKENsYXNzVHlwZTo6U3RydWN0dXJlRmxhZ3MgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENsYXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+
Ojp2YWx1ZSkpOworCisgICAgaWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbikKKyAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlV2l0aERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7
CisgICAgcmV0dXJuIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IoZGVmZXJyYWxDb250ZXh0LCBi
eXRlcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KIGlubGluZSBNYXJrZWRT
cGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKCkKIHsKICAgICAv
LyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBub3Jt
YWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KQEAgLTI3
Myw2ICszMDgsMTcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlQXV4aWxpYXJ5KAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSB2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUF1
eGlsaWFyeShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtX29iamVjdFNw
YWNlLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgYnl0ZXMpOworI2lmIEVO
QUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyBvZiBhdXhpbGlhcnkgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93
bmVyLCByZXN1bHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgdm9pZCogSGVhcDo6dHJ5UmVh
bGxvY2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICB2b2lkKiBuZXdCYXNlID0gdHJ5
QWxsb2NhdGVBdXhpbGlhcnkoaW50ZW5kZWRPd25lciwgbmV3U2l6ZSk7CkBAIC0zMTIsMTIgKzM1
OCwxNSBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoCiAgICAgbV9k
ZWZlcnJhbERlcHRoLS07CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKQoraW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGlmICghc2hvdWxkQ29s
bGVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb2xsZWN0KCk7CisgICAgaWYg
KGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDID0g
dHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGNvbGxlY3QoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNDUgKzE3NSw0OSBAQCB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZCgpCitBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RD
b2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7
CiAgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CiAgICAg
aWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQo
KSkKLSAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICAgICAgaWYg
KCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4
dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJh
Z2UoKTsKKyAgICAgICAgfQogICAgICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogICAgIH0KICAgICBpZiAoKythbGxvY2F0aW9uQ291bnQg
Pj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCiAgICAgICAgIGFsbG9jYXRp
b25Db3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZSgpCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1
ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1cmUpOworICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWls
dXJlKTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKCkK
K3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxz
ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoY3Jhc2hPbkZhaWx1cmUpOworICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWls
dXJlKTsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbChi
b29sIGNyYXNoT25GYWlsdXJlKQordm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBib29sIGNyYXNoT25G
YWlsdXJlKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNl
KTsKICAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpKTsKLSAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKCk7CisgICAgZG9UZXN0Q29sbGVj
dGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNTRVJUKCFtX21hcmtlZFNw
YWNlLT5pc0l0ZXJhdGluZygpKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qu
b3JpZ2luYWxTaXplKTsKICAgICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKLSAg
ICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICBtX2hlYXAtPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBBbGxvY2F0
aW9uU2NvcGUgYWxsb2NhdGlvblNjb3BlKCptX2hlYXApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjA2NTM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEdDRGVmZXJy
YWxDb250ZXh0OwogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTUxLDggKzE1Miw4IEBAIHB1YmxpYzoKICAgICBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxs
OjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9
Ci0gICAgdm9pZCogYWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZSgpOworICAgIHZv
aWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQqIHRy
eUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOwogICAgIEhlYXAqIGhlYXAo
KSB7IHJldHVybiBtX2hlYXA7IH0KICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0YWtlTGFzdEFj
dGl2ZUJsb2NrKCkKICAgICB7CkBAIC0yMTUsMTUgKzIxNiwxNSBAQCBwcml2YXRlOgogICAgIAog
ICAgIGJvb2wgc2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSBjb25z
dDsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKCk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZSgpOwotICAg
IHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNlKEdDRGVm
ZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoR0NEZWZlcnJh
bENvbnRleHQqLCBib29sIGNyYXNoT25GYWlsdXJlKTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVl
TGlzdCgpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CiAgICAgdm9pZCogdHJ5QWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgdm9pZCogYWxsb2NhdGVJbihNYXJr
ZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJ
Zk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIAogICAgIHZvaWQgc2V0RnJlZUxpc3Qo
Y29uc3QgRnJlZUxpc3QmKTsKICAgICAKQEAgLTI2NCw3ICsyNjUsNyBAQCBpbmxpbmUgcHRyZGlm
Zl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0CiAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
YXJrZWRBbGxvY2F0b3IsIG1fY2VsbFNpemUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoKQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQp
CiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5yZW1haW5pbmc7CiAgICAg
aWYgKHJlbWFpbmluZykgewpAQCAtMjc2LDEzICsyNzcsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeQogICAgIAogICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVl
TGlzdC5oZWFkOwogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiB0cnlB
bGxvY2F0ZVNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGRl
ZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsK
ICAgICByZXR1cm4gaGVhZDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIHVuc2lnbmVk
IHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwogICAgIGlmIChyZW1haW5pbmcpIHsK
QEAgLTI5NCw3ICsyOTUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsCiAgICAgCiAgICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgaWYg
KFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAg
ICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwogICAgIHJldHVybiBoZWFkOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA2
NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzUsMzIgKzIzNSw1OCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpCiAKIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShTdWJzcGFjZSYg
c3Vic3BhY2UsIHNpemVfdCBieXRlcykKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFM
b2coIkFsbG9jYXRpbmcgIiwgYnl0ZXMsICIgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0cmlidXRl
cywgIi5cbiIpOwogICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRv
ckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgcmV0dXJu
IGFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGJ5dGVzKTsKKyAgICByZXR1cm4gYWxsb2NhdGVMYXJn
ZShzdWJzcGFjZSwgbnVsbHB0ciwgYnl0ZXMpOworfQorCit2b2lkKiBNYXJrZWRTcGFjZTo6YWxs
b2NhdGUoU3Vic3BhY2UmIHN1YnNwYWNlLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJB
bGxvY2F0aW5nICIsIGJ5dGVzLCAiIGRlZmVycmVkIGJ5dGVzIGluICIsIHN1YnNwYWNlLmF0dHJp
YnV0ZXMsICIuXG4iKTsKKyAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3Ioc3Vic3BhY2UsIGJ5dGVzKSkgeworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxv
Y2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHN1YnNwYWNlLCBkZWZlcnJhbENvbnRl
eHQsIGJ5dGVzKTsKIH0KIAogdm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlKFN1YnNwYWNl
JiBzdWJzcGFjZSwgc2l6ZV90IGJ5dGVzKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0
YUxvZygiVHJ5LWFsbG9jYXRpbmcgIiwgYnl0ZXMsICIgYnl0ZXMgaW4gIiwgc3Vic3BhY2UuYXR0
cmlidXRlcywgIi5cbiIpOwogICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvcihzdWJzcGFjZSwgYnl0ZXMpKSB7CiAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFs
bG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0g
ICAgcmV0dXJuIHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGJ5dGVzKTsKKyAgICByZXR1cm4g
dHJ5QWxsb2NhdGVMYXJnZShzdWJzcGFjZSwgbnVsbHB0ciwgYnl0ZXMpOworfQorCit2b2lkKiBN
YXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGUoU3Vic3BhY2UmIHN1YnNwYWNlLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKGZhbHNlKQor
ICAgICAgICBkYXRhTG9nKCJUcnktYWxsb2NhdGluZyAiLCBieXRlcywgIiBkZWZlcnJlZCBieXRl
cyBpbiAiLCBzdWJzcGFjZS5hdHRyaWJ1dGVzLCAiLlxuIik7CisgICAgaWYgKE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHN1YnNwYWNlLCBieXRlcykpIHsKKyAgICAg
ICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVM
YXJnZShzdWJzcGFjZSwgZGVmZXJyYWxDb250ZXh0LCBieXRlcyk7CiB9CiAKLXZvaWQqIE1hcmtl
ZFNwYWNlOjphbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiBzdWJzcGFjZSwgc2l6ZV90IHNpemUpCit2
b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIHNpemUpOworICAgIHZvaWQqIHJl
c3VsdCA9IHRyeUFsbG9jYXRlTGFyZ2Uoc3Vic3BhY2UsIGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYgc3Vic3BhY2UsIHNp
emVfdCBzaXplKQordm9pZCogTWFya2VkU3BhY2U6OnRyeUFsbG9jYXRlTGFyZ2UoU3Vic3BhY2Um
IHN1YnNwYWNlLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6
ZSkKIHsKLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICBtX2hl
YXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAg
ICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVTdGVwPihzaXplKTsKICAgICBM
YXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgq
bV9oZWFwLCBzaXplLCBzdWJzcGFjZS5hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDEy
ICsxMTEsMTcgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciogYXV4aWxpYXJ5QWxsb2Nh
dG9yRm9yKHNpemVfdCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShT
dWJzcGFjZSYsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUo
U3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoU3Vic3BhY2UmLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQq
LCBzaXplX3QpOwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90
KTsKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7CisgICAgdm9p
ZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCosIHNp
emVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVBdXhpbGlhcnkoc2l6ZV90KTsKICAgICB2b2lkKiB0
cnlBbGxvY2F0ZUF1eGlsaWFyeShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlQXV4aWxp
YXJ5KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKICAgICAKICAgICBTdWJzcGFjZSYgc3Vi
c3BhY2VGb3JPYmplY3RzV2l0aERlc3RydWN0b3IoKSB7IHJldHVybiBtX2Rlc3RydWN0b3JTcGFj
ZTsgfQogICAgIFN1YnNwYWNlJiBzdWJzcGFjZUZvck9iamVjdHNXaXRob3V0RGVzdHJ1Y3Rvcigp
IHsgcmV0dXJuIG1fbm9ybWFsU3BhY2U7IH0KQEAgLTE5NCw4ICsxOTksOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVt
U2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CiAgICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIHNpemVfdCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIHNpemVfdCk7
CisgICAgdm9pZCogYWxsb2NhdGVMYXJnZShTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKFN1YnNwYWNlJiwgR0NEZWZlcnJh
bENvbnRleHQqLCBzaXplX3QpOwogCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNpemVDbGFz
c0ZvclN0ZXBTaXplKCk7CiAgICAgCkBAIC0yNjMsNiArMjY4LDE2IEBAIGlubGluZSB2b2lkKiBN
YXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRoRGUKICAgICByZXR1cm4gYWxsb2NhdGUobV9kZXN0cnVj
dG9yU3BhY2UsIGJ5dGVzKTsKIH0KIAoraW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0
ZVdpdGhvdXREZXN0cnVjdG9yKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNp
emVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gYWxsb2NhdGUobV9ub3JtYWxTcGFjZSwgZGVmZXJy
YWxDb250ZXh0LCBieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2Nh
dGVXaXRoRGVzdHJ1Y3RvcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXpl
X3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlKG1fZGVzdHJ1Y3RvclNwYWNlLCBkZWZl
cnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxv
Y2F0ZUF1eGlsaWFyeShzaXplX3QgYnl0ZXMpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRlKG1fYXV4
aWxpYXJ5U3BhY2UsIGJ5dGVzKTsKQEAgLTI3Myw2ICsyODgsMTEgQEAgaW5saW5lIHZvaWQqIE1h
cmtlZFNwYWNlOjp0cnlBbGxvY2F0ZUF1eAogICAgIHJldHVybiB0cnlBbGxvY2F0ZShtX2F1eGls
aWFyeVNwYWNlLCBieXRlcyk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6dHJ5QWxs
b2NhdGVBdXhpbGlhcnkoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90
IGJ5dGVzKQoreworICAgIHJldHVybiB0cnlBbGxvY2F0ZShtX2F1eGlsaWFyeVNwYWNlLCBkZWZl
cnJhbENvbnRleHQsIGJ5dGVzKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKICAgICBmb3JFYWNoQWxsb2NhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA1
LDE3ICsxMzA1LDQ0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGVtaXRTdG9yZVN0cnVj
dHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1
Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCk7CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9y
SW5FZGVuKEdQUlJlZyBjZWxsKQorICAgIEp1bXAgYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShH
UFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2g4KEFib3ZlLCBBZGRyZXNz
KGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJl
c2hvbGQpKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpT
Q2VsbCogY2VsbCkKKyAgICBKdW1wIGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoSlNDZWxsKiBj
ZWxsKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgcmV0
dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSwgVHJ1c3RlZEltbTMy
KGJsYWNrVGhyZXNob2xkKSk7CiAgICAgfQogICAgIAorICAgIEp1bXAgYmFycmllckJyYW5jaChH
UFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCisgICAgeworICAgICAgICBsb2FkOChBZGRy
ZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0o
KS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKKyAgICB9CisKKyAgICBKdW1w
IGJhcnJpZXJCcmFuY2goSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICB7Cisg
ICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxs
KSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIHNj
cmF0Y2hHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIsIEFi
c29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQoKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGJhcnJpZXJTdG9yZUxvYWRGZW5jZSgpCisgICAgeworICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmQmFycmllclN0b3JlTG9hZEZlbmNlTm90
TmVlZGVkKCk7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7
CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVl
ZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFk
ZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAg
IH0KKyAgICAKICAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBU
aGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQogICAgIC8v
IGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50
ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCiAgICAgLy8gaGF2ZSB0aGUgZnVu
Y3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3By
aWF0ZSByZWdpc3RlciBhbmQgdGhlbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY1LDE0ICsy
MTY1LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKICAgICB2
bS0+aGVhcC53cml0ZUJhcnJpZXIoY2VsbCk7CiB9CiAKLS8vIE5COiBXZSBkb24ndCBpbmNsdWRl
IHRoZSB2YWx1ZSBhcyBwYXJ0IG9mIHRoZSBiYXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJp
ZXIgZWxpc2lvbgotLy8gcGhhc2UgaW4gdGhlIERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBv
YmplY3QgYmVpbmcgc3RvcmVkIHRvIGhhcyBiZWVuIGJhcnJpZXJlZC4gSXQgCi0vLyB3b3VsZCBi
ZSBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdG8gdHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBz
dG9yZWQgYXMgd2VsbC4KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHZtLT5oZWFwLndyaXRlQmFycmllcihj
ZWxsKTsKKyAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAko
cmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw4ICs0MTAsNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEpTQ2VsbCopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcz
LDggKzY3Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBk
aXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNE
aXJlY3Q7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyQmFzZSk7Ci0KICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVn
VDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOwpAQCAtNjg3LDYgKzY4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJ
bnN0cnVjdGlvbioKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKKwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdl
bik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDggKzY2Niw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQgdmFs
dWVWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBk
aXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNE
aXJlY3Q7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCB2YWx1ZVZSZWcsIFNob3Vs
ZEZpbHRlckJhc2UpOwotCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3Ro
IHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50
ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQg
aW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAg
Ly8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2Ft
ZSBkaXN0YW5jZSBmcm9tIHRoaXMuCkBAIC02ODQsNiArNjgyLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAorICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisKICAg
ICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCkBAIC0xMTgwLDggKzExODAsOCBAQCB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVn
aXN0ZXIpOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0ganVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4ocmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5j
b25kaXRpb25hbFdyaXRlQmFycmllciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gocmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCByZWdUMCk7CiAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKQEAgLTEyMTgsOCAr
MTIxOCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAKLSAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihyZWdUMSk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCByZWdUMSk7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaChyZWdU
MSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAK
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlKQpAQCAtMTI0NiwxMiArMTI0Niw5IEBAIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcikKIHsKLSAgICBpZiAoIW93bmVyLT5jZWxsQ29udGFpbmVyKCkuaXNNYXJrZWQob3du
ZXIpKSB7Ci0gICAgICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGp1bXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKG93bmVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7Ci0gICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaChvd25lciwgcmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVy
KTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lz
dGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCkBAIC0xMzkwLDggKzEzODcsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVy
KSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVyYXRpb25VbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxh
c3QoKS5mcm9tLCBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKTsKKyAgICAgICAg
QVNTRVJUKG1fY2FsbHMubGFzdCgpLnRvID09IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNEaXJlY3Qg
PSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNjUzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
d29ya2luZyBjb3B5KQpAQCAtODkxLDYgKzg5MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxs
QW5kSW5kZXhpbmdUeXBlLCAKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRl
bihjZWxsLCBzbG93UGF0aCkKKyAgICBtZW1mZW5jZQogICAgIGJiYSBKU0NlbGw6Om1fY2VsbFN0
YXRlW2NlbGxdLCBCbGFja1RocmVzaG9sZCwgLmRvbmUKICAgICBzbG93UGF0aCgpCiAuZG9uZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIw
NjUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtMTUyNyw3ICsxNTI3LDEyIEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAg
IHdoZW4gImxlYXAiCiAgICAgICAgICAgICAkYXNtLnB1dHMgImxlYSN7eDg2U3VmZml4KDpwdHIp
fSAje29yZGVyT3BlcmFuZHMob3BlcmFuZHNbMF0ueDg2QWRkcmVzc09wZXJhbmQoOnB0ciksIG9w
ZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cikpfSIKICAgICAgICAgd2hlbiAibWVtZmVuY2UiCi0g
ICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKKyAgICAgICAgICAgIHNwID0gUmVnaXN0ZXJJ
RC5uZXcobmlsLCAic3AiKQorICAgICAgICAgICAgaWYgaXNJbnRlbFN5bnRheAorICAgICAgICAg
ICAgICAgICRhc20ucHV0cyAibWZlbmNlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICRhc20ucHV0cyAibG9jazsgb3JsICQwLCAoI3tzcC54ODZPcGVyYW5kKDpwdHIpfSkiCisg
ICAgICAgICAgICBlbmQKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAg
ICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEJ1dHRlcmZseSogY3Jl
YXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb24KICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCi1K
U0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitKU0FycmF5KiBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7
CiAgICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTc2LDcgKzc2LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZAogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5
cGUpKTsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGlt
YWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAg
ICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0
aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmhl
YXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkoZGVmZXJyYWxDb250ZXh0LCBudWxscHRyLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNl
KHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIEpTQXJyYXkq
IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZVdpdGhCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICByZXR1cm4gY3JlYXRlV2l0aEJ1dHRl
cmZseSh2bSwgZGVmZXJyYWxDb250ZXh0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiB9CiAKIHZv
aWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRh
YmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMsMTcgQEAgcHJvdGVjdGVkOgogCiBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGggPSAwKTsKLSAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlV2l0aEJ1dHRlcmZseShW
TSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOworICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGVX
aXRoQnV0dGVyZmx5KFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJm
bHkqKTsKIAogICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBj
b25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCiAgICAgLy8gY29udGVudHMgYXJl
IGtub3duIGF0IHRpbWUgb2YgY3JlYXRpb24uIENsaWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVz
dDoKICAgICAvLyAgIC0gbnVsbC1jaGVjayB0aGUgcmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBt
ZW1vcnksIG9yIG90aGVyd2lzZSB1bmFibGUgdG8gYWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAg
IC0gY2FsbCAnaW5pdGlhbGl6ZUluZGV4JyBmb3IgYWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2Us
IGZvciAwIDw9IGkgPCBpbml0aWFsTGVuZ3RoLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQXJyYXkq
IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCosIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOworICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVh
dGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgbnVsbHB0ciwgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKKyAgICB9CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CiAKQEAgLTIzMCwxMiArMjM0LDEyIEBAIGlubGluZSBKU0FycmF5
KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCAKICAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICByZXR1cm4gY3Jl
YXRlV2l0aEJ1dHRlcmZseSh2bSwgbnVsbHB0ciwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogfQog
Ci1pbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK2lubGluZSBKU0FycmF5
KiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVy
Zmx5KQogewotICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheT4odm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KHZt
LmhlYXAsIGRlZmVycmFsQ29udGV4dCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBhcnJheTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDY1
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNp
dG9yOworY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBJ
ZGVudGlmaWVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CkBAIC01Miw2ICs1Myw5IEBAIGNs
YXNzIFN0cnVjdHVyZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChI
ZWFwJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNp
emVfdCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwg
R0NEZWZlcnJhbENvbnRleHQqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRl
Q2VsbChIZWFwJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworCiAjZGVmaW5lIERFQ0xB
UkVfRVhQT1JUX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgcHJvdGVjdGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IDo6SlNDOjpDbGFzc0luZm8gc19pbmZvOyAgICAgICAgICAgICBcCkBAIC02OSw2ICs3Myw4IEBA
IGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtl
ZEJsb2NrOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0ZUNl
bGwoSGVhcCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2b2lkKiBhbGxvY2F0
ZUNlbGwoSGVhcCYsIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZv
aWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmLCBHQ0RlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDI1IEBAIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwKQogICAgIHJldHVybiBhbGxv
Y2F0ZUNlbGw8VD4oaGVhcCwgc2l6ZW9mKFQpKTsKIH0KICAgICAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+Cit2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9m
KFQpKTsKKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXAuYWxs
b2NhdGVPYmplY3RPZlR5cGU8VD4oZGVmZXJyYWxDb250ZXh0LCBzaXplKSk7CisjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCisgICAgQVNTRVJUKCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2Jq
ZWN0KCkpOworICAgIGhlYXAudm0oKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5m
bygpKTsKKyNlbmRpZgorICAgIHJlc3VsdC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIGFsbG9jYXRlQ2Vs
bChIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQoreworICAg
IHJldHVybiBhbGxvY2F0ZUNlbGw8VD4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplb2YoVCkp
OworfQorICAgIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFR5cGVJbmZvOjppc09iamVjdChtX3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsNyAr
NDE3LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogQ2xpZW50cyBvZiB0aGlzIG1ldGhvZCBt
YXkgY2FsbCBpdCBtb3JlIHRoYW4gb25jZSBmb3IgYW55IGluZGV4LCBhbmQgdGhpcyBpcyBzdXBw
b3NlZAogICAgIC8vIHRvIHdvcmsuCi0gICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFs
dWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKSB7CkBAIC00NjcsNiArNDY3LDU0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
ICAgICAgICAgCisgICAgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYpCisgICAgeworICAgICAgICBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFy
cmllcihpLCB2LCBpbmRleGluZ1R5cGUoKSk7CisgICAgfQorCisgICAgLy8gVGhpcyB2ZXJzaW9u
IG9mIGluaXRpYWxpemVJbmRleCBpcyBmb3IgY2FzZXMgd2hlcmUgeW91IGtub3cgdGhhdCB5b3Ug
d2lsbCBub3QgbmVlZCBhbnkKKyAgICAvLyBiYXJyaWVycy4gVGhpcyBpbXBsaWVzIG5vdCBoYXZp
bmcgYW55IGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBp
bml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcih1bnNpZ25lZCBpLCBKU1ZhbHVlIHYsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUpCisgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewor
ICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogeworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCh2LmlzSW50MzIoKSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
ICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAg
QVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodi5pc051bWJlcigpKTsKKyAgICAgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IHYuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZh
bHVlID09IHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
QVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKICAgICBib29sIGhhc1NwYXJz
ZU1hcCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC02NDEs
NiArNjg5LDcgQEAgcHVibGljOgogICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3duIHByb3BlcnR5
IG9mZnNldHMuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBj
b25zdCB7IHJldHVybiBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5nZXQoKTsgfQogICAgIHZv
aWQgcHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZhbHVl
KSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFsdWUpOyB9Cisg
ICAgdm9pZCBwdXREaXJlY3RXaXRob3V0QmFycmllcihQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpT
VmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0V2l0aG91dFdyaXRl
QmFycmllcih2YWx1ZSk7IH0KICAgICB2b2lkIHB1dERpcmVjdFVuZGVmaW5lZChQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0VW5kZWZpbmVkKCk7
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0TmF0aXZlSW50cmluc2lj
R2V0dGVyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyLCBOYXRpdmVGdW5jdGlvbiwg
SW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDEzICsz
NjUsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVk
KFZNJiB2bSwgSlNTdHJpbmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVTdWJzdHJpbmdPZlJl
c29sdmVkKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgSlNTdHJp
bmcqIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAg
ICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1JvcGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmcodm0pOworICAgICAgICBKU1JvcGVT
dHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmlu
Zz4odm0uaGVhcCwgZGVmZXJyYWxDb250ZXh0KSkgSlNSb3BlU3RyaW5nKHZtKTsKICAgICAgICAg
bmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvblN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGJhc2UsIG9m
ZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZChW
TSYgdm0sIEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBudWxs
cHRyLCBiYXNlLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgfQorCiAgICAgdm9pZCB2aXNpdEZpYmVy
cyhTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpYmVycygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1JvcGVTdHJpbmcsIHUpOyB9CkBAIC00OTEsNiAr
NDk2LDcgQEAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlIHZhbHVlKQogICAgIHJl
dHVybiBqc0Nhc3Q8SlNTdHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKKy8vIFRoaXMgTVVT
VCBOT1QgR0MuCiBpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qIHZtKQogewogICAg
IHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CkBAIC01ODEsNyArNTg3LDcg
QEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYgdm0sIEV4ZQogICAgIHJldHVybiBK
U1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgZXhlYywgcywgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1p
bmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYgdm0sIEpTU3RyaW5nKiBz
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNT
dWJzdHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIEFTU0VSVChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMtPmxlbmd0aCgpKSk7
CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkp
KTsKQEAgLTU5MCw3ICs1OTYsMTIgQEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVz
b2x2ZWQoVgogICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAg
ICAgaWYgKCFvZmZzZXQgJiYgbGVuZ3RoID09IHMtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4g
czsKLSAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZt
LCBzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vi
c3RyaW5nT2ZSZXNvbHZlZCh2bSwgZGVmZXJyYWxDb250ZXh0LCBzLCBvZmZzZXQsIGxlbmd0aCk7
Cit9CisKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgSlNT
dHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVy
biBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIG51bGxwdHIsIHMsIG9mZnNldCwgbGVuZ3RoKTsK
IH0KIAogaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDYgKzE4MSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9v
bCwgdGVzdFRoZUZUTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVy
Ym9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihi
b29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAwMDAwLCBOb3JtYWwsIG51
bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMjA2NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMjkgKzM2LDMxIEBAIEpTQXJyYXkqIGNyZWF0ZUVtcHR5UmVnRXhwTWF0Y2hlc0FycmF5
KEoKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgaGFuZGxlIGFycmF5IGFsbG9jYXRpb24gZXJy
b3JzIGdyYWNlZnVsbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTE0NAogICAgIAorICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4
dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmlu
Z0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwg
cmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gSlNBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBq
c0VtcHR5U3RyaW5nKCZ2bSkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91
dEJhcnJpZXIoMCwganNFbXB0eVN0cmluZygmdm0pKTsKICAgICAgICAgCiAgICAgICAgIGlmICh1
bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQot
ICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmll
cihpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFy
cmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFs
T2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0
ZXJucygpICsgMSk7CisgICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4
cE1hdGNoZXNBcnJheSh2bSwgJmRlZmVycmFsQ29udGV4dCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBN
YXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKICAgICAgICAgCi0gICAgICAgIGFycmF5LT5p
bml0aWFsaXplSW5kZXgodm0sIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29udGln
dW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigwLCBq
c0VtcHR5U3RyaW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNV
bmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgYXJyYXkt
PmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0
aENvbnRpZ3VvdXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXJyYXktPnB1dERpcmVjdCh2
bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1iZXIoLTEpKTsK
LSAgICBhcnJheS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5
T2Zmc2V0LCBpbnB1dCk7CisgICAgYXJyYXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJlZ0V4
cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7CisgICAgYXJy
YXktPnB1dERpcmVjdFdpdGhvdXRCYXJyaWVyKFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVy
dHlPZmZzZXQsIGlucHV0KTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZp
c2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCisjaW5jbHVkZSAiR0NEZWZlcnJhbENv
bnRleHRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzEsMTMgKzMyLDEzIEBAIG5h
bWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZXNB
cnJheUluZGV4UHJvcGVydHlPZmZzZXQgPSAxMDA7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZz
ZXQgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCA9IDEwMTsKIAotQUxXQVlT
X0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitB
TFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVz
QXJyYXkoVk0mIHZtLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZvaWQqIHRl
bXAgPSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG51bGxwdHIsIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQqIHRlbXAgPSB2bS5oZWFw
LnRyeUFsbG9jYXRlQXV4aWxpYXJ5KGRlZmVycmFsQ29udGV4dCwgbnVsbHB0ciwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgaWYgKCF0ZW1wKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKQEAg
LTQ3LDcgKzQ4LDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYQog
ICAgIGZvciAodW5zaWduZWQgaSA9IGluaXRpYWxMZW5ndGg7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAKLSAg
ICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlV2l0aEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0dGVyZmx5KHZtLCBkZWZl
cnJhbENvbnRleHQsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCkBAIC03Niw0NyArNzcsNDQgQEAgQUxX
QVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgIAogICAgIHVuc2lnbmVk
IG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpOwogICAgIAorICAgIEdD
RGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKKyAgICAKICAgICBpZiAo
VU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAgIGFy
cmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgbnVtU3VicGF0dGVybnMgKyAxKTsKKyAgICAg
ICAgYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCAmZGVmZXJyYWxD
b250ZXh0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1T
dWJwYXR0ZXJucyArIDEpOwogICAgICAgICAKICAgICAgICAgc2V0UHJvcGVydGllcygpOwogICAg
ICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBh
dHRlcm5zOyArK2kpCi0gICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBq
c1VuZGVmaW5lZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyB0aGUgb2JqZWN0IGlzIHNh
ZmUgdG8gc2NhbiBieSBHQy4KLSAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5k
ZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwg
cmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4V2l0aG91dEJhcnJpZXIoMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCAmZGVmZXJyYWxD
b250ZXh0LCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7
CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRl
cm5zOyArK2kpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIg
KiBpXTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgICAgICBpZiAoc3RhcnQg
Pj0gMCkKLSAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1Jv
cGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3Vi
cGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgdmFs
dWUgPSBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJh
bENvbnRleHQsIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0
YXJ0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIo
aSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyYXkgPSB0cnlD
cmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJl
Z0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBudW1TdWJwYXR0ZXJucyArIDEpOworICAgICAg
ICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sICZk
ZWZlcnJhbENvbnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJl
KCksIG51bVN1YnBhdHRlcm5zICsgMSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsK
ICAgICAgICAgCiAgICAgICAgIHNldFByb3BlcnRpZXMoKTsKICAgICAgICAgCi0gICAgICAgIGFy
cmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRp
Z3VvdXMpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1T
dWJwYXR0ZXJuczsgKytpKQotICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwg
aSwganNVbmRlZmluZWQoKSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgIAogICAgICAg
ICAvLyBOb3cgdGhlIG9iamVjdCBpcyBzYWZlIHRvIHNjYW4gYnkgR0MuCiAKLSAgICAgICAgYXJy
YXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1
dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSwgQXJyYXlXaXRoQ29u
dGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcigw
LCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sICZkZWZlcnJhbENvbnRleHQsIGlucHV0LCByZXN1
bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3Vz
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0
dGVybnM7ICsraSkgewogICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNb
MiAqIGldOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgICAgIGlmIChzdGFy
dCA+PSAwKQotICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpT
Um9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBz
dWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3Vz
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5n
T2ZSZXNvbHZlZCh2bSwgJmRlZmVycmFsQ29udGV4dCwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJu
UmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGFycmF5LT5pbml0aWFs
aXplSW5kZXhXaXRob3V0QmFycmllcihpLCB2YWx1ZSwgQXJyYXlXaXRoQ29udGlndW91cyk7CiAg
ICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gYXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDY1MzkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE2LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgVGhlIHdyaXRlIGJhcnJpZXIgc2hvdWxkIGJlIGRvd24gd2l0aCBUU08KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjMxNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
Y2xlYXJSYW5nZSgpLCB3aGljaCBxdWlja2x5IGNsZWFycyBhIHJhbmdlIG9mIGJpdHMuIFRoaXMg
dHVybmVkIG91dCB0byBiZSB1c2VmdWwgZm9yCisgICAgICAgIGEgREZHIG9wdGltaXphdGlvbiBw
YXNzLgorCisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpG
YXN0Qml0VmVjdG9yOjpjbGVhclJhbmdlKToKKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5o
OgorCiAyMDE2LTA5LTI4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIENvcnJlY3QgJ3NhZmVDYXN0JyBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dU
Ri93dGYvRmFzdEJpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFz
dEJpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDIwNjUzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1MywyNCBAQCB2b2lkIEZhc3RC
aXRWZWN0b3JXb3JkT3duZXI6OnJlc2l6ZVNsb3coCiAgICAgbV93b3JkcyA9IG5ld0FycmF5Owog
fQogCit2b2lkIEZhc3RCaXRWZWN0b3I6OmNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3Qg
ZW5kKQoreworICAgIGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKQorICAgICAgICAgICAgYXQoaSkgPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgZW5kQmVnaW5TbG9wID0gKGJl
Z2luICsgMzEpICYgfjMxOworICAgIHNpemVfdCBiZWdpbkVuZFNsb3AgPSBlbmQgJiB+MzE7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kQmVnaW5TbG9wOyArK2kpCisg
ICAgICAgIGF0KGkpID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luRW5kU2xvcDsg
aSA8IGVuZDsgKytpKQorICAgICAgICBhdChpKSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkg
PSBlbmRCZWdpblNsb3AgLyAzMjsgaSA8IGJlZ2luRW5kU2xvcCAvIDMyOyArK2kpCisgICAgICAg
IG1fd29yZHMud29yZChpKSA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRmFzdEJpdFZlY3Rvci5oCShyZXZpc2lvbiAyMDY1MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0Qml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQorICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5k
KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0
b3IgY2hhbmdlZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcldvcmRzPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>