<?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>111905</bug_id>
          
          <creation_ts>2013-03-08 17:19:31 -0800</creation_ts>
          <short_desc>[CA] Animations of CSS filters don&apos;t work correctly</short_desc>
          <delta_ts>2013-03-12 10:57:54 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dino</cc>
    
    <cc>krit</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>851639</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 17:19:31 -0800</bug_when>
    <thetext>Transitioning filters to/from filter: none should show a nice smooth progression from no filter to the applied filter. It doesn&apos;t; it either jumps, or animates jankily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851640</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-03-08 17:20:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/13383975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851683</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-03-08 19:17:31 -0800</bug_when>
    <thetext>What happens with a SVG Filter reference? Do we just snap to another filter after the half of the time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851701</commentid>
    <comment_count>3</comment_count>
      <attachid>192331</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 20:42:11 -0800</bug_when>
    <thetext>Created attachment 192331
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851703</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 20:57:46 -0800</bug_when>
    <thetext>We&apos;re adding filters to layers OK:
contents (surface 8 [200 200] BGRA8888))
                                                          (filters (array
                                                            (filter colorMonochrome
                                                              (inputs (array
                                                                (inputAmount (vector 0.999753058)))))))
                                                          (animations (array
                                                            (basic-animation
                                                              (timing
                                                                (beginTime 2488.306979)
                                                                (duration 1.000000)
                                                                (fillMode forwards)
                                                                (repeatCount 1.000000))
                                                              (timingFunction (vector 0.25 0.1000000015 0.25 1))
                                                              (removedOnCompletion false)
                                                              (keyPath filters.filter_0.inputIntensity)
                                                              (from (vector 1))
                                                              (to (vector 0)

but I think the key path is wrong:  filters.filter_0.inputIntensity)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851704</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 21:07:20 -0800</bug_when>
    <thetext>I think the keyPath should be [filterType]-[index]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851705</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 21:27:12 -0800</bug_when>
    <thetext>The filter properties returned by PlatformCAAnimation::animatedFilterPropertyName() are also wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851717</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-03-08 22:34:13 -0800</bug_when>
    <thetext>I screwed up when we moved to CAFilters and forgot to change PlatformCAAnimation stuff. Simon is fixing this right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851728</commentid>
    <comment_count>8</comment_count>
      <attachid>192337</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-08 23:11:41 -0800</bug_when>
    <thetext>Created attachment 192337
More complete testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851800</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-09 11:22:47 -0800</bug_when>
    <thetext>The sepia values for CI filters seem way off, and the matrix we&apos;re using doesn&apos;t seem to correspond to https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEquivalent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851802</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-09 11:25:57 -0800</bug_when>
    <thetext>CI invert seems broken too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851803</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-09 11:30:17 -0800</bug_when>
    <thetext>CI opacity animations were also broken (need to use a CIVector).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851805</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-09 11:44:07 -0800</bug_when>
    <thetext>And I think we&apos;ll have to do brightness in CI as a color matrix. CI does brightness in color adjust by just adding/subtracting the RGB values, which doesn&apos;t match the slope/intersect stuff that the spec says.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851874</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-03-09 21:21:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; And I think we&apos;ll have to do brightness in CI as a color matrix. CI does brightness in color adjust by just adding/subtracting the RGB values, which doesn&apos;t match the slope/intersect stuff that the spec says.

It sounds a bit like &quot;how could that ever work&quot; :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852057</commentid>
    <comment_count>14</comment_count>
      <attachid>192405</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-10 23:10:12 -0700</bug_when>
    <thetext>Created attachment 192405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852375</commentid>
    <comment_count>15</comment_count>
      <attachid>192479</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-11 08:57:05 -0700</bug_when>
    <thetext>Created attachment 192479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852428</commentid>
    <comment_count>16</comment_count>
      <attachid>192479</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-11 10:13:43 -0700</bug_when>
    <thetext>Comment on attachment 192479
Patch

Attachment 192479 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17121240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852466</commentid>
    <comment_count>17</comment_count>
      <attachid>192506</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-11 10:55:05 -0700</bug_when>
    <thetext>Created attachment 192506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852715</commentid>
    <comment_count>18</comment_count>
      <attachid>192506</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-03-11 14:12:23 -0700</bug_when>
    <thetext>Comment on attachment 192506
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm:387
&gt; +    NSLog(@&quot;Adding animation %@ for key %@&quot;, propertyAnimation, (NSString*)key);

Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853619</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-12 10:57:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/145472 and followups</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>192331</attachid>
            <date>2013-03-08 20:42:11 -0800</date>
            <delta_ts>2013-03-08 20:42:11 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>filter-transitions.html</filename>
            <type>text/html</type>
            <size>2637</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KPGhlYWQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
IG1lZGlhPSJzY3JlZW4iPgogICAgICAgIHNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGltZyB7CiAgICAgICAgICAg
IGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICAgIGhl
aWdodDogMjAwcHg7CiAgICAgICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICAgICAgLXdlYmtp
dC10cmFuc2l0aW9uOiAtd2Via2l0LWZpbHRlciAxczsKICAgICAgICB9CiAgICAgICAgCiAgICAg
ICAgaW1nOmhvdmVyIHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IG5vbmUgIWltcG9ydGFu
dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaW1nLmdyYXlzY2FsZSB7CiAgICAgICAgICAg
IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7CiAgICAgICAgfQoKICAgICAgICBpbWcu
c2VwaWEgewogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogc2VwaWEoMSk7CiAgICAgICAgfQog
ICAgICAgIAogICAgICAgIGltZy5zYXR1cmF0ZSB7CiAgICAgICAgICAgIC13ZWJraXQtZmlsdGVy
OiBzYXR1cmF0ZSgwLjUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbWcuaHVlLXJvdGF0
ZSB7CiAgICAgICAgICAgIC13ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKDE4MGRlZyk7CiAgICAg
ICAgfQoKICAgICAgICBpbWcuaW52ZXJ0IHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGlu
dmVydCgpOwogICAgICAgIH0KCiAgICAgICAgaW1nLm9wYWNpdHkgewogICAgICAgICAgICAtd2Vi
a2l0LWZpbHRlcjogb3BhY2l0eSgwLjEpOwogICAgICAgIH0KCiAgICAgICAgaW1nLmJyaWdodG5l
c3MgewogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogYnJpZ2h0bmVzcygwLjIpOwogICAgICAg
IH0KCiAgICAgICAgaW1nLmJsdXIgewogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogYmx1cigx
MHB4KTsKICAgICAgICB9CgogICAgICAgIGltZy5kcm9wLXNoYWRvdyB7CiAgICAgICAgICAgIC13
ZWJraXQtZmlsdGVyOiBkcm9wLXNoYWRvdygxMHB4IDEwcHggMTBweCBibGFjayk7CiAgICAgICAg
fQoKPC9zdHlsZT4KICAgIAo8L2hlYWQ+Cjxib2R5PgoKICAgIDxwPkZpbHRlcnMgc2hvdWxkIGFu
aW1hdGUgb3V0IG9uIGhvdmVyPC9wPgogICAgPHNlY3Rpb24+CiAgICAgICAgPGgyPkdyYXlzY2Fs
ZTwvaDI+CiAgICAgICAgPGltZyBjbGFzcz0iZ3JheXNjYWxlIiBzcmM9Imh0dHA6Ly9mYXJtOC5z
dGF0aWNmbGlja3IuY29tLzcxNDQvNjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwv
c2VjdGlvbj4KCiAgICA8c2VjdGlvbj4KICAgICAgICA8aDI+U2VwaWE8L2gyPgogICAgICAgIDxp
bWcgY2xhc3M9InNlcGlhIiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNmbGlja3IuY29tLzcxNDQv
NjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlvbj4KCiAgICA8c2VjdGlv
bj4KICAgICAgICA8aDI+U2F0dXJhdGU8L2gyPgogICAgICAgIDxpbWcgY2xhc3M9InNhdHVyYXRl
IiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNmbGlja3IuY29tLzcxNDQvNjQ4MTE2NzAyM182MWMw
MTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlvbj4KCiAgICA8c2VjdGlvbj4KICAgICAgICA8aDI+
SHVlIFJvdGF0ZTwvaDI+CiAgICAgICAgPGltZyBjbGFzcz0iaHVlLXJvdGF0ZSIgc3JjPSJodHRw
Oi8vZmFybTguc3RhdGljZmxpY2tyLmNvbS83MTQ0LzY0ODExNjcwMjNfNjFjMDE1NzNlOV96Lmpw
ZyI+CiAgICA8L3NlY3Rpb24+CgogICAgPHNlY3Rpb24+CiAgICAgICAgPGgyPkludmVydDwvaDI+
CiAgICAgICAgPGltZyBjbGFzcz0iaW52ZXJ0IiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNmbGlj
a3IuY29tLzcxNDQvNjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlvbj4K
CiAgICA8c2VjdGlvbj4KICAgICAgICA8aDI+T3BhY2l0eTwvaDI+CiAgICAgICAgPGltZyBjbGFz
cz0ib3BhY2l0eSIgc3JjPSJodHRwOi8vZmFybTguc3RhdGljZmxpY2tyLmNvbS83MTQ0LzY0ODEx
NjcwMjNfNjFjMDE1NzNlOV96LmpwZyI+CiAgICA8L3NlY3Rpb24+CgogICAgPHNlY3Rpb24+CiAg
ICAgICAgPGgyPkJyaWdodG5lc3M8L2gyPgogICAgICAgIDxpbWcgY2xhc3M9ImJyaWdodG5lc3Mi
IHNyYz0iaHR0cDovL2Zhcm04LnN0YXRpY2ZsaWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAx
NTczZTlfei5qcGciPgogICAgPC9zZWN0aW9uPgoKICAgIDxzZWN0aW9uPgogICAgICAgIDxoMj5C
bHVyPC9oMj4KICAgICAgICA8aW1nIGNsYXNzPSJibHVyIiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0
aWNmbGlja3IuY29tLzcxNDQvNjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2Vj
dGlvbj4KCiAgICA8c2VjdGlvbj4KICAgICAgICA8aDI+RHJvcCBTaGFkb3c8L2gyPgogICAgICAg
IDxpbWcgY2xhc3M9ImRyb3Atc2hhZG93IiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNmbGlja3Iu
Y29tLzcxNDQvNjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlvbj4KCgo8
L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>192337</attachid>
            <date>2013-03-08 23:11:41 -0800</date>
            <delta_ts>2013-03-08 23:11:41 -0800</delta_ts>
            <desc>More complete testcase</desc>
            <filename>filter-transition.html</filename>
            <type>text/html</type>
            <size>2869</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KPGhlYWQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
IG1lZGlhPSJzY3JlZW4iPgogICAgICAgIHNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGltZyB7CiAgICAgICAgICAg
IGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICAgIGhl
aWdodDogMjAwcHg7CiAgICAgICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICAgICAgLXdlYmtp
dC10cmFuc2l0aW9uOiAtd2Via2l0LWZpbHRlciAyczsKICAgICAgICB9CiAgICAgICAgCiAgICAg
ICAgaW1nOmhvdmVyIHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IG5vbmUgIWltcG9ydGFu
dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaW1nLmdyYXlzY2FsZSB7CiAgICAgICAgICAg
IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7CiAgICAgICAgfQoKICAgICAgICBpbWcu
c2VwaWEgewogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogc2VwaWEoMSk7CiAgICAgICAgfQog
ICAgICAgIAogICAgICAgIGltZy5zYXR1cmF0ZSB7CiAgICAgICAgICAgIC13ZWJraXQtZmlsdGVy
OiBzYXR1cmF0ZSgwLjEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbWcuaHVlLXJvdGF0
ZSB7CiAgICAgICAgICAgIC13ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKDE4MGRlZyk7CiAgICAg
ICAgfQoKICAgICAgICBpbWcuaW52ZXJ0IHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGlu
dmVydCgpOwogICAgICAgIH0KCiAgICAgICAgaW1nLm9wYWNpdHkgewogICAgICAgICAgICAtd2Vi
a2l0LWZpbHRlcjogb3BhY2l0eSgwLjEpOwogICAgICAgIH0KCiAgICAgICAgaW1nLmJyaWdodG5l
c3MgewogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogYnJpZ2h0bmVzcygwLjIpOwogICAgICAg
IH0KCiAgICAgICAgaW1nLmNvbnRyYXN0IHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGNv
bnRyYXN0KDAuNSk7CiAgICAgICAgfQoKICAgICAgICBpbWcuYmx1ciB7CiAgICAgICAgICAgIC13
ZWJraXQtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgICAgIH0KCiAgICAgICAgaW1nLmRyb3Atc2hh
ZG93IHsKICAgICAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDEwcHggMTBweCAx
MHB4IGJsYWNrKTsKICAgICAgICB9Cjwvc3R5bGU+CiAgICAKPC9oZWFkPgo8Ym9keT4KCiAgICA8
cD5GaWx0ZXJzIHNob3VsZCBhbmltYXRlIG91dCBvbiBob3ZlcjwvcD4KCiAgICA8c2VjdGlvbj4K
ICAgICAgICA8aDI+R3JheXNjYWxlPC9oMj4KICAgICAgICA8aW1nIGNsYXNzPSJncmF5c2NhbGUi
IHNyYz0iaHR0cDovL2Zhcm04LnN0YXRpY2ZsaWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAx
NTczZTlfei5qcGciPgogICAgPC9zZWN0aW9uPgoKICAgIDxzZWN0aW9uPgogICAgICAgIDxoMj5T
ZXBpYTwvaDI+CiAgICAgICAgPGltZyBjbGFzcz0ic2VwaWEiIHNyYz0iaHR0cDovL2Zhcm04LnN0
YXRpY2ZsaWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAxNTczZTlfei5qcGciPgogICAgPC9z
ZWN0aW9uPgoKICAgIDxzZWN0aW9uPgogICAgICAgIDxoMj5TYXR1cmF0ZTwvaDI+CiAgICAgICAg
PGltZyBjbGFzcz0ic2F0dXJhdGUiIHNyYz0iaHR0cDovL2Zhcm04LnN0YXRpY2ZsaWNrci5jb20v
NzE0NC82NDgxMTY3MDIzXzYxYzAxNTczZTlfei5qcGciPgogICAgPC9zZWN0aW9uPgoKICAgIDxz
ZWN0aW9uPgogICAgICAgIDxoMj5IdWUgUm90YXRlPC9oMj4KICAgICAgICA8aW1nIGNsYXNzPSJo
dWUtcm90YXRlIiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNmbGlja3IuY29tLzcxNDQvNjQ4MTE2
NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlvbj4KCiAgICA8c2VjdGlvbj4KICAg
ICAgICA8aDI+SW52ZXJ0PC9oMj4KICAgICAgICA8aW1nIGNsYXNzPSJpbnZlcnQiIHNyYz0iaHR0
cDovL2Zhcm04LnN0YXRpY2ZsaWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAxNTczZTlfei5q
cGciPgogICAgPC9zZWN0aW9uPgoKICAgIDxzZWN0aW9uPgogICAgICAgIDxoMj5PcGFjaXR5PC9o
Mj4KICAgICAgICA8aW1nIGNsYXNzPSJvcGFjaXR5IiBzcmM9Imh0dHA6Ly9mYXJtOC5zdGF0aWNm
bGlja3IuY29tLzcxNDQvNjQ4MTE2NzAyM182MWMwMTU3M2U5X3ouanBnIj4KICAgIDwvc2VjdGlv
bj4KCiAgICA8c2VjdGlvbj4KICAgICAgICA8aDI+QnJpZ2h0bmVzczwvaDI+CiAgICAgICAgPGlt
ZyBjbGFzcz0iYnJpZ2h0bmVzcyIgc3JjPSJodHRwOi8vZmFybTguc3RhdGljZmxpY2tyLmNvbS83
MTQ0LzY0ODExNjcwMjNfNjFjMDE1NzNlOV96LmpwZyI+CiAgICA8L3NlY3Rpb24+CgogICAgPHNl
Y3Rpb24+CiAgICAgICAgPGgyPkNvbnRyYXN0PC9oMj4KICAgICAgICA8aW1nIGNsYXNzPSJjb250
cmFzdCIgc3JjPSJodHRwOi8vZmFybTguc3RhdGljZmxpY2tyLmNvbS83MTQ0LzY0ODExNjcwMjNf
NjFjMDE1NzNlOV96LmpwZyI+CiAgICA8L3NlY3Rpb24+CgogICAgPHNlY3Rpb24+CiAgICAgICAg
PGgyPkJsdXI8L2gyPgogICAgICAgIDxpbWcgY2xhc3M9ImJsdXIiIHNyYz0iaHR0cDovL2Zhcm04
LnN0YXRpY2ZsaWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAxNTczZTlfei5qcGciPgogICAg
PC9zZWN0aW9uPgoKICAgIDxzZWN0aW9uPgogICAgICAgIDxoMj5Ecm9wIFNoYWRvdzwvaDI+CiAg
ICAgICAgPGltZyBjbGFzcz0iZHJvcC1zaGFkb3ciIHNyYz0iaHR0cDovL2Zhcm04LnN0YXRpY2Zs
aWNrci5jb20vNzE0NC82NDgxMTY3MDIzXzYxYzAxNTczZTlfei5qcGciPgogICAgPC9zZWN0aW9u
PgoKPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192405</attachid>
            <date>2013-03-10 23:10:12 -0700</date>
            <delta_ts>2013-03-11 08:57:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111905-20130310230611.patch</filename>
            <type>text/plain</type>
            <size>83270</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFlNWRlMzBjZTAxZmUy
MjU4ZThhMjU3YTVjMGNmNDJhYjU5NzBkMC4uZjlhOTc3MzAxMzU1MzYyOWY0NTdiZWZmODQyMTEz
YzJjYzRiZWQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAzLTEwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtDQV0gQW5pbWF0
aW9ucyBvZiBDU1MgZmlsdGVycyBkb24ndCB3b3JrIGNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExOTA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHZhcmlvdXMgaXNzdWVzIHdpdGgg
dHJhbnNpdGlvbnMgb2YgY29tcG9zaXRlZCBmaWx0ZXJzIG9uIE1hYywKKyAgICAgICAgbW9zdCBv
ZiB3aGljaCBzdGVtbWVkIGZyb20gdGhlIGNvbnZlcnNpb24gdG8gdXNlIENBRmlsdGVyLgorICAg
ICAgICAKKyAgICAgICAgUHV0IHRoZSBNYWMgQ0EgZmlsdGVyLXJlbGF0ZWQgY29kZSBpbnRvIGEg
bmV3IGZpbGUsIFBsYXRmb3JtQ0FGaWx0ZXJzLAorICAgICAgICB0byBncm91cCBjb2RlIHRoYXQg
Y3JlYXRlcyBmaWx0ZXIgcHJvcGVydGllcyBpbnRvIGEgc2luZ2xlIHBsYWNlLgorICAgICAgICAK
KyAgICAgICAgQW5pbWF0aW9ucyBvZiBDSUZpbHRlcnMgdXNpbmcgbXVsdGlwbGUgdmFsdWVzIG5l
dmVyIHdvcmtlZCBjb3JyZWN0bHksCisgICAgICAgIGJlY2F1c2Ugd2Ugd291bGQgY2xvYmJlciBh
bGwgYnV0IHRoZSBsYXN0IHByb3BlcnR5IGZvciBlYWNoIGZpbHRlciwKKyAgICAgICAgc28gZml4
IHRoYXQuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VzIGluIHRoZSBtb3ZlZCBmaWx0ZXIgY29k
ZToKKyAgICAgICAgICAgICogTWFkZSB1c2Ugb2Ygc2VwaWFGdWxsQ29uc3RhbnRzIGluIHRoZSBD
SUZpbHRlciBhbmQgQ0FGaWx0ZXIgY29kZS4KKyAgICAgICAgICAgICogRm9yIENJLCByZXR1cm4g
Q0lWZWN0b3JzIGluc3RlYWQgb2YgTlNBcnJheXMgb2YgTlNOdW1iZXJzLgorICAgICAgICAgICAg
KiBGdWRnZSB0aGUgaW5wdXRDb2xvciBmb3IgdGhlIENJIGdyYXlzY2FsZSBmaWx0ZXIgdG8gYmV0
dGVyIG1hdGNoIHNvZnR3YXJlIGZpbHRlcnMuCisgICAgICAgICAgICAqIGZpeCBzb21lIGNhc2Vz
IHdoZXJlIHRoZSBiZWhhdmlvciB3YXMgd3JvbmcgaW4gdGhlIGlzRGVmYXVsdCgpIGNhc2UuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBQbGF0Zm9y
bUNBRmlsdGVycy5oLCBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKTogVGhpcyBmdW5jdGlvbiB3YXMgY3Jl
YXRpbmcgYSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBub24tQVNDSUkgY2hhcmFjdGVycy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YW5pbWF0aW9uSWRlbnRpZmllcik6IFRvIGhhbmRsZSBDSUZpbHRlciBh
bmltYXRpb25zLCB3ZSBuZWVkIHRvIHRhY2sgYW5vdGhlcgorICAgICAgICBpbmRleCBvbnRvIHRo
ZSBhbmltYXRpb24gaWRlbnRpZmllciwgc2luY2Ugc29tZSBhbmltYXRpb25zIHJlcXVpcmUgYW5p
bWF0aW5nIG11bHRpcGxlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIHNhbWUgQ0lGaWx0ZXIu
IEFkZCAic3ViSW5kZXgiIGZvciB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlv
bk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbjo6
TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbik6CisgICAgICAgIChMYXllclByb3BlcnR5QW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uKTogRnVuY3Rpb25zIG1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6IEFkZGVkLgorICAg
ICAgICAoUGxhdGZvcm1DQUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRv
VmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW06IEFk
ZGVkLgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVy
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRp
ZXMpOgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZCk6CisKIDIwMTMtMDMtMDcgIEhhamltZSBNb3JyaXRhICA8bW9y
cml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIEN1c3RvbSBFbGVtZW50czogQ3VzdG9tRWxlbWVu
dCBjb25zdHJ1Y3RvciBzaG91bGRuJ3Qgc2hhcmUgZnVuY3Rpb24gaW5zdGFuY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5Njc5
ZjYyMjk3MjQ0NWQ2NDEzMGI1MDFlZjBiNmRjNTA0MGM0MGZiLi5lMDYyNGIxOGMxNTk1YjJlYmUy
ZjgwZWY5MGQ5MjRiYmRiZmUzMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDUsNiArMjQ1LDggQEAKIAkJMEM0NTM0Mjgx
MENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1
NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMDkwODdGMTQ0NEZEQjIw
MDAyODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xsYmFy
VGhlbWUuY3BwICovOyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsg
fTsKKwkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQw
Q0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgfTsKKwkJMEYxMzE2NDAxNkVE
MENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8q
IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3MDAwMENF
NDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovOyB9OwogCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5
NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjlDMTZEMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwICovOyB9OwogCQkwRjNERDQ0RjEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi87IH07CkBA
IC03NTY1LDYgKzc1NjcsOCBAQAogCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBwYXRoID0gY2EvUGxh
dGZvcm1DQUZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxMzE2M0Yx
NkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHBhdGgg
PSBjYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjlDMTZEMTMwMEMyRTIwMDJENzk0
RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Qmx1ci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTg4Nyw2ICsxNTg5MSw3IEBACiAJCQkJOTNGNzJB
RjExNjY2RURGQzAwMkEwMkJEIC8qIExheWVyUG9vbC5oICovLAogCQkJCTkzRjcyQUYyMTY2NkVE
RkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8sCiAJCQkJNDk1ODc4MUYxMkE1N0RERjAwNzIz
OEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0gKi8sCisJCQkJMEYxMzE2M0YxNkVEMENE
RTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovLAogCQkJCTQ5NTg3ODIwMTJB
NTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCiAJCQkJMUFBNzE2MDkx
NDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8sCiAJCQkJMUFBNzE2MDgxNDlC
QzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovLApAQCAtMTU5MzIsNiArMTU5Mzcs
NyBAQAogCQkJCTI5MTdCNTVGMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVy
LmggKi8sCiAJCQkJMjkxN0I1NjAxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQuaCAqLywKIAkJCQk0OTlCM0VEQzEyOERCNTAxMDBFNzI2QzIgLyogUGxhdGZvcm1D
QUFuaW1hdGlvbi5oICovLAorCQkJCTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9y
bUNBRmlsdGVycy5oICovLAogCQkJCTQ5OUIzRUMzMTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9y
bUNBTGF5ZXIuaCAqLywKIAkJCQk0OTNFNUUwODEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1D
QUxheWVyQ2xpZW50LmggKi8sCiAJCQkJNDk0QkM0MEMxMkFFREQ5RTAwNzQzQkQyIC8qIFRyYW5z
Zm9ybWF0aW9uTWF0cml4Q0EuY3BwICovLApAQCAtMjY2OTIsNiArMjY2OTgsNyBAQAogCQkJCTdF
NjZFMjM0MTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3RUEzMEY2QTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDgyODdGNzE2RTRBMDM4MDA4
NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjEzMTYzRTE2
RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mjk4OTUsNiArMjk5MDIsNyBAQAogCQkJCTdFNjZFMjMzMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFQTMwRjY5MTZE
RkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ4Mjg3RjYxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZv
cm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggY2JiOTgyYmNlN2E4ZGQ4
OGFmZWNiNjM3MTRkZTdiMTAwZGJlOWEwZC4uYWU2M2U2Yjk4ZGM5ODdiZTA4OGYxZDJlNWNlMjQ3
MTVkMWEwMjFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCBTdHJpbmcgR3JhcGhpY3NMYXll
cjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5
KQogICAgIC8vIHwgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXIgaW4gQ1NTLCBz
byB0aGlzIGNhbiBuZXZlciBjb25mbGljdCB3aXRoIGEga2V5ZnJhbWUgaWRlbnRpZmllci4KICAg
ICBTdHJpbmdCdWlsZGVyIGlkOwogICAgIGlkLmFwcGVuZExpdGVyYWwoIi18dHJhbnNpdGlvbiIp
OwotICAgIGlkLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihwcm9wZXJ0eSkpOworICAgIGlkLmFw
cGVuZE51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5KSk7CiAgICAgaWQuYXBwZW5kKCct
Jyk7CiAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCAzNzQ1
MWIxMGMzNzM0YTAyMDI4NjU3ODRkNTI0MzhiYzE5MjgyNTJhLi4yMWRhMzg3ZDEzZDRhNzlhOGUz
ZjEyNTZmYjFiNTY4N2E2OGVjMjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FGaWx0
ZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
QEAgLTIyNyw5ICsyMjgsOSBAQCBzdGF0aWMgU3RyaW5nIHByb3BlcnR5SWRUb1N0cmluZyhBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgcmV0dXJuICIiOwogfQogCi1zdGF0aWMgU3Ry
aW5nIGFuaW1hdGlvbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRleCkKK3N0YXRpYyBTdHJpbmcgYW5pbWF0
aW9uSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgpCiB7Ci0gICAgcmV0dXJuIGFu
aW1hdGlvbk5hbWUgKyAnXycgKyBTdHJpbmc6Om51bWJlcihwcm9wZXJ0eSkgKyAnXycgKyBTdHJp
bmc6Om51bWJlcihpbmRleCk7CisgICAgcmV0dXJuIGFuaW1hdGlvbk5hbWUgKyAnXycgKyBTdHJp
bmc6Om51bWJlcihwcm9wZXJ0eSkgKyAnXycgKyBTdHJpbmc6Om51bWJlcihpbmRleCkgKyAnXycg
KyBTdHJpbmc6Om51bWJlcihzdWJJbmRleCk7CiB9CiAKIHN0YXRpYyBib29sIGFuaW1hdGlvbkhh
c1N0ZXBzVGltaW5nRnVuY3Rpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwg
Y29uc3QgQW5pbWF0aW9uKiBhbmltKQpAQCAtNDk3LDcgKzQ5OCw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZv
cm1DQUxheWVyCiAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0
eSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyCiAjZW5kaWYKICAgICAgICAgICAgICAg
ICApCi0gICAgICAgICAgICAgICAgbW92ZU9yQ29weUxheWVyQW5pbWF0aW9uKG9wZXJhdGlvbiwg
YW5pbWF0aW9uSWRlbnRpZmllcihjdXJyQW5pbWF0aW9uLm1fbmFtZSwgY3VyckFuaW1hdGlvbi5t
X3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uLm1faW5kZXgpLCBmcm9tTGF5ZXIsIHRvTGF5ZXIpOwor
ICAgICAgICAgICAgICAgIG1vdmVPckNvcHlMYXllckFuaW1hdGlvbihvcGVyYXRpb24sIGFuaW1h
dGlvbklkZW50aWZpZXIoY3VyckFuaW1hdGlvbi5tX25hbWUsIGN1cnJBbmltYXRpb24ubV9wcm9w
ZXJ0eSwgY3VyckFuaW1hdGlvbi5tX2luZGV4LCBjdXJyQW5pbWF0aW9uLm1fc3ViSW5kZXgpLCBm
cm9tTGF5ZXIsIHRvTGF5ZXIpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTgwNSwxMCArMTgw
NiwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQW5pbWF0aW9ucygpCiAgICAgICAg
ICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiYgY3VyckFuaW1hdGlvbiA9IGFu
aW1hdGlvbnNbaV07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcm9jZXNzaW5nSW5mby5hY3Rp
b24pIHsKICAgICAgICAgICAgICAgICBjYXNlIFJlbW92ZToKLSAgICAgICAgICAgICAgICAgICAg
cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJy
QW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBj
dXJyQW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4LCBjdXJyQW5pbWF0aW9uLm1f
c3ViSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBj
YXNlIFBhdXNlOgotICAgICAgICAgICAgICAgICAgICBwYXVzZUNBQW5pbWF0aW9uT25MYXllcihj
dXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1lLCBjdXJyQW5pbWF0aW9u
Lm1faW5kZXgsIHByb2Nlc3NpbmdJbmZvLnRpbWVPZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBwYXVzZUNBQW5pbWF0aW9uT25MYXllcihjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJB
bmltYXRpb25OYW1lLCBjdXJyQW5pbWF0aW9uLm1faW5kZXgsIGN1cnJBbmltYXRpb24ubV9zdWJJ
bmRleCwgcHJvY2Vzc2luZ0luZm8udGltZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE4MjQsNyArMTgyNSw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKCkKICAgICBpZiAoKG51
bUFuaW1hdGlvbnMgPSBtX3VuY29taXR0ZWRBbmltYXRpb25zLnNpemUoKSkpIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kpIHsKICAgICAgICAgICAg
IGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIHBlbmRpbmdBbmltYXRpb24gPSBtX3VuY29t
aXR0ZWRBbmltYXRpb25zW2ldOwotICAgICAgICAgICAgc2V0QW5pbWF0aW9uT25MYXllcihwZW5k
aW5nQW5pbWF0aW9uLm1fYW5pbWF0aW9uLmdldCgpLCBwZW5kaW5nQW5pbWF0aW9uLm1fcHJvcGVy
dHksIHBlbmRpbmdBbmltYXRpb24ubV9uYW1lLCBwZW5kaW5nQW5pbWF0aW9uLm1faW5kZXgsIHBl
bmRpbmdBbmltYXRpb24ubV90aW1lT2Zmc2V0KTsKKyAgICAgICAgICAgIHNldEFuaW1hdGlvbk9u
TGF5ZXIocGVuZGluZ0FuaW1hdGlvbi5tX2FuaW1hdGlvbi5nZXQoKSwgcGVuZGluZ0FuaW1hdGlv
bi5tX3Byb3BlcnR5LCBwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSwgcGVuZGluZ0FuaW1hdGlvbi5t
X2luZGV4LCBwZW5kaW5nQW5pbWF0aW9uLm1fc3ViSW5kZXgsIHBlbmRpbmdBbmltYXRpb24ubV90
aW1lT2Zmc2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQW5pbWF0aW9uc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3J1bm5pbmdBbmltYXRpb25zLmZpbmQocGVuZGluZ0FuaW1hdGlvbi5tX25h
bWUpOwogICAgICAgICAgICAgaWYgKGl0ID09IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpIHsK
QEAgLTE4NTYsMTQgKzE4NTcsMTQgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmlzUnVubmluZ1Ry
YW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBj
YUFuaW0sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBpbnQgaW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQordm9pZCBHcmFwaGljc0xheWVy
Q0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUFuaW1hdGlvbiogY2FBbmltLCBBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50
IGluZGV4LCBpbnQgc3ViSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIFBsYXRmb3Jt
Q0FMYXllciogbGF5ZXIgPSBhbmltYXRlZExheWVyKHByb3BlcnR5KTsKICAgICAKICAgICBpZiAo
dGltZU9mZnNldCkKICAgICAgICAgY2FBbmltLT5zZXRCZWdpblRpbWUoQ0FDdXJyZW50TWVkaWFU
aW1lKCkgLSB0aW1lT2Zmc2V0KTsKIAotICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFuaW1hdGlv
bklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4KTsKKyAgICBTdHJpbmcg
YW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHByb3BlcnR5
LCBpbmRleCwgc3ViSW5kZXgpOwogCiAgICAgbGF5ZXItPnJlbW92ZUFuaW1hdGlvbkZvcktleShh
bmltYXRpb25JRCk7CiAgICAgbGF5ZXItPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwg
Y2FBbmltKTsKQEAgLTE4OTUsMTEgKzE4OTYsMTEgQEAgc3RhdGljIHZvaWQgYnVnNzMxMTM2N1dv
cmthcm91bmQoUGxhdGZvcm1DQUxheWVyKiB0cmFuc2Zvcm1MYXllciwgY29uc3QgVHJhbnNmb3IK
ICAgICB0cmFuc2Zvcm1MYXllci0+c2V0VHJhbnNmb3JtKGNhVHJhbnNmb3JtKTsKIH0KIAotYm9v
bCBHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNBQW5pbWF0aW9uRnJvbUxheWVyKEFuaW1hdGVkUHJv
cGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgp
Citib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBp
bmRleCwgaW50IHN1YkluZGV4KQogewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBhbmlt
YXRlZExheWVyKHByb3BlcnR5KTsKIAotICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFuaW1hdGlv
bklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4KTsKKyAgICBTdHJpbmcg
YW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHByb3BlcnR5
LCBpbmRleCwgc3ViSW5kZXgpOwogCiAgICAgaWYgKCFsYXllci0+YW5pbWF0aW9uRm9yS2V5KGFu
aW1hdGlvbklEKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyMCwxMSArMTkyMSwxMSBA
QCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlE
IHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91Ymxl
IHRpbWVPZmZzZXQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5
ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGludCBpbmRleCwgaW50IHN1YkluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKIHsKICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gYW5pbWF0ZWRMYXllcihwcm9wZXJ0eSk7CiAKLSAgICBT
dHJpbmcgYW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHBy
b3BlcnR5LCBpbmRleCk7CisgICAgU3RyaW5nIGFuaW1hdGlvbklEID0gYW5pbWF0aW9uSWRlbnRp
ZmllcihhbmltYXRpb25OYW1lLCBwcm9wZXJ0eSwgaW5kZXgsIHN1YkluZGV4KTsKIAogICAgIFJl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjdXJBbmltID0gbGF5ZXItPmFuaW1hdGlvbkZvcktl
eShhbmltYXRpb25JRCk7CiAgICAgaWYgKCFjdXJBbmltKQpAQCAtMTk5MCw3ICsxOTkxLDcgQEAg
Ym9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXMoY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHUKICAgICBpZiAoIXZhbHVlc09LKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBtX3VuY29taXR0ZWRBbmltYXRpb25zLmFwcGVuZChMYXllclByb3Bl
cnR5QW5pbWF0aW9uKGNhQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVy
dHkoKSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKKyAgICBtX3VuY29taXR0ZWRBbmlt
YXRpb25zLmFwcGVuZChMYXllclByb3BlcnR5QW5pbWF0aW9uKGNhQW5pbWF0aW9uLCBhbmltYXRp
b25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgsIDAsIHRpbWVPZmZz
ZXQpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjAxNCw3ICsyMDE1LDcgQEAgYm9vbCBH
cmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiB2YWwKICAgICBpZiAoIXZhbGlkTWF0cmljZXMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJvcGVy
dHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0
eSgpLCBhbmltYXRpb25JbmRleCwgdGltZU9mZnNldCkpOworICAgIG1fdW5jb21pdHRlZEFuaW1h
dGlvbnMuYXBwZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFuaW1hdGlv
bk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRpb25JbmRleCwgMCwgdGltZU9mZnNl
dCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDc2LDcgKzIwNzcsNyBAQCBib29sIEdy
YXBoaWNzTGF5ZXJDQTo6YXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmIHZhbAogICAgIGJvb2wgaXNLZXlmcmFtZSA9IHZhbHVlTGlzdC5zaXplKCkg
PiAyOwogICAgIAogICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcCA9
IG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIGludCBudW1BbmltYXRlZFByb3Bl
cnRpZXMgPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRpZXMo
ZmlsdGVyT3ApOworICAgIGludCBudW1BbmltYXRlZFByb3BlcnRpZXMgPSBQbGF0Zm9ybUNBRmls
dGVyczo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlck9wKTsKICAgICAKICAgICAv
LyBFYWNoIGZpbHRlciBtaWdodCBuZWVkIHRvIGFuaW1hdGUgbXVsdGlwbGUgcHJvcGVydGllcywg
ZWFjaCB3aXRoIHRoZWlyIG93biBrZXlQYXRoLiBUaGUga2V5UGF0aCBpcyBhbHdheXMgb2YgdGhl
IGZvcm06CiAgICAgLy8KQEAgLTIwODgsNyArMjA4OSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsCiAgICAgZm9yIChpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4ID0gMDsgaW50ZXJu
YWxGaWx0ZXJQcm9wZXJ0eUluZGV4IDwgbnVtQW5pbWF0ZWRQcm9wZXJ0aWVzOyArK2ludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCkgewogICAgICAgICBib29sIHZhbHVlc09LOwogICAgICAgICBS
ZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY2FBbmltYXRpb247Ci0gICAgICAgIFN0cmluZyBr
ZXlQYXRoID0gU3RyaW5nOjpmb3JtYXQoImZpbHRlcnMuZmlsdGVyXyVkLiVzIiwgYW5pbWF0aW9u
SW5kZXgsIFBsYXRmb3JtQ0FBbmltYXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKGZp
bHRlck9wLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgU3RyaW5nIGtl
eVBhdGggPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVycy5maWx0ZXJfJWQuJXMiLCBhbmltYXRpb25J
bmRleCwgUGxhdGZvcm1DQUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKGZpbHRl
ck9wLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChpc0tleWZyYW1lKSB7CiAgICAgICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1l
QW5pbWF0aW9uKGFuaW1hdGlvbiwga2V5UGF0aCwgZmFsc2UpOwpAQCAtMjEwMCw3ICsyMTAxLDcg
QEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCh2YWx1
ZXNPSyk7CiAKLSAgICAgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5ZXJQcm9w
ZXJ0eUFuaW1hdGlvbihjYUFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgdmFsdWVMaXN0LnByb3Bl
cnR5KCksIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0KSk7CisgICAgICAgIG1fdW5jb21pdHRl
ZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFu
aW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRpb25JbmRleCwgaW50ZXJu
YWxGaWx0ZXJQcm9wZXJ0eUluZGV4LCB0aW1lT2Zmc2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCmluZGV4IGJlMjZiYTc4M2VkNTZlNjE0MmRjZTVjODRhNDNhMmEyOGIx
YzJmYTguLjJhYWY2YTk5YjIyMmYzMWVjZjViYmNjMTQxYmQ2ODBmYWYxOGM2NmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oCkBAIC0zNDksOSArMzQ5LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVuc3VyZVN0cnVjdHVy
YWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKTsKICAgICBTdHJ1Y3R1cmFsTGF5ZXJQdXJw
b3NlIHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0QW5pbWF0
aW9uT25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpOwot
ICAgIGJvb2wgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCk7Ci0gICAgdm9pZCBwYXVzZUNB
QW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCBzZXRBbmlt
YXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgsIGRvdWJs
ZSB0aW1lT2Zmc2V0KTsKKyAgICBib29sIHJlbW92ZUNBQW5pbWF0aW9uRnJvbUxheWVyKEFuaW1h
dGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGlu
dCBzdWJJTmRleCk7CisgICAgdm9pZCBwYXVzZUNBQW5pbWF0aW9uT25MYXllcihBbmltYXRlZFBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQgc3Vi
SW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKIAogICAgIGVudW0gTW92ZU9yQ29weSB7IE1vdmUs
IENvcHkgfTsKICAgICBzdGF0aWMgdm9pZCBtb3ZlT3JDb3B5TGF5ZXJBbmltYXRpb24oTW92ZU9y
Q29weSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZGVudGlmaWVyLCBQbGF0Zm9ybUNBTGF5ZXIg
KmZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICp0b0xheWVyKTsKQEAgLTQzNSwxMSArNDM1LDEy
IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBhbmltYXRpb24gb2YgYSBz
aW5nbGUgcHJvcGVydHkuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSB0cmFuc2Zvcm0gYW5pbWF0aW9u
cyBmb3IKICAgICAvLyBhIHNpbmdsZSB0cmFuc2l0aW9uIG9yIGtleWZyYW1lIGFuaW1hdGlvbiwg
c28gaW5kZXggaXMgdXNlZCB0byBkaXN0aW5ndWlzaCB0aGVzZS4KICAgICBzdHJ1Y3QgTGF5ZXJQ
cm9wZXJ0eUFuaW1hdGlvbiB7Ci0gICAgICAgIExheWVyUHJvcGVydHlBbmltYXRpb24oUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjYUFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRleCwgZG91Ymxl
IHRpbWVPZmZzZXQpCisgICAgICAgIExheWVyUHJvcGVydHlBbmltYXRpb24oUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBQW5pbWF0aW9uPiBjYUFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRleCwgaW50IHN1YkluZGV4
LCBkb3VibGUgdGltZU9mZnNldCkKICAgICAgICAgOiBtX2FuaW1hdGlvbihjYUFuaW1hdGlvbikK
ICAgICAgICAgLCBtX25hbWUoYW5pbWF0aW9uTmFtZSkKICAgICAgICAgLCBtX3Byb3BlcnR5KHBy
b3BlcnR5KQogICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9zdWJJbmRleChz
dWJJbmRleCkKICAgICAgICAgLCBtX3RpbWVPZmZzZXQodGltZU9mZnNldCkKICAgICAgICAgeyB9
CiAKQEAgLTQ0Nyw2ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9uYW1lOwog
ICAgICAgICBBbmltYXRlZFByb3BlcnR5SUQgbV9wcm9wZXJ0eTsKICAgICAgICAgaW50IG1faW5k
ZXg7CisgICAgICAgIGludCBtX3N1YkluZGV4OwogICAgICAgICBkb3VibGUgbV90aW1lT2Zmc2V0
OwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKaW5kZXggNmMxMjYzMTE0ZDI5OWQ2NGFl
Zjg0ZGVhN2U1MTY4NzcwYzYzYTg5Ny4uMDkwZGVmNTZjNGIxMTMwNzRjODJhYTYxMDQ1OWM1Nzg5
MTQwNmUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaApAQCAtMTM5LDExICsxMzksNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29uc3QgVGltaW5n
RnVuY3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKTsKICAgICB2b2lkIGNvcHlUaW1pbmdG
dW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKLSAgICAKLSNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3RhdGljIGludCBudW1BbmltYXRlZEZpbHRlclByb3BlcnRp
ZXMoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlKTsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogYW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihBbmltYXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y5NmRmZWIwNDU0Y2Q5MTQxN2Uy
MWYxMmQyMWY2OTc3ODRlYzViOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQbGF0Zm9ybUNBRmlsdGVyc19oCisjZGVmaW5lIFBsYXRmb3JtQ0FGaWx0ZXJzX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisj
ZGVmaW5lIFVTRV9DQV9GSUxURVJTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDAK
KyNlbmRpZgorCitPQkpDX0NMQVNTIE5TVmFsdWU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFBsYXRmb3JtQ0FMYXllcjsKKworY2xhc3MgUGxhdGZvcm1DQUZpbHRlcnMgeworcHVibGlj
OgorICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtQ0FMYXllciosIGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgaW50IG51bUFuaW1hdGVkRmlsdGVy
UHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUpOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBhbmltYXRlZEZpbHRlclByb3BlcnR5TmFtZShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworCisgICAgc3Rh
dGljIFJldGFpblB0cjxOU1ZhbHVlPiBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0
ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKworI2lmZGVm
IFVTRV9DQV9GSUxURVJTCisgICAgc3RhdGljIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJp
eFZhbHVlRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpOworI2VuZGlmCit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUZpbHRlcnNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FB
bmltYXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQppbmRleCBhYzg2NzU1ODQxYjFmZjJkZGU0NWYzY2E5
MWFmZjRiYjlkNDc1N2U2Li5iMDkyMGYyNzc4NjhiMjFmZGQ0YmRjMzQ5ZjlmZWIxYTZlZWNkOGY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxh
dGZvcm1DQUFuaW1hdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQpAQCAtMzAsNyArMzAsNyBAQAog
I2ltcG9ydCAiUGxhdGZvcm1DQUFuaW1hdGlvbi5oIgogCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNp
b24uaCIKLSNpbXBvcnQgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUZp
bHRlcnMuaCIKICNpbXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCiAjaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtMzkyLDEyNiAr
MzkyLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIHZhbHVlKQogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotc3RhdGlj
IGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7Ci0gICAgeyAwLjM5MywgMC43Njks
IDAuMTg5IH0sCi0gICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCi0gICAgeyAwLjI3MiwgMC41
MzQsIDAuMTMxIH0KLX07Ci0KLXN0YXRpYyBkb3VibGUgc2VwaWFOb25lQ29uc3RhbnRzWzNdWzNd
ID0gewotICAgIHsgMSwgMCwgMCB9LAotICAgIHsgMCwgMSwgMCB9LAotICAgIHsgMCwgMCwgMSB9
Ci19OwotCi1zdGF0aWMgZG91YmxlIGludmVydENvbnN0YW50c1szXVszXSA9IHsKLSAgICB7IDEs
IDAsIDAgfSwKLSAgICB7IDAsIDEsIDAgfSwKLSAgICB7IDAsIDAsIDEgfQotfTsKLQotc3RhdGlj
IFJldGFpblB0cjxpZD4gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0
aW9uKiBvcGVyYXRpb24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCi17Ci0gICAg
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPmdldE9wZXJh
dGlvblR5cGUoKTsKLSAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlOwotICAgIAotICAgIHN3aXRjaCh0
eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6IHsKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Ci0gICAgICAgICAgICBhbW91bnQg
PSBvcC0+YW1vdW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh0eXBlID09
IEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURSkKLSAgICAgICAgICAgIGFtb3VudCA9IGRlZzJy
YWQoYW1vdW50KTsKLQotICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTphbW91bnRdIHJldGFpbl0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwot
Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
dmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKLSAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1tpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1b
aW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XSwgYW1vdW50KV0sCi0gICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNb
aW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdW2lu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF0sIGFtb3VudCldLAotICAgICAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzW2lu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1syXVtpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXhdLCBhbW91bnQpXSwKLSAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjBdLAotICAgICAgICAgICAgbmlsXSByZXRhaW5dKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAg
ICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0KLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVm
YXVsdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICAgICAgYW1vdW50ID0gb3AtPmFt
b3VudCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgY29sb3IgbWF0cml4
IGFuaW1hdGlvbiBmb3IgaW52ZXJ0IGRvZXMgYSBzY2FsZSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVu
dCBieSBhIHZhbHVlIHRoYXQgZ29lcyBmcm9tIAotICAgICAgICAvLyAxICh3aGVuIGFtb3VudCBp
cyAwKSB0byAtMSAod2hlbiBhbW91bnQgaXMgMSkuIFRoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUg
b2Zmc2V0IGJ5IGFtb3VudC4gVGhpcyBoYXMgdGhlCi0gICAgICAgIC8vIGVmZmVjdCBvZiBwZXJm
b3JtaW5nIHRoZSBvcGVyYXRpb246IGMnID0gYyAqIC0xICsgMSwgd2hpY2ggaW52ZXJ0cyB0aGUg
Y29sb3IuCi0gICAgICAgIGlmIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXggPCAzKSB7Ci0g
ICAgICAgICAgICAvLyB0aGUgZmlyc3QgMyBwcm9wZXJ0aWVzIGFyZSB0aGUgcmVkLCBncmVlbiBh
bmQgYmx1ZSBtdWx0aXBsaWVycwotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSAxIC0g
YW1vdW50ICogMjsKLSAgICAgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU0FycmF5IGFycmF5V2l0
aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6aW52
ZXJ0Q29uc3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF1bMF0gKiBtdWx0aXBsaWVy
XSwKLSAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25z
dGFudHNbaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVsxXSAqIG11bHRpcGxpZXJdLAotICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmludmVydENvbnN0YW50c1tp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdWzJdICogbXVsdGlwbGllcl0sCi0gICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MF0sCi0gICAgICAgICAgICAgICAgbmls
XSByZXRhaW5dKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHRoZSBsYXN0IHBy
b3BlcnR5IGlzIHRoZSBjb2xvciBvZmZzZXQKLSAgICAgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tO
U0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6YW1vdW50XSwKLSAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTphbW91bnRdLAotICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOmFtb3VudF0sCi0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MF0sCi0gICAgICAgICAgICAgICAgbmlsXSByZXRhaW5dKTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOiB7Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwotCi0gICAgICAgIGlmICgh
b3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFs
dWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7
Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwotCi0gICAgICAgIGlmICghb3BlcmF0aW9uLT5p
c0RlZmF1bHQoKSkgewotICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3Ag
PSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgob3AtPnN0ZERldmlhdGlvbigp
LCAwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdmFsdWU7
Ci19Ci0KIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQog
ewotICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihvcGVy
YXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAgUmV0YWluUHRyPGlkPiB2
YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihvcGVyYXRp
b24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFz
aWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOnZhbHVlLmdldCgp
XTsKIH0KICNlbmRpZgpAQCAtNTcwLDcgKzQ1Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCiAjaWYgRU5BQkxFKENT
U19GSUxURVJTKQogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZp
bHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4
KQogewotICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihv
cGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAgUmV0YWluUHRyPGlk
PiB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihvcGVy
YXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CiAgICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTp2YWx1ZS5nZXQo
KV07CiB9CiAjZW5kaWYKQEAgLTY1Niw3ICs1MzksNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgdmFs
dQogICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBSZXRhaW5QdHI8aWQ+IHZhbHVlID0gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWVzW2ld
LmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworICAgICAgICBSZXRhaW5QdHI8
aWQ+IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZh
bHVlc1tpXS5nZXQoKSwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKICAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDp2YWx1ZS5nZXQoKV07CiAgICAgfQogICAgIFtzdGF0aWNfY2FzdDxDQUtl
eWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CkBA
IC03MDQsNTEgKzU4Nyw0IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weVRpbWluZ0Z1
bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiogdmFsCiAgICAgW3N0YXRpY19j
YXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVu
Y3Rpb25zOltvdGhlciB0aW1pbmdGdW5jdGlvbnNdXTsKIH0KIAotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLWludCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRp
ZXMoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoKHR5
cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gMTsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHJldHVybiAzOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkhVRV9ST1RBVEU6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
IHJldHVybiA0OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gMTsK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkNPTlRSQVNUOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogcmV0dXJuIDE7Ci0gICAgZGVmYXVsdDogcmV0dXJuIDA7Ci0gICAgfQot
fQotCi1jb25zdCBjaGFyKiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjphbmltYXRlZEZpbHRlclByb3Bl
cnR5TmFtZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgaW50IGludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAiaW5wdXRJbnRlbnNpdHkiOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgc3dpdGNoKGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAiaW5wdXRSVmVjdG9yIjsK
LSAgICAgICAgY2FzZSAxOiByZXR1cm4gImlucHV0R1ZlY3RvciI7Ci0gICAgICAgIGNhc2UgMjog
cmV0dXJuICJpbnB1dEJWZWN0b3IiOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7Ci0gICAg
ICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAiaW5wdXRT
YXR1cmF0aW9uIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogcmV0dXJu
ICJpbnB1dEFuZ2xlIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAg
ICBzd2l0Y2goaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgIGNhc2UgMDog
cmV0dXJuICJpbnB1dFJWZWN0b3IiOwotICAgICAgICBjYXNlIDE6IHJldHVybiAiaW5wdXRHVmVj
dG9yIjsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7Ci0gICAgICAgIGNh
c2UgMzogcmV0dXJuICJpbnB1dEJpYXNWZWN0b3IiOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4g
IiI7Ci0gICAgICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJu
ICJpbnB1dEFWZWN0b3IiOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiByZXR1cm4g
ImlucHV0UmFkaXVzIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVy
biAiaW5wdXRDb250cmFzdCI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
IHJldHVybiAiaW5wdXRCcmlnaHRuZXNzIjsKLSAgICBkZWZhdWx0OiByZXR1cm4gIiI7Ci0gICAg
fQotfQotI2VuZGlmCi0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZv
cm1DQUZpbHRlcnNNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjAzMGE0YjRjYjAzZDQ3MzJh
MGI0Mjg0ZTUwNzA3MTc5ZThiNGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbQpAQCAtMCww
ICsxLDY4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2ltcG9ydCAiUGxhdGZvcm1D
QUZpbHRlcnMuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkxlbmd0aEZ1bmN0aW9ucy5oIiAvLyBUaGlzIGlzIGEg
bGF5ZXJpbmcgdmlvbGF0aW9uLgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
KyNpZiBVU0VfQ0FfRklMVEVSUworc3RydWN0IENBQ29sb3JNYXRyaXgKK3sKKyAgICBmbG9hdCBt
MTEsIG0xMiwgbTEzLCBtMTQsIG0xNTsKKyAgICBmbG9hdCBtMjEsIG0yMiwgbTIzLCBtMjQsIG0y
NTsKKyAgICBmbG9hdCBtMzEsIG0zMiwgbTMzLCBtMzQsIG0zNTsKKyAgICBmbG9hdCBtNDEsIG00
MiwgbTQzLCBtNDQsIG00NTsKK307CisKK3R5cGVkZWYgc3RydWN0IENBQ29sb3JNYXRyaXggQ0FD
b2xvck1hdHJpeDsKKworQGludGVyZmFjZSBOU1ZhbHVlIChEZXRhaWxzKQorKyAoTlNWYWx1ZSAq
KXZhbHVlV2l0aENBQ29sb3JNYXRyaXg6KENBQ29sb3JNYXRyaXgpdDsKK0BlbmQKKworQGludGVy
ZmFjZSBDQUZpbHRlciA6IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmcsIE5T
Q29kaW5nPgorQGVuZAorCitAaW50ZXJmYWNlIENBRmlsdGVyIChEZXRhaWxzKQorQHByb3BlcnR5
KGNvcHkpIE5TU3RyaW5nICpuYW1lOworKyAoQ0FGaWx0ZXIgKilmaWx0ZXJXaXRoVHlwZTooTlNT
dHJpbmcgKil0eXBlOworQGVuZAorCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBrQ0FGaWx0ZXJD
b2xvck1hdHJpeDsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNvbG9yTW9ub2No
cm9tZTsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNvbG9ySHVlUm90YXRlOwor
ZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JTYXR1cmF0ZTsKK2V4dGVybiBO
U1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckdhdXNzaWFuQmx1cjsKKyNlbmRpZgorCisvLyBGSVhN
RTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpi
dWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgor
c3RhdGljIGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7CisgICAgeyAwLjM5Mywg
MC43NjksIDAuMTg5IH0sCisgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCisgICAgeyAwLjI3
MiwgMC41MzQsIDAuMTMxIH0KK307CisKK3N0YXRpYyBkb3VibGUgc2VwaWFOb25lQ29uc3RhbnRz
WzNdWzNdID0geworICAgIHsgMSwgMCwgMCB9LAorICAgIHsgMCwgMSwgMCB9LAorICAgIHsgMCwg
MCwgMSB9Cit9OworCit2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQ
bGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKK3sKKyAgICBDQUxheWVyKiBsYXllciA9IHBsYXRmb3JtQ0FMYXllci0+cGxhdGZv
cm1MYXllcigpOworCisgICAgaWYgKCFmaWx0ZXJzLnNpemUoKSkgeworICAgICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldEZpbHRlcnM6bmlsXTsKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgYWRkcyBzaGFkb3cgcHJvcGVydGllcyB0byB0aGUgbGF5ZXIg
ZXZlbiB3aGVuIGl0IGhhZCBub25lLgorICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNH
U2l6ZVplcm9dOworICAgICAgICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6bmlsXTsKKyAgICAgICAg
W2xheWVyIHNldFNoYWRvd1JhZGl1czowXTsKKyAgICAgICAgW2xheWVyIHNldFNoYWRvd09wYWNp
dHk6MF07CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCB3YXMg
Y2FsbGVkIGFuZCBpdCByZXR1cm5lZCB0cnVlLgorICAgIEFTU0VSVChwbGF0Zm9ybUNBTGF5ZXIt
PmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycykpOworICAgIAorICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJy
YXkoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0
cmluZyBmaWx0ZXJOYW1lID0gU3RyaW5nOjpmb3JtYXQoImZpbHRlcl8lZCIsIGkpOworICAgICAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7
CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdyBhc3N1bWUgZHJvcCBzaGFkb3cgaXMgdGhlIGxhc3QgZmlsdGVy
LCBwdXQgaXQgb24gdGhlIGxheWVyLgorICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEw
OTU5OTY5PiBIYW5kbGUgY2FzZSB3aGVyZSBkcm9wLXNoYWRvdyBpcyBub3QgdGhlIGxhc3QgZmls
dGVyLgorICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0
aW9uKTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShvcC0+
eCgpLCBvcC0+eSgpKV07CisKKyAgICAgICAgICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKKyAg
ICAgICAgICAgIG9wLT5jb2xvcigpLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sx
XSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvcihBZG9w
dENGLCBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKKyAgICAg
ICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpjb2xvci5nZXQoKV07CisgICAgICAgICAgICBb
bGF5ZXIgc2V0U2hhZG93UmFkaXVzOm9wLT5zdGREZXZpYXRpb24oKV07CisgICAgICAgICAgICBb
bGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Kj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FG
aWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNb25vY2hyb21lXTsKKyAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50
KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6
ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1
ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVl
Rm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVy
IGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKKyAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0
cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKKyAg
ICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9w
ZXJhdGlvbik7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRl
cldpdGhUeXBlOmtDQUZpbHRlckNvbG9yU2F0dXJhdGVdOworICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAi
aW5wdXRBbW91bnQiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsK
KyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
PihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckh1ZVJvdGF0ZV07CisgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChvcC0+
YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07CisgICAgICAgICAgICBbZmlsdGVyIHNl
dE5hbWU6QCJodWVSb3RhdGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJO
YW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJp
eFZhbHVlRm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NB
RmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENv
bG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Cisg
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTog
eworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVl
PiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVG
b3JGaWx0ZXIoKm9wKTsKKyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIg
ZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRy
aXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Cisg
ICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBv
cCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNv
bG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZp
bHRlcigqb3ApOworICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0
ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CisgICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CisgICAgICAg
ICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0
cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcigq
b3ApOworICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRo
VHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVy
ID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckdhdXNzaWFuQmx1cl07CisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRW
YWx1ZUZvckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1
cyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAg
ICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyNlbHNlCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9w
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVy
IGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1vbm9jaHJvbWUiXTsKKyAgICAgICAgICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRJbnRlbnNpdHkiXTsK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJQ29sb3IgY29sb3JXaXRoUmVkOjAuNjcg
Z3JlZW46MC42NyBibHVlOjAuNjddIGZvcktleTpAImlucHV0Q29sb3IiXTsgLy8gQ29sb3IgZGVy
aXZlZCBlbXBpcmljYWxseSB0byBtYXRjaCB6ZXJvIHNhdHVyYXRpb24gbGV2ZWxzLgorICAgICAg
ICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CisgICAgICAgICAgICBjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworCisgICAgICAg
ICAgICBkb3VibGUgdCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgICAgIHQgPSBzdGQ6Om1pbihz
dGQ6Om1heCgwLjAsIHQpLCAxLjApOworICAgICAgICAgICAgLy8gRklYTUU6IHJlc3VsdHMgZG9u
J3QgbWF0Y2ggdGhlIHNvZnR3YXJlIGZpbHRlci4KKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChz
ZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsyXSwgdCkgVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sx
XVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzBdLCB0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29u
c3RhbnRzWzFdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMV0sIHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBp
YU5vbmVDb25zdGFudHNbMV1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsyXSwgdCkgVzowXSBm
b3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsw
XSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCB0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5v
bmVDb25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsyXSwgdCkgVzowXSBmb3JL
ZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJO
YW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0
aW9uIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewor
ICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJDSUh1ZUFkanVzdCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZh
dWx0c107CisKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpkZWcycmFkKG9wLT5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKKyAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJh
eS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKKyAgICAgICAgICAgIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9w
ZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZh
dWx0c107CisKKyAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMSAtIG9wLT5hbW91bnQo
KSAqIDI7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgcmVzdWx0cyBvZiB0aGlzIGZpbHRl
ciBsb29rIHdyb25nLgorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6
bXVsdGlwbGllciBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6bXVsdGlwbGll
ciBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MV0gZm9yS2V5OkAiaW5wdXRB
VmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDpvcC0+YW1vdW50KCkgWTpvcC0+YW1vdW50KCkgWjpvcC0+YW1vdW50KCkgVzowXSBmb3JL
ZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0
ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ0lGaWx0
ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworCisgICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDoxIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJp
bnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAgWToxIFo6MCBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjoxIFc6
MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzpvcC0+YW1vdW50KCldIGZvcktleTpA
ImlucHV0QVZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJy
YXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogeworICAgICAgICAg
ICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNl
dERlZmF1bHRzXTsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmFtb3Vu
dCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CisgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6YW1vdW50IFo6MCBXOjBdIGZv
cktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjphbW91bnQgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0
b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogeworICAg
ICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3Ag
PSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Kj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lG
aWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsKKyAgICAgICAgICAgIFtm
aWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRDb250cmFzdCJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBzdGREZXZpYXRpb25ZLgorICAgICAgICAgICAg
Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmls
dGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBm
aWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUdhdXNzaWFuQmx1ciJdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxlbmd0aChvcC0+c3Rk
RGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOworICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9i
amVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFthcnJheS5nZXQoKSBjb3VudF0g
PiAwKQorICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczphcnJheS5nZXQoKV07CisgICAgCisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitSZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZv
cm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQoreworI2lmIFVT
RV9DQV9GSUxURVJTCisgICAgVU5VU0VEX1BBUkFNKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRl
eCk7CisjZW5kaWYKKyAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IG9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpOworICAgIFJldGFpblB0cjxpZD4gdmFsdWU7Cisg
ICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRTogeworICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRJbnRlbnNpdHkKKyAgICAgICAgLy8g
Q0FGaWx0ZXI6IGlucHV0QW1vdW50CisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOworICAgICAg
ICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgICAgICBhbW91
bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogeworI2lmIFVTRV9DQV9G
SUxURVJTCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAg
IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9w
KTsKKyNlbHNlCisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJWZWN0b3IsIGlucHV0R1ZlY3Rv
ciwgaW5wdXRCVmVjdG9yCisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOworICAgICAgICBpZiAo
IW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBv
cC0+YW1vdW50KCk7CisgICAgICAgIH0KKworICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0g
MDsKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29y
ZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1b
MF0sIGFtb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBp
YUZ1bGxDb25zdGFudHNbMF1bMV0sIGFtb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29u
c3RhbnRzWzBdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMl0sIGFtb3VudCkgVzowXTsgYnJl
YWs7IC8vIGlucHV0UlZlY3RvcgorICAgICAgICBjYXNlIDE6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0
b3IgYWxsb2NdIGluaXRXaXRoWDpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1b
MF0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVswXSwgYW1vdW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpibGVuZChzZXBp
YU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsxXSwgYW1vdW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpX
ZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNlcGlhRnVsbENvbnN0YW50
c1sxXVsyXSwgYW1vdW50KSBXOjBdOyBicmVhazsgLy8gaW5wdXRHVmVjdG9yCisgICAgICAgIGNh
c2UgMjogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOldlYkNvcmU6OmJs
ZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCBh
bW91bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBZOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsxXSwgc2VwaWFGdWxs
Q29uc3RhbnRzWzJdWzFdLCBhbW91bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1syXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCBhbW91bnQpIFc6MF07IGJyZWFrOyAv
LyBpbnB1dEJWZWN0b3IKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5hZG9wdE5TKHJvd1ZlY3Rv
cik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURTogeworICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRTYXR1cmF0aW9uCisg
ICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dEFtb3VudAorICAgICAgICBkb3VibGUgYW1vdW50ID0g
MTsKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAg
ICAgICAgYW1vdW50ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFp
bl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6IHsKKyAgICAgICAgLy8gSHVlIHJvdGF0ZSBDSUZpbHRlcjogaW5wdXRBbmdsZQor
ICAgICAgICAvLyBIdWUgcm90YXRlIENBRmlsdGVyOiBpbnB1dEFuZ2xlCisgICAgICAgIGRvdWJs
ZSBhbW91bnQgPSAwOworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlv
bik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAgICAg
ICAgYW1vdW50ID0gZGVnMnJhZChhbW91bnQpOworICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworI2lmIFVTRV9DQV9G
SUxURVJTCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAg
IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9w
KTsKKyNlbHNlCisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJWZWN0b3IsIGlucHV0R1ZlY3Rv
ciwgaW5wdXRCVmVjdG9yLCBpbnB1dEJpYXNWZWN0b3IKKyAgICAgICAgZG91YmxlIGFtb3VudCA9
IDA7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgeworICAgICAgICAgICAg
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMSAtIGFtb3VudCAqIDI7CisKKyAgICAgICAgLy8g
VGhlIGNvbG9yIG1hdHJpeCBhbmltYXRpb24gZm9yIGludmVydCBkb2VzIGEgc2NhbGUgb2YgZWFj
aCBjb2xvciBjb21wb25lbnQgYnkgYSB2YWx1ZSB0aGF0IGdvZXMgZnJvbSAKKyAgICAgICAgLy8g
MSAod2hlbiBhbW91bnQgaXMgMCkgdG8gLTEgKHdoZW4gYW1vdW50IGlzIDEpLiBUaGVuIHRoZSBj
b2xvciB2YWx1ZXMgYXJlIG9mZnNldCBieSBhbW91bnQuIFRoaXMgaGFzIHRoZQorICAgICAgICAv
LyBlZmZlY3Qgb2YgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uOiBjJyA9IGMgKiAtMSArIDEsIHdo
aWNoIGludmVydHMgdGhlIGNvbG9yLgorICAgICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0gMDsK
KyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKKyAgICAgICAg
Y2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6bXVsdGlwbGll
ciBZOjAgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dFJWZWN0b3IKKyAgICAgICAgY2FzZSAxOiBy
b3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOm11bHRpcGxpZXIgWjow
IFc6MF07IGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKKyAgICAgICAgY2FzZSAyOiByb3dWZWN0b3Ig
PSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF07IGJy
ZWFrOyAvLyBpbnB1dEJWZWN0b3IKKyAgICAgICAgY2FzZSAzOiByb3dWZWN0b3IgPSBbW0NJVmVj
dG9yIGFsbG9jXSBpbml0V2l0aFg6YW1vdW50IFk6YW1vdW50IFo6YW1vdW50IFc6MF07IGJyZWFr
OyAvLyBpbnB1dEJpYXNWZWN0b3IKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5hZG9wdE5TKHJv
d1ZlY3Rvcik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOiB7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgLy8gT3Bh
Y2l0eSBDQUZpbHRlcjogaW5wdXRDb2xvck1hdHJpeAorICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICB2YWx1ZSA9IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisjZWxzZQorICAg
ICAgICAvLyBPcGFjaXR5IENJRmlsdGVyOiBpbnB1dEFWZWN0b3IKKyAgICAgICAgZG91YmxlIGFt
b3VudCA9IDE7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgeworICAgICAg
ICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW0NJVmVjdG9yIGFsbG9jXSBpbml0
V2l0aFg6MCBZOjAgWjowIFc6YW1vdW50XSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7CisjaWYgVVNF
X0NBX0ZJTFRFUlMKKyAgICAgICAgLy8gQnJpZ2h0bmVzcyBDQUZpbHRlcjogaW5wdXRDb2xvck1h
dHJpeAorICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVy
YXRpb24pOworICAgICAgICB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZh
bHVlRm9yRmlsdGVyKCpvcCk7CisjZWxzZQorICAgICAgICAvLyBCcmlnaHRuZXNzIENJRmlsdGVy
OiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAgICAgICBp
ZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAg
ICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBzd2l0Y2ggKGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3Ig
YWxsb2NdIGluaXRXaXRoWDphbW91bnQgWTowIFo6MCBXOjBdOyBicmVhazsgLy8gaW5wdXRSVmVj
dG9yCisgICAgICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdp
dGhYOjAgWTphbW91bnQgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKKyAgICAgICAg
Y2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOjAgWjph
bW91bnQgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3RvcgorICAgICAgICB9CisgICAgICAgIHZh
bHVlLmFkb3B0TlMocm93VmVjdG9yKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKKyNpZiBVU0VfQ0FfRklMVEVS
UworICAgICAgICAvLyBDb250cmFzdCBDQUZpbHRlcjogaW5wdXRDb2xvck1hdHJpeAorICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAg
ICAgICB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVy
KCpvcCk7CisjZWxzZQorICAgICAgICAvLyBDb250cmFzdCBDSUZpbHRlcjogaW5wdXRDb250cmFz
dAorICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlz
RGVmYXVsdCgpKSB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAgICAgYW1vdW50ID0gb3At
PmFtb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsKKyNlbmRpZgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgLy8g
Q0lGaWx0ZXI6IGlucHV0UmFkaXVzCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dFJhZGl1cwor
ICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKKworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNE
ZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qIG9wID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAg
ICAgICAgICBhbW91bnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5zdGREZXZpYXRpb24oKSwg
MCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0gcmV0YWluXSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHZhbHVlOworfQorCisjaWYgVVNFX0NBX0ZJTFRFUlMKK1JldGFpblB0cjxOU1ZhbHVlPiBQbGF0
Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVy
YXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi5n
ZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsK
KyAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgb3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4oZmlsdGVyT3Bl
cmF0aW9uKTsKKyAgICAgICAgZG91YmxlIHQgPSBvcC5hbW91bnQoKTsKKyAgICAgICAgdCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7CisgICAgICAgIENBQ29sb3JNYXRyaXggY29s
b3JNYXRyaXggPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMF0sIHQp
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5v
bmVDb25zdGFudHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsxXSwgdCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1swXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzJdLCB0KSksIDAsIDAsCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5v
bmVDb25zdGFudHNbMV1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVswXSwgdCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1sxXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzFdLCB0KSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzJdLCBz
ZXBpYUZ1bGxDb25zdGFudHNbMV1bMl0sIHQpKSwgMCwgMCwKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1syXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCB0KSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBz
ZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENv
bnN0YW50c1syXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAg
ICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpj
b2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsK
KyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgb3Ag
PSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Jj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gb3AuYW1vdW50KCk7
CisgICAgICAgIGlmIChvcC5pc0RlZmF1bHQoKSkKKyAgICAgICAgICAgIGFtb3VudCA9IDA7CisK
KyAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IDEgLSBhbW91bnQgKiAyOworICAgICAgICBDQUNv
bG9yTWF0cml4IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgbXVsdGlwbGllciwgMCwgMCwg
MCwgYW1vdW50LAorICAgICAgICAgICAgMCwgbXVsdGlwbGllciwgMCwgMCwgYW1vdW50LAorICAg
ICAgICAgICAgMCwgMCwgbXVsdGlwbGllciwgMCwgYW1vdW50LAorICAgICAgICAgICAgMCwgMCwg
MCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FD
b2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOiB7CisgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiY+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgIGZsb2F0IGFtb3VudCA9
IG9wLmFtb3VudCgpOworICAgICAgICBpZiAob3AuaXNEZWZhdWx0KCkpCisgICAgICAgICAgICBh
bW91bnQgPSAxOworCisgICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRyaXggPSB7CisgICAg
ICAgICAgICAxLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCwKKyAgICAg
ICAgICAgIDAsIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAwLCAwLCAwLCBhbW91bnQsIDAKKyAg
ICAgICAgfTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6
Y29sb3JNYXRyaXhdOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYg
b3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gb3AuYW1vdW50
KCk7CisgICAgICAgIGlmIChvcC5pc0RlZmF1bHQoKSkKKyAgICAgICAgICAgIGFtb3VudCA9IDE7
CisKKyAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKyAgICAg
ICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKKyAgICAgICAgICAgIGFtb3VudCwgMCwg
MCwgMCwgaW50ZXJjZXB0LAorICAgICAgICAgICAgMCwgYW1vdW50LCAwLCAwLCBpbnRlcmNlcHQs
CisgICAgICAgICAgICAwLCAwLCBhbW91bnQsIDAsIGludGVyY2VwdCwKKyAgICAgICAgICAgIDAs
IDAsIDAsIDEsIDAKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0
aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzogeworICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICBmbG9hdCBh
bW91bnQgPSBvcC5hbW91bnQoKTsKKyAgICAgICAgaWYgKG9wLmlzRGVmYXVsdCgpKQorICAgICAg
ICAgICAgYW1vdW50ID0gMTsKKworICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0g
eworICAgICAgICAgICAgYW1vdW50LCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgYW1vdW50
LCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgYW1vdW50LCAwLCAwLAorICAgICAgICAgICAg
MCwgMCwgMCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVX
aXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKyNlbmRpZgorCitpbnQgUGxhdGZv
cm1DQUZpbHRlcnM6Om51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyNpZiBVU0VfQ0FfRklMVEVSUworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAxOwor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHJldHVybiAx
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4gMTsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gMTsKKyAgICBkZWZhdWx0OiByZXR1cm4gMDsKKyAgICB9
CisjZWxzZQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogcmV0
dXJuIDM7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gMTsKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogcmV0dXJuIDE7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDogcmV0dXJuIDQ7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOiByZXR1cm4gMzsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVy
biAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gMTsKKyAgICBkZWZh
dWx0OiByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKK30KKworY29uc3QgY2hhciogUGxhdGZvcm1D
QUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQoreworI2lm
IFVTRV9DQV9GSUxURVJTCisgICAgVU5VU0VEX1BBUkFNKGludGVybmFsRmlsdGVyUHJvcGVydHlJ
bmRleCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRTogcmV0dXJuICJpbnB1dEFtb3VudCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOnJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNBVFVSQVRFOiByZXR1cm4gImlucHV0QW1vdW50IjsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURTogcmV0dXJuICJpbnB1dEFuZ2xlIjsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgiOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgiOworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgi
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbG9y
TWF0cml4IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuICJpbnB1dFJh
ZGl1cyI7CisgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgIH0KKyNlbHNlCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuICJp
bnB1dEludGVuc2l0eSI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBzd2l0Y2ggKGludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJldHVybiAiaW5wdXRSVmVj
dG9yIjsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gImlucHV0R1ZlY3RvciI7CisgICAgICAgIGNh
c2UgMjogcmV0dXJuICJpbnB1dEJWZWN0b3IiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7
CisgICAgICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAi
aW5wdXRTYXR1cmF0aW9uIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTog
cmV0dXJuICJpbnB1dEFuZ2xlIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgor
ICAgICAgICBzd2l0Y2ggKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBj
YXNlIDA6IHJldHVybiAiaW5wdXRSVmVjdG9yIjsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gImlu
cHV0R1ZlY3RvciI7CisgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnB1dEJWZWN0b3IiOworICAg
ICAgICBjYXNlIDM6IHJldHVybiAiaW5wdXRCaWFzVmVjdG9yIjsKKyAgICAgICAgZGVmYXVsdDog
cmV0dXJuICIiOworICAgICAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
IHJldHVybiAiaW5wdXRBVmVjdG9yIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6IHJldHVybiAiaW5wdXRDb250cmFzdCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJM
VVI6IHJldHVybiAiaW5wdXRSYWRpdXMiOworICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICB9
CisjZW5kaWYKK30KKworI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQppbmRl
eCBhMWFmM2EwMzg0YzAxZDM1ZTZlNzg0OTQ0MzNlZjVmZjc2YmI2YWI4Li4xOGY4MzhjYmYzODNm
ODUzZjJkMmM0Y2IzNTY5NGVkMjJkODI1NjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0K
QEAgLTMxLDEwICszMSwxMCBAQAogCiAjaW1wb3J0ICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgog
I2ltcG9ydCAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBRmlsdGVycy5o
IgogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogI2ltcG9y
dCAiV2ViVGlsZWRMYXllci5oIgpAQCAtMTExLDM3ICsxMTEsNiBAQCBzdGF0aWMgZG91YmxlIG1l
ZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKICNlbmRpZgogQGVuZAogCi0v
LyBOb3QgYWxsIENBRmlsdGVycyBhcmUgcHJvdmlkZWQgb24gTGlvbi4KLSNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKLUBpbnRlcmZhY2UgQ0FGaWx0ZXIgOiBOU09i
amVjdCA8TlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nLCBOU0NvZGluZz4KLUBlbmQKLQotQGlu
dGVyZmFjZSBDQUZpbHRlciAoRGV0YWlscykKLUBwcm9wZXJ0eShjb3B5KSBOU1N0cmluZyAqbmFt
ZTsKLSsgKENBRmlsdGVyICopZmlsdGVyV2l0aFR5cGU6KE5TU3RyaW5nICopdHlwZTsKLUBlbmQK
LQotZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JNYXRyaXg7Ci1leHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBrQ0FGaWx0ZXJDb2xvck1vbm9jaHJvbWU7Ci1leHRlcm4gTlNTdHJp
bmcgKiBjb25zdCBrQ0FGaWx0ZXJDb2xvckh1ZVJvdGF0ZTsKLWV4dGVybiBOU1N0cmluZyAqIGNv
bnN0IGtDQUZpbHRlckNvbG9yU2F0dXJhdGU7Ci1leHRlcm4gTlNTdHJpbmcgKiBjb25zdCBrQ0FG
aWx0ZXJHYXVzc2lhbkJsdXI7Ci0KLXN0cnVjdCBDQUNvbG9yTWF0cml4Ci17Ci0gICAgZmxvYXQg
bTExLCBtMTIsIG0xMywgbTE0LCBtMTU7Ci0gICAgZmxvYXQgbTIxLCBtMjIsIG0yMywgbTI0LCBt
MjU7Ci0gICAgZmxvYXQgbTMxLCBtMzIsIG0zMywgbTM0LCBtMzU7Ci0gICAgZmxvYXQgbTQxLCBt
NDIsIG00MywgbTQ0LCBtNDU7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBDQUNvbG9yTWF0cml4IENB
Q29sb3JNYXRyaXg7Ci0KLUBpbnRlcmZhY2UgTlNWYWx1ZSAoRGV0YWlscykKLSsgKE5TVmFsdWUg
Kil2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OihDQUNvbG9yTWF0cml4KXQ7Ci1AZW5kCi0jZW5kaWYK
LQogc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAiV0tQ
bGF0Zm9ybUNBTGF5ZXIiOwogCiBib29sIFBsYXRmb3JtQ0FMYXllcjo6aXNWYWx1ZUZ1bmN0aW9u
U3VwcG9ydGVkKCkKQEAgLTIxMCw3ICsxNzksNyBAQCBQbGF0Zm9ybUNBTGF5ZXI6OlBsYXRmb3Jt
Q0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdAog
ICAgICAgICBtX2xheWVyVHlwZSA9IGxheWVyVHlwZTsKICAgICAKICAgICAgICAgQ2xhc3MgbGF5
ZXJDbGFzcyA9IE5pbDsKLSAgICAgICAgc3dpdGNoKGxheWVyVHlwZSkgeworICAgICAgICBzd2l0
Y2ggKGxheWVyVHlwZSkgewogICAgICAgICAgICAgY2FzZSBMYXllclR5cGVMYXllcjoKICAgICAg
ICAgICAgIGNhc2UgTGF5ZXJUeXBlUm9vdExheWVyOgogICAgICAgICAgICAgICAgIGxheWVyQ2xh
c3MgPSBbQ0FMYXllciBjbGFzc107CkBAIC00MTUsNyArMzg0LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFu
aW1hdGlvbioKICAgICB9CiAgICAgCiAgICAgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogcHJvcGVydHlB
bmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oYW5pbWF0aW9uLT5w
bGF0Zm9ybUFuaW1hdGlvbigpKTsKLQorICAgIE5TTG9nKEAiQWRkaW5nIGFuaW1hdGlvbiAlQCBm
b3Iga2V5ICVAIiwgcHJvcGVydHlBbmltYXRpb24sIChOU1N0cmluZyopa2V5KTsKICAgICBpZiAo
IVtwcm9wZXJ0eUFuaW1hdGlvbiBkZWxlZ2F0ZV0pCiAgICAgICAgIFtwcm9wZXJ0eUFuaW1hdGlv
biBzZXREZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9kZWxlZ2F0ZS5nZXQoKSldOwogICAgICAK
QEAgLTcxMCwyODQgKzY3OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZs
b2F0IHZhbHVlKQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7Ci0gICAgaWYg
KCFmaWx0ZXJzLnNpemUoKSkgewotICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RmlsdGVyczpuaWxdOwotICAgICAgICBbbV9sYXll
ci5nZXQoKSBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplWmVyb107Ci0gICAgICAgIFttX2xheWVyLmdl
dCgpIHNldFNoYWRvd0NvbG9yOm5pbF07Ci0gICAgICAgIFttX2xheWVyLmdldCgpIHNldFNoYWRv
d1JhZGl1czowXTsKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93T3BhY2l0eTowXTsK
LSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkIHdhcyBjYWxsZWQg
YW5kIGl0IHJldHVybmVkIHRydWUuCi0gICAgQVNTRVJUKGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
ZmlsdGVycykpOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIAot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkoQWRvcHROUywgW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF0pOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
aWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gU3RyaW5n
Ojpmb3JtYXQoImZpbHRlcl8lZCIsIGkpOwotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVy
T3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBhc3N1
bWUgZHJvcCBzaGFkb3cgaXMgdGhlIGxhc3QgZmlsdGVyLCBwdXQgaXQgb24gdGhlIGxheWVyLgot
ICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEwOTU5OTY5PiBIYW5kbGUgY2FzZSB3aGVy
ZSBkcm9wLXNoYWRvdyBpcyBub3QgdGhlIGxhc3QgZmlsdGVyLgotICAgICAgICAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFttX2xh
eWVyLmdldCgpIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKG9wLT54KCksIG9wLT55KCkpXTsK
LQotICAgICAgICAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgICAgICAgICAgb3AtPmNv
bG9yKCkuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJd
LCBjb21wb25lbnRzWzNdKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
ICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yKEFkb3B0Q0YsIENHQ29sb3JDcmVh
dGUoY29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOwotICAgICAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0U2hhZG93Q29sb3I6Y29sb3IuZ2V0KCldOwotICAgICAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0U2hhZG93UmFkaXVzOm9wLT5zdGREZXZpYXRpb24oKV07Ci0gICAgICAgICAgICBb
bV9sYXllci5nZXQoKSBzZXRTaGFkb3dPcGFjaXR5OjFdOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLS8vIE5vdCBhbGwgQ0FGaWx0ZXJzIGFyZSBwcm92aWRlZCBvbiBMaW9uLgotI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FG
aWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1v
bm9jaHJvbWVdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKLSAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgY29uc3QgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVy
Q29sb3JNYXRyaXhdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgdCA9IG9wLT5h
bW91bnQoKTsKLSAgICAgICAgICAgIHQgPSBtaW4obWF4KDAuMCwgdCksIDEuMCk7Ci0KLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcHV0IHRoZXNlIHZhbHVlcyBpbnRvIGNvbnN0YW50cyAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KLSAgICAgICAg
ICAgIENBQ29sb3JNYXRyaXggc2VwaWFNYXRyaXggPSB7Ci0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKDEuMCwgMC4zOTMsIHQpKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKDAuMCwgMC43NjksIHQpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KFdlYkNvcmU6OmJsZW5kKDAuMCwgMC4xODksIHQpKSwgMCwgMCwKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoMC4wLCAwLjM0OSwgdCkpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoMS4wLCAwLjY4NiwgdCkpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oV2ViQ29yZTo6YmxlbmQoMC4wLCAwLjE2OCwgdCkpLCAwLCAwLAotICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZCgwLjAsIDAuMjcyLCB0KSksIHN0
YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZCgwLjAsIDAuNTM0LCB0KSksIHN0YXRpY19j
YXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZCgxLjAsIDAuMTMxLCB0KSksIDAsIDAsCi0gICAgICAg
ICAgICAgICAgMCwgMCwgMCwgMSwgMAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OnNlcGlhTWF0cml4
XSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5h
bWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRl
cl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAq
ZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yU2F0dXJhdGVd
OwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmpl
Y3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAg
Q0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xv
ckh1ZVJvdGF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6QCJodWVSb3RhdGUiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBl
OmtDQUZpbHRlckNvbG9yTWF0cml4XTsKLQotICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9
IDEgLSBvcC0+YW1vdW50KCkgKiAyOwotCi0gICAgICAgICAgICBDQUNvbG9yTWF0cml4IGludmVy
dE1hdHJpeCA9IHsKLSAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLCAwLCAwLCAwLCBzdGF0aWNf
Y2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwKLSAgICAgICAgICAgICAgICAwLCBtdWx0aXBsaWVy
LCAwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwKLSAgICAgICAgICAgICAg
ICAwLCAwLCBtdWx0aXBsaWVyLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwK
LSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCi0gICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6aW52
ZXJ0TWF0cml4XSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07Ci0gICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NB
RmlsdGVyQ29sb3JNYXRyaXhdOwotCi0gICAgICAgICAgICBDQUNvbG9yTWF0cml4IG9wYWNpdHlN
YXRyaXggPSB7Ci0gICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAwLCAxLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsCi0gICAgICAg
ICAgICAgICAgMCwgMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9wLT5hbW91bnQoKSksIDAKLSAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TVmFsdWUgdmFs
dWVXaXRoQ0FDb2xvck1hdHJpeDpvcGFjaXR5TWF0cml4XSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0
cml4Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAg
ICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmls
dGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyR2F1c3NpYW5C
bHVyXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmls
dGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKLQot
ICAgICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIG9wLT5hbW91bnQoKSArIDAuNTsK
LQotICAgICAgICAgICAgQ0FDb2xvck1hdHJpeCBjb250cmFzdE1hdHJpeCA9IHsKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwgMCwgMCwgMCwgaW50ZXJj
ZXB0LAotICAgICAgICAgICAgICAgIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkp
LCAwLCAwLCBpbnRlcmNlcHQsCi0gICAgICAgICAgICAgICAgMCwgMCwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG9wLT5hbW91bnQoKSksIDAsIGludGVyY2VwdCwKLSAgICAgICAgICAgICAgICAwLCAwLCAw
LCAxLCAwCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltO
U1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29udHJhc3RNYXRyaXhdIGZvcktleTpAImlu
cHV0Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIg
KmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENBQ29sb3JNYXRyaXggYnJpZ2h0bmVzc01hdHJp
eCA9IHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwg
MCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFt
b3VudCgpKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCBzdGF0aWNfY2FzdDxmbG9h
dD4ob3AtPmFtb3VudCgpKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCi0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU1ZhbHVlIHZh
bHVlV2l0aENBQ29sb3JNYXRyaXg6YnJpZ2h0bmVzc01hdHJpeF0gZm9yS2V5OkAiaW5wdXRDb2xv
ck1hdHJpeCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAg
ICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1vbm9jaHJvbWUiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRJbnRlbnNp
dHkiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJQ29sb3IgY29sb3JXaXRoUmVk
OjEgZ3JlZW46MSBibHVlOjFdIGZvcktleTpAImlucHV0Q29sb3IiXTsKLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJ
RmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4
Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLQotICAgICAgICAgICAgZG91
YmxlIHQgPSBvcC0+YW1vdW50KCk7Ci0gICAgICAgICAgICB0ID0gbWluKG1heCgwLjAsIHQpLCAx
LjApOwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDpXZWJDb3JlOjpibGVuZCgxLjAsIDAuMzkzLCB0KSBZOldlYkNvcmU6OmJsZW5kKDAuMCwgMC43
NjksIHQpIFo6V2ViQ29yZTo6YmxlbmQoMC4wLCAwLjE4OSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1
dFJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOldlYkNvcmU6OmJsZW5kKDAuMCwgMC4zNDksIHQpIFk6V2ViQ29yZTo6YmxlbmQoMS4w
LCAwLjY4NiwgdCkgWjpXZWJDb3JlOjpibGVuZCgwLjAsIDAuMTY4LCB0KSBXOjBdIGZvcktleTpA
ImlucHV0R1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6V2ViQ29yZTo6YmxlbmQoMC4wLCAwLjI3MiwgdCkgWTpXZWJDb3JlOjpibGVu
ZCgwLjAsIDAuNTM0LCB0KSBaOldlYkNvcmU6OmJsZW5kKDEuMCwgMC4xMzEsIHQpIFc6MF0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTow
IFo6MCBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRl
ciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVj
dDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lG
aWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JDb250cm9s
cyJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JL
ZXk6QCJpbnB1dFNhdHVyYXRpb24iXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0
ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRl
ciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJSHVlQWRqdXN0Il07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJyYWQob3AtPmFtb3VudCgpKV0gZm9yS2V5OkAi
aW5wdXRBbmdsZSJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwot
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
ewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLQotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIg
PSAxIC0gb3AtPmFtb3VudCgpICogMjsKLQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5w
dXRSVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDowIFk6bXVsdGlwbGllciBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTow
IFo6bXVsdGlwbGllciBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MV0gZm9y
S2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDpvcC0+YW1vdW50KCkgWTpvcC0+YW1vdW50KCkgWjpvcC0+YW1vdW50
KCkgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCi0gICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDoxIFk6MCBaOjAgVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWToxIFo6MCBXOjBdIGZvcktleTpAImlucHV0R1ZlY3Rv
ciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
MCBZOjAgWjoxIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzpvcC0+YW1vdW50
KCldIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFz
VmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAg
ICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAg
ICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIHN0ZERldmlhdGlvblkuCi0gICAg
ICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lG
aWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJR2F1c3NpYW5CbHVy
Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG9wLT5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpAImlucHV0UmFkaXVzIl07Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldp
dGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0Q29udHJhc3QiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJQ29sb3JDb250cm9scyJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0
c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEJyaWdodG5lc3MiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChbYXJyYXkuZ2V0KCkgY291
bnRdID4gMCkKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RmlsdGVyczphcnJheS5nZXQoKV07
Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFBsYXRmb3JtQ0FGaWx0
ZXJzOjpzZXRGaWx0ZXJzT25MYXllcih0aGlzLCBmaWx0ZXJzKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OmNvcHlGaWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZUxh
eWVyKQpAQCAtMTAwNSw3ICs2OTcsNyBAQCBib29sIFBsYXRmb3JtQ0FMYXllcjo6ZmlsdGVyc0Nh
bkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogICAgICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewogICAg
ICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQo
aSk7Ci0gICAgICAgIHN3aXRjaChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkg
eworICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CiAjaWYgRU5BQkxFKENT
U19TSEFERVJTKQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192479</attachid>
            <date>2013-03-11 08:57:05 -0700</date>
            <delta_ts>2013-03-11 10:55:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111905-20130311085304.patch</filename>
            <type>text/plain</type>
            <size>83248</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzljMmUwYmU5YWYzMjVk
NTg4ZTYwNzRiNmZjZGE2MmNkY2YxNDdjMi4uNmNhZDM5YjAxOWZkMTA4YTExZWIyOGM4Y2Y5MTlj
NDQ0ZjJmZDdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAzLTEwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtDQV0gQW5pbWF0
aW9ucyBvZiBDU1MgZmlsdGVycyBkb24ndCB3b3JrIGNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExOTA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHZhcmlvdXMgaXNzdWVzIHdpdGgg
dHJhbnNpdGlvbnMgb2YgY29tcG9zaXRlZCBmaWx0ZXJzIG9uIE1hYywKKyAgICAgICAgbW9zdCBv
ZiB3aGljaCBzdGVtbWVkIGZyb20gdGhlIGNvbnZlcnNpb24gdG8gdXNlIENBRmlsdGVyLgorICAg
ICAgICAKKyAgICAgICAgUHV0IHRoZSBNYWMgQ0EgZmlsdGVyLXJlbGF0ZWQgY29kZSBpbnRvIGEg
bmV3IGZpbGUsIFBsYXRmb3JtQ0FGaWx0ZXJzLAorICAgICAgICB0byBncm91cCBjb2RlIHRoYXQg
Y3JlYXRlcyBmaWx0ZXIgcHJvcGVydGllcyBpbnRvIGEgc2luZ2xlIHBsYWNlLgorICAgICAgICAK
KyAgICAgICAgQW5pbWF0aW9ucyBvZiBDSUZpbHRlcnMgdXNpbmcgbXVsdGlwbGUgdmFsdWVzIG5l
dmVyIHdvcmtlZCBjb3JyZWN0bHksCisgICAgICAgIGJlY2F1c2Ugd2Ugd291bGQgY2xvYmJlciBh
bGwgYnV0IHRoZSBsYXN0IHByb3BlcnR5IGZvciBlYWNoIGZpbHRlciwKKyAgICAgICAgc28gZml4
IHRoYXQuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VzIGluIHRoZSBtb3ZlZCBmaWx0ZXIgY29k
ZToKKyAgICAgICAgICAgIC0gTWFkZSB1c2Ugb2Ygc2VwaWFGdWxsQ29uc3RhbnRzIGluIHRoZSBD
SUZpbHRlciBhbmQgQ0FGaWx0ZXIgY29kZS4KKyAgICAgICAgICAgIC0gRm9yIENJLCByZXR1cm4g
Q0lWZWN0b3JzIGluc3RlYWQgb2YgTlNBcnJheXMgb2YgTlNOdW1iZXJzLgorICAgICAgICAgICAg
LSBGdWRnZSB0aGUgaW5wdXRDb2xvciBmb3IgdGhlIENJIGdyYXlzY2FsZSBmaWx0ZXIgdG8gYmV0
dGVyIG1hdGNoIHNvZnR3YXJlIGZpbHRlcnMuCisgICAgICAgICAgICAtIGZpeCBzb21lIGNhc2Vz
IHdoZXJlIHRoZSBiZWhhdmlvciB3YXMgd3JvbmcgaW4gdGhlIGlzRGVmYXVsdCgpIGNhc2UuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBQbGF0Zm9y
bUNBRmlsdGVycy5oLCBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKTogVGhpcyBmdW5jdGlvbiB3YXMgY3Jl
YXRpbmcgYSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBub24tQVNDSUkgY2hhcmFjdGVycy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YW5pbWF0aW9uSWRlbnRpZmllcik6IFRvIGhhbmRsZSBDSUZpbHRlciBh
bmltYXRpb25zLCB3ZSBuZWVkIHRvIHRhY2sgYW5vdGhlcgorICAgICAgICBpbmRleCBvbnRvIHRo
ZSBhbmltYXRpb24gaWRlbnRpZmllciwgc2luY2Ugc29tZSBhbmltYXRpb25zIHJlcXVpcmUgYW5p
bWF0aW5nIG11bHRpcGxlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIHNhbWUgQ0lGaWx0ZXIu
IEFkZCAic3ViSW5kZXgiIGZvciB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlv
bk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbjo6
TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbik6CisgICAgICAgIChMYXllclByb3BlcnR5QW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uKTogRnVuY3Rpb25zIG1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6IEFkZGVkLgorICAg
ICAgICAoUGxhdGZvcm1DQUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRv
VmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW06IEFk
ZGVkLgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVy
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRp
ZXMpOgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZCk6CisKIDIwMTMtMDMtMTEgIEFsYmVydG8gR2FyY2lhICA8YWdh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBHcmFwaGljc0xheWVyOiBy
ZW5hbWUgbm90aWZ5U3luY1JlcXVpcmVkIHRvIG5vdGlmeUZsdXNoUmVxdWlyZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhNjUx
ZDI2Y2YyYjA1MzU5YzNiOTI3NTRkZmQ2OTQzMDYxODUzMzRiLi4zYThhYjY4MTA3OGJiNGI5OWNl
YWRiZDlhMjA3YzRhZDk5OTgxNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDUsNiArMjQ1LDggQEAKIAkJMEM0NTM0Mjgx
MENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1
NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMDkwODdGMTQ0NEZEQjIw
MDAyODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xsYmFy
VGhlbWUuY3BwICovOyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsg
fTsKKwkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQw
Q0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgfTsKKwkJMEYxMzE2NDAxNkVE
MENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8q
IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3MDAwMENF
NDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovOyB9OwogCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5
NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjlDMTZEMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwICovOyB9OwogCQkwRjNERDQ0RjEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi87IH07CkBA
IC03NTY5LDYgKzc1NzEsOCBAQAogCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBwYXRoID0gY2EvUGxh
dGZvcm1DQUZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxMzE2M0Yx
NkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHBhdGgg
PSBjYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjlDMTZEMTMwMEMyRTIwMDJENzk0
RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Qmx1ci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTg5Myw2ICsxNTg5Nyw3IEBACiAJCQkJOTNGNzJB
RjExNjY2RURGQzAwMkEwMkJEIC8qIExheWVyUG9vbC5oICovLAogCQkJCTkzRjcyQUYyMTY2NkVE
RkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8sCiAJCQkJNDk1ODc4MUYxMkE1N0RERjAwNzIz
OEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0gKi8sCisJCQkJMEYxMzE2M0YxNkVEMENE
RTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovLAogCQkJCTQ5NTg3ODIwMTJB
NTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCiAJCQkJMUFBNzE2MDkx
NDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8sCiAJCQkJMUFBNzE2MDgxNDlC
QzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovLApAQCAtMTU5MzgsNiArMTU5NDMs
NyBAQAogCQkJCTI5MTdCNTVGMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVy
LmggKi8sCiAJCQkJMjkxN0I1NjAxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQuaCAqLywKIAkJCQk0OTlCM0VEQzEyOERCNTAxMDBFNzI2QzIgLyogUGxhdGZvcm1D
QUFuaW1hdGlvbi5oICovLAorCQkJCTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9y
bUNBRmlsdGVycy5oICovLAogCQkJCTQ5OUIzRUMzMTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9y
bUNBTGF5ZXIuaCAqLywKIAkJCQk0OTNFNUUwODEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1D
QUxheWVyQ2xpZW50LmggKi8sCiAJCQkJNDk0QkM0MEMxMkFFREQ5RTAwNzQzQkQyIC8qIFRyYW5z
Zm9ybWF0aW9uTWF0cml4Q0EuY3BwICovLApAQCAtMjY3MDMsNiArMjY3MDksNyBAQAogCQkJCTdF
QTMwRjZBMTZERkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEODI4N0Y3MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OTU3MEEwMTZFOUJENTkwMDE4NEU1NSAvKiBI
VE1MSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxMzE2M0UxNkVEMENDODAwMzVD
QzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI5OTA3LDYgKzI5
OTE0LDcgQEAKIAkJCQk3RUEzMEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEODI4N0Y2MTZFNEEwMzgwMDg2
QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5NTcwOUYx
NkU5QkQ1OTAwMTg0RTU1IC8qIEhUTUxJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyLmNwcAppbmRleCBjYmI5ODJiY2U3YThkZDg4YWZlY2I2MzcxNGRlN2IxMDBkYmU5
YTBkLi5hZTYzZTZiOThkYzk4N2JlMDg4ZjFkMmU1Y2UyNDcxNWQxYTAyMWY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAt
MzMyLDcgKzMzMiw3IEBAIFN0cmluZyBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJh
bnNpdGlvbihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgLy8gfCBpcyBub3QgYSB2
YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlciBpbiBDU1MsIHNvIHRoaXMgY2FuIG5ldmVyIGNvbmZs
aWN0IHdpdGggYSBrZXlmcmFtZSBpZGVudGlmaWVyLgogICAgIFN0cmluZ0J1aWxkZXIgaWQ7CiAg
ICAgaWQuYXBwZW5kTGl0ZXJhbCgiLXx0cmFuc2l0aW9uIik7Ci0gICAgaWQuYXBwZW5kKHN0YXRp
Y19jYXN0PGNoYXI+KHByb3BlcnR5KSk7CisgICAgaWQuYXBwZW5kTnVtYmVyKHN0YXRpY19jYXN0
PGludD4ocHJvcGVydHkpKTsKICAgICBpZC5hcHBlbmQoJy0nKTsKICAgICByZXR1cm4gaWQudG9T
dHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDM3NDUxYjEwYzM3MzRhMDIwMjg2NTc4NGQ1
MjQzOGJjMTkyODI1MmEuLjIxZGEzODdkMTNkNGE3OWE4ZTNmMTI1NmZiMWI1Njg3YTY4ZWMyMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJG
YWN0b3J5LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUZpbHRlcnMuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNp
bmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgpAQCAtMjI3LDkgKzIyOCw5IEBAIHN0
YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSkKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgaW50IGluZGV4KQorc3RhdGljIFN0cmluZyBhbmltYXRpb25JZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBpbnQgaW5k
ZXgsIGludCBzdWJJbmRleCkKIHsKLSAgICByZXR1cm4gYW5pbWF0aW9uTmFtZSArICdfJyArIFN0
cmluZzo6bnVtYmVyKHByb3BlcnR5KSArICdfJyArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAg
ICByZXR1cm4gYW5pbWF0aW9uTmFtZSArICdfJyArIFN0cmluZzo6bnVtYmVyKHByb3BlcnR5KSAr
ICdfJyArIFN0cmluZzo6bnVtYmVyKGluZGV4KSArICdfJyArIFN0cmluZzo6bnVtYmVyKHN1Yklu
ZGV4KTsKIH0KIAogc3RhdGljIGJvb2wgYW5pbWF0aW9uSGFzU3RlcHNUaW1pbmdGdW5jdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW0p
CkBAIC00OTcsNyArNDk4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmlt
YXRpb25zKE1vdmVPckNvcHkgb3BlcmF0aW9uLCBQbGF0Zm9ybUNBTGF5ZXIKICAgICAgICAgICAg
ICAgICAgICAgfHwgY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXIKICNlbmRpZgogICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBt
b3ZlT3JDb3B5TGF5ZXJBbmltYXRpb24ob3BlcmF0aW9uLCBhbmltYXRpb25JZGVudGlmaWVyKGN1
cnJBbmltYXRpb24ubV9uYW1lLCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRp
b24ubV9pbmRleCksIGZyb21MYXllciwgdG9MYXllcik7CisgICAgICAgICAgICAgICAgbW92ZU9y
Q29weUxheWVyQW5pbWF0aW9uKG9wZXJhdGlvbiwgYW5pbWF0aW9uSWRlbnRpZmllcihjdXJyQW5p
bWF0aW9uLm1fbmFtZSwgY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uLm1f
aW5kZXgsIGN1cnJBbmltYXRpb24ubV9zdWJJbmRleCksIGZyb21MYXllciwgdG9MYXllcik7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xODA1LDEwICsxODA2LDEwIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICBjb25zdCBMYXllclBy
b3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewogICAgICAgICAgICAgICAg
IGNhc2UgUmVtb3ZlOgotICAgICAgICAgICAgICAgICAgICByZW1vdmVDQUFuaW1hdGlvbkZyb21M
YXllcihjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1lLCBjdXJyQW5p
bWF0aW9uLm1faW5kZXgpOworICAgICAgICAgICAgICAgICAgICByZW1vdmVDQUFuaW1hdGlvbkZy
b21MYXllcihjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1lLCBjdXJy
QW5pbWF0aW9uLm1faW5kZXgsIGN1cnJBbmltYXRpb24ubV9zdWJJbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUGF1c2U6Ci0gICAgICAgICAg
ICAgICAgICAgIHBhdXNlQ0FBbmltYXRpb25PbkxheWVyKGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0
eSwgY3VyckFuaW1hdGlvbk5hbWUsIGN1cnJBbmltYXRpb24ubV9pbmRleCwgcHJvY2Vzc2luZ0lu
Zm8udGltZU9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHBhdXNlQ0FBbmltYXRpb25Pbkxh
eWVyKGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0eSwgY3VyckFuaW1hdGlvbk5hbWUsIGN1cnJBbmlt
YXRpb24ubV9pbmRleCwgY3VyckFuaW1hdGlvbi5tX3N1YkluZGV4LCBwcm9jZXNzaW5nSW5mby50
aW1lT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTgyNCw3ICsxODI1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUFuaW1hdGlvbnMoKQogICAgIGlmICgobnVtQW5pbWF0aW9ucyA9IG1fdW5jb21p
dHRlZEFuaW1hdGlvbnMuc2l6ZSgpKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUFuaW1hdGlvbnM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbiYgcGVuZGluZ0FuaW1hdGlvbiA9IG1fdW5jb21pdHRlZEFuaW1hdGlvbnNbaV07Ci0g
ICAgICAgICAgICBzZXRBbmltYXRpb25PbkxheWVyKHBlbmRpbmdBbmltYXRpb24ubV9hbmltYXRp
b24uZ2V0KCksIHBlbmRpbmdBbmltYXRpb24ubV9wcm9wZXJ0eSwgcGVuZGluZ0FuaW1hdGlvbi5t
X25hbWUsIHBlbmRpbmdBbmltYXRpb24ubV9pbmRleCwgcGVuZGluZ0FuaW1hdGlvbi5tX3RpbWVP
ZmZzZXQpOworICAgICAgICAgICAgc2V0QW5pbWF0aW9uT25MYXllcihwZW5kaW5nQW5pbWF0aW9u
Lm1fYW5pbWF0aW9uLmdldCgpLCBwZW5kaW5nQW5pbWF0aW9uLm1fcHJvcGVydHksIHBlbmRpbmdB
bmltYXRpb24ubV9uYW1lLCBwZW5kaW5nQW5pbWF0aW9uLm1faW5kZXgsIHBlbmRpbmdBbmltYXRp
b24ubV9zdWJJbmRleCwgcGVuZGluZ0FuaW1hdGlvbi5tX3RpbWVPZmZzZXQpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBbmltYXRpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fcnVubmluZ0Fu
aW1hdGlvbnMuZmluZChwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSk7CiAgICAgICAgICAgICBpZiAo
aXQgPT0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKSkgewpAQCAtMTg1NiwxNCArMTg1NywxNCBA
QCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6aXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRBbmlt
YXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qIGNhQW5pbSwgQW5pbWF0ZWRQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91
YmxlIHRpbWVPZmZzZXQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXll
cihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGludCBzdWJJbmRleCwg
ZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IGFuaW1h
dGVkTGF5ZXIocHJvcGVydHkpOwogICAgIAogICAgIGlmICh0aW1lT2Zmc2V0KQogICAgICAgICBj
YUFuaW0tPnNldEJlZ2luVGltZShDQUN1cnJlbnRNZWRpYVRpbWUoKSAtIHRpbWVPZmZzZXQpOwog
Ci0gICAgU3RyaW5nIGFuaW1hdGlvbklEID0gYW5pbWF0aW9uSWRlbnRpZmllcihhbmltYXRpb25O
YW1lLCBwcm9wZXJ0eSwgaW5kZXgpOworICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFuaW1hdGlv
bklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4LCBzdWJJbmRleCk7CiAK
ICAgICBsYXllci0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKICAgICBsYXll
ci0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwpAQCAtMTg5NSwxMSAr
MTg5NiwxMSBAQCBzdGF0aWMgdm9pZCBidWc3MzExMzY3V29ya2Fyb3VuZChQbGF0Zm9ybUNBTGF5
ZXIqIHRyYW5zZm9ybUxheWVyLCBjb25zdCBUcmFuc2ZvcgogICAgIHRyYW5zZm9ybUxheWVyLT5z
ZXRUcmFuc2Zvcm0oY2FUcmFuc2Zvcm0pOwogfQogCi1ib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVt
b3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCkKK2Jvb2wgR3JhcGhpY3NMYXllckNB
OjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHks
IGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgpCiB7
CiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IGFuaW1hdGVkTGF5ZXIocHJvcGVydHkpOwog
Ci0gICAgU3RyaW5nIGFuaW1hdGlvbklEID0gYW5pbWF0aW9uSWRlbnRpZmllcihhbmltYXRpb25O
YW1lLCBwcm9wZXJ0eSwgaW5kZXgpOworICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFuaW1hdGlv
bklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4LCBzdWJJbmRleCk7CiAK
ICAgICBpZiAoIWxheWVyLT5hbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTIwLDExICsxOTIxLDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHks
IGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUNB
QW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQg
cHJvcGVydHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQgc3Vi
SW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIg
PSBhbmltYXRlZExheWVyKHByb3BlcnR5KTsKIAotICAgIFN0cmluZyBhbmltYXRpb25JRCA9IGFu
aW1hdGlvbklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4KTsKKyAgICBT
dHJpbmcgYW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHBy
b3BlcnR5LCBpbmRleCwgc3ViSW5kZXgpOwogCiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGN1ckFuaW0gPSBsYXllci0+YW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKICAgICBp
ZiAoIWN1ckFuaW0pCkBAIC0xOTkwLDcgKzE5OTEsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6
Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFs
dQogICAgIGlmICghdmFsdWVzT0spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fdW5j
b21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24oY2FBbmltYXRp
b24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRpb25JbmRleCwg
dGltZU9mZnNldCkpOworICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJv
cGVydHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9w
ZXJ0eSgpLCBhbmltYXRpb25JbmRleCwgMCwgdGltZU9mZnNldCkpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMDE0LDcgKzIwMTUsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YXBwZW5k
VG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogICAg
IGlmICghdmFsaWRNYXRyaWNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV91bmNv
bWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihjYUFuaW1hdGlv
biwgYW5pbWF0aW9uTmFtZSwgdmFsdWVMaXN0LnByb3BlcnR5KCksIGFuaW1hdGlvbkluZGV4LCB0
aW1lT2Zmc2V0KSk7CisgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5ZXJQcm9w
ZXJ0eUFuaW1hdGlvbihjYUFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgdmFsdWVMaXN0LnByb3Bl
cnR5KCksIGFuaW1hdGlvbkluZGV4LCAwLCB0aW1lT2Zmc2V0KSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTIwNzYsNyArMjA3Nyw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjphcHBlbmRU
b1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsCiAgICAg
Ym9vbCBpc0tleWZyYW1lID0gdmFsdWVMaXN0LnNpemUoKSA+IDI7CiAgICAgCiAgICAgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wID0gb3BlcmF0aW9uLT5nZXRPcGVyYXRp
b25UeXBlKCk7Ci0gICAgaW50IG51bUFuaW1hdGVkUHJvcGVydGllcyA9IFBsYXRmb3JtQ0FBbmlt
YXRpb246Om51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhmaWx0ZXJPcCk7CisgICAgaW50IG51
bUFuaW1hdGVkUHJvcGVydGllcyA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpudW1BbmltYXRlZEZpbHRl
clByb3BlcnRpZXMoZmlsdGVyT3ApOwogICAgIAogICAgIC8vIEVhY2ggZmlsdGVyIG1pZ2h0IG5l
ZWQgdG8gYW5pbWF0ZSBtdWx0aXBsZSBwcm9wZXJ0aWVzLCBlYWNoIHdpdGggdGhlaXIgb3duIGtl
eVBhdGguIFRoZSBrZXlQYXRoIGlzIGFsd2F5cyBvZiB0aGUgZm9ybToKICAgICAvLwpAQCAtMjA4
OCw3ICsyMDg5LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0ZWRB
bmltYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICBmb3IgKGludCBpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXggPSAwOyBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgg
PCBudW1BbmltYXRlZFByb3BlcnRpZXM7ICsraW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7
CiAgICAgICAgIGJvb2wgdmFsdWVzT0s7CiAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBjYUFuaW1hdGlvbjsKLSAgICAgICAgU3RyaW5nIGtleVBhdGggPSBTdHJpbmc6OmZvcm1h
dCgiZmlsdGVycy5maWx0ZXJfJWQuJXMiLCBhbmltYXRpb25JbmRleCwgUGxhdGZvcm1DQUFuaW1h
dGlvbjo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoZmlsdGVyT3AsIGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkpOworICAgICAgICBTdHJpbmcga2V5UGF0aCA9IFN0cmluZzo6Zm9ybWF0
KCJmaWx0ZXJzLmZpbHRlcl8lZC4lcyIsIGFuaW1hdGlvbkluZGV4LCBQbGF0Zm9ybUNBRmlsdGVy
czo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoZmlsdGVyT3AsIGludGVybmFsRmlsdGVyUHJv
cGVydHlJbmRleCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGlzS2V5ZnJhbWUpIHsKICAgICAg
ICAgICAgIGNhQW5pbWF0aW9uID0gY3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBr
ZXlQYXRoLCBmYWxzZSk7CkBAIC0yMTAwLDcgKzIxMDEsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6YXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbAogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlc09LKTsKIAotICAgICAgICBtX3Vu
Y29taXR0ZWRBbmltYXRpb25zLmFwcGVuZChMYXllclByb3BlcnR5QW5pbWF0aW9uKGNhQW5pbWF0
aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgs
IHRpbWVPZmZzZXQpKTsKKyAgICAgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5
ZXJQcm9wZXJ0eUFuaW1hdGlvbihjYUFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgdmFsdWVMaXN0
LnByb3BlcnR5KCksIGFuaW1hdGlvbkluZGV4LCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgs
IHRpbWVPZmZzZXQpKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXgg
YmUyNmJhNzgzZWQ1NmU2MTQyZGNlNWM4NGE0M2EyYTI4YjFjMmZhOC4uMmFhZjZhOTliMjIyZjMx
ZWNmNWJiY2MxNDFiZDY4MGZhZjE4YzY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTM0OSw5ICszNDksOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXll
clB1cnBvc2UpOwogICAgIFN0cnVjdHVyYWxMYXllclB1cnBvc2Ugc3RydWN0dXJhbExheWVyUHVy
cG9zZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FB
bmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7Ci0gICAgYm9vbCByZW1vdmVDQUFuaW1h
dGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgaW50IGluZGV4KTsKLSAgICB2b2lkIHBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1h
dGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1D
QUFuaW1hdGlvbiosIEFuaW1hdGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBpbnQgaW5kZXgsIGludCBzdWJJbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIGJv
b2wgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgaW50IHN1YklOZGV4KTsKKyAgICB2b2lk
IHBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGludCBzdWJJbmRleCwgZG91YmxlIHRpbWVPZmZz
ZXQpOwogCiAgICAgZW51bSBNb3ZlT3JDb3B5IHsgTW92ZSwgQ29weSB9OwogICAgIHN0YXRpYyB2
b2lkIG1vdmVPckNvcHlMYXllckFuaW1hdGlvbihNb3ZlT3JDb3B5LCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkZW50aWZpZXIsIFBsYXRmb3JtQ0FMYXllciAqZnJvbUxheWVyLCBQbGF0Zm9ybUNB
TGF5ZXIgKnRvTGF5ZXIpOwpAQCAtNDM1LDExICs0MzUsMTIgQEAgcHJpdmF0ZToKICAgICAvLyBU
aGlzIHJlcHJlc2VudHMgdGhlIGFuaW1hdGlvbiBvZiBhIHNpbmdsZSBwcm9wZXJ0eS4gVGhlcmUg
bWF5IGJlIG11bHRpcGxlIHRyYW5zZm9ybSBhbmltYXRpb25zIGZvcgogICAgIC8vIGEgc2luZ2xl
IHRyYW5zaXRpb24gb3Iga2V5ZnJhbWUgYW5pbWF0aW9uLCBzbyBpbmRleCBpcyB1c2VkIHRvIGRp
c3Rpbmd1aXNoIHRoZXNlLgogICAgIHN0cnVjdCBMYXllclByb3BlcnR5QW5pbWF0aW9uIHsKLSAg
ICAgICAgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGNhQW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJv
cGVydHlJRCBwcm9wZXJ0eSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKKyAgICAgICAg
TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNh
QW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQog
ICAgICAgICA6IG1fYW5pbWF0aW9uKGNhQW5pbWF0aW9uKQogICAgICAgICAsIG1fbmFtZShhbmlt
YXRpb25OYW1lKQogICAgICAgICAsIG1fcHJvcGVydHkocHJvcGVydHkpCiAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX3N1YkluZGV4KHN1YkluZGV4KQogICAgICAgICAsIG1f
dGltZU9mZnNldCh0aW1lT2Zmc2V0KQogICAgICAgICB7IH0KIApAQCAtNDQ3LDYgKzQ0OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIFN0cmluZyBtX25hbWU7CiAgICAgICAgIEFuaW1hdGVkUHJvcGVy
dHlJRCBtX3Byb3BlcnR5OwogICAgICAgICBpbnQgbV9pbmRleDsKKyAgICAgICAgaW50IG1fc3Vi
SW5kZXg7CiAgICAgICAgIGRvdWJsZSBtX3RpbWVPZmZzZXQ7CiAgICAgfTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmlt
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAppbmRleCA2YzEyNjMxMTRkMjk5ZDY0YWVmODRkZWE3ZTUxNjg3NzBjNjNhODk3
Li4wOTBkZWY1NmM0YjExMzA3NGM4MmFhNjEwNDU5YzU3ODkxNDA2ZTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oCkBAIC0xMzksMTEgKzEzOSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZl
cnNlID0gZmFsc2UpOwogICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiopOwotICAgIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBz
dGF0aWMgaW50IG51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhbmltYXRlZEZpbHRlclByb3Bl
cnR5TmFtZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGludCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBQbGF0Zm9ybUNBQW5p
bWF0aW9uKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zZjk2ZGZlYjA0NTRjZDkxNDE3ZTIxZjEyZDIxZjY5Nzc4NGVjNWI4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUZpbHRlcnMuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsYXRmb3JtQ0FGaWx0
ZXJzX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUZpbHRlcnNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2luY2x1ZGUgIkZpbHRl
ck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNkZWZpbmUgVVNFX0NBX0ZJTFRFUlMg
MQorI2Vsc2UKKyNkZWZpbmUgVVNFX0NBX0ZJTFRFUlMgMAorI2VuZGlmCisKK09CSkNfQ0xBU1Mg
TlNWYWx1ZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGxhdGZvcm1DQUxheWVyOwor
CitjbGFzcyBQbGF0Zm9ybUNBRmlsdGVycyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0
RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
OworICAgIHN0YXRpYyBpbnQgbnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGFuaW1hdGVkRmls
dGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgaW50IGludGVy
bmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPE5TVmFsdWU+
IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbiosIGludCBpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworCisjaWZkZWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBz
dGF0aWMgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJik7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShD
U1NfRklMVEVSUykKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNl
bmRpZiAvLyBQbGF0Zm9ybUNBRmlsdGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFj
Lm1tCmluZGV4IGFjODY3NTU4NDFiMWZmMmRkZTQ1ZjNjYTkxYWZmNGJiOWQ0NzU3ZTYuLmIwOTIw
ZjI3Nzg2OGIyMWZkZDRiZGMzNDlmOWZlYjFhNmVlY2Q4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjLm1tCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybUNBQW5p
bWF0aW9uLmgiCiAKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCAiTGVuZ3Ro
RnVuY3Rpb25zLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBRmlsdGVycy5oIgogI2ltcG9ydCAiVGlt
aW5nRnVuY3Rpb24uaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9y
dCA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC0zOTIsMTI2ICszOTIsOSBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCiB9
CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1zdGF0aWMgZG91YmxlIHNlcGlhRnVsbENvbnN0
YW50c1szXVszXSA9IHsKLSAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKLSAgICB7IDAuMzQ5
LCAwLjY4NiwgMC4xNjggfSwKLSAgICB7IDAuMjcyLCAwLjUzNCwgMC4xMzEgfQotfTsKLQotc3Rh
dGljIGRvdWJsZSBzZXBpYU5vbmVDb25zdGFudHNbM11bM10gPSB7Ci0gICAgeyAxLCAwLCAwIH0s
Ci0gICAgeyAwLCAxLCAwIH0sCi0gICAgeyAwLCAwLCAxIH0KLX07Ci0KLXN0YXRpYyBkb3VibGUg
aW52ZXJ0Q29uc3RhbnRzWzNdWzNdID0gewotICAgIHsgMSwgMCwgMCB9LAotICAgIHsgMCwgMSwg
MCB9LAotICAgIHsgMCwgMCwgMSB9Ci19OwotCi1zdGF0aWMgUmV0YWluUHRyPGlkPiBmaWx0ZXJW
YWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHlwZSA9IG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIFJldGFp
blB0cjxpZD4gdmFsdWU7Ci0gICAgCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICBkb3Vi
bGUgYW1vdW50ID0gMDsKLSAgICAgICAgCi0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1
bHQoKSkgewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Kj4ob3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpIVUVf
Uk9UQVRFKQotICAgICAgICAgICAgYW1vdW50ID0gZGVnMnJhZChhbW91bnQpOwotCi0gICAgICAg
IHZhbHVlLmFkb3B0TlMoW1tOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0gcmV0YWlu
XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQ
SUE6IHsKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0KLSAgICAgICAgaWYgKCFvcGVyYXRp
b24tPmlzRGVmYXVsdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICAgICAgYW1vdW50ID0gb3AtPmFtb3Vu
dCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOgotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVy
dHlJbmRleF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVtpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXhdLCBhbW91bnQpXSwKLSAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1tpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXhdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1baW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4XSwgYW1vdW50KV0sCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpX
ZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4XVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRl
eF0sIGFtb3VudCldLAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MF0s
Ci0gICAgICAgICAgICBuaWxdIHJldGFpbl0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICBkb3VibGUgYW1vdW50ID0g
MDsKLQotICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KG9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIFRoZSBjb2xvciBtYXRyaXggYW5pbWF0aW9uIGZvciBpbnZlcnQg
ZG9lcyBhIHNjYWxlIG9mIGVhY2ggY29sb3IgY29tcG9uZW50IGJ5IGEgdmFsdWUgdGhhdCBnb2Vz
IGZyb20gCi0gICAgICAgIC8vIDEgKHdoZW4gYW1vdW50IGlzIDApIHRvIC0xICh3aGVuIGFtb3Vu
dCBpcyAxKS4gVGhlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBvZmZzZXQgYnkgYW1vdW50LiBUaGlz
IGhhcyB0aGUKLSAgICAgICAgLy8gZWZmZWN0IG9mIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbjog
YycgPSBjICogLTEgKyAxLCB3aGljaCBpbnZlcnRzIHRoZSBjb2xvci4KLSAgICAgICAgaWYgKGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCA8IDMpIHsKLSAgICAgICAgICAgIC8vIHRoZSBmaXJz
dCAzIHByb3BlcnRpZXMgYXJlIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIG11bHRpcGxpZXJzCi0g
ICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBhbW91bnQgKiAyOwotICAgICAgICAg
ICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKLSAgICAgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFudHNbaW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4XVswXSAqIG11bHRpcGxpZXJdLAotICAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOmludmVydENvbnN0YW50c1tpbnRlcm5hbEZpbHRlclBy
b3BlcnR5SW5kZXhdWzFdICogbXVsdGlwbGllcl0sCi0gICAgICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6aW52ZXJ0Q29uc3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVydHlJ
bmRleF1bMl0gKiBtdWx0aXBsaWVyXSwKLSAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZTowXSwKLSAgICAgICAgICAgICAgICBuaWxdIHJldGFpbl0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gdGhlIGxhc3QgcHJvcGVydHkgaXMgdGhlIGNvbG9yIG9m
ZnNldAotICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czoKLSAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdLAot
ICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0sCi0gICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSwKLSAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwKLSAgICAgICAgICAgICAgICBu
aWxdIHJldGFpbl0pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAg
ZG91YmxlIGFtb3VudCA9IDA7Ci0KLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVmYXVsdCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICAgICAgYW1vdW50ID0gb3AtPmFtb3VudCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgZG91YmxlIGFtb3Vu
dCA9IDA7Ci0KLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJs
dXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICAgICAgYW1vdW50ID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTph
bW91bnRdIHJldGFpbl0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWx1ZTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24s
IGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCiB7Ci0gICAgUmV0YWluUHRyPGlkPiB2
YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQ
cm9wZXJ0eUluZGV4KTsKKyAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRl
cnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9w
ZXJ0eUluZGV4KTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6dmFsdWUuZ2V0KCldOwogfQogI2VuZGlmCkBAIC01NzAs
NyArNDUzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiB2YWx1ZSkKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRp
b24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCiB7Ci0gICAgUmV0YWluUHRyPGlk
PiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0
ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlID0gUGxhdGZvcm1DQUZp
bHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQ
cm9wZXJ0eUluZGV4KTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOnZhbHVlLmdldCgpXTsKIH0KICNlbmRpZgpAQCAtNjU2
LDcgKzUzOSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiB2YWx1CiAgICAgTlNNdXRhYmxlQXJyYXkq
IGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJldGFpblB0cjxpZD4gdmFsdWUg
PSBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbih2YWx1ZXNbaV0uZ2V0KCksIGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCk7CisgICAgICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBQbGF0Zm9ybUNB
RmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWVzW2ldLmdldCgpLCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpOwogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnZhbHVlLmdl
dCgpXTsKICAgICB9CiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2Fu
aW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKQEAgLTcwNCw1MSArNTg3LDQgQEAgdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0
Zm9ybUNBQW5pbWF0aW9uKiB2YWwKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlv
bio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdGdW5jdGlvbnM6W290aGVyIHRpbWluZ0Z1
bmN0aW9uc11dOwogfQogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotaW50IFBsYXRmb3JtQ0FB
bmltYXRpb246Om51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTRVBJQTogcmV0dXJuIDM7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiBy
ZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogcmV0dXJuIDE7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogcmV0dXJuIDQ7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCTFVSOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4g
MTsKLSAgICBkZWZhdWx0OiByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIFBsYXRm
b3JtQ0FBbmltYXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0eXBlLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQot
ewotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RTogcmV0dXJuICJpbnB1dEludGVuc2l0eSI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOgotICAgICAgICBzd2l0Y2goaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7Ci0gICAg
ICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOwotICAgICAgICBjYXNlIDE6IHJldHVy
biAiaW5wdXRHVmVjdG9yIjsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7
Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKLSAgICAgICAgfQotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuICJpbnB1dFNhdHVyYXRpb24iOwotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlucHV0QW5nbGUiOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIHN3aXRjaChpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gImlucHV0UlZlY3RvciI7
Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnB1dEdWZWN0b3IiOwotICAgICAgICBjYXNlIDI6
IHJldHVybiAiaW5wdXRCVmVjdG9yIjsKLSAgICAgICAgY2FzZSAzOiByZXR1cm4gImlucHV0Qmlh
c1ZlY3RvciI7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKLSAgICAgICAgfQotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gImlucHV0QVZlY3RvciI7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAiaW5wdXRSYWRpdXMiOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRyYXN0IjsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuICJpbnB1dEJyaWdodG5l
c3MiOwotICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKLSAgICB9Ci19Ci0jZW5kaWYKLQogI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMDMwYTRiNGNiMDNkNDczMmEwYjQyODRlNTA3MDcxNzllOGI0ZjZl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorCisjaW1wb3J0ICJQbGF0Zm9ybUNBRmlsdGVycy5oIgorCisjaW1wb3J0
ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgorI2ltcG9y
dCAiTGVuZ3RoRnVuY3Rpb25zLmgiIC8vIFRoaXMgaXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisj
aW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2lmIFVTRV9DQV9GSUxURVJTCitz
dHJ1Y3QgQ0FDb2xvck1hdHJpeAoreworICAgIGZsb2F0IG0xMSwgbTEyLCBtMTMsIG0xNCwgbTE1
OworICAgIGZsb2F0IG0yMSwgbTIyLCBtMjMsIG0yNCwgbTI1OworICAgIGZsb2F0IG0zMSwgbTMy
LCBtMzMsIG0zNCwgbTM1OworICAgIGZsb2F0IG00MSwgbTQyLCBtNDMsIG00NCwgbTQ1OworfTsK
KwordHlwZWRlZiBzdHJ1Y3QgQ0FDb2xvck1hdHJpeCBDQUNvbG9yTWF0cml4OworCitAaW50ZXJm
YWNlIE5TVmFsdWUgKERldGFpbHMpCisrIChOU1ZhbHVlICopdmFsdWVXaXRoQ0FDb2xvck1hdHJp
eDooQ0FDb2xvck1hdHJpeCl0OworQGVuZAorCitAaW50ZXJmYWNlIENBRmlsdGVyIDogTlNPYmpl
Y3QgPE5TQ29weWluZywgTlNNdXRhYmxlQ29weWluZywgTlNDb2Rpbmc+CitAZW5kCisKK0BpbnRl
cmZhY2UgQ0FGaWx0ZXIgKERldGFpbHMpCitAcHJvcGVydHkoY29weSkgTlNTdHJpbmcgKm5hbWU7
CisrIChDQUZpbHRlciAqKWZpbHRlcldpdGhUeXBlOihOU1N0cmluZyAqKXR5cGU7CitAZW5kCisK
K2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNvbG9yTWF0cml4OworZXh0ZXJuIE5T
U3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JNb25vY2hyb21lOworZXh0ZXJuIE5TU3RyaW5n
ICogY29uc3Qga0NBRmlsdGVyQ29sb3JIdWVSb3RhdGU7CitleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBrQ0FGaWx0ZXJDb2xvclNhdHVyYXRlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmls
dGVyR2F1c3NpYW5CbHVyOworI2VuZGlmCisKKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2Ug
dmFsdWVzIHdpdGggRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCitzdGF0aWMgZG91YmxlIHNlcGlhRnVs
bENvbnN0YW50c1szXVszXSA9IHsKKyAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKKyAgICB7
IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKKyAgICB7IDAuMjcyLCAwLjUzNCwgMC4xMzEgfQorfTsK
Kworc3RhdGljIGRvdWJsZSBzZXBpYU5vbmVDb25zdGFudHNbM11bM10gPSB7CisgICAgeyAxLCAw
LCAwIH0sCisgICAgeyAwLCAxLCAwIH0sCisgICAgeyAwLCAwLCAxIH0KK307CisKK3ZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtQ0FMYXllciogcGxhdGZv
cm1DQUxheWVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIENBTGF5
ZXIqIGxheWVyID0gcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisKKyAgICBpZiAo
IWZpbHRlcnMuc2l6ZSgpKSB7CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
ICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczpuaWxdOworICAgICAgICAvLyBGSVhNRTogdGhpcyBh
ZGRzIHNoYWRvdyBwcm9wZXJ0aWVzIHRvIHRoZSBsYXllciBldmVuIHdoZW4gaXQgaGFkIG5vbmUu
CisgICAgICAgIFtsYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplWmVyb107CisgICAgICAgIFts
YXllciBzZXRTaGFkb3dDb2xvcjpuaWxdOworICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVz
OjBdOworICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T3BhY2l0eTowXTsKKyAgICAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8v
IEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVk
IHRydWUuCisgICAgQVNTRVJUKHBsYXRmb3JtQ0FMYXllci0+ZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZChmaWx0ZXJzKSk7CisgICAgCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheShBZG9wdE5TLCBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBTdHJp
bmc6OmZvcm1hdCgiZmlsdGVyXyVkIiwgaSk7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0
ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFz
c3VtZSBkcm9wIHNoYWRvdyBpcyB0aGUgbGFzdCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIu
CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdo
ZXJlIGRyb3Atc2hhZG93IGlzIG5vdCB0aGUgbGFzdCBmaWx0ZXIuCisgICAgICAgICAgICBjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgW2xh
eWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKG9wLT54KCksIG9wLT55KCkpXTsKKworICAg
ICAgICAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOworICAgICAgICAgICAgb3AtPmNvbG9yKCku
Z2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21w
b25lbnRzWzNdKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgICAgICAg
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yKEFkb3B0Q0YsIENHQ29sb3JDcmVhdGUoY29s
b3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOworICAgICAgICAgICAgW2xheWVyIHNldFNoYWRv
d0NvbG9yOmNvbG9yLmdldCgpXTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dSYWRpdXM6
b3AtPnN0ZERldmlhdGlvbigpXTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPcGFjaXR5
OjFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBVU0VfQ0FfRklMVEVSUwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CisgICAgICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTpr
Q0FGaWx0ZXJDb2xvck1vbm9jaHJvbWVdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91
bnQiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogeworICAgICAg
ICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0
aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0g
UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsKKyAgICAg
ICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmls
dGVyQ29sb3JNYXRyaXhdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJp
eFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogeworICAgICAgICAgICAgY29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAg
IENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29s
b3JTYXR1cmF0ZV07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgICAgIGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtD
QUZpbHRlckNvbG9ySHVlUm90YXRlXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKG9wLT5hbW91bnQoKSldIGZvcktleTpAImlu
cHV0QW5nbGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpAImh1ZVJvdGF0ZSJdOwor
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworICAgICAgICAgICAg
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZh
bHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsK
KyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyQ29sb3JNYXRyaXhdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xv
ck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKKyAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisgICAgICAgICAgICBjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRp
b24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQ
bGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcigqb3ApOworICAgICAg
ICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0
ZXJDb2xvck1hdHJpeF07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4
VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOworICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9i
amVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7
CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRm
b3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAg
ICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNv
bG9yTWF0cml4XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1
ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAg
ICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FG
aWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAgICBDQUZp
bHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0
cml4XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQo
KSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5h
bWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRl
cl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QkxVUjogeworICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiog
b3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0
aW9uKTsKKyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0
aFR5cGU6a0NBRmlsdGVyR2F1c3NpYW5CbHVyXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5zdGRE
ZXZpYXRpb24oKSwgMCldIGZvcktleTpAImlucHV0UmFkaXVzIl07CisgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogeworICAgICAgICAgICAgY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAg
ICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNv
bG9yTW9ub2Nocm9tZSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFt
b3VudCgpXSBmb3JLZXk6QCJpbnB1dEludGVuc2l0eSJdOworICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MC42NyBncmVlbjowLjY3IGJsdWU6MC42N10g
Zm9yS2V5OkAiaW5wdXRDb2xvciJdOyAvLyBDb2xvciBkZXJpdmVkIGVtcGlyaWNhbGx5IHRvIG1h
dGNoIHplcm8gc2F0dXJhdGlvbiBsZXZlbHMuCisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6
ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVy
ID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgICAgICAg
ICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisKKyAgICAgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFt
b3VudCgpOworICAgICAgICAgICAgdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7
CisgICAgICAgICAgICAvLyBGSVhNRTogcmVzdWx0cyBkb24ndCBtYXRjaCB0aGUgc29mdHdhcmUg
ZmlsdGVyLgorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMF0sIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlh
RnVsbENvbnN0YW50c1swXVsxXSwgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVsy
XSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0UlZlY3Rv
ciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMV1bMF0sIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVs
bENvbnN0YW50c1sxXVsxXSwgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsyXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2Vi
Q29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNb
Ml1bMF0sIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENv
bnN0YW50c1syXVsxXSwgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2Vw
aWFGdWxsQ29uc3RhbnRzWzJdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwor
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7CisgICAgICAgICAg
ICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJQ29sb3JDb250cm9scyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dFNhdHVyYXRpb24iXTsKKyAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7CisgICAgICAgICAgICBjb25zdCBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJSHVlQWRq
dXN0Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKworICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJyYWQob3AtPmFt
b3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRO
YW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0
ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAg
IENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0
cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKworICAgICAgICAgICAg
ZG91YmxlIG11bHRpcGxpZXIgPSAxIC0gb3AtPmFtb3VudCgpICogMjsKKworICAgICAgICAgICAg
Ly8gRklYTUU6IHRoZSByZXN1bHRzIG9mIHRoaXMgZmlsdGVyIGxvb2sgd3JvbmcuCisgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDptdWx0aXBsaWVyIFk6
MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTptdWx0aXBsaWVyIFo6MCBXOjBdIGZv
cktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF0gZm9yS2V5OkAiaW5wdXRC
VmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDowIFk6MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5hbW91bnQoKSBZOm9w
LT5hbW91bnQoKSBaOm9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJd
OworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKKyAgICAgICAg
ICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVy
IGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgICAgICAgICAgW2ZpbHRlciBz
ZXREZWZhdWx0c107CisKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjEgWjowIFc6
MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjEgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0
b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OjAgWTowIFo6MCBXOm9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAg
VzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6Zmls
dGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAg
ICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKworICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6YW1vdW50IFk6MCBaOjAgVzowXSBmb3JLZXk6
QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgWTphbW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6
MCBaOmFtb3VudCBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9i
amVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpA
IkNJQ29sb3JDb250cm9scyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3At
PmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dENvbnRyYXN0Il07CisgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogeworICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2Ug
aWdub3JlIHN0ZERldmlhdGlvblkuCisgICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJP
cGVyYXRpb24pOworICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIkNJR2F1c3NpYW5CbHVyIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldERl
ZmF1bHRzXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5zdGREZXZpYXRpb24oKSwgMCldIGZvcktl
eTpAImlucHV0UmFkaXVzIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFt
ZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpQQVNTVEhST1VHSDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoW2FycmF5LmdldCgpIGNvdW50XSA+IDApCisgICAgICAgIFtsYXllciBz
ZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCit9CisKK1JldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFs
dWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyNlbmRpZgorICAgIEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gb3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCk7CisgICAgUmV0YWluUHRyPGlkPiB2YWx1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CisgICAgICAgIC8vIENJ
RmlsdGVyOiBpbnB1dEludGVuc2l0eQorICAgICAgICAvLyBDQUZpbHRlcjogaW5wdXRBbW91bnQK
KyAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0Rl
ZmF1bHQoKSkgeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAg
ICAgICAgfQorICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOiB7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgLy8gQ0FG
aWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKKyAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgdmFsdWUgPSBQbGF0Zm9ybUNBRmls
dGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcigqb3ApOworI2Vsc2UKKyAgICAgICAgLy8g
Q0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRHVmVjdG9yLCBpbnB1dEJWZWN0b3IKKyAgICAg
ICAgZG91YmxlIGFtb3VudCA9IDA7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQo
KSkgeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiog
b3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9
IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25z
dGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgYW1vdW50KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpi
bGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsxXSwg
YW1vdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVs
bENvbnN0YW50c1swXVsyXSwgYW1vdW50KSBXOjBdOyBicmVhazsgLy8gaW5wdXRSVmVjdG9yCisg
ICAgICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOldl
YkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRz
WzFdWzBdLCBhbW91bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBZOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsxXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzFdWzFdLCBhbW91bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9u
ZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCBhbW91bnQpIFc6MF07
IGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKKyAgICAgICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJ
VmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRz
WzJdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMF0sIGFtb3VudCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQo
c2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIGFtb3Vu
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFo6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMl1bMl0sIGFtb3VudCkgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3RvcgorICAgICAg
ICB9CisgICAgICAgIHZhbHVlLmFkb3B0TlMocm93VmVjdG9yKTsKKyNlbmRpZgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7CisgICAg
ICAgIC8vIENJRmlsdGVyOiBpbnB1dFNhdHVyYXRpb24KKyAgICAgICAgLy8gQ0FGaWx0ZXI6IGlu
cHV0QW1vdW50CisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAgICAgICBpZiAoIW9wZXJh
dGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1v
dW50KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0gcmV0YWluXSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogeworICAgICAgICAv
LyBIdWUgcm90YXRlIENJRmlsdGVyOiBpbnB1dEFuZ2xlCisgICAgICAgIC8vIEh1ZSByb3RhdGUg
Q0FGaWx0ZXI6IGlucHV0QW5nbGUKKyAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CisgICAgICAg
IGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgeworICAgICAgICAgICAgY29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3Vu
dCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgfQorICAgICAgICBhbW91bnQgPSBkZWcycmFkKGFt
b3VudCk7CisgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OmFtb3VudF0gcmV0YWluXSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SU5WRVJUOiB7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgLy8gQ0FG
aWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKKyAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgdmFsdWUgPSBQbGF0Zm9ybUNBRmls
dGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcigqb3ApOworI2Vsc2UKKyAgICAgICAgLy8g
Q0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRHVmVjdG9yLCBpbnB1dEJWZWN0b3IsIGlucHV0
Qmlhc1ZlY3RvcgorICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKKyAgICAgICAgaWYgKCFvcGVy
YXRpb24tPmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAgICAgYW1v
dW50ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgZG91YmxlIG11bHRpcGxp
ZXIgPSAxIC0gYW1vdW50ICogMjsKKworICAgICAgICAvLyBUaGUgY29sb3IgbWF0cml4IGFuaW1h
dGlvbiBmb3IgaW52ZXJ0IGRvZXMgYSBzY2FsZSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCBieSBh
IHZhbHVlIHRoYXQgZ29lcyBmcm9tIAorICAgICAgICAvLyAxICh3aGVuIGFtb3VudCBpcyAwKSB0
byAtMSAod2hlbiBhbW91bnQgaXMgMSkuIFRoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgb2Zmc2V0
IGJ5IGFtb3VudC4gVGhpcyBoYXMgdGhlCisgICAgICAgIC8vIGVmZmVjdCBvZiBwZXJmb3JtaW5n
IHRoZSBvcGVyYXRpb246IGMnID0gYyAqIC0xICsgMSwgd2hpY2ggaW52ZXJ0cyB0aGUgY29sb3Iu
CisgICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBzd2l0Y2ggKGludGVy
bmFsRmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtb
Q0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDptdWx0aXBsaWVyIFk6MCBaOjAgVzowXTsgYnJlYWs7
IC8vIGlucHV0UlZlY3RvcgorICAgICAgICBjYXNlIDE6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3Ig
YWxsb2NdIGluaXRXaXRoWDowIFk6bXVsdGlwbGllciBaOjAgVzowXTsgYnJlYWs7IC8vIGlucHV0
R1ZlY3RvcgorICAgICAgICBjYXNlIDI6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGlu
aXRXaXRoWDowIFk6MCBaOm11bHRpcGxpZXIgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3Rvcgor
ICAgICAgICBjYXNlIDM6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDph
bW91bnQgWTphbW91bnQgWjphbW91bnQgVzowXTsgYnJlYWs7IC8vIGlucHV0Qmlhc1ZlY3Rvcgor
ICAgICAgICB9CisgICAgICAgIHZhbHVlLmFkb3B0TlMocm93VmVjdG9yKTsKKyNlbmRpZgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsK
KyNpZiBVU0VfQ0FfRklMVEVSUworICAgICAgICAvLyBPcGFjaXR5IENBRmlsdGVyOiBpbnB1dENv
bG9yTWF0cml4CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+
KG9wZXJhdGlvbik7CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0
cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsKKyNlbHNlCisgICAgICAgIC8vIE9wYWNpdHkgQ0lGaWx0
ZXI6IGlucHV0QVZlY3RvcgorICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAg
ICAgYW1vdW50ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
YWx1ZS5hZG9wdE5TKFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6MCBaOjAgVzphbW91
bnRdKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKKyNpZiBVU0VfQ0FfRklMVEVSUworICAgICAgICAv
LyBCcmlnaHRuZXNzIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIHZhbHVl
ID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsKKyNl
bHNlCisgICAgICAgIC8vIEJyaWdodG5lc3MgQ0lGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKKyAg
ICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1
bHQoKSkgeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91
bnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0lWZWN0b3IqIHJvd1ZlY3RvciA9
IDA7CisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7CisgICAg
ICAgIGNhc2UgMDogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOmFtb3Vu
dCBZOjAgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dFJWZWN0b3IKKyAgICAgICAgY2FzZSAxOiBy
b3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOmFtb3VudCBaOjAgVzow
XTsgYnJlYWs7IC8vIGlucHV0R1ZlY3RvcgorICAgICAgICBjYXNlIDI6IHJvd1ZlY3RvciA9IFtb
Q0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6MCBaOmFtb3VudCBXOjBdOyBicmVhazsgLy8g
aW5wdXRCVmVjdG9yCisgICAgICAgIH0KKyAgICAgICAgdmFsdWUuYWRvcHROUyhyb3dWZWN0b3Ip
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDogeworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgICAgIC8vIENvbnRyYXN0
IENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1D
QUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsKKyNlbHNlCisgICAgICAg
IC8vIENvbnRyYXN0IENJRmlsdGVyOiBpbnB1dENvbnRyYXN0CisgICAgICAgIGRvdWJsZSBhbW91
bnQgPSAxOworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KG9w
ZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0K
KworICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91
bnRdIHJldGFpbl0pOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogeworICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRSYWRpdXMK
KyAgICAgICAgLy8gQ0FGaWx0ZXI6IGlucHV0UmFkaXVzCisgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAwOworCisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgeworICAgICAgICAg
ICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVy
RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgob3AtPnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1v
dW50XSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKyNpZiBVU0Vf
Q0FfRklMVEVSUworUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1h
dHJpeFZhbHVlRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9u
KQoreworICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogeworICAgICAgICBjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICBkb3Vi
bGUgdCA9IG9wLmFtb3VudCgpOworICAgICAgICB0ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wLCB0
KSwgMS4wKTsKKyAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNb
MF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgdCkpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVsxXSwgc2Vw
aWFGdWxsQ29uc3RhbnRzWzBdWzFdLCB0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzJdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMl0sIHQpKSwgMCwgMCwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVswXSwgc2Vw
aWFGdWxsQ29uc3RhbnRzWzFdWzBdLCB0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzFdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMV1bMV0sIHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsy
XSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMl1bMF0sIHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsx
XSwgdCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCB0KSksIDAs
IDAsCisgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCisgICAgICAgIH07CisgICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4XTsKKyAgICB9Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworICAgICAgICBjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICBmbG9hdCBhbW91bnQgPSBvcC5hbW91bnQoKTsKKyAgICAgICAgaWYgKG9wLmlzRGVm
YXVsdCgpKQorICAgICAgICAgICAgYW1vdW50ID0gMDsKKworICAgICAgICBmbG9hdCBtdWx0aXBs
aWVyID0gMSAtIGFtb3VudCAqIDI7CisgICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRyaXgg
PSB7CisgICAgICAgICAgICBtdWx0aXBsaWVyLCAwLCAwLCAwLCBhbW91bnQsCisgICAgICAgICAg
ICAwLCBtdWx0aXBsaWVyLCAwLCAwLCBhbW91bnQsCisgICAgICAgICAgICAwLCAwLCBtdWx0aXBs
aWVyLCAwLCBhbW91bnQsCisgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCisgICAgICAgIH07Cisg
ICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4
XTsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKKyAgICAgICAg
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgb3AgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4oZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgZmxvYXQgYW1vdW50ID0gb3AuYW1vdW50KCk7CisgICAgICAg
IGlmIChvcC5pc0RlZmF1bHQoKSkKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisKKyAgICAgICAg
Q0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKKyAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAs
CisgICAgICAgICAgICAwLCAxLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCwK
KyAgICAgICAgICAgIDAsIDAsIDAsIGFtb3VudCwgMAorICAgICAgICB9OworICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogeworICAgICAgICBjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihmaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICBmbG9hdCBhbW91bnQgPSBvcC5hbW91bnQoKTsKKyAgICAgICAgaWYgKG9wLmlz
RGVmYXVsdCgpKQorICAgICAgICAgICAgYW1vdW50ID0gMTsKKworICAgICAgICBmbG9hdCBpbnRl
cmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9y
TWF0cml4ID0geworICAgICAgICAgICAgYW1vdW50LCAwLCAwLCAwLCBpbnRlcmNlcHQsCisgICAg
ICAgICAgICAwLCBhbW91bnQsIDAsIDAsIGludGVyY2VwdCwKKyAgICAgICAgICAgIDAsIDAsIGFt
b3VudCwgMCwgaW50ZXJjZXB0LAorICAgICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAgICAgICB9
OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1h
dHJpeF07CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Cisg
ICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIG9wID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+
KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IG9wLmFtb3VudCgpOwor
ICAgICAgICBpZiAob3AuaXNEZWZhdWx0KCkpCisgICAgICAgICAgICBhbW91bnQgPSAxOworCisg
ICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRyaXggPSB7CisgICAgICAgICAgICBhbW91bnQs
IDAsIDAsIDAsIDAsCisgICAgICAgICAgICAwLCBhbW91bnQsIDAsIDAsIDAsCisgICAgICAgICAg
ICAwLCAwLCBhbW91bnQsIDAsIDAsCisgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCisgICAgICAg
IH07CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9y
TWF0cml4XTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorI2VuZGlmCisKK2ludCBQbGF0Zm9ybUNBRmlsdGVyczo6bnVtQW5pbWF0
ZWRGaWx0ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQor
eworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNFUElBOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4g
MTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiByZXR1cm4gMTsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpD
T05UUkFTVDogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHJldHVy
biAxOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KKyNlbHNlCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiByZXR1cm4gMzsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OiByZXR1cm4gNDsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHJldHVybiAzOworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJMVVI6IHJldHVybiAxOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0K
KyNlbmRpZgorfQorCitjb25zdCBjaGFyKiBQbGF0Zm9ybUNBRmlsdGVyczo6YW5pbWF0ZWRGaWx0
ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIGludCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBV
TlVTRURfUEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0
QW1vdW50IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6cmV0dXJuICJpbnB1dENv
bG9yTWF0cml4IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAi
aW5wdXRBbW91bnQiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1
cm4gImlucHV0QW5nbGUiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHJldHVy
biAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
IHJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6IHJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgiOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gImlucHV0UmFkaXVzIjsKKyAgICBkZWZhdWx0OiBy
ZXR1cm4gIiI7CisgICAgfQorI2Vsc2UKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0SW50ZW5zaXR5IjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7
CisgICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOworICAgICAgICBjYXNlIDE6
IHJldHVybiAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZl
Y3RvciI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuICJpbnB1dFNhdHVyYXRpb24iOworICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlucHV0QW5nbGUiOwor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHN3aXRjaCAoaW50ZXJu
YWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7CisgICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJW
ZWN0b3IiOworICAgICAgICBjYXNlIDE6IHJldHVybiAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAg
Y2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7CisgICAgICAgIGNhc2UgMzogcmV0dXJuICJp
bnB1dEJpYXNWZWN0b3IiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7CisgICAgICAgIH0K
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuICJpbnB1dEFWZWN0b3Ii
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRy
YXN0IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuICJpbnB1dFJhZGl1
cyI7CisgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgIH0KKyNlbmRpZgorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKENTU19GSUxURVJTKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IGExYWYzYTAzODRjMDFkMzVlNmU3
ODQ5NDQzM2VmNWZmNzZiYjZhYjguLjE4ZjgzOGNiZjM4M2Y4NTNmMmQyYzRjYjM1Njk0ZWQyMmQ4
MjU2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtMzEsMTAgKzMxLDEwIEBACiAK
ICNpbXBvcnQgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJMZW5ndGhGdW5jdGlv
bnMuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJzLmgiCiAjaW1wb3J0ICJUaWxlZEJhY2tp
bmcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAjaW1wb3J0ICJXZWJUaWxlZExheWVyLmgiCkBA
IC0xMTEsMzcgKzExMSw2IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShD
RlRpbWVJbnRlcnZhbCB0KQogI2VuZGlmCiBAZW5kCiAKLS8vIE5vdCBhbGwgQ0FGaWx0ZXJzIGFy
ZSBwcm92aWRlZCBvbiBMaW9uLgotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA4MAotQGludGVyZmFjZSBDQUZpbHRlciA6IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TTXV0
YWJsZUNvcHlpbmcsIE5TQ29kaW5nPgotQGVuZAotCi1AaW50ZXJmYWNlIENBRmlsdGVyIChEZXRh
aWxzKQotQHByb3BlcnR5KGNvcHkpIE5TU3RyaW5nICpuYW1lOwotKyAoQ0FGaWx0ZXIgKilmaWx0
ZXJXaXRoVHlwZTooTlNTdHJpbmcgKil0eXBlOwotQGVuZAotCi1leHRlcm4gTlNTdHJpbmcgKiBj
b25zdCBrQ0FGaWx0ZXJDb2xvck1hdHJpeDsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZp
bHRlckNvbG9yTW9ub2Nocm9tZTsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNv
bG9ySHVlUm90YXRlOwotZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JTYXR1
cmF0ZTsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckdhdXNzaWFuQmx1cjsKLQot
c3RydWN0IENBQ29sb3JNYXRyaXgKLXsKLSAgICBmbG9hdCBtMTEsIG0xMiwgbTEzLCBtMTQsIG0x
NTsKLSAgICBmbG9hdCBtMjEsIG0yMiwgbTIzLCBtMjQsIG0yNTsKLSAgICBmbG9hdCBtMzEsIG0z
MiwgbTMzLCBtMzQsIG0zNTsKLSAgICBmbG9hdCBtNDEsIG00MiwgbTQzLCBtNDQsIG00NTsKLX07
Ci0KLXR5cGVkZWYgc3RydWN0IENBQ29sb3JNYXRyaXggQ0FDb2xvck1hdHJpeDsKLQotQGludGVy
ZmFjZSBOU1ZhbHVlIChEZXRhaWxzKQotKyAoTlNWYWx1ZSAqKXZhbHVlV2l0aENBQ29sb3JNYXRy
aXg6KENBQ29sb3JNYXRyaXgpdDsKLUBlbmQKLSNlbmRpZgotCiBzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CiAKIGJv
b2wgUGxhdGZvcm1DQUxheWVyOjppc1ZhbHVlRnVuY3Rpb25TdXBwb3J0ZWQoKQpAQCAtMjEwLDcg
KzE3OSw3IEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgICAgIG1fbGF5ZXJUeXBlID0g
bGF5ZXJUeXBlOwogICAgIAogICAgICAgICBDbGFzcyBsYXllckNsYXNzID0gTmlsOwotICAgICAg
ICBzd2l0Y2gobGF5ZXJUeXBlKSB7CisgICAgICAgIHN3aXRjaCAobGF5ZXJUeXBlKSB7CiAgICAg
ICAgICAgICBjYXNlIExheWVyVHlwZUxheWVyOgogICAgICAgICAgICAgY2FzZSBMYXllclR5cGVS
b290TGF5ZXI6CiAgICAgICAgICAgICAgICAgbGF5ZXJDbGFzcyA9IFtDQUxheWVyIGNsYXNzXTsK
QEAgLTQxNSw3ICszODQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgIH0KICAgICAK
ICAgICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0
PENBUHJvcGVydHlBbmltYXRpb24qPihhbmltYXRpb24tPnBsYXRmb3JtQW5pbWF0aW9uKCkpOwot
CisgICAgTlNMb2coQCJBZGRpbmcgYW5pbWF0aW9uICVAIGZvciBrZXkgJUAiLCBwcm9wZXJ0eUFu
aW1hdGlvbiwgKE5TU3RyaW5nKilrZXkpOwogICAgIGlmICghW3Byb3BlcnR5QW5pbWF0aW9uIGRl
bGVnYXRlXSkKICAgICAgICAgW3Byb3BlcnR5QW5pbWF0aW9uIHNldERlbGVnYXRlOnN0YXRpY19j
YXN0PGlkPihtX2RlbGVnYXRlLmdldCgpKV07CiAgICAgIApAQCAtNzEwLDI4NCArNjc5LDcgQEAg
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKLSAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKSB7Ci0g
ICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBbbV9sYXllci5nZXQo
KSBzZXRGaWx0ZXJzOm5pbF07Ci0gICAgICAgIFttX2xheWVyLmdldCgpIHNldFNoYWRvd09mZnNl
dDpDR1NpemVaZXJvXTsKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93Q29sb3I6bmls
XTsKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93UmFkaXVzOjBdOwotICAgICAgICBb
bV9sYXllci5nZXQoKSBzZXRTaGFkb3dPcGFjaXR5OjBdOwotICAgICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gQXNzdW1l
IGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQgd2FzIGNhbGxlZCBhbmQgaXQgcmV0dXJuZWQgdHJ1ZS4K
LSAgICBBU1NFUlQoZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKSk7Ci0gICAgCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBhcnJheShBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVyXyVkIiwg
aSk7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmls
dGVycy5hdChpKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFzc3VtZSBkcm9wIHNoYWRvdyBpcyB0aGUg
bGFzdCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdoZXJlIGRyb3Atc2hhZG93IGlzIG5vdCB0
aGUgbGFzdCBmaWx0ZXIuCi0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93T2Zm
c2V0OkNHU2l6ZU1ha2Uob3AtPngoKSwgb3AtPnkoKSldOwotCi0gICAgICAgICAgICBDR0Zsb2F0
IGNvbXBvbmVudHNbNF07Ci0gICAgICAgICAgICBvcC0+Y29sb3IoKS5nZXRSR0JBKGNvbXBvbmVu
dHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwotICAg
ICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBD
R0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gY29sb3IoQWRvcHRDRiwgQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBj
b21wb25lbnRzKSk7Ci0gICAgICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRTaGFkb3dDb2xvcjpj
b2xvci5nZXQoKV07Ci0gICAgICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRTaGFkb3dSYWRpdXM6
b3AtPnN0ZERldmlhdGlvbigpXTsKLSAgICAgICAgICAgIFttX2xheWVyLmdldCgpIHNldFNoYWRv
d09wYWNpdHk6MV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotLy8gTm90IGFsbCBD
QUZpbHRlcnMgYXJlIHByb3ZpZGVkIG9uIExpb24uCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDgwCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmls
dGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgp
XSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNFUElBOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9
IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgpOwotICAgICAgICAgICAg
dCA9IG1pbihtYXgoMC4wLCB0KSwgMS4wKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCBwdXQgdGhlc2UgdmFsdWVzIGludG8gY29uc3RhbnRzIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgotICAgICAgICAgICAgQ0FDb2xvck1hdHJpeCBzZXBp
YU1hdHJpeCA9IHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6
YmxlbmQoMS4wLCAwLjM5MywgdCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQo
MC4wLCAwLjc2OSwgdCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoMC4wLCAw
LjE4OSwgdCkpLCAwLCAwLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZCgwLjAsIDAuMzQ5LCB0KSksIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpi
bGVuZCgxLjAsIDAuNjg2LCB0KSksIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZCgw
LjAsIDAuMTY4LCB0KSksIDAsIDAsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KFdlYkNvcmU6OmJsZW5kKDAuMCwgMC4yNzIsIHQpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNv
cmU6OmJsZW5kKDAuMCwgMC41MzQsIHQpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJs
ZW5kKDEuMCwgMC4xMzEsIHQpKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAw
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU1ZhbHVl
IHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6c2VwaWFNYXRyaXhdIGZvcktleTpAImlucHV0Q29sb3JN
YXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAg
ICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewot
ICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmls
dGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JTYXR1cmF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6
QCJpbnB1dEFtb3VudCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NB
RmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySHVlUm90YXRlXTsKLSAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKG9w
LT5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpAImh1ZVJvdGF0ZSJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVy
ICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhd
OwotCi0gICAgICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gMSAtIG9wLT5hbW91bnQoKSAqIDI7
Ci0KLSAgICAgICAgICAgIENBQ29sb3JNYXRyaXggaW52ZXJ0TWF0cml4ID0gewotICAgICAgICAg
ICAgICAgIG11bHRpcGxpZXIsIDAsIDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50
KCkpLAotICAgICAgICAgICAgICAgIDAsIG11bHRpcGxpZXIsIDAsIDAsIHN0YXRpY19jYXN0PGZs
b2F0PihvcC0+YW1vdW50KCkpLAotICAgICAgICAgICAgICAgIDAsIDAsIG11bHRpcGxpZXIsIDAs
IHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLAotICAgICAgICAgICAgICAgIDAsIDAs
IDAsIDEsIDAKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDppbnZlcnRNYXRyaXhdIGZvcktleTpAImlu
cHV0Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZp
bHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07Ci0K
LSAgICAgICAgICAgIENBQ29sb3JNYXRyaXggb3BhY2l0eU1hdHJpeCA9IHsKLSAgICAgICAgICAg
ICAgICAxLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsCi0gICAg
ICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCBzdGF0
aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwgMAotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4Om9w
YWNpdHlNYXRyaXhdIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRl
ciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJHYXVzc2lhbkJsdXJdOwotICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0VmFsdWVGb3JMZW5n
dGgob3AtPnN0ZERldmlhdGlvbigpLCAwKV0gZm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKLSAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5n
ZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVy
V2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwotCi0gICAgICAgICAgICBmbG9hdCBpbnRl
cmNlcHQgPSAtMC41ICogb3AtPmFtb3VudCgpICsgMC41OwotCi0gICAgICAgICAgICBDQUNvbG9y
TWF0cml4IGNvbnRyYXN0TWF0cml4ID0gewotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLCBpbnRlcmNlcHQsCi0gICAgICAgICAgICAgICAg
MCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9wLT5hbW91bnQoKSksIDAsIDAsIGludGVyY2VwdCwKLSAg
ICAgICAgICAgICAgICAwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwgMCwg
aW50ZXJjZXB0LAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKLSAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xv
ck1hdHJpeDpjb250cmFzdE1hdHJpeF0gZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwotICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQ0FDb2xvck1hdHJpeCBicmlnaHRuZXNzTWF0cml4ID0gewotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLCAwLAotICAgICAgICAg
ICAgICAgIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLAotICAg
ICAgICAgICAgICAgIDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAw
LAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpi
cmlnaHRuZXNzTWF0cml4XSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkg
YWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAg
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUNvbG9yTW9ub2Nocm9tZSJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEludGVuc2l0eSJdOwotICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MSBncmVlbjoxIGJsdWU6MV0gZm9y
S2V5OkAiaW5wdXRDb2xvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
KiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
PihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZp
bHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOwotCi0gICAgICAgICAgICBkb3VibGUgdCA9IG9wLT5hbW91bnQoKTsK
LSAgICAgICAgICAgIHQgPSBtaW4obWF4KDAuMCwgdCksIDEuMCk7Ci0KLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKDEuMCwg
MC4zOTMsIHQpIFk6V2ViQ29yZTo6YmxlbmQoMC4wLCAwLjc2OSwgdCkgWjpXZWJDb3JlOjpibGVu
ZCgwLjAsIDAuMTg5LCB0KSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2ViQ29yZTo6YmxlbmQo
MC4wLCAwLjM0OSwgdCkgWTpXZWJDb3JlOjpibGVuZCgxLjAsIDAuNjg2LCB0KSBaOldlYkNvcmU6
OmJsZW5kKDAuMCwgMC4xNjgsIHQpIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpXZWJDb3JlOjpi
bGVuZCgwLjAsIDAuMjcyLCB0KSBZOldlYkNvcmU6OmJsZW5kKDAuMCwgMC41MzQsIHQpIFo6V2Vi
Q29yZTo6YmxlbmQoMS4wLCAwLjEzMSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTow
IFo6MCBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5w
dXRCaWFzVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmls
dGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Ci0gICAgICAgICAgICBbZmls
dGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJd
OwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldp
dGhOYW1lOkAiQ0lIdWVBZGp1c3QiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNd
OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNd
OwotCi0gICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBvcC0+YW1vdW50KCkgKiAy
OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpt
dWx0aXBsaWVyIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTptdWx0aXBsaWVy
IFo6MCBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5h
bW91bnQoKSBZOm9wLT5hbW91bnQoKSBaOm9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0
Qmlhc1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwot
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVy
ID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgICAgICAg
ICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0UlZlY3Rv
ciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
MCBZOjEgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjEgVzowXSBmb3JLZXk6
QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOm9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBVmVj
dG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDowIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KLSAgICAgICAgICAgIGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmls
dGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lHYXVzc2lhbkJsdXIiXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OmZsb2F0VmFsdWVGb3JMZW5ndGgob3AtPnN0ZERldmlhdGlvbigpLCAw
KV0gZm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpm
aWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJ
RmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJv
bHMiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9y
S2V5OkAiaW5wdXRDb250cmFzdCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZp
bHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xz
Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktl
eTpAImlucHV0QnJpZ2h0bmVzcyJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UEFTU1RIUk9VR0g6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKFthcnJheS5nZXQoKSBjb3VudF0gPiAwKQotICAgICAgICBbbV9s
YXllci5nZXQoKSBzZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKLSAgICAKLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVy
KHRoaXMsIGZpbHRlcnMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciogc291cmNlTGF5ZXIpCkBAIC0xMDA1LDcgKzY5Nyw3
IEBAIGJvb2wgUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiAgICAgICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKLSAgICAgICAgc3dpdGNoKGZp
bHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZmls
dGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRToKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192506</attachid>
            <date>2013-03-11 10:55:05 -0700</date>
            <delta_ts>2013-03-11 14:12:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111905-20130311105106.patch</filename>
            <type>text/plain</type>
            <size>83245</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTgxZTc5ZjAyMWFhMTI5
NzBmZDc3YjgzYzU1ZWRiMTA0ZmE0ZmIxYy4uYzgxMGI0OTE0NjU5YTEwMjk5M2YyOWFkZmQ1NzI1
ZGE4MjYwOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAzLTExICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtDQV0gQW5pbWF0
aW9ucyBvZiBDU1MgZmlsdGVycyBkb24ndCB3b3JrIGNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExOTA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHZhcmlvdXMgaXNzdWVzIHdpdGgg
dHJhbnNpdGlvbnMgb2YgY29tcG9zaXRlZCBmaWx0ZXJzIG9uIE1hYywKKyAgICAgICAgbW9zdCBv
ZiB3aGljaCBzdGVtbWVkIGZyb20gdGhlIGNvbnZlcnNpb24gdG8gdXNlIENBRmlsdGVyLgorICAg
ICAgICAKKyAgICAgICAgUHV0IHRoZSBNYWMgQ0EgZmlsdGVyLXJlbGF0ZWQgY29kZSBpbnRvIGEg
bmV3IGZpbGUsIFBsYXRmb3JtQ0FGaWx0ZXJzLAorICAgICAgICB0byBncm91cCBjb2RlIHRoYXQg
Y3JlYXRlcyBmaWx0ZXIgcHJvcGVydGllcyBpbnRvIGEgc2luZ2xlIHBsYWNlLgorICAgICAgICAK
KyAgICAgICAgQW5pbWF0aW9ucyBvZiBDSUZpbHRlcnMgdXNpbmcgbXVsdGlwbGUgdmFsdWVzIG5l
dmVyIHdvcmtlZCBjb3JyZWN0bHksCisgICAgICAgIGJlY2F1c2Ugd2Ugd291bGQgY2xvYmJlciBh
bGwgYnV0IHRoZSBsYXN0IHByb3BlcnR5IGZvciBlYWNoIGZpbHRlciwKKyAgICAgICAgc28gZml4
IHRoYXQuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VzIGluIHRoZSBtb3ZlZCBmaWx0ZXIgY29k
ZToKKyAgICAgICAgICAgIC0gTWFkZSB1c2Ugb2Ygc2VwaWFGdWxsQ29uc3RhbnRzIGluIHRoZSBD
SUZpbHRlciBhbmQgQ0FGaWx0ZXIgY29kZS4KKyAgICAgICAgICAgIC0gRm9yIENJLCByZXR1cm4g
Q0lWZWN0b3JzIGluc3RlYWQgb2YgTlNBcnJheXMgb2YgTlNOdW1iZXJzLgorICAgICAgICAgICAg
LSBGdWRnZSB0aGUgaW5wdXRDb2xvciBmb3IgdGhlIENJIGdyYXlzY2FsZSBmaWx0ZXIgdG8gYmV0
dGVyIG1hdGNoIHNvZnR3YXJlIGZpbHRlcnMuCisgICAgICAgICAgICAtIGZpeCBzb21lIGNhc2Vz
IHdoZXJlIHRoZSBiZWhhdmlvciB3YXMgd3JvbmcgaW4gdGhlIGlzRGVmYXVsdCgpIGNhc2UuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBQbGF0Zm9y
bUNBRmlsdGVycy5oLCBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKTogVGhpcyBmdW5jdGlvbiB3YXMgY3Jl
YXRpbmcgYSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBub24tQVNDSUkgY2hhcmFjdGVycy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YW5pbWF0aW9uSWRlbnRpZmllcik6IFRvIGhhbmRsZSBDSUZpbHRlciBh
bmltYXRpb25zLCB3ZSBuZWVkIHRvIHRhY2sgYW5vdGhlcgorICAgICAgICBpbmRleCBvbnRvIHRo
ZSBhbmltYXRpb24gaWRlbnRpZmllciwgc2luY2Ugc29tZSBhbmltYXRpb25zIHJlcXVpcmUgYW5p
bWF0aW5nIG11bHRpcGxlCisgICAgICAgIHByb3BlcnRpZXMgb2YgdGhlIHNhbWUgQ0lGaWx0ZXIu
IEFkZCAic3ViSW5kZXgiIGZvciB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlv
bk9uTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbjo6
TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbik6CisgICAgICAgIChMYXllclByb3BlcnR5QW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uKTogRnVuY3Rpb25zIG1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6IEFkZGVkLgorICAg
ICAgICAoUGxhdGZvcm1DQUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRv
VmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW06IEFk
ZGVkLgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVy
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FGaWx0ZXJzOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRp
ZXMpOgorICAgICAgICAoUGxhdGZvcm1DQUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZCk6CisKIDIwMTMtMDMtMTEgIFhhbiBMb3BleiAgPHhsb3BlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBQbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6IGNyZWF0ZSB0aGluIEFSIGFyY2hpdmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTY1MWQyNmNmMmIwNTM1OWMzYjkyNzU0
ZGZkNjk0MzA2MTg1MzM0Yi4uM2E4YWI2ODEwNzhiYjRiOTljZWFkYmQ5YTIwN2M0YWQ5OTk4MTRj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjQ1LDYgKzI0NSw4IEBACiAJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1M
b2NhdGlvbi5oICovOyB9OwogCQkwRjA5MDg3RjE0NDRGREIyMDAwMjg5MTcgLyogU2Nyb2xsYmFy
VGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLzsgfTsKIAkJ
MEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEw
MEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi87IH07CisJCTBGMTMxNjNFMTZFRDBD
QzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRm
b3JtQ0FGaWx0ZXJzLmggKi87IH07CisJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0
Zm9ybUNBRmlsdGVyc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01h
Yy5tbSAqLzsgfTsKIAkJMEYxNURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUuaCAqLzsgfTsKIAkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlB
bGxJbk9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCAq
LzsgfTsKIAkJMEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEQxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovOyB9OwpAQCAtNzU2OSw2ICs3NTcxLDggQEAK
IAkJMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2Nh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI2MTBDREJCRkEw
MDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbklu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQ
bGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FG
aWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBGM0FB
RUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0aCA9
IGFuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFs
bEluT25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2li
aWxpdHlBbGxJbk9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRE
MTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNoYWRvd0JsdXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTU4OTMsNiArMTU4OTcsNyBAQAogCQkJCTkzRjcyQUYxMTY2NkVERkMwMDJBMDJCRCAv
KiBMYXllclBvb2wuaCAqLywKIAkJCQk5M0Y3MkFGMjE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQ
b29sLm1tICovLAogCQkJCTQ5NTg3ODFGMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjLm1tICovLAorCQkJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9y
bUNBRmlsdGVyc01hYy5tbSAqLywKIAkJCQk0OTU4NzgyMDEyQTU3RERGMDA3MjM4QUMgLyogUGxh
dGZvcm1DQUxheWVyTWFjLm1tICovLAogCQkJCTFBQTcxNjA5MTQ5QkM0REIwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5oICovLAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxl
Q29udHJvbGxlci5tbSAqLywKQEAgLTE1OTM4LDYgKzE1OTQzLDcgQEAKIAkJCQkyOTE3QjU1RjE0
NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oICovLAogCQkJCTI5MTdCNTYw
MTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggKi8sCiAJCQkJ
NDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCAqLywKKwkJ
CQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLywKIAkJ
CQk0OTlCM0VDMzEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmggKi8sCiAJCQkJ
NDkzRTVFMDgxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oICovLAog
CQkJCTQ5NEJDNDBDMTJBRUREOUUwMDc0M0JEMiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNw
cCAqLywKQEAgLTI2NzAzLDYgKzI2NzA5LDcgQEAKIAkJCQk3RUEzMEY2QTE2REZGRTc1MDAyNTdE
MEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVhZGVycyAqLywKIAkJCQky
RDgyODdGNzE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODk1NzBBMDE2RTlCRDU5MDAxODRFNTUgLyogSFRNTElkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yOTkwNyw2ICsyOTkxNCw3IEBACiAJCQkJN0VBMzBG
NjkxNkRGRkU3NTAwMjU3RDBCIC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRDgyODdGNjE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OTU3MDlGMTZFOUJENTkwMDE4NEU1NSAvKiBI
VE1MSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzMTY0MDE2RUQwQ0RFMDAz
NUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXgg
Y2JiOTgyYmNlN2E4ZGQ4OGFmZWNiNjM3MTRkZTdiMTAwZGJlOWEwZC4uYWU2M2U2Yjk4ZGM5ODdi
ZTA4OGYxZDJlNWNlMjQ3MTVkMWEwMjFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCBTdHJp
bmcgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHByb3BlcnR5KQogICAgIC8vIHwgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllciBjaGFy
YWN0ZXIgaW4gQ1NTLCBzbyB0aGlzIGNhbiBuZXZlciBjb25mbGljdCB3aXRoIGEga2V5ZnJhbWUg
aWRlbnRpZmllci4KICAgICBTdHJpbmdCdWlsZGVyIGlkOwogICAgIGlkLmFwcGVuZExpdGVyYWwo
Ii18dHJhbnNpdGlvbiIpOwotICAgIGlkLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihwcm9wZXJ0
eSkpOworICAgIGlkLmFwcGVuZE51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5KSk7CiAg
ICAgaWQuYXBwZW5kKCctJyk7CiAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcAppbmRleCAzNzQ1MWIxMGMzNzM0YTAyMDI4NjU3ODRkNTI0MzhiYzE5MjgyNTJhLi4yMWRh
Mzg3ZDEzZDRhNzlhOGUzZjEyNTZmYjFiNTY4N2E2OGVjMjFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ0FGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5j
bHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKQEAgLTIyNyw5ICsyMjgsOSBAQCBzdGF0aWMgU3RyaW5nIHByb3BlcnR5
SWRUb1N0cmluZyhBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgcmV0dXJuICIiOwog
fQogCi1zdGF0aWMgU3RyaW5nIGFuaW1hdGlvbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRleCkKK3N0YXRp
YyBTdHJpbmcgYW5pbWF0aW9uSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgpCiB7
Ci0gICAgcmV0dXJuIGFuaW1hdGlvbk5hbWUgKyAnXycgKyBTdHJpbmc6Om51bWJlcihwcm9wZXJ0
eSkgKyAnXycgKyBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgcmV0dXJuIGFuaW1hdGlvbk5h
bWUgKyAnXycgKyBTdHJpbmc6Om51bWJlcihwcm9wZXJ0eSkgKyAnXycgKyBTdHJpbmc6Om51bWJl
cihpbmRleCkgKyAnXycgKyBTdHJpbmc6Om51bWJlcihzdWJJbmRleCk7CiB9CiAKIHN0YXRpYyBi
b29sIGFuaW1hdGlvbkhhc1N0ZXBzVGltaW5nRnVuY3Rpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltKQpAQCAtNDk3LDcgKzQ5OCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9w
ZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJBbmlt
YXRpb24ubV9wcm9wZXJ0eSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyCiAjZW5kaWYK
ICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgbW92ZU9yQ29weUxheWVyQW5pbWF0
aW9uKG9wZXJhdGlvbiwgYW5pbWF0aW9uSWRlbnRpZmllcihjdXJyQW5pbWF0aW9uLm1fbmFtZSwg
Y3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uLm1faW5kZXgpLCBmcm9tTGF5
ZXIsIHRvTGF5ZXIpOworICAgICAgICAgICAgICAgIG1vdmVPckNvcHlMYXllckFuaW1hdGlvbihv
cGVyYXRpb24sIGFuaW1hdGlvbklkZW50aWZpZXIoY3VyckFuaW1hdGlvbi5tX25hbWUsIGN1cnJB
bmltYXRpb24ubV9wcm9wZXJ0eSwgY3VyckFuaW1hdGlvbi5tX2luZGV4LCBjdXJyQW5pbWF0aW9u
Lm1fc3ViSW5kZXgpLCBmcm9tTGF5ZXIsIHRvTGF5ZXIpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMTgwNSwxMCArMTgwNiwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQW5pbWF0
aW9ucygpCiAgICAgICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiYgY3Vy
ckFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcm9j
ZXNzaW5nSW5mby5hY3Rpb24pIHsKICAgICAgICAgICAgICAgICBjYXNlIFJlbW92ZToKLSAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFuaW1hdGlvbi5t
X3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFuaW1hdGlv
bi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4LCBj
dXJyQW5pbWF0aW9uLm1fc3ViSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIFBhdXNlOgotICAgICAgICAgICAgICAgICAgICBwYXVzZUNBQW5p
bWF0aW9uT25MYXllcihjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1l
LCBjdXJyQW5pbWF0aW9uLm1faW5kZXgsIHByb2Nlc3NpbmdJbmZvLnRpbWVPZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBwYXVzZUNBQW5pbWF0aW9uT25MYXllcihjdXJyQW5pbWF0aW9uLm1f
cHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1lLCBjdXJyQW5pbWF0aW9uLm1faW5kZXgsIGN1cnJB
bmltYXRpb24ubV9zdWJJbmRleCwgcHJvY2Vzc2luZ0luZm8udGltZU9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTE4MjQsNyArMTgyNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25z
KCkKICAgICBpZiAoKG51bUFuaW1hdGlvbnMgPSBtX3VuY29taXR0ZWRBbmltYXRpb25zLnNpemUo
KSkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIHBlbmRpbmdBbmlt
YXRpb24gPSBtX3VuY29taXR0ZWRBbmltYXRpb25zW2ldOwotICAgICAgICAgICAgc2V0QW5pbWF0
aW9uT25MYXllcihwZW5kaW5nQW5pbWF0aW9uLm1fYW5pbWF0aW9uLmdldCgpLCBwZW5kaW5nQW5p
bWF0aW9uLm1fcHJvcGVydHksIHBlbmRpbmdBbmltYXRpb24ubV9uYW1lLCBwZW5kaW5nQW5pbWF0
aW9uLm1faW5kZXgsIHBlbmRpbmdBbmltYXRpb24ubV90aW1lT2Zmc2V0KTsKKyAgICAgICAgICAg
IHNldEFuaW1hdGlvbk9uTGF5ZXIocGVuZGluZ0FuaW1hdGlvbi5tX2FuaW1hdGlvbi5nZXQoKSwg
cGVuZGluZ0FuaW1hdGlvbi5tX3Byb3BlcnR5LCBwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSwgcGVu
ZGluZ0FuaW1hdGlvbi5tX2luZGV4LCBwZW5kaW5nQW5pbWF0aW9uLm1fc3ViSW5kZXgsIHBlbmRp
bmdBbmltYXRpb24ubV90aW1lT2Zmc2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQW5p
bWF0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3J1bm5pbmdBbmltYXRpb25zLmZpbmQocGVuZGlu
Z0FuaW1hdGlvbi5tX25hbWUpOwogICAgICAgICAgICAgaWYgKGl0ID09IG1fcnVubmluZ0FuaW1h
dGlvbnMuZW5kKCkpIHsKQEAgLTE4NTYsMTQgKzE4NTcsMTQgQEAgYm9vbCBHcmFwaGljc0xheWVy
Q0E6OmlzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9y
bUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUFuaW1hdGlv
biogY2FBbmltLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQgc3ViSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQog
ewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBhbmltYXRlZExheWVyKHByb3BlcnR5KTsK
ICAgICAKICAgICBpZiAodGltZU9mZnNldCkKICAgICAgICAgY2FBbmltLT5zZXRCZWdpblRpbWUo
Q0FDdXJyZW50TWVkaWFUaW1lKCkgLSB0aW1lT2Zmc2V0KTsKIAotICAgIFN0cmluZyBhbmltYXRp
b25JRCA9IGFuaW1hdGlvbklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4
KTsKKyAgICBTdHJpbmcgYW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlv
bk5hbWUsIHByb3BlcnR5LCBpbmRleCwgc3ViSW5kZXgpOwogCiAgICAgbGF5ZXItPnJlbW92ZUFu
aW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CiAgICAgbGF5ZXItPmFkZEFuaW1hdGlvbkZvcktl
eShhbmltYXRpb25JRCwgY2FBbmltKTsKQEAgLTE4OTUsMTEgKzE4OTYsMTEgQEAgc3RhdGljIHZv
aWQgYnVnNzMxMTM2N1dvcmthcm91bmQoUGxhdGZvcm1DQUxheWVyKiB0cmFuc2Zvcm1MYXllciwg
Y29uc3QgVHJhbnNmb3IKICAgICB0cmFuc2Zvcm1MYXllci0+c2V0VHJhbnNmb3JtKGNhVHJhbnNm
b3JtKTsKIH0KIAotYm9vbCBHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNBQW5pbWF0aW9uRnJvbUxh
eWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBpbnQgaW5kZXgpCitib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25G
cm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGludCBpbmRleCwgaW50IHN1YkluZGV4KQogewogICAgIFBsYXRmb3JtQ0FMYXll
ciogbGF5ZXIgPSBhbmltYXRlZExheWVyKHByb3BlcnR5KTsKIAotICAgIFN0cmluZyBhbmltYXRp
b25JRCA9IGFuaW1hdGlvbklkZW50aWZpZXIoYW5pbWF0aW9uTmFtZSwgcHJvcGVydHksIGluZGV4
KTsKKyAgICBTdHJpbmcgYW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlv
bk5hbWUsIHByb3BlcnR5LCBpbmRleCwgc3ViSW5kZXgpOwogCiAgICAgaWYgKCFsYXllci0+YW5p
bWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTky
MCwxMSArMTkyMSwxMSBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25G
cm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIoQW5p
bWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGlu
dCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VD
QUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgaW50IHN1YkluZGV4LCBkb3VibGUgdGltZU9m
ZnNldCkKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gYW5pbWF0ZWRMYXllcihwcm9w
ZXJ0eSk7CiAKLSAgICBTdHJpbmcgYW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFu
aW1hdGlvbk5hbWUsIHByb3BlcnR5LCBpbmRleCk7CisgICAgU3RyaW5nIGFuaW1hdGlvbklEID0g
YW5pbWF0aW9uSWRlbnRpZmllcihhbmltYXRpb25OYW1lLCBwcm9wZXJ0eSwgaW5kZXgsIHN1Yklu
ZGV4KTsKIAogICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjdXJBbmltID0gbGF5ZXIt
PmFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CiAgICAgaWYgKCFjdXJBbmltKQpAQCAtMTk5
MCw3ICsxOTkxLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlvbkZyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHUKICAgICBpZiAoIXZhbHVlc09L
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3VuY29taXR0ZWRBbmltYXRpb25zLmFw
cGVuZChMYXllclByb3BlcnR5QW5pbWF0aW9uKGNhQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2
YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKKyAgICBt
X3VuY29taXR0ZWRBbmltYXRpb25zLmFwcGVuZChMYXllclByb3BlcnR5QW5pbWF0aW9uKGNhQW5p
bWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5k
ZXgsIDAsIHRpbWVPZmZzZXQpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjAxNCw3ICsy
MDE1LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRp
b25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICBpZiAoIXZhbGlkTWF0cmljZXMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuYXBw
ZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHZh
bHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRpb25JbmRleCwgdGltZU9mZnNldCkpOworICAgIG1f
dW5jb21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24oY2FBbmlt
YXRpb24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRpb25JbmRl
eCwgMCwgdGltZU9mZnNldCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDc2LDcgKzIw
NzcsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlv
bnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogICAgIGJvb2wgaXNLZXlmcmFtZSA9IHZh
bHVlTGlzdC5zaXplKCkgPiAyOwogICAgIAogICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBmaWx0ZXJPcCA9IG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIGludCBu
dW1BbmltYXRlZFByb3BlcnRpZXMgPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRlZEZp
bHRlclByb3BlcnRpZXMoZmlsdGVyT3ApOworICAgIGludCBudW1BbmltYXRlZFByb3BlcnRpZXMg
PSBQbGF0Zm9ybUNBRmlsdGVyczo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlck9w
KTsKICAgICAKICAgICAvLyBFYWNoIGZpbHRlciBtaWdodCBuZWVkIHRvIGFuaW1hdGUgbXVsdGlw
bGUgcHJvcGVydGllcywgZWFjaCB3aXRoIHRoZWlyIG93biBrZXlQYXRoLiBUaGUga2V5UGF0aCBp
cyBhbHdheXMgb2YgdGhlIGZvcm06CiAgICAgLy8KQEAgLTIwODgsNyArMjA4OSw3IEBAIGJvb2wg
R3JhcGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgdmFsCiAgICAgZm9yIChpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4ID0gMDsgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4IDwgbnVtQW5pbWF0ZWRQcm9wZXJ0
aWVzOyArK2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgewogICAgICAgICBib29sIHZhbHVl
c09LOwogICAgICAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY2FBbmltYXRpb247Ci0g
ICAgICAgIFN0cmluZyBrZXlQYXRoID0gU3RyaW5nOjpmb3JtYXQoImZpbHRlcnMuZmlsdGVyXyVk
LiVzIiwgYW5pbWF0aW9uSW5kZXgsIFBsYXRmb3JtQ0FBbmltYXRpb246OmFuaW1hdGVkRmlsdGVy
UHJvcGVydHlOYW1lKGZpbHRlck9wLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpKTsKKyAg
ICAgICAgU3RyaW5nIGtleVBhdGggPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVycy5maWx0ZXJfJWQu
JXMiLCBhbmltYXRpb25JbmRleCwgUGxhdGZvcm1DQUZpbHRlcnM6OmFuaW1hdGVkRmlsdGVyUHJv
cGVydHlOYW1lKGZpbHRlck9wLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChpc0tleWZyYW1lKSB7CiAgICAgICAgICAgICBjYUFuaW1hdGlvbiA9
IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwga2V5UGF0aCwgZmFsc2UpOwpAQCAt
MjEwMCw3ICsyMTAxLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0
ZWRBbmltYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICAgICAgCiAgICAg
ICAgIEFTU0VSVCh2YWx1ZXNPSyk7CiAKLSAgICAgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5h
cHBlbmQoTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihjYUFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwg
dmFsdWVMaXN0LnByb3BlcnR5KCksIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0KSk7CisgICAg
ICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJvcGVydHlBbmltYXRpb24o
Y2FBbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9wZXJ0eSgpLCBhbmltYXRp
b25JbmRleCwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4LCB0aW1lT2Zmc2V0KSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGJlMjZiYTc4M2VkNTZlNjE0MmRj
ZTVjODRhNDNhMmEyOGIxYzJmYTguLjJhYWY2YTk5YjIyMmYzMWVjZjViYmNjMTQxYmQ2ODBmYWYx
OGM2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0zNDksOSArMzQ5LDkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKTsKICAgICBTdHJ1
Y3R1cmFsTGF5ZXJQdXJwb3NlIHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSBjb25zdDsKIAotICAg
IHZvaWQgc2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiwgQW5pbWF0ZWRQ
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91Ymxl
IHRpbWVPZmZzZXQpOwotICAgIGJvb2wgcmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0
ZWRQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCk7Ci0g
ICAgdm9pZCBwYXVzZUNBQW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7Cisg
ICAgdm9pZCBzZXRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qLCBBbmltYXRl
ZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBpbnQg
c3ViSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICBib29sIHJlbW92ZUNBQW5pbWF0aW9u
RnJvbUxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBpbnQgaW5kZXgsIGludCBzdWJJTmRleCk7CisgICAgdm9pZCBwYXVzZUNBQW5pbWF0aW9uT25M
YXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50
IGluZGV4LCBpbnQgc3ViSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKIAogICAgIGVudW0gTW92
ZU9yQ29weSB7IE1vdmUsIENvcHkgfTsKICAgICBzdGF0aWMgdm9pZCBtb3ZlT3JDb3B5TGF5ZXJB
bmltYXRpb24oTW92ZU9yQ29weSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZGVudGlmaWVyLCBQ
bGF0Zm9ybUNBTGF5ZXIgKmZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICp0b0xheWVyKTsKQEAg
LTQzNSwxMSArNDM1LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBh
bmltYXRpb24gb2YgYSBzaW5nbGUgcHJvcGVydHkuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSB0cmFu
c2Zvcm0gYW5pbWF0aW9ucyBmb3IKICAgICAvLyBhIHNpbmdsZSB0cmFuc2l0aW9uIG9yIGtleWZy
YW1lIGFuaW1hdGlvbiwgc28gaW5kZXggaXMgdXNlZCB0byBkaXN0aW5ndWlzaCB0aGVzZS4KICAg
ICBzdHJ1Y3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiB7Ci0gICAgICAgIExheWVyUHJvcGVydHlB
bmltYXRpb24oUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjYUFuaW1hdGlvbiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGlu
dCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpCisgICAgICAgIExheWVyUHJvcGVydHlBbmltYXRp
b24oUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjYUFuaW1hdGlvbiwgY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRl
eCwgaW50IHN1YkluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKICAgICAgICAgOiBtX2FuaW1hdGlv
bihjYUFuaW1hdGlvbikKICAgICAgICAgLCBtX25hbWUoYW5pbWF0aW9uTmFtZSkKICAgICAgICAg
LCBtX3Byb3BlcnR5KHByb3BlcnR5KQogICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9zdWJJbmRleChzdWJJbmRleCkKICAgICAgICAgLCBtX3RpbWVPZmZzZXQodGltZU9mZnNl
dCkKICAgICAgICAgeyB9CiAKQEAgLTQ0Nyw2ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBT
dHJpbmcgbV9uYW1lOwogICAgICAgICBBbmltYXRlZFByb3BlcnR5SUQgbV9wcm9wZXJ0eTsKICAg
ICAgICAgaW50IG1faW5kZXg7CisgICAgICAgIGludCBtX3N1YkluZGV4OwogICAgICAgICBkb3Vi
bGUgbV90aW1lT2Zmc2V0OwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKaW5kZXggNmMx
MjYzMTE0ZDI5OWQ2NGFlZjg0ZGVhN2U1MTY4NzcwYzYzYTg5Ny4uMDkwZGVmNTZjNGIxMTMwNzRj
ODJhYTYxMDQ1OWM1Nzg5MTQwNmUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaApAQCAtMTM5LDExICsx
MzksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0
b3I8Y29uc3QgVGltaW5nRnVuY3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKTsKICAgICB2
b2lkIGNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsK
LSAgICAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3RhdGljIGludCBudW1BbmltYXRl
ZEZpbHRlclByb3BlcnRpZXMoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlKTsKLSAgICBz
dGF0aWMgY29uc3QgY2hhciogYW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSNl
bmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihBbmltYXRpb25UeXBl
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y5NmRm
ZWIwNDU0Y2Q5MTQxN2UyMWYxMmQyMWY2OTc3ODRlYzViOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUNBRmlsdGVyc19oCisjZGVmaW5lIFBsYXRm
b3JtQ0FGaWx0ZXJzX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDgwCisjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDEKKyNlbHNlCisjZGVmaW5lIFVT
RV9DQV9GSUxURVJTIDAKKyNlbmRpZgorCitPQkpDX0NMQVNTIE5TVmFsdWU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFBsYXRmb3JtQ0FMYXllcjsKKworY2xhc3MgUGxhdGZvcm1DQUZp
bHRlcnMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNPbkxheWVyKFBsYXRm
b3JtQ0FMYXllciosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgaW50IG51
bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhbmltYXRlZEZpbHRlclByb3BlcnR5TmFtZShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpOworCisgICAgc3RhdGljIFJldGFpblB0cjxOU1ZhbHVlPiBmaWx0ZXJWYWx1ZUZvck9wZXJh
dGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4KTsKKworI2lmZGVmIFVTRV9DQV9GSUxURVJTCisgICAgc3RhdGljIFJldGFpblB0cjxOU1Zh
bHVlPiBjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpOwor
I2VuZGlmCit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUZp
bHRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQppbmRleCBhYzg2NzU1ODQx
YjFmZjJkZGU0NWYzY2E5MWFmZjRiYjlkNDc1N2U2Li5iMDkyMGYyNzc4NjhiMjFmZGQ0YmRjMzQ5
ZjlmZWIxYTZlZWNkOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQpAQCAt
MzAsNyArMzAsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1DQUFuaW1hdGlvbi5oIgogCiAjaW1wb3J0
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2ltcG9y
dCAiUGxhdGZvcm1DQUZpbHRlcnMuaCIKICNpbXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCiAjaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5o
PgpAQCAtMzkyLDEyNiArMzkyLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9t
VmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHZhbHVlKQogfQogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQotc3RhdGljIGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7Ci0gICAg
eyAwLjM5MywgMC43NjksIDAuMTg5IH0sCi0gICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCi0g
ICAgeyAwLjI3MiwgMC41MzQsIDAuMTMxIH0KLX07Ci0KLXN0YXRpYyBkb3VibGUgc2VwaWFOb25l
Q29uc3RhbnRzWzNdWzNdID0gewotICAgIHsgMSwgMCwgMCB9LAotICAgIHsgMCwgMSwgMCB9LAot
ICAgIHsgMCwgMCwgMSB9Ci19OwotCi1zdGF0aWMgZG91YmxlIGludmVydENvbnN0YW50c1szXVsz
XSA9IHsKLSAgICB7IDEsIDAsIDAgfSwKLSAgICB7IDAsIDEsIDAgfSwKLSAgICB7IDAsIDAsIDEg
fQotfTsKLQotc3RhdGljIFJldGFpblB0cjxpZD4gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXgpCi17Ci0gICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVy
YXRpb24tPmdldE9wZXJhdGlvblR5cGUoKTsKLSAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlOwotICAg
IAotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICh0eXBlID09IEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURSkKLSAgICAgICAgICAg
IGFtb3VudCA9IGRlZzJyYWQoYW1vdW50KTsKLQotICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgIGRvdWJs
ZSBhbW91bnQgPSAwOwotCi0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgewot
ICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoK
LSAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1tpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdWzBdLCBzZXBpYUZ1
bGxDb25zdGFudHNbMF1baW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XSwgYW1vdW50KV0sCi0g
ICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpXZWJDb3JlOjpibGVuZChzZXBp
YU5vbmVDb25zdGFudHNbaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVsxXSwgc2VwaWFGdWxs
Q29uc3RhbnRzWzFdW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF0sIGFtb3VudCldLAotICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFO
b25lQ29uc3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF1bMl0sIHNlcGlhRnVsbENv
bnN0YW50c1syXVtpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdLCBhbW91bnQpXSwKLSAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjBdLAotICAgICAgICAgICAgbmlsXSBy
ZXRhaW5dKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpJTlZFUlQ6IHsKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Ci0KLSAgICAgICAgaWYgKCFv
cGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAgICAgICAg
YW1vdW50ID0gb3AtPmFtb3VudCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBU
aGUgY29sb3IgbWF0cml4IGFuaW1hdGlvbiBmb3IgaW52ZXJ0IGRvZXMgYSBzY2FsZSBvZiBlYWNo
IGNvbG9yIGNvbXBvbmVudCBieSBhIHZhbHVlIHRoYXQgZ29lcyBmcm9tIAotICAgICAgICAvLyAx
ICh3aGVuIGFtb3VudCBpcyAwKSB0byAtMSAod2hlbiBhbW91bnQgaXMgMSkuIFRoZW4gdGhlIGNv
bG9yIHZhbHVlcyBhcmUgb2Zmc2V0IGJ5IGFtb3VudC4gVGhpcyBoYXMgdGhlCi0gICAgICAgIC8v
IGVmZmVjdCBvZiBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb246IGMnID0gYyAqIC0xICsgMSwgd2hp
Y2ggaW52ZXJ0cyB0aGUgY29sb3IuCi0gICAgICAgIGlmIChpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXggPCAzKSB7Ci0gICAgICAgICAgICAvLyB0aGUgZmlyc3QgMyBwcm9wZXJ0aWVzIGFyZSB0
aGUgcmVkLCBncmVlbiBhbmQgYmx1ZSBtdWx0aXBsaWVycwotICAgICAgICAgICAgZG91YmxlIG11
bHRpcGxpZXIgPSAxIC0gYW1vdW50ICogMjsKLSAgICAgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tO
U0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6aW52ZXJ0Q29uc3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF1b
MF0gKiBtdWx0aXBsaWVyXSwKLSAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTppbnZlcnRDb25zdGFudHNbaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVsxXSAqIG11
bHRpcGxpZXJdLAotICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmlu
dmVydENvbnN0YW50c1tpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdWzJdICogbXVsdGlwbGll
cl0sCi0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MF0sCi0gICAg
ICAgICAgICAgICAgbmlsXSByZXRhaW5dKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIHRoZSBsYXN0IHByb3BlcnR5IGlzIHRoZSBjb2xvciBvZmZzZXQKLSAgICAgICAgICAgIHZh
bHVlLmFkb3B0TlMoW1tOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSwKLSAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdLAotICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0sCi0gICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MF0sCi0gICAgICAgICAgICAgICAgbmlsXSByZXRhaW5dKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwot
Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KTsKLSAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1v
dW50XSByZXRhaW5dKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwotCi0gICAgICAgIGlm
ICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkgewotICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgob3At
PnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFsdWUu
YWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZh
bHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQ
cm9wZXJ0eUluZGV4KQogewotICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihvcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAg
UmV0YWluUHRyPGlkPiB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9w
ZXJhdGlvbihvcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CiAgICAgW3N0
YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZh
bHVlOnZhbHVlLmdldCgpXTsKIH0KICNlbmRpZgpAQCAtNTcwLDcgKzQ1Myw3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUp
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRU
b1ZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0
ZXJQcm9wZXJ0eUluZGV4KQogewotICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBmaWx0ZXJWYWx1
ZUZvck9wZXJhdGlvbihvcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7Cisg
ICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihvcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CiAgICAg
W3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9W
YWx1ZTp2YWx1ZS5nZXQoKV07CiB9CiAjZW5kaWYKQEAgLTY1Niw3ICs1MzksNyBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gPiYgdmFsdQogICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVB
cnJheSBhcnJheV07CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlID0gZmlsdGVyVmFsdWVGb3JPcGVy
YXRpb24odmFsdWVzW2ldLmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworICAg
ICAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVl
Rm9yT3BlcmF0aW9uKHZhbHVlc1tpXS5nZXQoKSwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4
KTsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp2YWx1ZS5nZXQoKV07CiAgICAgfQogICAgIFtz
dGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZh
bHVlczphcnJheV07CkBAIC03MDQsNTEgKzU4Nyw0IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bjo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiogdmFs
CiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0VGltaW5nRnVuY3Rpb25zOltvdGhlciB0aW1pbmdGdW5jdGlvbnNdXTsKIH0KIAotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLWludCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRl
ZEZpbHRlclByb3BlcnRpZXMoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCi17
Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
OiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHJldHVybiAzOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuIDE7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6IHJldHVybiA0OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuIDE7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiByZXR1cm4gMTsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuIDE7Ci0gICAgZGVmYXVsdDogcmV0
dXJuIDA7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjphbmlt
YXRlZEZpbHRlclByb3BlcnR5TmFtZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZSwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSAgICBzd2l0Y2godHlwZSkg
ewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAiaW5wdXRJbnRl
bnNpdHkiOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgc3dpdGNo
KGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAi
aW5wdXRSVmVjdG9yIjsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gImlucHV0R1ZlY3RvciI7Ci0g
ICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnB1dEJWZWN0b3IiOwotICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gIiI7Ci0gICAgICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHJldHVybiAiaW5wdXRTYXR1cmF0aW9uIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogcmV0dXJuICJpbnB1dEFuZ2xlIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgotICAgICAgICBzd2l0Y2goaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7Ci0g
ICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOwotICAgICAgICBjYXNlIDE6IHJl
dHVybiAiaW5wdXRHVmVjdG9yIjsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3Rv
ciI7Ci0gICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnB1dEJpYXNWZWN0b3IiOwotICAgICAgICBk
ZWZhdWx0OiByZXR1cm4gIiI7Ci0gICAgICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWTogcmV0dXJuICJpbnB1dEFWZWN0b3IiOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCTFVSOiByZXR1cm4gImlucHV0UmFkaXVzIjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
Q09OVFJBU1Q6IHJldHVybiAiaW5wdXRDb250cmFzdCI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6IHJldHVybiAiaW5wdXRCcmlnaHRuZXNzIjsKLSAgICBkZWZhdWx0OiBy
ZXR1cm4gIiI7Ci0gICAgfQotfQotI2VuZGlmCi0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ3
MWQ4MThlOWJiMTZjMWYwYTIwMTc0ZGMxZGY2ZjE1Y2JhNWRkMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVy
c01hYy5tbQpAQCAtMCwwICsxLDY4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKworI2lt
cG9ydCAiUGxhdGZvcm1DQUZpbHRlcnMuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
CisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkxlbmd0aEZ1bmN0aW9ucy5o
IiAvLyBUaGlzIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uLgorI2ltcG9ydCAiUGxhdGZvcm1DQUxh
eWVyLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKKyNpZiBVU0VfQ0FfRklMVEVSUworc3RydWN0IENBQ29sb3JNYXRyaXgK
K3sKKyAgICBmbG9hdCBtMTEsIG0xMiwgbTEzLCBtMTQsIG0xNTsKKyAgICBmbG9hdCBtMjEsIG0y
MiwgbTIzLCBtMjQsIG0yNTsKKyAgICBmbG9hdCBtMzEsIG0zMiwgbTMzLCBtMzQsIG0zNTsKKyAg
ICBmbG9hdCBtNDEsIG00MiwgbTQzLCBtNDQsIG00NTsKK307CisKK3R5cGVkZWYgc3RydWN0IENB
Q29sb3JNYXRyaXggQ0FDb2xvck1hdHJpeDsKKworQGludGVyZmFjZSBOU1ZhbHVlIChEZXRhaWxz
KQorKyAoTlNWYWx1ZSAqKXZhbHVlV2l0aENBQ29sb3JNYXRyaXg6KENBQ29sb3JNYXRyaXgpdDsK
K0BlbmQKKworQGludGVyZmFjZSBDQUZpbHRlciA6IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TTXV0
YWJsZUNvcHlpbmcsIE5TQ29kaW5nPgorQGVuZAorCitAaW50ZXJmYWNlIENBRmlsdGVyIChEZXRh
aWxzKQorQHByb3BlcnR5KGNvcHkpIE5TU3RyaW5nICpuYW1lOworKyAoQ0FGaWx0ZXIgKilmaWx0
ZXJXaXRoVHlwZTooTlNTdHJpbmcgKil0eXBlOworQGVuZAorCitleHRlcm4gTlNTdHJpbmcgKiBj
b25zdCBrQ0FGaWx0ZXJDb2xvck1hdHJpeDsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZp
bHRlckNvbG9yTW9ub2Nocm9tZTsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNv
bG9ySHVlUm90YXRlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JTYXR1
cmF0ZTsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckdhdXNzaWFuQmx1cjsKKyNl
bmRpZgorCisvLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlckVm
ZmVjdFJlbmRlcmVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzYwMDgpLgorc3RhdGljIGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7
CisgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCisgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4
IH0sCisgICAgeyAwLjI3MiwgMC41MzQsIDAuMTMxIH0KK307CisKK3N0YXRpYyBkb3VibGUgc2Vw
aWFOb25lQ29uc3RhbnRzWzNdWzNdID0geworICAgIHsgMSwgMCwgMCB9LAorICAgIHsgMCwgMSwg
MCB9LAorICAgIHsgMCwgMCwgMSB9Cit9OworCit2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRG
aWx0ZXJzT25MYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBDQUxheWVyKiBsYXllciA9IHBsYXRmb3Jt
Q0FMYXllci0+cGxhdGZvcm1MYXllcigpOworCisgICAgaWYgKCFmaWx0ZXJzLnNpemUoKSkgewor
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldEZp
bHRlcnM6bmlsXTsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgYWRkcyBzaGFkb3cgcHJvcGVydGll
cyB0byB0aGUgbGF5ZXIgZXZlbiB3aGVuIGl0IGhhZCBub25lLgorICAgICAgICBbbGF5ZXIgc2V0
U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9dOworICAgICAgICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6
bmlsXTsKKyAgICAgICAgW2xheWVyIHNldFNoYWRvd1JhZGl1czowXTsKKyAgICAgICAgW2xheWVy
IHNldFNoYWRvd09wYWNpdHk6MF07CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgZmlsdGVyc0NhbkJl
Q29tcG9zaXRlZCB3YXMgY2FsbGVkIGFuZCBpdCByZXR1cm5lZCB0cnVlLgorICAgIEFTU0VSVChw
bGF0Zm9ybUNBTGF5ZXItPmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycykpOworICAgIAor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gYXJyYXkoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0p
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gU3RyaW5nOjpmb3JtYXQoImZpbHRlcl8l
ZCIsIGkpOworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9
IGZpbHRlcnMuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9X
OiB7CisgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBhc3N1bWUgZHJvcCBzaGFkb3cgaXMg
dGhlIGxhc3QgZmlsdGVyLCBwdXQgaXQgb24gdGhlIGxheWVyLgorICAgICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzEwOTU5OTY5PiBIYW5kbGUgY2FzZSB3aGVyZSBkcm9wLXNoYWRvdyBpcyBu
b3QgdGhlIGxhc3QgZmlsdGVyLgorICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
Kj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPZmZzZXQ6
Q0dTaXplTWFrZShvcC0+eCgpLCBvcC0+eSgpKV07CisKKyAgICAgICAgICAgIENHRmxvYXQgY29t
cG9uZW50c1s0XTsKKyAgICAgICAgICAgIG9wLT5jb2xvcigpLmdldFJHQkEoY29tcG9uZW50c1sw
XSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbG9y
UmVmPiBjb2xvcihBZG9wdENGLCBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBv
bmVudHMpKTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpjb2xvci5nZXQoKV07
CisgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOm9wLT5zdGREZXZpYXRpb24oKV07
CisgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENBRmlsdGVy
ICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNb25vY2hy
b21lXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpj
b2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAgICBDQUZpbHRlciAqZmls
dGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKKyAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6
QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0g
W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yU2F0dXJhdGVdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91
bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFt
ZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVy
XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ0FGaWx0ZXIg
KmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckh1ZVJvdGF0
ZV07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07CisgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6QCJodWVSb3RhdGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAg
ICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0
ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisgICAgICAgICAgICBDQUZpbHRl
ciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4
XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBm
b3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6
ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFJl
dGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNv
bG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoKm9wKTsKKyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0
ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpA
ImlucHV0Q29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJO
YW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWlu
UHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JN
YXRyaXhWYWx1ZUZvckZpbHRlcigqb3ApOworICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9
IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CisgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5w
dXRDb2xvck1hdHJpeCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRS
QVNUOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgUmV0YWluUHRyPE5T
VmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhW
YWx1ZUZvckZpbHRlcigqb3ApOworICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xv
ck1hdHJpeCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAg
ICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAg
ICAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBD
QUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckdhdXNz
aWFuQmx1cl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JL
ZXk6QCJpbnB1dFJhZGl1cyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpHUkFZU0NBTEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1vbm9jaHJvbWUiXTsKKyAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5w
dXRJbnRlbnNpdHkiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJQ29sb3IgY29s
b3JXaXRoUmVkOjAuNjcgZ3JlZW46MC42NyBibHVlOjAuNjddIGZvcktleTpAImlucHV0Q29sb3Ii
XTsgLy8gQ29sb3IgZGVyaXZlZCBlbXBpcmljYWxseSB0byBtYXRjaCB6ZXJvIHNhdHVyYXRpb24g
bGV2ZWxzLgorICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAg
ICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CisgICAg
ICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVy
YXRpb24pOworICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJX
aXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVs
dHNdOworCisgICAgICAgICAgICBkb3VibGUgdCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgICAg
IHQgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjAsIHQpLCAxLjApOworICAgICAgICAgICAgLy8gRklY
TUU6IHJlc3VsdHMgZG9uJ3QgbWF0Y2ggdGhlIHNvZnR3YXJlIGZpbHRlci4KKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6
YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0s
IHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpX
ZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50
c1swXVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlh
Tm9uZUNvbnN0YW50c1sxXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzBdLCB0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMV0sIHQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sx
XVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9u
ZUNvbnN0YW50c1syXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCB0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQo
c2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWjpXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsy
XSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmls
dGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMi
XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5
OkAiaW5wdXRTYXR1cmF0aW9uIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SFVFX1JPVEFURTogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUh1ZUFkanVzdCJdOworICAgICAgICAgICAg
W2ZpbHRlciBzZXREZWZhdWx0c107CisKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKG9wLT5hbW91bnQoKSldIGZvcktleTpAImlu
cHV0QW5nbGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsK
KyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbio+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0g
W0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgICAgICAgICAg
W2ZpbHRlciBzZXREZWZhdWx0c107CisKKyAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0g
MSAtIG9wLT5hbW91bnQoKSAqIDI7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgcmVzdWx0
cyBvZiB0aGlzIGZpbHRlciBsb29rIHdyb25nLgorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF0gZm9yS2V5OkAi
aW5wdXRSVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoWDowIFk6bXVsdGlwbGllciBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3Ii
XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAg
WTowIFo6bXVsdGlwbGllciBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MV0g
Zm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDpvcC0+YW1vdW50KCkgWTpvcC0+YW1vdW50KCkgWjpvcC0+YW1v
dW50KCkgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0
ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmpl
Y3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAg
ICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
Q29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworCisgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDoxIFk6MCBaOjAg
VzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWToxIFo6MCBXOjBdIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6MCBZOjAgWjoxIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzpvcC0+YW1v
dW50KCldIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRC
aWFzVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Cisg
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVT
UzogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgICAg
ICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBv
cC0+YW1vdW50KCk7CisKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmFtb3VudCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6YW1v
dW50IFo6MCBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjphbW91bnQgVzowXSBmb3JL
ZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJO
YW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpD
T05UUkFTVDogeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVy
KiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5OkAi
aW5wdXRDb250cmFzdCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBzdGREZXZpYXRpb25Z
LgorICAgICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2Fz
dDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUdhdXNz
aWFuQmx1ciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZv
ckxlbmd0aChvcC0+c3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOwor
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFthcnJh
eS5nZXQoKSBjb3VudF0gPiAwKQorICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczphcnJheS5nZXQo
KV07CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitSZXRhaW5QdHI8
TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKGNvbnN0
IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4KQoreworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgVU5VU0VEX1BBUkFNKGludGVybmFsRmls
dGVyUHJvcGVydHlJbmRleCk7CisjZW5kaWYKKyAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZSA9IG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpOworICAgIFJldGFpblB0
cjxpZD4gdmFsdWU7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogeworICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRJbnRlbnNp
dHkKKyAgICAgICAgLy8gQ0FGaWx0ZXI6IGlucHV0QW1vdW50CisgICAgICAgIGRvdWJsZSBhbW91
bnQgPSAwOworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgdmFs
dWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
eworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0
cml4CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJh
dGlvbik7CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoKm9wKTsKKyNlbHNlCisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJWZWN0
b3IsIGlucHV0R1ZlY3RvciwgaW5wdXRCVmVjdG9yCisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAw
OworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAg
ICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKworICAgICAgICBDSVZlY3Rv
ciogcm93VmVjdG9yID0gMDsKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBp
bml0V2l0aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1
bGxDb25zdGFudHNbMF1bMF0sIGFtb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIGFtb3VudCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6V2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMl0sIGFt
b3VudCkgVzowXTsgYnJlYWs7IC8vIGlucHV0UlZlY3RvcgorICAgICAgICBjYXNlIDE6IHJvd1Zl
Y3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDpXZWJDb3JlOjpibGVuZChzZXBpYU5v
bmVDb25zdGFudHNbMV1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVswXSwgYW1vdW50KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sx
XVsxXSwgYW1vdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNl
cGlhRnVsbENvbnN0YW50c1sxXVsyXSwgYW1vdW50KSBXOjBdOyBicmVhazsgLy8gaW5wdXRHVmVj
dG9yCisgICAgICAgIGNhc2UgMjogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdp
dGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVswXSwgc2VwaWFGdWxsQ29u
c3RhbnRzWzJdWzBdLCBhbW91bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBZOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sy
XVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCBhbW91bnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCBhbW91bnQp
IFc6MF07IGJyZWFrOyAvLyBpbnB1dEJWZWN0b3IKKyAgICAgICAgfQorICAgICAgICB2YWx1ZS5h
ZG9wdE5TKHJvd1ZlY3Rvcik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogeworICAgICAgICAvLyBDSUZpbHRlcjogaW5w
dXRTYXR1cmF0aW9uCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dEFtb3VudAorICAgICAgICBk
b3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7
CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVy
YXRpb24pOworICAgICAgICAgICAgYW1vdW50ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgLy8gSHVlIHJvdGF0ZSBDSUZpbHRl
cjogaW5wdXRBbmdsZQorICAgICAgICAvLyBIdWUgcm90YXRlIENBRmlsdGVyOiBpbnB1dEFuZ2xl
CisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNE
ZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYW1vdW50ID0gZGVnMnJhZChhbW91bnQpOworICAgICAgICB2YWx1
ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
eworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0
cml4CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJh
dGlvbik7CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoKm9wKTsKKyNlbHNlCisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJWZWN0
b3IsIGlucHV0R1ZlY3RvciwgaW5wdXRCVmVjdG9yLCBpbnB1dEJpYXNWZWN0b3IKKyAgICAgICAg
ZG91YmxlIGFtb3VudCA9IDA7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1bHQoKSkg
eworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91bnQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMSAtIGFtb3VudCAqIDI7
CisKKyAgICAgICAgLy8gVGhlIGNvbG9yIG1hdHJpeCBhbmltYXRpb24gZm9yIGludmVydCBkb2Vz
IGEgc2NhbGUgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgYnkgYSB2YWx1ZSB0aGF0IGdvZXMgZnJv
bSAKKyAgICAgICAgLy8gMSAod2hlbiBhbW91bnQgaXMgMCkgdG8gLTEgKHdoZW4gYW1vdW50IGlz
IDEpLiBUaGVuIHRoZSBjb2xvciB2YWx1ZXMgYXJlIG9mZnNldCBieSBhbW91bnQuIFRoaXMgaGFz
IHRoZQorICAgICAgICAvLyBlZmZlY3Qgb2YgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uOiBjJyA9
IGMgKiAtMSArIDEsIHdoaWNoIGludmVydHMgdGhlIGNvbG9yLgorICAgICAgICBDSVZlY3Rvciog
cm93VmVjdG9yID0gMDsKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpIHsKKyAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0
V2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dFJWZWN0b3IKKyAg
ICAgICAgY2FzZSAxOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZ
Om11bHRpcGxpZXIgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKKyAgICAgICAgY2Fz
ZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOjAgWjptdWx0
aXBsaWVyIFc6MF07IGJyZWFrOyAvLyBpbnB1dEJWZWN0b3IKKyAgICAgICAgY2FzZSAzOiByb3dW
ZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6YW1vdW50IFk6YW1vdW50IFo6YW1v
dW50IFc6MF07IGJyZWFrOyAvLyBpbnB1dEJpYXNWZWN0b3IKKyAgICAgICAgfQorICAgICAgICB2
YWx1ZS5hZG9wdE5TKHJvd1ZlY3Rvcik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisjaWYgVVNFX0NBX0ZJTFRFUlMK
KyAgICAgICAgLy8gT3BhY2l0eSBDQUZpbHRlcjogaW5wdXRDb2xvck1hdHJpeAorICAgICAgICBj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAg
ICB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpv
cCk7CisjZWxzZQorICAgICAgICAvLyBPcGFjaXR5IENJRmlsdGVyOiBpbnB1dEFWZWN0b3IKKyAg
ICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgIGlmICghb3BlcmF0aW9uLT5pc0RlZmF1
bHQoKSkgeworICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGFtb3VudCA9IG9wLT5hbW91
bnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW0NJVmVj
dG9yIGFsbG9jXSBpbml0V2l0aFg6MCBZOjAgWjowIFc6YW1vdW50XSk7CisjZW5kaWYKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOiB7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICAgICAgLy8gQnJpZ2h0bmVzcyBDQUZpbHRl
cjogaW5wdXRDb2xvck1hdHJpeAorICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJz
Ojpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKCpvcCk7CisjZWxzZQorICAgICAgICAvLyBCcmln
aHRuZXNzIENJRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAxOworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KG9wZXJh
dGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSAwOworICAgICAgICBzd2l0Y2gg
KGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJvd1ZlY3Rv
ciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDphbW91bnQgWTowIFo6MCBXOjBdOyBicmVh
azsgLy8gaW5wdXRSVmVjdG9yCisgICAgICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tDSVZlY3Rv
ciBhbGxvY10gaW5pdFdpdGhYOjAgWTphbW91bnQgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dEdW
ZWN0b3IKKyAgICAgICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0
V2l0aFg6MCBZOjAgWjphbW91bnQgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3RvcgorICAgICAg
ICB9CisgICAgICAgIHZhbHVlLmFkb3B0TlMocm93VmVjdG9yKTsKKyNlbmRpZgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKKyNp
ZiBVU0VfQ0FfRklMVEVSUworICAgICAgICAvLyBDb250cmFzdCBDQUZpbHRlcjogaW5wdXRDb2xv
ck1hdHJpeAorICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBv
cCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihv
cGVyYXRpb24pOworICAgICAgICB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJp
eFZhbHVlRm9yRmlsdGVyKCpvcCk7CisjZWxzZQorICAgICAgICAvLyBDb250cmFzdCBDSUZpbHRl
cjogaW5wdXRDb250cmFzdAorICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAg
ICAgYW1vdW50ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWUuYWRv
cHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XSByZXRhaW5dKTsKKyNlbmRp
ZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKKyAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UmFkaXVzCisgICAgICAgIC8vIENBRmlsdGVy
OiBpbnB1dFJhZGl1cworICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKKworICAgICAgICBpZiAo
IW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KG9w
ZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKG9wLT5z
dGREZXZpYXRpb24oKSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlLmFk
b3B0TlMoW1tOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF0gcmV0YWluXSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHZhbHVlOworfQorCisjaWYgVVNFX0NBX0ZJTFRFUlMKK1JldGFpblB0
cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGZp
bHRlck9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbiYgb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uJj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgZG91YmxlIHQgPSBvcC5hbW91bnQoKTsK
KyAgICAgICAgdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7CisgICAgICAgIENB
Q29sb3JNYXRyaXggY29sb3JNYXRyaXggPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMF0sIHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsx
XSwgdCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1swXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzJdLCB0KSksIDAs
IDAsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsw
XSwgdCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1sxXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzFdLCB0KSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29u
c3RhbnRzWzFdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMl0sIHQpKSwgMCwgMCwKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1syXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCB0KSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29u
c3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1b
Ml0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgMCwg
MCwgMCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
Q0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpJTlZFUlQ6IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiYgb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgZmxvYXQgYW1vdW50
ID0gb3AuYW1vdW50KCk7CisgICAgICAgIGlmIChvcC5pc0RlZmF1bHQoKSkKKyAgICAgICAgICAg
IGFtb3VudCA9IDA7CisKKyAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IDEgLSBhbW91bnQgKiAy
OworICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgbXVs
dGlwbGllciwgMCwgMCwgMCwgYW1vdW50LAorICAgICAgICAgICAgMCwgbXVsdGlwbGllciwgMCwg
MCwgYW1vdW50LAorICAgICAgICAgICAgMCwgMCwgbXVsdGlwbGllciwgMCwgYW1vdW50LAorICAg
ICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAg
IGZsb2F0IGFtb3VudCA9IG9wLmFtb3VudCgpOworICAgICAgICBpZiAob3AuaXNEZWZhdWx0KCkp
CisgICAgICAgICAgICBhbW91bnQgPSAxOworCisgICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JN
YXRyaXggPSB7CisgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMSwg
MCwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAwLCAwLCAw
LCBhbW91bnQsIDAKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0
aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiYgb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uJj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgZmxvYXQgYW1v
dW50ID0gb3AuYW1vdW50KCk7CisgICAgICAgIGlmIChvcC5pc0RlZmF1bHQoKSkKKyAgICAgICAg
ICAgIGFtb3VudCA9IDE7CisKKyAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3Vu
dCArIDAuNTsKKyAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKKyAgICAgICAg
ICAgIGFtb3VudCwgMCwgMCwgMCwgaW50ZXJjZXB0LAorICAgICAgICAgICAgMCwgYW1vdW50LCAw
LCAwLCBpbnRlcmNlcHQsCisgICAgICAgICAgICAwLCAwLCBhbW91bnQsIDAsIGludGVyY2VwdCwK
KyAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOworICAgIH0KKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogeworICAgICAgICBjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICBmbG9hdCBhbW91bnQgPSBvcC5hbW91bnQoKTsKKyAgICAgICAgaWYgKG9wLmlzRGVm
YXVsdCgpKQorICAgICAgICAgICAgYW1vdW50ID0gMTsKKworICAgICAgICBDQUNvbG9yTWF0cml4
IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgYW1vdW50LCAwLCAwLCAwLCAwLAorICAgICAg
ICAgICAgMCwgYW1vdW50LCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgYW1vdW50LCAwLCAw
LAorICAgICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4g
W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1
cm4gbmlsOworfQorI2VuZGlmCisKK2ludCBQbGF0Zm9ybUNBRmlsdGVyczo6bnVtQW5pbWF0ZWRG
aWx0ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQorewor
I2lmIFVTRV9DQV9GSUxURVJTCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJl
dHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gMTsK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiByZXR1cm4gMTsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAx
OworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KKyNlbHNlCisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiByZXR1cm4gMzsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiBy
ZXR1cm4gNDsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHJldHVybiAzOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6IHJldHVybiAxOworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KKyNl
bmRpZgorfQorCitjb25zdCBjaGFyKiBQbGF0Zm9ybUNBRmlsdGVyczo6YW5pbWF0ZWRGaWx0ZXJQ
cm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIGludCBpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0QW1v
dW50IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6cmV0dXJuICJpbnB1dENvbG9y
TWF0cml4IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAiaW5w
dXRBbW91bnQiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4g
ImlucHV0QW5nbGUiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHJldHVybiAi
aW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHJl
dHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6IHJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgiOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gImlucHV0UmFkaXVzIjsKKyAgICBkZWZhdWx0OiByZXR1
cm4gIiI7CisgICAgfQorI2Vsc2UKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0SW50ZW5zaXR5IjsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7Cisg
ICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOworICAgICAgICBjYXNlIDE6IHJl
dHVybiAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3Rv
ciI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuICJpbnB1dFNhdHVyYXRpb24iOworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlucHV0QW5nbGUiOworICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4KSB7CisgICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0
b3IiOworICAgICAgICBjYXNlIDE6IHJldHVybiAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7CisgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnB1
dEJpYXNWZWN0b3IiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7CisgICAgICAgIH0KKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuICJpbnB1dEFWZWN0b3IiOwor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRyYXN0
IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuICJpbnB1dFJhZGl1cyI7
CisgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgIH0KKyNlbmRpZgorfQorCisjZW5kaWYgLy8g
RU5BQkxFKENTU19GSUxURVJTKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IGExYWYzYTAzODRjMDFkMzVlNmU3ODQ5
NDQzM2VmNWZmNzZiYjZhYjguLjE4ZjgzOGNiZjM4M2Y4NTNmMmQyYzRjYjM1Njk0ZWQyMmQ4MjU2
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtMzEsMTAgKzMxLDEwIEBACiAKICNp
bXBvcnQgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
Ci0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJMZW5ndGhGdW5jdGlvbnMu
aCIKKyNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJzLmgiCiAjaW1wb3J0ICJUaWxlZEJhY2tpbmcu
aCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAjaW1wb3J0ICJXZWJUaWxlZExheWVyLmgiCkBAIC0x
MTEsMzcgKzExMSw2IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRp
bWVJbnRlcnZhbCB0KQogI2VuZGlmCiBAZW5kCiAKLS8vIE5vdCBhbGwgQ0FGaWx0ZXJzIGFyZSBw
cm92aWRlZCBvbiBMaW9uLgotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTA4MAotQGludGVyZmFjZSBDQUZpbHRlciA6IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TTXV0YWJs
ZUNvcHlpbmcsIE5TQ29kaW5nPgotQGVuZAotCi1AaW50ZXJmYWNlIENBRmlsdGVyIChEZXRhaWxz
KQotQHByb3BlcnR5KGNvcHkpIE5TU3RyaW5nICpuYW1lOwotKyAoQ0FGaWx0ZXIgKilmaWx0ZXJX
aXRoVHlwZTooTlNTdHJpbmcgKil0eXBlOwotQGVuZAotCi1leHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBrQ0FGaWx0ZXJDb2xvck1hdHJpeDsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRl
ckNvbG9yTW9ub2Nocm9tZTsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckNvbG9y
SHVlUm90YXRlOwotZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qga0NBRmlsdGVyQ29sb3JTYXR1cmF0
ZTsKLWV4dGVybiBOU1N0cmluZyAqIGNvbnN0IGtDQUZpbHRlckdhdXNzaWFuQmx1cjsKLQotc3Ry
dWN0IENBQ29sb3JNYXRyaXgKLXsKLSAgICBmbG9hdCBtMTEsIG0xMiwgbTEzLCBtMTQsIG0xNTsK
LSAgICBmbG9hdCBtMjEsIG0yMiwgbTIzLCBtMjQsIG0yNTsKLSAgICBmbG9hdCBtMzEsIG0zMiwg
bTMzLCBtMzQsIG0zNTsKLSAgICBmbG9hdCBtNDEsIG00MiwgbTQzLCBtNDQsIG00NTsKLX07Ci0K
LXR5cGVkZWYgc3RydWN0IENBQ29sb3JNYXRyaXggQ0FDb2xvck1hdHJpeDsKLQotQGludGVyZmFj
ZSBOU1ZhbHVlIChEZXRhaWxzKQotKyAoTlNWYWx1ZSAqKXZhbHVlV2l0aENBQ29sb3JNYXRyaXg6
KENBQ29sb3JNYXRyaXgpdDsKLUBlbmQKLSNlbmRpZgotCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CiAKIGJvb2wg
UGxhdGZvcm1DQUxheWVyOjppc1ZhbHVlRnVuY3Rpb25TdXBwb3J0ZWQoKQpAQCAtMjEwLDcgKzE3
OSw3IEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXllclR5
cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgICAgIG1fbGF5ZXJUeXBlID0gbGF5
ZXJUeXBlOwogICAgIAogICAgICAgICBDbGFzcyBsYXllckNsYXNzID0gTmlsOwotICAgICAgICBz
d2l0Y2gobGF5ZXJUeXBlKSB7CisgICAgICAgIHN3aXRjaCAobGF5ZXJUeXBlKSB7CiAgICAgICAg
ICAgICBjYXNlIExheWVyVHlwZUxheWVyOgogICAgICAgICAgICAgY2FzZSBMYXllclR5cGVSb290
TGF5ZXI6CiAgICAgICAgICAgICAgICAgbGF5ZXJDbGFzcyA9IFtDQUxheWVyIGNsYXNzXTsKQEAg
LTQxNSw3ICszODQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgIH0KICAgICAKICAg
ICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENB
UHJvcGVydHlBbmltYXRpb24qPihhbmltYXRpb24tPnBsYXRmb3JtQW5pbWF0aW9uKCkpOwotCisg
ICAgTlNMb2coQCJBZGRpbmcgYW5pbWF0aW9uICVAIGZvciBrZXkgJUAiLCBwcm9wZXJ0eUFuaW1h
dGlvbiwgKE5TU3RyaW5nKilrZXkpOwogICAgIGlmICghW3Byb3BlcnR5QW5pbWF0aW9uIGRlbGVn
YXRlXSkKICAgICAgICAgW3Byb3BlcnR5QW5pbWF0aW9uIHNldERlbGVnYXRlOnN0YXRpY19jYXN0
PGlkPihtX2RlbGVnYXRlLmdldCgpKV07CiAgICAgIApAQCAtNzEwLDI4NCArNjc5LDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiAjaWYgRU5BQkxFKENT
U19GSUxURVJTKQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycykKIHsKLSAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKSB7Ci0gICAg
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBbbV9sYXllci5nZXQoKSBz
ZXRGaWx0ZXJzOm5pbF07Ci0gICAgICAgIFttX2xheWVyLmdldCgpIHNldFNoYWRvd09mZnNldDpD
R1NpemVaZXJvXTsKLSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93Q29sb3I6bmlsXTsK
LSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93UmFkaXVzOjBdOwotICAgICAgICBbbV9s
YXllci5nZXQoKSBzZXRTaGFkb3dPcGFjaXR5OjBdOwotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gQXNzdW1lIGZp
bHRlcnNDYW5CZUNvbXBvc2l0ZWQgd2FzIGNhbGxlZCBhbmQgaXQgcmV0dXJuZWQgdHJ1ZS4KLSAg
ICBBU1NFUlQoZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKSk7Ci0gICAgCi0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiBhcnJheShBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVyXyVkIiwgaSk7
Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVy
cy5hdChpKTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5
cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFzc3VtZSBkcm9wIHNoYWRvdyBpcyB0aGUgbGFz
dCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdoZXJlIGRyb3Atc2hhZG93IGlzIG5vdCB0aGUg
bGFzdCBmaWx0ZXIuCi0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
KiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U2hhZG93T2Zmc2V0
OkNHU2l6ZU1ha2Uob3AtPngoKSwgb3AtPnkoKSldOwotCi0gICAgICAgICAgICBDR0Zsb2F0IGNv
bXBvbmVudHNbNF07Ci0gICAgICAgICAgICBvcC0+Y29sb3IoKS5nZXRSR0JBKGNvbXBvbmVudHNb
MF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwotICAgICAg
ICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0dDb2xv
clJlZj4gY29sb3IoQWRvcHRDRiwgQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21w
b25lbnRzKSk7Ci0gICAgICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRTaGFkb3dDb2xvcjpjb2xv
ci5nZXQoKV07Ci0gICAgICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRTaGFkb3dSYWRpdXM6b3At
PnN0ZERldmlhdGlvbigpXTsKLSAgICAgICAgICAgIFttX2xheWVyLmdldCgpIHNldFNoYWRvd09w
YWNpdHk6MV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotLy8gTm90IGFsbCBDQUZp
bHRlcnMgYXJlIHByb3ZpZGVkIG9uIExpb24uCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDgwCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9w
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVy
IGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07Ci0gICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBm
b3JLZXk6QCJpbnB1dEFtb3VudCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgpOwotICAgICAgICAgICAgdCA9
IG1pbihtYXgoMC4wLCB0KSwgMS4wKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBw
dXQgdGhlc2UgdmFsdWVzIGludG8gY29uc3RhbnRzIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgotICAgICAgICAgICAgQ0FDb2xvck1hdHJpeCBzZXBpYU1h
dHJpeCA9IHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6Ymxl
bmQoMS4wLCAwLjM5MywgdCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoMC4w
LCAwLjc2OSwgdCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoMC4wLCAwLjE4
OSwgdCkpLCAwLCAwLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZCgwLjAsIDAuMzQ5LCB0KSksIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVu
ZCgxLjAsIDAuNjg2LCB0KSksIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZCgwLjAs
IDAuMTY4LCB0KSksIDAsIDAsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdl
YkNvcmU6OmJsZW5kKDAuMCwgMC4yNzIsIHQpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6
OmJsZW5kKDAuMCwgMC41MzQsIHQpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5k
KDEuMCwgMC4xMzEsIHQpKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCi0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU1ZhbHVlIHZh
bHVlV2l0aENBQ29sb3JNYXRyaXg6c2VwaWFNYXRyaXhdIGZvcktleTpAImlucHV0Q29sb3JNYXRy
aXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAg
ICAgICAgICAgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVy
V2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JTYXR1cmF0ZV07Ci0gICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3AtPmFtb3VudCgpXSBmb3JLZXk6QCJp
bnB1dEFtb3VudCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwot
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmls
dGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySHVlUm90YXRlXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKG9wLT5h
bW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0
TmFtZTpAImh1ZVJvdGF0ZSJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpm
aWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwot
Ci0gICAgICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gMSAtIG9wLT5hbW91bnQoKSAqIDI7Ci0K
LSAgICAgICAgICAgIENBQ29sb3JNYXRyaXggaW52ZXJ0TWF0cml4ID0gewotICAgICAgICAgICAg
ICAgIG11bHRpcGxpZXIsIDAsIDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkp
LAotICAgICAgICAgICAgICAgIDAsIG11bHRpcGxpZXIsIDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0
PihvcC0+YW1vdW50KCkpLAotICAgICAgICAgICAgICAgIDAsIDAsIG11bHRpcGxpZXIsIDAsIHN0
YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLAotICAgICAgICAgICAgICAgIDAsIDAsIDAs
IDEsIDAKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
VmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDppbnZlcnRNYXRyaXhdIGZvcktleTpAImlucHV0
Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsK
LSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZ
OiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRl
ciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07Ci0KLSAg
ICAgICAgICAgIENBQ29sb3JNYXRyaXggb3BhY2l0eU1hdHJpeCA9IHsKLSAgICAgICAgICAgICAg
ICAxLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsCi0gICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCBzdGF0aWNf
Y2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwgMAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4Om9wYWNp
dHlNYXRyaXhdIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmpl
Y3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3Bl
cmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBm
aWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJHYXVzc2lhbkJsdXJdOwotICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0VmFsdWVGb3JMZW5ndGgo
b3AtPnN0ZERldmlhdGlvbigpLCAwKV0gZm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKLSAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgY29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxj
b25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0
aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwotCi0gICAgICAgICAgICBmbG9hdCBpbnRlcmNl
cHQgPSAtMC41ICogb3AtPmFtb3VudCgpICsgMC41OwotCi0gICAgICAgICAgICBDQUNvbG9yTWF0
cml4IGNvbnRyYXN0TWF0cml4ID0gewotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0
PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLCBpbnRlcmNlcHQsCi0gICAgICAgICAgICAgICAgMCwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9wLT5hbW91bnQoKSksIDAsIDAsIGludGVyY2VwdCwKLSAgICAg
ICAgICAgICAgICAwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ob3AtPmFtb3VudCgpKSwgMCwgaW50
ZXJjZXB0LAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1h
dHJpeDpjb250cmFzdE1hdHJpeF0gZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwotICAgICAg
ICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRl
cldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgQ0FDb2xvck1hdHJpeCBicmlnaHRuZXNzTWF0cml4ID0gewotICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAg
ICAgIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLCAwLAotICAgICAg
ICAgICAgICAgIDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihvcC0+YW1vdW50KCkpLCAwLCAwLAot
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpicmln
aHRuZXNzTWF0cml4XSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07Ci0gICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUNvbG9yTW9ub2Nocm9tZSJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0g
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6b3At
PmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEludGVuc2l0eSJdOwotICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MSBncmVlbjoxIGJsdWU6MV0gZm9yS2V5
OkAiaW5wdXRDb2xvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElB
OiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBv
cCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRl
ciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0RGVmYXVsdHNdOwotCi0gICAgICAgICAgICBkb3VibGUgdCA9IG9wLT5hbW91bnQoKTsKLSAg
ICAgICAgICAgIHQgPSBtaW4obWF4KDAuMCwgdCksIDEuMCk7Ci0KLSAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKDEuMCwgMC4z
OTMsIHQpIFk6V2ViQ29yZTo6YmxlbmQoMC4wLCAwLjc2OSwgdCkgWjpXZWJDb3JlOjpibGVuZCgw
LjAsIDAuMTg5LCB0KSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2ViQ29yZTo6YmxlbmQoMC4w
LCAwLjM0OSwgdCkgWTpXZWJDb3JlOjpibGVuZCgxLjAsIDAuNjg2LCB0KSBaOldlYkNvcmU6OmJs
ZW5kKDAuMCwgMC4xNjgsIHQpIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpXZWJDb3JlOjpibGVu
ZCgwLjAsIDAuMjcyLCB0KSBZOldlYkNvcmU6OmJsZW5kKDAuMCwgMC41MzQsIHQpIFo6V2ViQ29y
ZTo6YmxlbmQoMS4wLCAwLjEzMSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6
MCBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRC
aWFzVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0g
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9w
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVy
IGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJdOwot
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAg
ICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhO
YW1lOkAiQ0lIdWVBZGp1c3QiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwot
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
ZGVnMnJhZChvcC0+YW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkg
YWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwot
Ci0gICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBvcC0+YW1vdW50KCkgKiAyOwot
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDptdWx0
aXBsaWVyIFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTptdWx0aXBsaWVyIFo6
MCBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF0gZm9yS2V5
OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowIFk6MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5hbW91
bnQoKSBZOm9wLT5hbW91bnQoKSBaOm9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0Qmlh
c1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAg
ICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsK
LSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0g
W0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXREZWZhdWx0c107Ci0KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJd
OwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZ
OjEgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjEgVzowXSBmb3JLZXk6QCJp
bnB1dEJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAgWTowIFo6MCBXOm9wLT5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9y
Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDow
IFk6MCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5v
dyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KLSAgICAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVy
IGZpbHRlcldpdGhOYW1lOkAiQ0lHYXVzc2lhbkJsdXIiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmZsb2F0VmFsdWVGb3JMZW5ndGgob3AtPnN0ZERldmlhdGlvbigpLCAwKV0g
Zm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0
ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDogewotICAgICAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJRmls
dGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMi
XTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om9wLT5hbW91bnQoKV0gZm9yS2V5
OkAiaW5wdXRDb250cmFzdCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRl
ciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpvcC0+YW1vdW50KCldIGZvcktleTpA
ImlucHV0QnJpZ2h0bmVzcyJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UEFTU1RIUk9VR0g6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKFthcnJheS5nZXQoKSBjb3VudF0gPiAwKQotICAgICAgICBbbV9sYXll
ci5nZXQoKSBzZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKLSAgICAKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCisgICAgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKHRo
aXMsIGZpbHRlcnMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNGcm9t
KGNvbnN0IFBsYXRmb3JtQ0FMYXllciogc291cmNlTGF5ZXIpCkBAIC0xMDA1LDcgKzY5Nyw3IEBA
IGJvb2wgUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCiAgICAgICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKLSAgICAgICAgc3dpdGNoKGZpbHRl
ck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZmlsdGVy
T3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRToKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Cg==
</data>
<flag name="review"
          id="213752"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>